Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/m-thalmann/treejs
A simple JavaScript library, to display a TreeView like in the windows filebrowser
https://github.com/m-thalmann/treejs
javascript tree-structure treeview vanilla-javascript
Last synced: about 23 hours ago
JSON representation
A simple JavaScript library, to display a TreeView like in the windows filebrowser
- Host: GitHub
- URL: https://github.com/m-thalmann/treejs
- Owner: m-thalmann
- License: mit
- Created: 2018-06-17T17:23:32.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-12-19T12:25:18.000Z (almost 4 years ago)
- Last Synced: 2024-11-10T11:38:53.691Z (3 days ago)
- Topics: javascript, tree-structure, treeview, vanilla-javascript
- Language: JavaScript
- Homepage: https://prod.thalmann.it/treejs/demo.html
- Size: 37.1 KB
- Stars: 55
- Watchers: 4
- Forks: 19
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# TreeJS
TreeJS is a simple JavaScript library, to display a TreeView like in the windows filebrowser.
It implements partially the Java Swing TreeModel etc.**Demo:** https://prod.thalmann.it/treejs/demo.html
## Navigation
- [Installation](#installation)
- [Usage](#usage)
- [Documentation](#documentation)
- [TreeView](#treeview)
- [TreeNode](#treenode)
- [TreePath](#treepath)
- [TreeUtil](#treeutil)
- [TreeConfig](#treeconfig)
- [Events](#events)
- [Options](#options)
- [Example](#example)## Installation
1. Download the .zip-File and put it in your project-folder.2. Add this script-tag to the head of the file
```html```
3. Add this link-tag to the head of the file, to include the styles
```html```
4. Start using the library!
## Usage
### Create new TreeView
```javascript
var root = new TreeNode("root"); // Create the root-node
var tree = new TreeView(root); // Create the tree
```### Set a container to display the tree
```javascript
tree.setContainer("#container"); // Uses document.querySelector
```
or
```javascript
tree.setContainer(document.getElementById("container"));
```### (Re-)load the tree
```javascript
tree.reload(); // Always use this, when you change the TreeView or any of its nodes
```
## Documentation
### TreeView
It's the main object to display the Tree.
#### Instanciating
```javascript
new TreeView(root, container, options);
```
- **root** (TreeNode): The root-node of the tree.
- **container** (DOM-Element/querySelector): The container for the tree to display **(optional)**
- **options** (object): A object with options for the tree (see [below](#options)) **(optional)**After the instanciation, the TreeView is reloaded/rendered
#### Methods
```javascript
tree.setRoot(root); // Resets the root-node (TreeNode)
tree.getRoot(); // Returns the root-nodetree.expandAllNodes(); // Expands all nodes of the tree
tree.expandPath(path); // Expands all nodes that are in the path (TreePath)
tree.collapseAllNodes(); // Collapses all nodes of the treetree.setContainer(container); // Resets the container (DOM-Element/querySelector)
tree.getContainer(); // Returns the containertree.setOptions(options); // Resets the options (object)
tree.changeOption(option, value); // Changes one option (string, object)
tree.getOptions(); // Returns the optionstree.getSelectedNodes(); // Returns all selected nodes in the tree
tree.reload(); // Reloads/Renders the tree inside of the container
```### TreeNode
It represents a node inside of a tree. You can append children to it and specify a userobject, which is used to display text on a node. This object can be a string but can also be a other object, where the toString() function is used to display the text.
#### Instanciating
```javascript
new TreeNode(userobject, options);
```- **userobject** (object): This object is used to display text on the node (if not string, toString() is used) **(optional)**
- **options** (object): A object with options for the node (see [below](#options)) **(optional)**#### Methods
```javascript
node.addChild(node); // Adds a child to the current node and sets the parent of the node (TreeNode)
node.removeChildPos(pos); // Removes the child at this position (integer)
node.removeChild(node); // Removes the child from the current node, if contained (TreeNode)
node.getChildren(); // Returns a array with the children of the current node
node.getChildCount(); // Returns the number of children
node.getIndexOfChild(node); // Returns the position of the child; -1 is returned if not found (TreeNode)node.getRoot(); // Tries to get the root node of this node
node.setUserObject(userobject); // Resets the userobject (object)
node.getUserObject(); // Returns the userobjectnode.setOptions(options); // Resets the options (object)
node.changeOption(option, value); // Changes one option (string, object)
node.getOptions(); // Returns the optionsnode.isLeaf(); // Returns true, if the node doesn't have any children, else false
node.setExpanded(true|false); // Sets the expanded-state of the node (if it shows its children) (boolean)
node.toggleExpanded(); // Toggles the expanded-state of the node
node.isExpanded(); // Returns, if the node is expanded or notnode.setEnabled(true|false); // Sets the enabled-state of the node (if it is enabled) (boolean)
node.toggleEnabled(); // Toggles the enabled-state of the node
node.isEnabled(); // Returns, if the node is enabled or notnode.setSelected(true|false); // Sets the selected-state of the node (if it is selected) (boolean)
node.toggleSelected(); // Toggles the selected-state of the node
node.isSelected(); // Returns, if the node is selected or notnode.open(); // Triggers the "open"-event of the node
node.on(event, callback); // Sets the eventlistener of the event, if the callback is specified;
// if only the event is set, it returns the callback-function; if that is not
// set, it returns a empty function (string, function)
node.getListener(event); // Returns the callback-function for this event, if set (string)node.equals(node); // Returns if the node is equal to the parameter (TreeNode)
node.toString(); // Returns the generated string from the userobject
```### TreePath
It represents a path inside of a tree (containing all nodes that form the path).
#### Instanciating
```javascript
new TreePath(root, node);
```- **root** & **node** (TreeNode): if they are both set, the method setPath(root, node) is executed **(optional)**
#### Methods
```javascript
path.setPath(root, node); // Generates the path between root and node (TreeNode, TreeNode)
path.getPath(); // Returns the generated path as a arraypath.toString(); // Returns the path as a string (nodes joined with a ' - ')
```### TreeUtil
A collection of default values and methods. Can't be instanciated.
#### Variables
```javascript
TreeUtil.default_leaf_icon // String, that represents the default icon for a leaf-node
TreeUtil.default_parent_icon // String, that represents the default icon for a normal node (with children)
TreeUtil.default_open_icon // String, that represents the default expanded-icon
TreeUtil.default_close_icon // String, that represents the default collapsed-icon
```
#### Methods
```javascript
TreeUtil.isDOM(object); // Returns true, if the object is a DOM-Element, else false (object)TreeUtil.getProperty(opt, o, def); // Returns the value of 'o' in the array/object opt, if it is set;
// else it returns def (object, string, object)
TreeUtil.expandNode(node); // Expands the node and all it's children and theirs etc. (TreeNode)
TreeUtil.collapseNode(node); // Collapses the node and all it's children and theirs etc. (TreeNode)TreeUtil.getSelectedNodesForNode(n); // Returns all selected nodes inside of this node (and it's self,
// if its selected) (TreeNode)
```### TreeConfig
A collection of values, that you can change (directly inside of the file or with JavaScript for only one site).
#### Variables
```javascript
TreeConfig.leaf_icon // The icon for a leaf-node (default: TreeUtil.default_leaf_icon)
TreeConfig.parent_icon // The icon for a normal node (default: TreeUtil.default_parent_icon)
TreeConfig.open_icon // The expanded-icon (default: TreeUtil.default_open_icon)
TreeConfig.close_icon // The collapsed-icon (default: TreeUtil.default_close_icon)
TreeConfig.context_menu // A function that is executed when a contextmenu is opened (default: undefined)
```### Events
It is possible to attach a event to a TreeNode: ``node.on(event, callback);``| Event | Callback-Parameter(s) | Definition | Restriction |
|-----------------|--------------------------------------|--------------------------------------------------------------------------|---------------|
| click | e[click_event], node[TreeNode] | Is triggered when the node is clicked | - |
| expand | node[TreeNode] | Is triggered when the node is expanded | Not-leaf only |
| collapse | node[TreeNode] | Is triggered when the node is collapsed | Not-leaf only |
| toggle_expanded | node[TreeNode] | Is triggered when the node is either expanded or collapsed | Not-leaf only |
| open | node[TreeNode] | Is triggered when the open()-Function is executed or the leaf is clicked | Leaf only |
| enable | node[TreeNode] | Is triggered when the node is enabled | - |
| disable | node[TreeNode] | Is triggered when the node is disabled | - |
| toggle_enabled | node[TreeNode] | Is triggered when the node is either enabled or disabled | - |
| select | node[TreeNode] | Is triggered when the node is selected | - |
| deselect | node[TreeNode] | Is triggered when the node is deselected | - |
| toggle_selected | node[TreeNode] | Is triggered when the node is either selected or deselected | - |
| contextmenu | e[contextmenu_event], node[TreeNode] | Is triggered when a contextmenu is opened on a node | - |### Options
#### for TreeView| Option | Values | Definition |
|-------------|----------|-----------------------------------------------------------------------------|
| leaf_icon | [string] | Sets the leaf-icon for this tree to the string (can be overwritten by node) |
| parent_icon | [string] | Sets the node-icon for this tree to the string (can be overwritten by node) |
| show_root | [boolean] | Sets whether the root node is shown or not |#### for TreeNode
| Option | Values | Definition |
|----------------|------------|----------------------------------------------------------------|
| expanded | [boolean] | On creation, the node will have the expanded value set to this |
| enabled | [boolean] | On creation, the node will have the enabled value set to this |
| selected | [boolean] | On creation, the node will have the selected value set to this |
| icon | [string] | Sets the icon for this node to the string |
| allowsChildren | [boolean] | Sets if there can be added new children to this node |
| forceParent | [boolean] | This node will be displayed as parent, even if it is empty |## Example
### Code:
```javascript
var root = new TreeNode("root");
var n1 = new TreeNode("1");
var n11 = new TreeNode("1.1");
var n2 = new TreeNode("2");
var n3 = new TreeNode("3");
var n31 = new TreeNode("3.1");
var n32 = new TreeNode("3.2");
var n321 = new TreeNode("3.2.1");
var n33 = new TreeNode("3.3");
root.addChild(n1);
root.addChild(n2);
root.addChild(n3);n1.addChild(n11);
n3.addChild(n31);
n3.addChild(n32);
n3.addChild(n33);n32.addChild(n321);
n3.setEnabled(false);
var view = new TreeView(root, "#container");
```### Output:
![treeJs example](demo/example.jpg)