{"id":13403820,"url":"https://github.com/angular-ui-tree/angular-ui-tree","last_synced_at":"2025-12-12T03:44:02.058Z","repository":{"id":11552152,"uuid":"14037931","full_name":"angular-ui-tree/angular-ui-tree","owner":"angular-ui-tree","description":"A tree component for AngularJS, without jQuery as dependency.","archived":false,"fork":false,"pushed_at":"2021-03-05T08:06:31.000Z","size":15520,"stargazers_count":2574,"open_issues_count":173,"forks_count":780,"subscribers_count":117,"default_branch":"master","last_synced_at":"2025-05-10T07:25:43.517Z","etag":null,"topics":["angular","javascript","tree-component"],"latest_commit_sha":null,"homepage":"http://angular-ui-tree.github.io/angular-ui-tree","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angular-ui-tree.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-11-01T07:28:24.000Z","updated_at":"2025-05-09T14:13:21.000Z","dependencies_parsed_at":"2022-08-03T17:31:18.049Z","dependency_job_id":null,"html_url":"https://github.com/angular-ui-tree/angular-ui-tree","commit_stats":null,"previous_names":["jimliu/angular-ui-tree","jimliu/angular-nestedsortable"],"tags_count":52,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-ui-tree%2Fangular-ui-tree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-ui-tree%2Fangular-ui-tree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-ui-tree%2Fangular-ui-tree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-ui-tree%2Fangular-ui-tree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angular-ui-tree","download_url":"https://codeload.github.com/angular-ui-tree/angular-ui-tree/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254000850,"owners_count":21997441,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","javascript","tree-component"],"created_at":"2024-07-30T19:01:35.078Z","updated_at":"2025-12-12T03:43:57.021Z","avatar_url":"https://github.com/angular-ui-tree.png","language":"JavaScript","readme":"Angular UI Tree\n======================\n\n[![Build Status](https://travis-ci.org/angular-ui-tree/angular-ui-tree.svg?branch=master)](https://travis-ci.org/angular-ui-tree/angular-ui-tree) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/angular-ui-tree/angular-ui-tree?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge)\n\nAngular UI Tree is an AngularJS UI component that can sort nested lists, provides drag \u0026 drop support and doesn't depend on jQuery. If you are a user who uses `angular-nestedSortable`, this is [How to migrate From v1.x to v2.0](https://github.com/JimLiu/angular-ui-tree/wiki/Migrate-From-v1.x-to-v2.0).\n\n### Considering Contributing?\n\nRead our contributing guidelines and become a contributing member of Angular UI Tree!\n\n[CONTRIBUTING](https://github.com/angular-ui-tree/angular-ui-tree/blob/master/CONTRIBUTING.md)\n\n\n## Features\n\n- Uses the native AngularJS scope for data binding\n- Sorted and move items through the entire tree\n- Prevent elements from accepting child nodes\n\n## Supported browsers\n\nThe Angular UI Tree is tested with the following browsers:\n\n- Chrome (stable)\n- Firefox\n- IE 8, 9 and 10\n\nFor IE8 support, make sure you do the following:\n\n- include an [ES5 shim](https://github.com/es-shims/es5-shim)\n- make your [AngularJS application compatible with Internet Explorer](http://docs.angularjs.org/guide/ie)\n- use [jQuery 1.x](http://jquery.com/browser-support/)\n\n## Demo\nWatch the Tree component in action on the [demo page](http://angular-ui-tree.github.io/angular-ui-tree/).\n\n## Requirements\n\n- Angularjs\n\n## Usage\n\n### Download\n- Using [bower](http://bower.io/) to install it. `bower install angular-ui-tree`\n- [Download](https://github.com/angular-ui-tree/angular-ui-tree/archive/master.zip) from github.\n\n### Load CSS\nLoad the css file: `angular-ui-tree.min.css` in your application:\n```html\n\u003clink rel=\"stylesheet\" href=\"bower_components/angular-ui-tree/dist/angular-ui-tree.min.css\"\u003e\n```\n\n\n### Load Script\nLoad the script file: `angular-ui-tree.js` or `angular-ui-tree.min.js` in your application:\n\n```html\n\u003cscript type=\"text/javascript\" src=\"bower_components/angular-ui-tree/dist/angular-ui-tree.js\"\u003e\u003c/script\u003e\n```\n\n### Code\nAdd the sortable module as a dependency to your application module:\n\n```js\nvar myAppModule = angular.module('MyApp', ['ui.tree'])\n```\n\nInjecting `ui.tree`, `ui-tree-nodes`, `ui-tree-node`, `ui-tree-handle` to your html.\n\n#### HTML View or Templates\n```html\n\u003cdiv ui-tree\u003e\n  \u003col ui-tree-nodes=\"\" ng-model=\"list\"\u003e\n    \u003cli ng-repeat=\"item in list\" ui-tree-node\u003e\n      \u003cdiv ui-tree-handle\u003e\n        {{item.title}}\n      \u003c/div\u003e\n      \u003col ui-tree-nodes=\"\" ng-model=\"item.items\"\u003e\n        \u003cli ng-repeat=\"subItem in item.items\" ui-tree-node\u003e\n          \u003cdiv ui-tree-handle\u003e\n            {{subItem.title}}\n          \u003c/div\u003e\n        \u003c/li\u003e\n      \u003c/ol\u003e\n    \u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/div\u003e\n```\n**Developing Notes:**\n- Adding `ui-tree` to your root element of the tree.\n- Adding `ui-tree-nodes` to the elements which contain the nodes. `ng-model` is required, and it should be an array, so that the directive knows which model to bind and update.\n- Adding `ui-tree-node` to your node element, it always follows the `ng-repeat` attribute.\n- Adding `ui-tree-handle` to the element used to drag the object.\n- All `ui-tree`, `ui-tree-nodes`, `ng-model`, `ui-tree-node` are necessary. And they can be nested.\n- If you don't add a `ui-tree-handle` for a node, the entire node can be dragged.\n\n**Styling Notes:**\n- While an element is being dragged, it is temporarily removed from the DOM and injected just before closing `\u003c/body\u003e` tag. When dropped, it returns to it's original place in the DOM's hierarchy.\n- The dragged element `ui-tree-node`, together with its parent `ui-tree-nodes`, are the only ones being injected. hence any styling that relies on a 'higher' parent, will not apply.\n- To target the dragged element use the class `angular-ui-tree-drag`, which is added to the `ui-tree-nodes` element.\n- While a node is being dragged, a new empty node is added into the tree to act as a placeholder. this node will have the class 'angular-ui-tree-placeholder'.\n\n#### Unlimited nesting HTML View or Templates Example\n\n```html\n\u003c!-- Nested node template --\u003e\n\u003cscript type=\"text/ng-template\" id=\"nodes_renderer.html\"\u003e\n  \u003cdiv ui-tree-handle\u003e\n    {{node.title}}\n  \u003c/div\u003e\n  \u003col ui-tree-nodes=\"\" ng-model=\"node.nodes\"\u003e\n    \u003cli ng-repeat=\"node in node.nodes\" ui-tree-node ng-include=\"'nodes_renderer.html'\"\u003e\n    \u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/script\u003e\n\u003cdiv ui-tree\u003e\n  \u003col ui-tree-nodes=\"\" ng-model=\"data\" id=\"tree-root\"\u003e\n    \u003cli ng-repeat=\"node in data\" ui-tree-node ng-include=\"'nodes_renderer.html'\"\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/div\u003e\n```\n\n## Structure of angular-ui-tree\n\n    ui-tree                             --\u003e Root of tree\n      ui-tree-nodes                     --\u003e Container of nodes\n        ui-tree-node                    --\u003e One of the node of a tree\n          ui-tree-handle                --\u003e Handle\n          ui-tree-nodes                 --\u003e Container of child-nodes\n            ui-tree-node                --\u003e Child node\n              ui-tree-handle            --\u003e Handle\n            ui-tree-node                --\u003e Child node\n        ui-tree-node                    --\u003e Another node\n          ui-tree-handle                --\u003e Handle\n\n## Migrate From v1.x to v2.0\n[Migrate From v1.x to v2.0](https://github.com/angular-ui-tree/angular-ui-tree/wiki/Migrate-From-v1.x-to-v2.0)\n\n## API\n\n### ui-tree\n`ui-tree` is the root scope for a tree\n\n#### Attributes\n##### data-nodrop-enabled\nPrevent dropping of nodes into this tree. This applies to both nodes dragged within this tree and nodes from a connected tree.\nAdding this attribute to the `ui-tree` effectively makes the tree a drag source only.\nTo prevent a particular node from accepting children, add the attribute to the `ui-tree-nodes` element instead (see below).\nSee the [demo page](http://angular-ui-tree.github.io/angular-ui-tree/#/nodrop) for examples.\n- `false` (default): turn off\n- `true`: turn on no drop\n\n##### data-dropzone-enabled\nTurn on a dropzone that is always visible, even when tree is not empty.\n- `false` (default): turn off\n- `true`: turn on dropzone\n\n##### data-clone-enabled\nTurn on cloning of nodes. This will clone the source node to the destination when dragging between 2 trees.\n- `false` (default): turn off clone\n- `true`: turn on clone\n\n##### data-drag-enabled\nTurn on dragging and dropping of nodes.\n- `true` (default): allow drag and drop\n- `false`: turn off drag and drop\n\n##### data-max-depth\nNumber of levels a nodes can be nested (default 0). 0 means no limit.\n**Note**\nIf you write your own [$callbacks.accept](#accept) method, you have to check `data-max-depth` by yourself.\n\n##### data-drag-delay\nNumber of milliseconds a click must be held to start a drag. (default 0)\n\n##### data-empty-placeholder-enabled\nIf a tree is empty, there will be an empty placeholder which is used to drop node from other trees by default.\n- `true` (default): display an empty placeholder if the tree is empty\n- `false`: do not display an empty placeholder\n\n##### Example\n- turn on/off drag and drop.\n- Limit depth to 5\n- 500 milliseconds delay\n\n```html\n\u003cdiv ui-tree data-drag-enabled=\"tree.enabled\" data-max-depth=\"5\" data-drag-delay=\"500\"\u003e\n\n\u003c/div\u003e\n```\n\n#### Events\n`angular-ui-tree:collapse-all`\nCollapse all it's child nodes.\n\n`angular-ui-tree:expand-all`\nExpand all it's child nodes.\n\n#### Methods of scope\n##### $callbacks (type: Object)\n`$callbacks` is a very important property for `angular-ui-tree`.\nWhen some special events trigger, the functions in `$callbacks` are called.\nThe callbacks can be passed through the directive.\n\nExample:\n```js\nmyAppModule.controller('MyController', function($scope) {\n  $scope.treeOptions = {\n    accept: function(sourceNodeScope, destNodesScope, destIndex) {\n      return true;\n    },\n  };\n});\n```\n```html\n\u003cdiv ui-tree=\"treeOptions\"\u003e\n  \u003col ui-tree-nodes ng-model=\"nodes\"\u003e\n    \u003cli ng-repeat=\"node in nodes\" ui-tree-node\u003e{{node.title}}\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/div\u003e\n```\n\n#### Methods in $callbacks\n##### \u003ca name=\"accept\"\u003e\u003c/a\u003eaccept(sourceNodeScope, destNodesScope, destIndex)\nCheck if the current dragging node can be dropped in the `ui-tree-nodes`.\n\n**Parameters:**\n- `sourceNodeScope`: The scope of source node which is dragging.\n- `destNodesScope`: The scope of `ui-tree-nodes` which you want to drop in.\n- `destIndex`: The position you want to drop in.\n\n**Return**\nIf the nodes accept the current dragging node.\n- `true` Allow it to drop.\n- `false` Not allow.\n\n##### \u003ca name=\"beforeDrag\"\u003e\u003c/a\u003ebeforeDrag(sourceNodeScope)\nCheck if the current selected node can be dragged.\n\n**Parameters:**\n- `sourceNodeScope`: The scope of source node which is selected.\n\n**Return**\nIf current node is draggable.\n- `true` Allow it to drag.\n- `false` Not allow.\n\n##### \u003ca name=\"removed\"\u003e\u003c/a\u003eremoved(node)\nIf a node is removed, the `removed` callback will be called.\n\n**Parameters:**\n - `node`: The node that was removed\n\n##### \u003ca name=\"dropped\"\u003e\u003c/a\u003edropped(event)\nIf a node moves it's position after dropped, the `nodeDropped` callback will be called.\n\n**Parameters:**\n- \u003ca name=\"eventParam\"\u003e\u003c/a\u003e`event`: Event arguments, it's an object.\n  * `source`: Source object\n    + `nodeScope`: The scope of source node which was dragged.\n    + `nodesScope`: The scope of the parent nodes of source node  when it began to drag.\n    + `index`: The position when it began to drag.\n    + `cloneModel`: Given data-clone-enabled is true, holds the model of the cloned node that is to be inserted, this can be edited before drop without affecting the source node.\n  * `dest`: Destination object\n    + `nodesScope`: The scope of `ui-tree-nodes` which you just dropped in.\n    + `index`: The position you dropped in.\n  * `elements`: The dragging relative elements.\n    + `placeholder`: The placeholder element.\n    + `dragging`: The dragging element.\n  * `pos`: Position object.\n\nTo change the node being dropped before\n##### \u003ca name=\"dragStart\"\u003e\u003c/a\u003edragStart(event)\nThe `dragStart` function is called when the user starts to drag the node.\n**Parameters:**\nSame as [Parameters](#eventParam) of dropped.\n\n##### dragMove(event)\nThe `dragMove` function is called when the user moves the node.\n\n**Parameters:**\nSame as [Parameters](#eventParam) of dropped.\n\n##### dragStop(event)\nThe `dragStop` function is called when the user stop dragging the node.\n\n**Parameters:**\nSame as [Parameters](#eventParam) of dropped.\n\n##### beforeDrop(event)\nThe `beforeDrop` function is called before the dragging node is dropped. If you implement this callback, the return value determines whether the drop event is allowed to proceed.\n\n**Parameters:**\nSame as [Parameters](#eventParam) of dropped.\n\n**Callback Return Values**\n\n- **Resolved Promise** or **truthy**: Allow the node to be dropped\n\n- **Rejected Promise** or **false**: Disallow the node drop and return the dragged node to its original position\n\n##### toggle(collapsed, sourceNodeScope)\nThe `toggle` function is called after the node is toggled\n\n**Parameters:**\n- `collapsed`: Boolean value with state of the node.\n- `sourceNodeScope`: The scope of source node which is toggled.\n\n### ui-tree-nodes\n`ui-tree-nodes` is the container of nodes.\nEvery `ui-tree-node` should have a `ui-tree-nodes` as it's container, a `ui-tree-nodes` can have multiple child nodes.\n\n#### Attributes\n##### data-nodrop-enabled \u003ca name=\"nodes_attrs_nodrop\"\u003e\u003c/a\u003e\nPrevent nodes from being dropped into this node container.\nThis prevents nodes from being dropped directly into the container with the attribute but not into children that contain additional containers.\nSee the [demo page](http://angular-ui-tree.github.io/angular-ui-tree/#/nodrop) for examples.\n\n##### data-max-depth \u003ca name=\"nodes_attrs_maxDepth\"\u003e\u003c/a\u003e\nNumber of levels a nodes can be nested (default 0). 0 means no limit. It can override the `data-max-depth` in `ui-tree`.\n**Note**\nIf you write your own [$callbacks.accept](#accept) method, you have to check `data-nodrop-enabled` and `data-max-depth` by yourself.\n\nExample: turn off drop.\n```html\n\u003col ui-tree-nodes ng-model=\"nodes\" data-nodrop-enabled=\"true\"\u003e\n  \u003cli ng-repeat=\"node in nodes\" ui-tree-node\u003e{{node.title}}\u003c/li\u003e\n\u003c/ol\u003e\n```\n\n#### Properties of scope\n##### $element (type: AngularElement)\nThe html element which bind with the `ui-tree-nodes` scope.\n\n##### $modelValue (type: Object)\nThe data which bind with the scope.\n\n##### $nodes (type: Array)\nAll it's child nodes. The type of child node is scope of `ui-tree-node`.\n\n##### $nodeScope (type: Scope of ui-tree-node)\nThe scope of node which current `ui-tree-nodes` belongs to.\nFor example:\n\n    ui-tree-nodes                       --\u003e nodes 1\n      ui-tree-node                      --\u003e node 1.1\n        ui-tree-nodes                   --\u003e nodes 1.1\n          ui-tree-node                  --\u003e node 1.1.1\n          ui-tree-node                  --\u003e node 1.1.2\n      ui-tree-node                      --\u003e node 1.2\n\nThe property `$nodeScope of` `nodes 1.1` is `node 1.1`. The property `$nodes` of `nodes 1.1` is [`node 1.1.1`, `node 1.1.2`]\n\n##### maxDepth\nNumber of levels a node can be nested. It bases on the attribute [data-max-depth](#nodes_attrs_maxDepth).\n\n##### nodropEnabled\nTurn off drop on nodes. It bases on the attribute [data-nodrop-enabled](#nodes_attrs_nodrop).\n\n#### Methods of scope\n##### depth()\nGet the depth.\n\n##### outOfDepth(sourceNode)\nCheck if depth limit has reached\n\n##### isParent(nodeScope)\nCheck if the nodes is the parent of the target node.\n**Parameters:**\n- `nodeScope`: The target node which is used to check with the current nodes.\n\n\n### ui-tree-node\nA node of a tree. Every `ui-tree-node` should have a `ui-tree-nodes` as it's container.\n\n#### Attributes\n##### data-nodrag (type: boolean)\nTurn off drag of node.\nExample: turn off drag.\n```html\n\u003col ui-tree-nodes ng-model=\"nodes\"\u003e\n  \u003cli ng-repeat=\"node in nodes\" ui-tree-node data-nodrag\u003e{{node.title}}\u003c/li\u003e\n\u003c/ol\u003e\n```\n\n##### data-collapsed (type: boolean)\nCollapse the node.\n\n##### data-expand-on-hover (type: boolean, number)\nCauses the node to expand (if it contains child nodes and was collapsed) when dragging a node over it.\nThis lets users drag and drop items into a nested tree in a single drag operation, instead of having to expand all the nodes to the destination first.\nThe target node will immediately expand when `true` is provided.\nWhen a number (in milliseconds) is specified, the target node will expand after the specified amount of milliseconds.\n\n##### data-scroll-container (type: string)\nCauses drag-scrolling to happen within a customisable container, as opposed to the default document body.\nAccepts any selector string that document.querySelector accepts.\nExample:\n```html\n\u003cdiv ui-tree style=\"height: 300px; overflow:scroll;\" class=\"wrapper\"\u003e\n    \u003cul ui-tree-nodes style=\"height: 600px;\"\u003e\n        \u003cli ui-tree-node ng-repeat=\"item in items\" data-scroll-container=\".wrapper\"\u003e\n    \u003c/ul\u003e\n\u003c/div\u003e\n```\n\n#### Properties of scope\n##### $element (type: AngularElement)\nThe html element which bind with the `ui-tree-nodes` scope.\n\n##### $modelValue (type: Object)\nThe data which bind with the scope.\n\n##### collapsed (type: boolean)\nIf the node is collapsed\n\n- `true`: Current node is collapsed;\n- `false`: Current node is expanded.\n\n##### $parentNodeScope (type: Scope of ui-tree-node)\nThe scope of parent node.\n\n##### $childNodesScope (type: Scope of ui-tree-nodes)\nThe scope of it's `ui-tree-nodes`.\n\n##### $parentNodesScope (type: Scope of ui-tree-nodes)\nThe scope of it's parent `ui-tree-nodes`.\n\nFor example:\n\n    ui-tree-nodes                       --\u003e nodes 1\n      ui-tree-node                      --\u003e node 1.1\n        ui-tree-nodes                   --\u003e nodes 1.1\n          ui-tree-node                  --\u003e node 1.1.1\n          ui-tree-node                  --\u003e node 1.1.2\n      ui-tree-node                      --\u003e node 1.2\n\n- `node 1.1.1`.`$parentNodeScope` is `node 1.1`.\n- `node 1.1`.`$childNodesScope` is `nodes 1.1`.\n- `node 1.1`.`$parentNodesScope` is `nodes 1`.\n\n#### Methods of scope\n##### collapse()\nCollapse current node.\n\n##### expand()\nExpand current node.\n\n##### toggle()\nToggle current node.\n\n##### remove()\nRemove current node.\n\n##### depth()\nGet the depth of the node.\n\n##### maxSubDepth()\nGet the max depth of all the child nodes. If there is no child nodes, return 0.\n\n##### isSibling(targetNodeScope)\nCheck if the current node is sibling with the target node.\n**Parameters:**\n- `targetNodeScope`: The target node which is used to check with the current node.\n\n##### isChild(targetNodeScope)\nCheck if the current node is a child of the target node.\n**Parameters:**\n- `targetNodeScope`: The target node which is used to check with the current node.\n\n\n### ui-tree-handle\nUse the `ui-tree-handle` to specify an element used to drag the object.\nIf you don't add a `ui-tree-handle` for a node, the entire node can be dragged.\n\n## Runtime Configuration\nUse the `treeConfig` service to configure the tree defaults at runtime.\nWith this you can customize the classes applied to various tree elements\n(`treeClass`, `emptyTreeClass`, `hiddenClass`, `nodesClass`, `handleClass`,\n`placeholderClass`, `dragClass`).\n\nIn addition, you can modify whether or not nodes are collapsed by default\n(`defaultCollapsed`: default false).\n\nYou can also modify whether or not dragging a node over a parent node will insert the node as a child\n(`appendChildOnHover`: default true).\n\nFor example:\n\n```js\nmodule.config(function(treeConfig) {\n  treeConfig.defaultCollapsed = true; // collapse nodes by default\n  treeConfig.appendChildOnHover = true; // append dragged nodes as children by default\n});\n```\n\n## NgModules Link\n\n[Give us a like on ngmodules](http://ngmodules.org/modules/angular-ui-tree)\n\n## Development environment setup\n#### Prerequisites\n\n* [Node Package Manager](https://npmjs.org/) (NPM)\n* [Git](http://git-scm.com/)\n\n#### Dependencies\n\n* [Gulp](http://gulpjs.com/) (task automation)\n* [Bower](http://bower.io/) (package management)\n\n#### Installation\nRun the commands below in the project root directory.\n\n##### 1. Install Gulp and Bower\n\n    $ sudo npm install -g gulp bower\n\n##### 2. Install project dependencies\n\n    $ npm install\n    $ ./node_modules/protractor/bin/webdriver-manager update\n    $ bower install\n\n## Useful commands\n\n#### Running a Local Development Web Server\nTo debug code and run end-to-end tests, it is often useful to have a local HTTP server.\nFor this purpose, we have made available a local web server based on Node.js.\n\nTo start the web server, run:\n\n    $ gulp serve\n\nTo access the local server, enter the following URL into your web browser:\n\n    http://localhost:9000\n\nBy default, it serves the contents of the `examples` directory.\n\n\n#### Building angular-ui-tree\nTo build angular-ui-tree, you use the following command.\n\n    $ gulp build\n\nThis will generate non-minified and minified JavaScript files in the `dist` directory.\n\n#### Run tests\nYou can run the unit test using a separate task.\n\n    $ gulp test\n\nThe E2E-tests can be executed using\n\n    $ gulp test:e2e\n\n    \u003e Note: make sure you have the example website running on port `9000` (using the `$ gulp serve` command)\n\n*Windows: If your e2e tests are failing, run the command prompt as an administrator. ([See symlink issue](https://github.com/ben-eb/gulp-symlink/issues/33))*\n\n#### Deploy examples\n\n    $ gulp deploy\n","funding_links":[],"categories":["JavaScript","AngularJS ##"],"sub_categories":["Version 1.x ###"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular-ui-tree%2Fangular-ui-tree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangular-ui-tree%2Fangular-ui-tree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular-ui-tree%2Fangular-ui-tree/lists"}