/* @license Angular Treeview version 0.1.6 ⓒ 2013 AHN JAE-HA http://github.com/eu81273/angular.treeview License: MIT [TREE attribute] angular-treeview: the treeview directive tree-id : each tree's unique id. tree-model : the tree model on $scope. node-id : each node's id node-label : each node's label node-children: each node's children <div data-angular-treeview="true" data-tree-id="tree" data-tree-model="roleList" data-node-id="roleId" data-node-label="roleName" data-node-children="children" > </div> */ (function ( angular ) { 'use strict'; angular.module( 'angularTreeview', [] ).directive( 'treeModel', ['$compile', function( $compile ) { return { restrict: 'A', link: function ( scope, element, attrs ) { //tree id var treeId = attrs.treeId; //tree model var treeModel = attrs.treeModel; //node id var nodeId = attrs.nodeId || 'id'; //node label var nodeLabel = attrs.nodeLabel || 'label'; //children var nodeChildren = attrs.nodeChildren || 'children'; //tree template var template = '<ul>' + '<li data-ng-repeat="node in ' + treeModel + '">' + '<i ng-class="getGroupClass(node)" data-ng-click="' + treeId + '.selectNodeHead(node)"></i>' + '<span data-ng-class="getSelectedClass(node)" ng-dblclick="edit(node)" data-ng-click="' + treeId + '.selectNodeLabel(node)">{{node.' + nodeLabel + '}}</span>' + '<div data-ng-hide="node.collapsed" data-tree-id="' + treeId + '" data-tree-model="node.' + nodeChildren + '" data-node-id=' + nodeId + ' data-node-label=' + nodeLabel + ' data-node-children=' + nodeChildren + '></div>' + '</li>' + '</ul>'; //check tree id, tree model if( treeId && treeModel ) { //root node if( attrs.angularTreeview ) { //create tree object if not exists scope[treeId] = scope[treeId] || {}; //if node head clicks, scope[treeId].selectNodeHead = scope[treeId].selectNodeHead || function( selectedNode ){ //Collapse or Expand selectedNode.collapsed = !selectedNode.collapsed; scope[treeId].selectNodeLabel(selectedNode); }; //if node label clicks, scope[treeId].selectNodeLabel = scope[treeId].selectNodeLabel || function( selectedNode ){ //remove highlight from previous node if( scope[treeId].currentNode && scope[treeId].currentNode.selected ) { scope[treeId].currentNode.selected = undefined; } //set highlight to selected node selectedNode.selected = 'selected'; //set currentNode scope[treeId].currentNode = selectedNode; }; } //Rendering template. element.html('').append( $compile( template )( scope ) ); } } }; }]); })( angular );