Bigtree
High performance hierarchical data rendering based on nested set model (pre-order tree).
Features
- Large dataset
- Virtual scrolling
- Movable (dragdrop) nodes
- Editable nodes
- Keyboard navigation
- User plugins
Dependencies
Bigtree is jQuery plugin that relies on some libraries:
Install
npm install jquery-bigtree
Demo
Usage
; // with options;
Hierarchical structure illustration:
Then, we transform the data into json:
var data = [
{id: 1, text: 'ROOT', left: 1, right: 10, level: 0, leaf: 0, expand: 1, path: '1'},
{id: 2, text: 'A', left: 2, right: 7, level: 1, leaf: 0, expand: 1, path: '1/2'},
{id: 3, text: 'B', left: 3, right: 4, level: 2, leaf: 1, expand: 1, path: '1/2/3'},
{id: 4, text: 'C', left: 5, right: 6, level: 2, leaf: 1, expand: 1, path: '1/2/4'},
{id: 5, text: 'D', left: 8, right: 9, level: 1, leaf: 1, expand: 1, path: '1/5'}
];
Then, we load into plugin:
;
Options
- fields
Type: Object
Default: {}
Node field mapping to tranform real data field to node field, so plugin can works with user data structure (model).
fields: id: 'id' text: 'text' left: 'left' right: 'right' level: 'level' leaf: 'leaf' path: 'path' expand: 'expand'
- itemSize
Type: Number
Default: 32
Height for each rendered node.
- stepSize
Type: Number
Default: 25
Padding size for each level.
- delay
Type: Number
Default: 30
Scrolling delay, used for change scrolling size.
- buffer
Type: Number
Default: 0
Leading and trailing rendered nodes from edges.
- markup
Type: String
Default: <div></div>
Recommended markup used to render each node, support jsrender templtating tags.
{{:text}}
Methods
- load()
Arguments: (Array data[, Boolean render = false])
Return: void
Used for loading data into plugin.
var data = /* YOUR DATA HERE */; ;
We can also loading data from paginated ajax request, for example:
var start = 0 limit = 100; { $;} // run first time;
Events
- init.bt
Arguments: (Event e)
Fired after plugin initialized.
;
- beforerender.bt
Arguments: (Event e, Array data)
Fired before nodes rendered.
- render.bt
Arguments: (Event e, Array data, Array nodes)
Fired after nodes rendered.
- expand.bt
Arguments: (Event e, Object data)
Fired after node expanded.
;
- collapse.bt
Arguments: (Event e, Object data)
Fired after node collapsed.
Plugin
You can write your own plugin for handle specific data (node).
var TrashPlugin = { var { /** * Template plugin */ thistemplate = '<a href="#">' + '<i class="fa fa-trash-o"></i>{{:this.caption}}' + '</a>'; /** * Plugin placement * * value: tail, head */ thisplace = 'tail'; this; }; Pluginprototype = { thiscaption = 'Delete'; } { thistree = tree; thisdata = data; } { var tree = thistree data = thisdata; thiselement; } { } { } ; return Plugin;};
Registering plugins:
;