--- /dev/null
+/*
+ @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>
+*/
+
+/*
+$scope.onSelectWeek({week: week});
+*/
+
+(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';
+
+ //custom image
+ var nodeCustomImage = attrs.nodeCustomImage || 'customImage';
+
+ //tree template
+ var template =
+ '<ul>' +
+ '<li data-ng-repeat="node in ' + treeModel + '">' +
+ '<i data-ng-show="!node.leaf" ng-class="node.collapsed ? \'fa fa-chevron-right\' : \'fa fa-chevron-down\'"' +
+ ' data-ng-click="' + treeId + '.selectNodeHead(node)"></i>' +
+ '<span data-ng-class="node.selected" data-ng-click="' + treeId + '.selectNodeLabel(node)" ng-dblclick="' + treeId + '.dblClickNodeLabel(node)">' +
+ ' <i class="collapsed" data-ng-show="!node.leaf && node.collapsed && !node.' + nodeCustomImage + '"></i>' +
+ ' <i class="expanded" data-ng-show="!node.leaf && !node.collapsed && !node.' + nodeCustomImage + '"></i>' +
+ ' <i class="custom {{node.' + nodeCustomImage + '}}" data-ng-if="node.' + nodeCustomImage + '"></i>' +
+ ' {{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] || {};
+
+ //Expand (load child nodes) or collapse node
+ scope[treeId].expandNode = scope[treeId].expandNode || function( selectedNode ){
+ scope.FileSelectorCtrl.expandNode(selectedNode);
+ selectedNode.collapsed = !selectedNode.collapsed;
+ };
+
+ scope[treeId].selectNode = scope[treeId].selectNode || 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;
+ }
+
+ //if node head clicks,
+ scope[treeId].selectNodeHead = scope[treeId].selectNodeHead || function( selectedNode ){
+ scope[treeId].selectNode(selectedNode);
+ scope[treeId].expandNode(selectedNode);
+ scope[treeId].currentNodeHead = selectedNode;
+ };
+
+ //if node label clicks,
+ scope[treeId].selectNodeLabel = scope[treeId].selectNodeLabel || function( selectedNode ){
+ scope[treeId].selectNode(selectedNode);
+ scope.FileSelectorCtrl.selectNode(selectedNode);
+ };
+
+ //if node label double clicks,
+ scope[treeId].dblClickNodeLabel = scope[treeId].dblClickNodeLabel || function( selectedNode ){
+ if (!selectedNode.leaf) {
+ scope[treeId].expandNode(selectedNode);
+ }
+ else {
+ scope.FileSelectorCtrl.add();
+ }
+ };
+ }
+
+ //Rendering template.
+ element.html('').append( $compile( template )( scope ) );
+ }
+ }
+ };
+ }]);
+})( angular );