From 16a82c89e20d7ac33489f27806e0650de5e64d43 Mon Sep 17 00:00:00 2001 From: boiawang Date: Tue, 3 Feb 2015 15:40:51 +0800 Subject: [PATCH 1/3] feat: add contextmenu --- .../lcov-report/angular-tree-control.js.html | 1478 +++++++++++++++++ .../lcov-report/index.html | 333 ++++ .../lcov-report/prettify.css | 1 + .../lcov-report/prettify.js | 1 + Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov.info | 408 +++++ angular-tree-control.js | 77 +- index.html | 14 + test/angular-tree-control-test.js | 52 + 8 files changed, 2357 insertions(+), 7 deletions(-) create mode 100644 Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/angular-tree-control.js.html create mode 100644 Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/index.html create mode 100644 Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.css create mode 100644 Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.js create mode 100644 Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov.info diff --git a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/angular-tree-control.js.html b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/angular-tree-control.js.html new file mode 100644 index 0000000..fff6a22 --- /dev/null +++ b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/angular-tree-control.js.html @@ -0,0 +1,1478 @@ + + + + Code coverage report for ./angular-tree-control.js + + + + + + + +
+

Code coverage report for ./angular-tree-control.js

+

+ + Statements: 97.06% (198 / 204)      + + + Branches: 89.92% (107 / 119)      + + + Functions: 100% (38 / 38)      + + + Lines: 97.06% (198 / 204)      + +

+
All files » ./ » angular-tree-control.js
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +3921 +  +  +1 +  +  +  +  +  +1 +2784 +390 +22 +  +368 +  +  +2394 +  +  +1 +938 +830 +  +  +66 +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1 +1029 +  +  +1 +440 +  +  +  +  +  +440 +440 +  +440 +1294 +870 +  +  +  +  +440 +  +1 +1216 +996 +220 +220 +220 +220 +220 +  +  +67 +67 +67 +67 +67 +67 +67 +67 +67 +67 +67 +67 +67 +67 +67 +  +67 +67 +67 +67 +10 +  +67 +  +1 +954 +27 +927 +89 +80 +31 +  +  +58 +  +  +  +67 +828 +828 +828 +4 +828 +255 +573 +69 +  +504 +  +  +67 +844 +69 +  +775 +  +  +67 +603 +  +  +67 +13 +13 +13 +12 +  +  +1 +1 +2 +1 +  +  +1 +1 +  +13 +13 +  +  +67 +19 +  +1 +  +  +18 +18 +8 +8 +6 +6 +  +2 +  +  +10 +8 +8 +  +  +2 +  +  +18 +18 +  +  +  +67 +844 +844 +844 +844 +4 +  +844 +  +  +  +67 +67 +  +  +  +  +  +  +  +  +  +67 +  +  +  +  +  +  +  +  +  +67 +67 +  +  +67 +  +67 +73 +73 +4 +69 +69 +69 +  +  +  +  +  +  +  +  +67 +81 +81 +81 +81 +  +81 +44 +44 +44 +  +  +  +  +81 +26 +26 +25 +25 +16 +16 +  +  +26 +10 +  +81 +  +  +67 +65 +65 +65 +  +  +67 +1 +1 +  +  +67 +3 +3 +  +3 +3 +  +  +  +  +  +  +67 +67 +  +  +67 +5 +5 +  +  +  +  +  +  +67 +  +  +  +  +  +  +66 +  +  +  +  +  +  +225 +3 +3 +  +3 +3 +  +  +  +  +  +  +  +  +66 +  +  +  +  +24 +24 +  +  +  +  +  +66 +  +225 +147 +69 +11 +11 +  +  +  +225 +2 +223 +16 +16 +6 +2 +  +  +16 +  +  +  +225 +225 +225 +225 +225 +225 +225 +225 +225 +225 +18 +  +  +225 +225 +225 +  +  +  +  +  + 
(function ( angular ) {
+    'use strict';
+    
+    angular.module( 'treeControl', [] )
+        .directive( 'treecontrol', ['$compile', '$document', function( $compile, $document ) {
+            /**
+             * @param cssClass - the css class
+             * @param addClassProperty - should we wrap the class name with class=""
+             */
+            function classIfDefined(cssClass, addClassProperty) {
+                if (cssClass) {
+                    if (addClassProperty)
+                        return 'class="' + cssClass + '"';
+                    else
+                        return cssClass;
+                }
+                else
+                    return "";
+            }
+            
+            function ensureDefault(obj, prop, value) {
+                if (!obj.hasOwnProperty(prop))
+                    obj[prop] = value;
+            }
+            
+            return {
+                restrict: 'EA',
+                require: "treecontrol",
+                transclude: true,
+                scope: {
+                    treeModel: "=",
+                    selectedNode: "=?",
+                    selectedNodes: "=?",
+                    expandedNodes: "=?",
+                    onSelection: "&",
+                    onNodeToggle: "&",
+                    options: "=?",
+                    orderBy: "@",
+                    reverseOrder: "@",
+                    filterExpression: "=?",
+                    filterComparator: "=?",
+                    treeMenuModel: "=",
+                    onClickMenu: "&"
+                },
+                controller: ['$scope', function( $scope ) {
+ 
+                    function defaultIsLeaf(node) {
+                        return !node[$scope.options.nodeChildren] || node[$scope.options.nodeChildren].length === 0;
+                    }
+ 
+                    function shallowCopy(src, dst) {
+                        Iif (angular.isArray(src)) {
+                            dst = dst || [];
+ 
+                            for ( var i = 0; i < src.length; i++) {
+                                dst[i] = src[i];
+                            }
+                        } else Eif (angular.isObject(src)) {
+                            dst = dst || {};
+ 
+                            for (var key in src) {
+                                if (hasOwnProperty.call(src, key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {
+                                    dst[key] = src[key];
+                                }
+                            }
+                        }
+ 
+                        return dst || src;
+                    }
+                    function defaultEquality(a, b) {
+                        if (a === undefined || b === undefined)
+                            return false;
+                        a = shallowCopy(a);
+                        a[$scope.options.nodeChildren] = [];
+                        b = shallowCopy(b);
+                        b[$scope.options.nodeChildren] = [];
+                        return angular.equals(a, b);
+                    }
+ 
+                    $scope.options = $scope.options || {};
+                    ensureDefault($scope.options, "multiSelection", false);
+                    ensureDefault($scope.options, "nodeChildren", "children");
+                    ensureDefault($scope.options, "dirSelectable", "true");
+                    ensureDefault($scope.options, "injectClasses", {});
+                    ensureDefault($scope.options.injectClasses, "ul", "");
+                    ensureDefault($scope.options.injectClasses, "li", "");
+                    ensureDefault($scope.options.injectClasses, "liSelected", "");
+                    ensureDefault($scope.options.injectClasses, "iExpanded", "");
+                    ensureDefault($scope.options.injectClasses, "iCollapsed", "");
+                    ensureDefault($scope.options.injectClasses, "iLeaf", "");
+                    ensureDefault($scope.options.injectClasses, "label", "");
+                    ensureDefault($scope.options.injectClasses, "labelSelected", "");
+                    ensureDefault($scope.options, "equality", defaultEquality);
+                    ensureDefault($scope.options, "isLeaf", defaultIsLeaf);
+ 
+                    $scope.selectedNodes = $scope.selectedNodes || [];
+                    $scope.expandedNodes = $scope.expandedNodes || [];
+                    $scope.expandedNodesMap = {};
+                    for (var i=0; i < $scope.expandedNodes.length; i++) {
+                        $scope.expandedNodesMap[""+i] = $scope.expandedNodes[i];
+                    }
+                    $scope.parentScopeOfTree = $scope.$parent;
+ 
+                    function isSelectedNode(node) {
+                        if (!$scope.options.multiSelection && ($scope.options.equality(node, $scope.selectedNode)))
+                            return true;
+                        else if ($scope.options.multiSelection && $scope.selectedNodes) {
+                            for (var i = 0; (i < $scope.selectedNodes.length); i++) {
+                                if ($scope.options.equality(node, $scope.selectedNodes[i])) {
+                                    return true;
+                                }
+                            }
+                            return false;
+                        }
+                    }
+ 
+                    $scope.headClass = function(node) {
+                        var liSelectionClass = classIfDefined($scope.options.injectClasses.liSelected, false);
+                        var injectSelectionClass = "";
+                        if (liSelectionClass && isSelectedNode(node))
+                            injectSelectionClass = " " + liSelectionClass;
+                        if ($scope.options.isLeaf(node))
+                            return "tree-leaf" + injectSelectionClass;
+                        if ($scope.expandedNodesMap[this.$id])
+                            return "tree-expanded" + injectSelectionClass;
+                        else
+                            return "tree-collapsed" + injectSelectionClass;
+                    };
+ 
+                    $scope.iBranchClass = function() {
+                        if ($scope.expandedNodesMap[this.$id])
+                            return classIfDefined($scope.options.injectClasses.iExpanded);
+                        else
+                            return classIfDefined($scope.options.injectClasses.iCollapsed);
+                    };
+ 
+                    $scope.nodeExpanded = function() {
+                        return !!$scope.expandedNodesMap[this.$id];
+                    };
+ 
+                    $scope.selectNodeHead = function() {
+                        var expanding = $scope.expandedNodesMap[this.$id] === undefined;
+                        $scope.expandedNodesMap[this.$id] = (expanding ? this.node : undefined);
+                        if (expanding) {
+                            $scope.expandedNodes.push(this.node);
+                        }
+                        else {
+                            var index;
+                            for (var i=0; (i < $scope.expandedNodes.length) && !index; i++) {
+                                if ($scope.options.equality($scope.expandedNodes[i], this.node)) {
+                                    index = i;
+                                }
+                            }
+                            Eif (index != undefined)
+                                $scope.expandedNodes.splice(index, 1);
+                        }
+                        Eif ($scope.onNodeToggle)
+                            $scope.onNodeToggle({node: this.node, expanded: expanding});
+                    };
+ 
+                    $scope.selectNodeLabel = function( selectedNode ){
+                        if (selectedNode[$scope.options.nodeChildren] && selectedNode[$scope.options.nodeChildren].length > 0 &&
+                            !$scope.options.dirSelectable) {
+                            this.selectNodeHead();
+                        }
+                        else {
+                            var selected = false;
+                            if ($scope.options.multiSelection) {
+                                var pos = $scope.selectedNodes.indexOf(selectedNode);
+                                if (pos === -1) {
+                                    $scope.selectedNodes.push(selectedNode);
+                                    selected = true;
+                                } else {
+                                    $scope.selectedNodes.splice(pos, 1);
+                                }
+                            } else {
+                                if ($scope.selectedNode != selectedNode) {
+                                    $scope.selectedNode = selectedNode;
+                                    selected = true;
+                                }
+                                else {
+                                    $scope.selectedNode = undefined;
+                                }
+                            }
+                            Eif ($scope.onSelection)
+                                $scope.onSelection({node: selectedNode, selected: selected});
+                        }
+                    };
+ 
+                    $scope.selectedClass = function() {
+                        var isThisNodeSelected = isSelectedNode(this.node);
+                        var labelSelectionClass = classIfDefined($scope.options.injectClasses.labelSelected, false);
+                        var injectSelectionClass = "";
+                        if (labelSelectionClass && isThisNodeSelected)
+                            injectSelectionClass = " " + labelSelectionClass;
+ 
+                        return isThisNodeSelected?"tree-selected" + injectSelectionClass:"";
+                    };
+ 
+                    //tree template
+                    var orderBy = $scope.orderBy ? ' | orderBy:orderBy:reverseOrder' : '';
+                    var template =
+                        '<ul '+classIfDefined($scope.options.injectClasses.ul, true)+'>' +
+                            '<li ng-repeat="node in node.' + $scope.options.nodeChildren + ' | filter:filterExpression:filterComparator ' + orderBy + '" ng-class="headClass(node)" '+classIfDefined($scope.options.injectClasses.li, true)+'>' +
+                            '<i class="tree-branch-head" ng-class="iBranchClass()" ng-click="selectNodeHead(node)"></i>' +
+                            '<i class="tree-leaf-head '+classIfDefined($scope.options.injectClasses.iLeaf, false)+'"></i>' +
+                            '<div treenode-contextmenu="contextMenuNode($event, node)" class="tree-label '+classIfDefined($scope.options.injectClasses.label, false)+'" ng-class="selectedClass()" ng-click="selectNodeLabel(node)" tree-transclude></div>' +
+                            '<treeitem ng-if="nodeExpanded()"></treeitem>' +
+                            '</li>' +
+                            '</ul>';
+ 
+                    var menuTemplate =
+                        '<div class="dropdown position-fixed" id="menu_{{$id}}">' +
+                            '<ul class="dropdown-menu" role="menu">' +
+                                '<li ng-repeat="item in treeMenuModel track by $index" ng-click="clickMenu(item)">' +
+                                '<a class="pointer" role="menuitem">{{item.label}}' +
+                                '</a>' +
+                                '</li>' +        
+                            '</ul>' +
+                        '</div>'
+ 
+                    this.template = $compile(template);
+                    this.menuTemplate = $compile(menuTemplate);
+                }],
+                compile: function(element, attrs, childTranscludeFn) {
+                    return function ( scope, element, attrs, treemodelCntr ) {
+ 
+                        scope.$watch("treeModel", function updateNodeOnRootScope(newValue) {
+                            Eif (angular.isArray(newValue)) {
+                                if (angular.isDefined(scope.node) && angular.equals(scope.node[scope.options.nodeChildren], newValue))
+                                    return;
+                                scope.node = {};
+                                scope.synteticRoot = scope.node;
+                                scope.node[scope.options.nodeChildren] = newValue;
+                            }
+                            else {
+                                if (angular.equals(scope.node, newValue))
+                                    return;
+                                scope.node = newValue;
+                            }
+                        });
+ 
+                        scope.$watchCollection('expandedNodes', function(newValue) {
+                            var notFoundIds = 0;
+                            var newExpandedNodesMap = {};
+                            var $liElements = element.find('li');
+                            var existingScopes = [];
+                            // find all nodes visible on the tree and the scope $id of the scopes including them
+                            angular.forEach($liElements, function(liElement) {
+                                var $liElement = angular.element(liElement);
+                                var liScope = $liElement.scope();
+                                existingScopes.push(liScope);
+                            });
+                            // iterate over the newValue, the new expanded nodes, and for each find it in the existingNodesAndScopes
+                            // if found, add the mapping $id -> node into newExpandedNodesMap
+                            // if not found, add the mapping num -> node into newExpandedNodesMap
+                            angular.forEach(newValue, function(newExNode) {
+                                var found = false;
+                                for (var i=0; (i < existingScopes.length) && !found; i++) {
+                                    var existingScope = existingScopes[i];
+                                    if (scope.options.equality(newExNode, existingScope.node)) {
+                                        newExpandedNodesMap[existingScope.$id] = existingScope.node;
+                                        found = true;
+                                    }
+                                }
+                                if (!found)
+                                    newExpandedNodesMap[notFoundIds++] = newExNode;
+                            });
+                            scope.expandedNodesMap = newExpandedNodesMap;
+                        });
+                        
+                        $document.bind('click', function() {
+                            var dropdown = element.find('.dropdown');
+                            dropdown.removeClass('open');
+                            scope.currentContextNode = {}
+                        });
+ 
+                        scope.clickMenu = function(item) {
+                            Eif (scope.onClickMenu)
+                                scope.onClickMenu({item: item, node: scope.currentContextNode});
+                        };
+ 
+                        scope.contextMenuNode = function ( event, node ) {
+                            var dropdown = element.find('.dropdown');
+                            dropdown.addClass('open');
+ 
+                            scope.currentContextNode = node;
+                            dropdown.offset({
+                                top: event.pageY,
+                                left: event.pageX
+                            });
+                        };
+ 
+                        //Rendering template for a root node
+                        treemodelCntr.template( scope, function(clone) {
+                            element.html('').append( clone );
+                        });
+ 
+                        if (scope.treeMenuModel) {
+                            treemodelCntr.menuTemplate( scope, function(clone) {
+                                element.append( clone );
+                            });                            
+                        }
+ 
+                        // save the transclude function from compile (which is not bound to a scope as apposed to the one from link)
+                        // we can fix this to work with the link transclude function with angular 1.2.6. as for angular 1.2.0 we need
+                        // to keep using the compile function
+                        scope.$treeTransclude = childTranscludeFn;
+                    }
+                }
+            };
+        }])
+        // treenode contextmenu
+        .directive("treenodeContextmenu", function() {
+            return {
+                restrict: 'A',
+                require: '^treecontrol',
+                scope: {
+                    contextMenu: '&treenodeContextmenu'
+                },
+                link: function( scope, element, attrs, treemodelCntr) {
+                    element.on('contextmenu', function (event) {
+                        event.preventDefault();
+                        event.stopPropagation();
+ 
+                        scope.$apply(function() {
+                            scope.contextMenu({
+                                $event: event
+                            });                        
+                        });
+                    });
+                }
+            }
+        })
+        .directive("treeitem", function() {
+            return {
+                restrict: 'E',
+                require: "^treecontrol",
+                link: function( scope, element, attrs, treemodelCntr) {
+                    // Rendering template for the current node
+                    treemodelCntr.template(scope, function(clone) {
+                        element.html('').append(clone);
+                    });
+                }
+            }
+        })
+        .directive("treeTransclude", function() {
+            return {
+                link: function(scope, element, attrs, controller) {
+                    if (!scope.options.isLeaf(scope.node)) {
+                        angular.forEach(scope.expandedNodesMap, function (node, id) {
+                            if (scope.options.equality(node, scope.node)) {
+                                scope.expandedNodesMap[scope.$id] = scope.node;
+                                scope.expandedNodesMap[id] = undefined;
+                            }
+                        });
+                    }
+                    if (!scope.options.multiSelection && scope.options.equality(scope.node, scope.selectedNode)) {
+                        scope.selectedNode = scope.node;
+                    } else if (scope.options.multiSelection) {
+                        var newSelectedNodes = [];
+                        for (var i = 0; (i < scope.selectedNodes.length); i++) {
+                            if (scope.options.equality(scope.node, scope.selectedNodes[i])) {
+                                newSelectedNodes.push(scope.node);
+                            }
+                        }
+                        scope.selectedNodes = newSelectedNodes;
+                    }
+ 
+                    // create a scope for the transclusion, whos parent is the parent of the tree control
+                    scope.transcludeScope = scope.parentScopeOfTree.$new();
+                    scope.transcludeScope.node = scope.node;
+                    scope.transcludeScope.$parentNode = (scope.$parent.node === scope.synteticRoot)?null:scope.$parent.node;
+                    scope.transcludeScope.$index = scope.$index;
+                    scope.transcludeScope.$first = scope.$first;
+                    scope.transcludeScope.$middle = scope.$middle;
+                    scope.transcludeScope.$last = scope.$last;
+                    scope.transcludeScope.$odd = scope.$odd;
+                    scope.transcludeScope.$even = scope.$even;
+                    scope.$on('$destroy', function() {
+                        scope.transcludeScope.$destroy();
+                    });
+ 
+                    scope.$treeTransclude(scope.transcludeScope, function(clone) {
+                        element.empty();
+                        element.append(clone);
+                    });
+                }
+            }
+        });
+})( angular );
+ 
+ +
+ + + + + + + + diff --git a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/index.html b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/index.html new file mode 100644 index 0000000..9aff0b5 --- /dev/null +++ b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/index.html @@ -0,0 +1,333 @@ + + + + Code coverage report for ./ + + + + + + + +
+

Code coverage report for ./

+

+ + Statements: 97.06% (198 / 204)      + + + Branches: 89.92% (107 / 119)      + + + Functions: 100% (38 / 38)      + + + Lines: 97.06% (198 / 204)      + +

+
All files » ./
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
angular-tree-control.js97.06%(198 / 204)89.92%(107 / 119)100%(38 / 38)97.06%(198 / 204)
+
+
+ + + + + + + + diff --git a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.css b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.js b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.js new file mode 100644 index 0000000..ef51e03 --- /dev/null +++ b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.js @@ -0,0 +1 @@ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov.info b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov.info new file mode 100644 index 0000000..0369f9b --- /dev/null +++ b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov.info @@ -0,0 +1,408 @@ +TN: +SF:./angular-tree-control.js +FN:1,(anonymous_1) +FN:5,(anonymous_2) +FN:10,classIfDefined +FN:21,ensureDefault +FN:45,(anonymous_5) +FN:47,defaultIsLeaf +FN:51,shallowCopy +FN:70,defaultEquality +FN:104,isSelectedNode +FN:117,(anonymous_10) +FN:130,(anonymous_11) +FN:137,(anonymous_12) +FN:141,(anonymous_13) +FN:161,(anonymous_14) +FN:190,(anonymous_15) +FN:225,(anonymous_16) +FN:226,(anonymous_17) +FN:228,updateNodeOnRootScope +FN:243,(anonymous_19) +FN:249,(anonymous_20) +FN:257,(anonymous_21) +FN:272,(anonymous_22) +FN:278,(anonymous_23) +FN:283,(anonymous_24) +FN:295,(anonymous_25) +FN:300,(anonymous_26) +FN:314,(anonymous_27) +FN:321,(anonymous_28) +FN:322,(anonymous_29) +FN:326,(anonymous_30) +FN:335,(anonymous_31) +FN:339,(anonymous_32) +FN:341,(anonymous_33) +FN:347,(anonymous_34) +FN:349,(anonymous_35) +FN:351,(anonymous_36) +FN:380,(anonymous_37) +FN:384,(anonymous_38) +FNF:38 +FNH:38 +FNDA:1,(anonymous_1) +FNDA:66,(anonymous_2) +FNDA:2784,classIfDefined +FNDA:938,ensureDefault +FNDA:67,(anonymous_5) +FNDA:1029,defaultIsLeaf +FNDA:440,shallowCopy +FNDA:1216,defaultEquality +FNDA:954,isSelectedNode +FNDA:828,(anonymous_10) +FNDA:844,(anonymous_11) +FNDA:603,(anonymous_12) +FNDA:13,(anonymous_13) +FNDA:19,(anonymous_14) +FNDA:844,(anonymous_15) +FNDA:67,(anonymous_16) +FNDA:67,(anonymous_17) +FNDA:73,updateNodeOnRootScope +FNDA:81,(anonymous_19) +FNDA:44,(anonymous_20) +FNDA:26,(anonymous_21) +FNDA:65,(anonymous_22) +FNDA:1,(anonymous_23) +FNDA:3,(anonymous_24) +FNDA:67,(anonymous_25) +FNDA:5,(anonymous_26) +FNDA:66,(anonymous_27) +FNDA:225,(anonymous_28) +FNDA:3,(anonymous_29) +FNDA:3,(anonymous_30) +FNDA:66,(anonymous_31) +FNDA:24,(anonymous_32) +FNDA:24,(anonymous_33) +FNDA:66,(anonymous_34) +FNDA:225,(anonymous_35) +FNDA:69,(anonymous_36) +FNDA:18,(anonymous_37) +FNDA:225,(anonymous_38) +DA:1,1 +DA:4,1 +DA:10,1 +DA:11,2784 +DA:12,390 +DA:13,22 +DA:15,368 +DA:18,2394 +DA:21,1 +DA:22,938 +DA:23,830 +DA:26,66 +DA:47,1 +DA:48,1029 +DA:51,1 +DA:52,440 +DA:53,0 +DA:55,0 +DA:56,0 +DA:58,440 +DA:59,440 +DA:61,440 +DA:62,1294 +DA:63,870 +DA:68,440 +DA:70,1 +DA:71,1216 +DA:72,996 +DA:73,220 +DA:74,220 +DA:75,220 +DA:76,220 +DA:77,220 +DA:80,67 +DA:81,67 +DA:82,67 +DA:83,67 +DA:84,67 +DA:85,67 +DA:86,67 +DA:87,67 +DA:88,67 +DA:89,67 +DA:90,67 +DA:91,67 +DA:92,67 +DA:93,67 +DA:94,67 +DA:96,67 +DA:97,67 +DA:98,67 +DA:99,67 +DA:100,10 +DA:102,67 +DA:104,1 +DA:105,954 +DA:106,27 +DA:107,927 +DA:108,89 +DA:109,80 +DA:110,31 +DA:113,58 +DA:117,67 +DA:118,828 +DA:119,828 +DA:120,828 +DA:121,4 +DA:122,828 +DA:123,255 +DA:124,573 +DA:125,69 +DA:127,504 +DA:130,67 +DA:131,844 +DA:132,69 +DA:134,775 +DA:137,67 +DA:138,603 +DA:141,67 +DA:142,13 +DA:143,13 +DA:144,13 +DA:145,12 +DA:148,1 +DA:149,1 +DA:150,2 +DA:151,1 +DA:154,1 +DA:155,1 +DA:157,13 +DA:158,13 +DA:161,67 +DA:162,19 +DA:164,1 +DA:167,18 +DA:168,18 +DA:169,8 +DA:170,8 +DA:171,6 +DA:172,6 +DA:174,2 +DA:177,10 +DA:178,8 +DA:179,8 +DA:182,2 +DA:185,18 +DA:186,18 +DA:190,67 +DA:191,844 +DA:192,844 +DA:193,844 +DA:194,844 +DA:195,4 +DA:197,844 +DA:201,67 +DA:202,67 +DA:212,67 +DA:222,67 +DA:223,67 +DA:226,67 +DA:228,67 +DA:229,73 +DA:230,73 +DA:231,4 +DA:232,69 +DA:233,69 +DA:234,69 +DA:237,0 +DA:238,0 +DA:239,0 +DA:243,67 +DA:244,81 +DA:245,81 +DA:246,81 +DA:247,81 +DA:249,81 +DA:250,44 +DA:251,44 +DA:252,44 +DA:257,81 +DA:258,26 +DA:259,26 +DA:260,25 +DA:261,25 +DA:262,16 +DA:263,16 +DA:266,26 +DA:267,10 +DA:269,81 +DA:272,67 +DA:273,65 +DA:274,65 +DA:275,65 +DA:278,67 +DA:279,1 +DA:280,1 +DA:283,67 +DA:284,3 +DA:285,3 +DA:287,3 +DA:288,3 +DA:295,67 +DA:296,67 +DA:299,67 +DA:300,5 +DA:301,5 +DA:308,67 +DA:315,66 +DA:322,225 +DA:323,3 +DA:324,3 +DA:326,3 +DA:327,3 +DA:336,66 +DA:341,24 +DA:342,24 +DA:348,66 +DA:350,225 +DA:351,147 +DA:352,69 +DA:353,11 +DA:354,11 +DA:358,225 +DA:359,2 +DA:360,223 +DA:361,16 +DA:362,16 +DA:363,6 +DA:364,2 +DA:367,16 +DA:371,225 +DA:372,225 +DA:373,225 +DA:374,225 +DA:375,225 +DA:376,225 +DA:377,225 +DA:378,225 +DA:379,225 +DA:380,225 +DA:381,18 +DA:384,225 +DA:385,225 +DA:386,225 +LF:204 +LH:198 +BRDA:11,1,0,390 +BRDA:11,1,1,2394 +BRDA:12,2,0,22 +BRDA:12,2,1,368 +BRDA:22,3,0,830 +BRDA:22,3,1,108 +BRDA:48,4,0,1029 +BRDA:48,4,1,928 +BRDA:52,5,0,0 +BRDA:52,5,1,440 +BRDA:53,6,0,0 +BRDA:53,6,1,0 +BRDA:58,7,0,440 +BRDA:58,7,1,0 +BRDA:59,8,0,440 +BRDA:59,8,1,440 +BRDA:62,9,0,870 +BRDA:62,9,1,424 +BRDA:62,10,0,1294 +BRDA:62,10,1,1294 +BRDA:62,11,0,1294 +BRDA:62,11,1,424 +BRDA:68,12,0,440 +BRDA:68,12,1,0 +BRDA:71,13,0,996 +BRDA:71,13,1,220 +BRDA:71,14,0,1216 +BRDA:71,14,1,1202 +BRDA:80,15,0,67 +BRDA:80,15,1,45 +BRDA:96,16,0,67 +BRDA:96,16,1,66 +BRDA:97,17,0,67 +BRDA:97,17,1,62 +BRDA:105,18,0,27 +BRDA:105,18,1,927 +BRDA:105,19,0,954 +BRDA:105,19,1,865 +BRDA:107,20,0,89 +BRDA:107,20,1,838 +BRDA:107,21,0,927 +BRDA:107,21,1,89 +BRDA:109,22,0,31 +BRDA:109,22,1,49 +BRDA:120,23,0,4 +BRDA:120,23,1,824 +BRDA:120,24,0,828 +BRDA:120,24,1,110 +BRDA:122,25,0,255 +BRDA:122,25,1,573 +BRDA:124,26,0,69 +BRDA:124,26,1,504 +BRDA:131,27,0,69 +BRDA:131,27,1,775 +BRDA:143,28,0,12 +BRDA:143,28,1,1 +BRDA:144,29,0,12 +BRDA:144,29,1,1 +BRDA:149,30,0,3 +BRDA:149,30,1,2 +BRDA:150,31,0,1 +BRDA:150,31,1,1 +BRDA:154,32,0,1 +BRDA:154,32,1,0 +BRDA:157,33,0,13 +BRDA:157,33,1,0 +BRDA:162,34,0,1 +BRDA:162,34,1,18 +BRDA:162,35,0,19 +BRDA:162,35,1,19 +BRDA:162,35,2,17 +BRDA:168,36,0,8 +BRDA:168,36,1,10 +BRDA:170,37,0,6 +BRDA:170,37,1,2 +BRDA:177,38,0,8 +BRDA:177,38,1,2 +BRDA:185,39,0,18 +BRDA:185,39,1,0 +BRDA:194,40,0,4 +BRDA:194,40,1,840 +BRDA:194,41,0,844 +BRDA:194,41,1,110 +BRDA:197,42,0,54 +BRDA:197,42,1,790 +BRDA:201,43,0,2 +BRDA:201,43,1,65 +BRDA:229,44,0,73 +BRDA:229,44,1,0 +BRDA:230,45,0,4 +BRDA:230,45,1,69 +BRDA:230,46,0,73 +BRDA:230,46,1,6 +BRDA:237,47,0,0 +BRDA:237,47,1,0 +BRDA:259,48,0,51 +BRDA:259,48,1,38 +BRDA:261,49,0,16 +BRDA:261,49,1,9 +BRDA:266,50,0,10 +BRDA:266,50,1,16 +BRDA:279,51,0,1 +BRDA:279,51,1,0 +BRDA:299,52,0,5 +BRDA:299,52,1,62 +BRDA:350,53,0,147 +BRDA:350,53,1,78 +BRDA:352,54,0,11 +BRDA:352,54,1,58 +BRDA:358,55,0,2 +BRDA:358,55,1,223 +BRDA:358,56,0,225 +BRDA:358,56,1,209 +BRDA:360,57,0,16 +BRDA:360,57,1,207 +BRDA:363,58,0,2 +BRDA:363,58,1,4 +BRDA:373,59,0,176 +BRDA:373,59,1,49 +BRF:119 +BRH:107 +end_of_record diff --git a/angular-tree-control.js b/angular-tree-control.js index e6aaaff..de88669 100644 --- a/angular-tree-control.js +++ b/angular-tree-control.js @@ -2,7 +2,7 @@ 'use strict'; angular.module( 'treeControl', [] ) - .directive( 'treecontrol', ['$compile', function( $compile ) { + .directive( 'treecontrol', ['$compile', '$document', function( $compile, $document ) { /** * @param cssClass - the css class * @param addClassProperty - should we wrap the class name with class="" @@ -38,7 +38,9 @@ orderBy: "@", reverseOrder: "@", filterExpression: "=?", - filterComparator: "=?" + filterComparator: "=?", + treeMenuModel: "=", + onClickMenu: "&" }, controller: ['$scope', function( $scope ) { @@ -99,7 +101,6 @@ } $scope.parentScopeOfTree = $scope.$parent; - function isSelectedNode(node) { if (!$scope.options.multiSelection && ($scope.options.equality(node, $scope.selectedNode))) return true; @@ -203,12 +204,23 @@ '
  • ' + '' + '' + - '
    ' + + '
    ' + '' + '
  • ' + ''; + var menuTemplate = + '' + this.template = $compile(template); + this.menuTemplate = $compile(menuTemplate); }], compile: function(element, attrs, childTranscludeFn) { return function ( scope, element, attrs, treemodelCntr ) { @@ -256,15 +268,44 @@ }); scope.expandedNodesMap = newExpandedNodesMap; }); + + // scope.$watch('expandedNodesMap', function(newValue) { + + // } + + $document.bind('click', function() { + var dropdown = element.find('.dropdown'); + dropdown.removeClass('open'); + scope.currentContextNode = {} + }); + + scope.clickMenu = function(item) { + if (scope.onClickMenu) + scope.onClickMenu({item: item, node: scope.currentContextNode}); + }; -// scope.$watch('expandedNodesMap', function(newValue) { -// -// }); + scope.contextMenuNode = function ( event, node ) { + var dropdown = element.find('.dropdown'); + dropdown.addClass('open'); + + scope.currentContextNode = node; + dropdown.offset({ + top: event.pageY, + left: event.pageX + }); + }; //Rendering template for a root node treemodelCntr.template( scope, function(clone) { element.html('').append( clone ); }); + + if (scope.treeMenuModel) { + treemodelCntr.menuTemplate( scope, function(clone) { + element.append( clone ); + }); + } + // save the transclude function from compile (which is not bound to a scope as apposed to the one from link) // we can fix this to work with the link transclude function with angular 1.2.6. as for angular 1.2.0 we need // to keep using the compile function @@ -273,6 +314,28 @@ } }; }]) + // treenode contextmenu + .directive("treenodeContextmenu", function() { + return { + restrict: 'A', + require: '^treecontrol', + scope: { + contextMenu: '&treenodeContextmenu' + }, + link: function( scope, element, attrs, treemodelCntr) { + element.on('contextmenu', function (event) { + event.preventDefault(); + event.stopPropagation(); + + scope.$apply(function() { + scope.contextMenu({ + $event: event + }); + }); + }); + } + } + }) .directive("treeitem", function() { return { restrict: 'E', diff --git a/index.html b/index.html index 487aa2c..a1ec85b 100644 --- a/index.html +++ b/index.html @@ -57,6 +57,8 @@

    Basic Usage (Classic style, default configuration)

    label: {{node.label}} ({{node.id}}) @@ -89,6 +91,18 @@

    Basic Usage (Classic style, default configuration)

    $scope.showSelected = function(sel) { $scope.selectedNode = sel; }; + + $scope.menuModel = [{ + label: '测试1', + value: 1 + }, { + label: '测试2', + value: 2 + }] + + $scope.clickMenu = function(node, item) { + console.log(node, item); + } } diff --git a/test/angular-tree-control-test.js b/test/angular-tree-control-test.js index 9fb4d9b..80eb7b3 100644 --- a/test/angular-tree-control-test.js +++ b/test/angular-tree-control-test.js @@ -73,6 +73,10 @@ describe('treeControl', function() { $rootScope.$digest(); expect(element.find('li.tree-leaf').length).toBe(0); }); + + it('should not render dropdown', function () { + expect(element.find('.dropdown').length).toBe(0); + }); }); describe('customising using options.isLeaf', function () { @@ -636,7 +640,55 @@ describe('treeControl', function() { $rootScope.$digest(); expect(element.find('li:eq(0)').hasClass('tree-expanded')).toBeTruthy(); }); + }); + + describe('treenode-contextmenu', function () { + beforeEach(function () { + $rootScope.treedata = createSubTree(3, 2); + $rootScope.menuModel = [{ + label: 'menu_1', + value: 1 + }, { + label: 'menu_2', + value: 2 + }] + $rootScope.clickMenu = function (node, item) { + + }; + element = $compile('{{node.label}}')($rootScope); + $rootScope.$digest(); + }); + + it('should render dropmenu', function () { + expect(element.find('.dropdown .dropdown-menu li').length).toBe(2); + }); + + it('should show dropmenu', function () { + element.find('.tree-label:eq(0)').trigger('contextmenu'); + expect(element.find('.dropdown').hasClass('open')).toBeTruthy(); + }); + + it('should hide dropmenu after document click', function () { + $('html').click(); + expect(element.find('.dropdown').hasClass('open')).toBeFalsy(); + }); + + it('should fix dropmenu position', function () { + element.find('.tree-label:eq(0)').trigger({type: 'contextmenu', pageX: 231, pageY: 398}); + dropdown = element.find('.dropdown'); + expect(dropdown.css('top')).toBe('398px'); + expect(dropdown.css('left')).toBe('231px'); + }); + + it('should can click menu item', function () { + $rootScope.clickMenu = jasmine.createSpy('clickMenu'); + + element.find('.tree-label:eq(0)').trigger('contextmenu'); + element.find('.dropdown .dropdown-menu li:eq(1)').click(); + + expect($rootScope.clickMenu).toHaveBeenCalledWith($rootScope.treedata[0], $rootScope.menuModel[1]); + }); }); }); From 09f4d59d1e31b0a3e1d92a00908464935437cc2a Mon Sep 17 00:00:00 2001 From: boiawang Date: Tue, 3 Feb 2015 15:42:00 +0800 Subject: [PATCH 2/3] add icov-report ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 94783d5..4618fc2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ bower_components coverage treecontrol.iml .DS_Store +lcov-report From 5307ecee1c1c7606f2c07d93ce0e99b15c8d0342 Mon Sep 17 00:00:00 2001 From: boiawang Date: Tue, 3 Feb 2015 15:43:20 +0800 Subject: [PATCH 3/3] delete chrome lcov --- .../lcov-report/angular-tree-control.js.html | 1478 ----------------- .../lcov-report/index.html | 333 ---- .../lcov-report/prettify.css | 1 - .../lcov-report/prettify.js | 1 - Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov.info | 408 ----- 5 files changed, 2221 deletions(-) delete mode 100644 Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/angular-tree-control.js.html delete mode 100644 Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/index.html delete mode 100644 Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.css delete mode 100644 Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.js delete mode 100644 Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov.info diff --git a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/angular-tree-control.js.html b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/angular-tree-control.js.html deleted file mode 100644 index fff6a22..0000000 --- a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/angular-tree-control.js.html +++ /dev/null @@ -1,1478 +0,0 @@ - - - - Code coverage report for ./angular-tree-control.js - - - - - - - -
    -

    Code coverage report for ./angular-tree-control.js

    -

    - - Statements: 97.06% (198 / 204)      - - - Branches: 89.92% (107 / 119)      - - - Functions: 100% (38 / 38)      - - - Lines: 97.06% (198 / 204)      - -

    -
    All files » ./ » angular-tree-control.js
    -
    -
    -
    
    -
    -
    1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -3921 -  -  -1 -  -  -  -  -  -1 -2784 -390 -22 -  -368 -  -  -2394 -  -  -1 -938 -830 -  -  -66 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1 -1029 -  -  -1 -440 -  -  -  -  -  -440 -440 -  -440 -1294 -870 -  -  -  -  -440 -  -1 -1216 -996 -220 -220 -220 -220 -220 -  -  -67 -67 -67 -67 -67 -67 -67 -67 -67 -67 -67 -67 -67 -67 -67 -  -67 -67 -67 -67 -10 -  -67 -  -1 -954 -27 -927 -89 -80 -31 -  -  -58 -  -  -  -67 -828 -828 -828 -4 -828 -255 -573 -69 -  -504 -  -  -67 -844 -69 -  -775 -  -  -67 -603 -  -  -67 -13 -13 -13 -12 -  -  -1 -1 -2 -1 -  -  -1 -1 -  -13 -13 -  -  -67 -19 -  -1 -  -  -18 -18 -8 -8 -6 -6 -  -2 -  -  -10 -8 -8 -  -  -2 -  -  -18 -18 -  -  -  -67 -844 -844 -844 -844 -4 -  -844 -  -  -  -67 -67 -  -  -  -  -  -  -  -  -  -67 -  -  -  -  -  -  -  -  -  -67 -67 -  -  -67 -  -67 -73 -73 -4 -69 -69 -69 -  -  -  -  -  -  -  -  -67 -81 -81 -81 -81 -  -81 -44 -44 -44 -  -  -  -  -81 -26 -26 -25 -25 -16 -16 -  -  -26 -10 -  -81 -  -  -67 -65 -65 -65 -  -  -67 -1 -1 -  -  -67 -3 -3 -  -3 -3 -  -  -  -  -  -  -67 -67 -  -  -67 -5 -5 -  -  -  -  -  -  -67 -  -  -  -  -  -  -66 -  -  -  -  -  -  -225 -3 -3 -  -3 -3 -  -  -  -  -  -  -  -  -66 -  -  -  -  -24 -24 -  -  -  -  -  -66 -  -225 -147 -69 -11 -11 -  -  -  -225 -2 -223 -16 -16 -6 -2 -  -  -16 -  -  -  -225 -225 -225 -225 -225 -225 -225 -225 -225 -225 -18 -  -  -225 -225 -225 -  -  -  -  -  - 
    (function ( angular ) {
    -    'use strict';
    -    
    -    angular.module( 'treeControl', [] )
    -        .directive( 'treecontrol', ['$compile', '$document', function( $compile, $document ) {
    -            /**
    -             * @param cssClass - the css class
    -             * @param addClassProperty - should we wrap the class name with class=""
    -             */
    -            function classIfDefined(cssClass, addClassProperty) {
    -                if (cssClass) {
    -                    if (addClassProperty)
    -                        return 'class="' + cssClass + '"';
    -                    else
    -                        return cssClass;
    -                }
    -                else
    -                    return "";
    -            }
    -            
    -            function ensureDefault(obj, prop, value) {
    -                if (!obj.hasOwnProperty(prop))
    -                    obj[prop] = value;
    -            }
    -            
    -            return {
    -                restrict: 'EA',
    -                require: "treecontrol",
    -                transclude: true,
    -                scope: {
    -                    treeModel: "=",
    -                    selectedNode: "=?",
    -                    selectedNodes: "=?",
    -                    expandedNodes: "=?",
    -                    onSelection: "&",
    -                    onNodeToggle: "&",
    -                    options: "=?",
    -                    orderBy: "@",
    -                    reverseOrder: "@",
    -                    filterExpression: "=?",
    -                    filterComparator: "=?",
    -                    treeMenuModel: "=",
    -                    onClickMenu: "&"
    -                },
    -                controller: ['$scope', function( $scope ) {
    - 
    -                    function defaultIsLeaf(node) {
    -                        return !node[$scope.options.nodeChildren] || node[$scope.options.nodeChildren].length === 0;
    -                    }
    - 
    -                    function shallowCopy(src, dst) {
    -                        Iif (angular.isArray(src)) {
    -                            dst = dst || [];
    - 
    -                            for ( var i = 0; i < src.length; i++) {
    -                                dst[i] = src[i];
    -                            }
    -                        } else Eif (angular.isObject(src)) {
    -                            dst = dst || {};
    - 
    -                            for (var key in src) {
    -                                if (hasOwnProperty.call(src, key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {
    -                                    dst[key] = src[key];
    -                                }
    -                            }
    -                        }
    - 
    -                        return dst || src;
    -                    }
    -                    function defaultEquality(a, b) {
    -                        if (a === undefined || b === undefined)
    -                            return false;
    -                        a = shallowCopy(a);
    -                        a[$scope.options.nodeChildren] = [];
    -                        b = shallowCopy(b);
    -                        b[$scope.options.nodeChildren] = [];
    -                        return angular.equals(a, b);
    -                    }
    - 
    -                    $scope.options = $scope.options || {};
    -                    ensureDefault($scope.options, "multiSelection", false);
    -                    ensureDefault($scope.options, "nodeChildren", "children");
    -                    ensureDefault($scope.options, "dirSelectable", "true");
    -                    ensureDefault($scope.options, "injectClasses", {});
    -                    ensureDefault($scope.options.injectClasses, "ul", "");
    -                    ensureDefault($scope.options.injectClasses, "li", "");
    -                    ensureDefault($scope.options.injectClasses, "liSelected", "");
    -                    ensureDefault($scope.options.injectClasses, "iExpanded", "");
    -                    ensureDefault($scope.options.injectClasses, "iCollapsed", "");
    -                    ensureDefault($scope.options.injectClasses, "iLeaf", "");
    -                    ensureDefault($scope.options.injectClasses, "label", "");
    -                    ensureDefault($scope.options.injectClasses, "labelSelected", "");
    -                    ensureDefault($scope.options, "equality", defaultEquality);
    -                    ensureDefault($scope.options, "isLeaf", defaultIsLeaf);
    - 
    -                    $scope.selectedNodes = $scope.selectedNodes || [];
    -                    $scope.expandedNodes = $scope.expandedNodes || [];
    -                    $scope.expandedNodesMap = {};
    -                    for (var i=0; i < $scope.expandedNodes.length; i++) {
    -                        $scope.expandedNodesMap[""+i] = $scope.expandedNodes[i];
    -                    }
    -                    $scope.parentScopeOfTree = $scope.$parent;
    - 
    -                    function isSelectedNode(node) {
    -                        if (!$scope.options.multiSelection && ($scope.options.equality(node, $scope.selectedNode)))
    -                            return true;
    -                        else if ($scope.options.multiSelection && $scope.selectedNodes) {
    -                            for (var i = 0; (i < $scope.selectedNodes.length); i++) {
    -                                if ($scope.options.equality(node, $scope.selectedNodes[i])) {
    -                                    return true;
    -                                }
    -                            }
    -                            return false;
    -                        }
    -                    }
    - 
    -                    $scope.headClass = function(node) {
    -                        var liSelectionClass = classIfDefined($scope.options.injectClasses.liSelected, false);
    -                        var injectSelectionClass = "";
    -                        if (liSelectionClass && isSelectedNode(node))
    -                            injectSelectionClass = " " + liSelectionClass;
    -                        if ($scope.options.isLeaf(node))
    -                            return "tree-leaf" + injectSelectionClass;
    -                        if ($scope.expandedNodesMap[this.$id])
    -                            return "tree-expanded" + injectSelectionClass;
    -                        else
    -                            return "tree-collapsed" + injectSelectionClass;
    -                    };
    - 
    -                    $scope.iBranchClass = function() {
    -                        if ($scope.expandedNodesMap[this.$id])
    -                            return classIfDefined($scope.options.injectClasses.iExpanded);
    -                        else
    -                            return classIfDefined($scope.options.injectClasses.iCollapsed);
    -                    };
    - 
    -                    $scope.nodeExpanded = function() {
    -                        return !!$scope.expandedNodesMap[this.$id];
    -                    };
    - 
    -                    $scope.selectNodeHead = function() {
    -                        var expanding = $scope.expandedNodesMap[this.$id] === undefined;
    -                        $scope.expandedNodesMap[this.$id] = (expanding ? this.node : undefined);
    -                        if (expanding) {
    -                            $scope.expandedNodes.push(this.node);
    -                        }
    -                        else {
    -                            var index;
    -                            for (var i=0; (i < $scope.expandedNodes.length) && !index; i++) {
    -                                if ($scope.options.equality($scope.expandedNodes[i], this.node)) {
    -                                    index = i;
    -                                }
    -                            }
    -                            Eif (index != undefined)
    -                                $scope.expandedNodes.splice(index, 1);
    -                        }
    -                        Eif ($scope.onNodeToggle)
    -                            $scope.onNodeToggle({node: this.node, expanded: expanding});
    -                    };
    - 
    -                    $scope.selectNodeLabel = function( selectedNode ){
    -                        if (selectedNode[$scope.options.nodeChildren] && selectedNode[$scope.options.nodeChildren].length > 0 &&
    -                            !$scope.options.dirSelectable) {
    -                            this.selectNodeHead();
    -                        }
    -                        else {
    -                            var selected = false;
    -                            if ($scope.options.multiSelection) {
    -                                var pos = $scope.selectedNodes.indexOf(selectedNode);
    -                                if (pos === -1) {
    -                                    $scope.selectedNodes.push(selectedNode);
    -                                    selected = true;
    -                                } else {
    -                                    $scope.selectedNodes.splice(pos, 1);
    -                                }
    -                            } else {
    -                                if ($scope.selectedNode != selectedNode) {
    -                                    $scope.selectedNode = selectedNode;
    -                                    selected = true;
    -                                }
    -                                else {
    -                                    $scope.selectedNode = undefined;
    -                                }
    -                            }
    -                            Eif ($scope.onSelection)
    -                                $scope.onSelection({node: selectedNode, selected: selected});
    -                        }
    -                    };
    - 
    -                    $scope.selectedClass = function() {
    -                        var isThisNodeSelected = isSelectedNode(this.node);
    -                        var labelSelectionClass = classIfDefined($scope.options.injectClasses.labelSelected, false);
    -                        var injectSelectionClass = "";
    -                        if (labelSelectionClass && isThisNodeSelected)
    -                            injectSelectionClass = " " + labelSelectionClass;
    - 
    -                        return isThisNodeSelected?"tree-selected" + injectSelectionClass:"";
    -                    };
    - 
    -                    //tree template
    -                    var orderBy = $scope.orderBy ? ' | orderBy:orderBy:reverseOrder' : '';
    -                    var template =
    -                        '<ul '+classIfDefined($scope.options.injectClasses.ul, true)+'>' +
    -                            '<li ng-repeat="node in node.' + $scope.options.nodeChildren + ' | filter:filterExpression:filterComparator ' + orderBy + '" ng-class="headClass(node)" '+classIfDefined($scope.options.injectClasses.li, true)+'>' +
    -                            '<i class="tree-branch-head" ng-class="iBranchClass()" ng-click="selectNodeHead(node)"></i>' +
    -                            '<i class="tree-leaf-head '+classIfDefined($scope.options.injectClasses.iLeaf, false)+'"></i>' +
    -                            '<div treenode-contextmenu="contextMenuNode($event, node)" class="tree-label '+classIfDefined($scope.options.injectClasses.label, false)+'" ng-class="selectedClass()" ng-click="selectNodeLabel(node)" tree-transclude></div>' +
    -                            '<treeitem ng-if="nodeExpanded()"></treeitem>' +
    -                            '</li>' +
    -                            '</ul>';
    - 
    -                    var menuTemplate =
    -                        '<div class="dropdown position-fixed" id="menu_{{$id}}">' +
    -                            '<ul class="dropdown-menu" role="menu">' +
    -                                '<li ng-repeat="item in treeMenuModel track by $index" ng-click="clickMenu(item)">' +
    -                                '<a class="pointer" role="menuitem">{{item.label}}' +
    -                                '</a>' +
    -                                '</li>' +        
    -                            '</ul>' +
    -                        '</div>'
    - 
    -                    this.template = $compile(template);
    -                    this.menuTemplate = $compile(menuTemplate);
    -                }],
    -                compile: function(element, attrs, childTranscludeFn) {
    -                    return function ( scope, element, attrs, treemodelCntr ) {
    - 
    -                        scope.$watch("treeModel", function updateNodeOnRootScope(newValue) {
    -                            Eif (angular.isArray(newValue)) {
    -                                if (angular.isDefined(scope.node) && angular.equals(scope.node[scope.options.nodeChildren], newValue))
    -                                    return;
    -                                scope.node = {};
    -                                scope.synteticRoot = scope.node;
    -                                scope.node[scope.options.nodeChildren] = newValue;
    -                            }
    -                            else {
    -                                if (angular.equals(scope.node, newValue))
    -                                    return;
    -                                scope.node = newValue;
    -                            }
    -                        });
    - 
    -                        scope.$watchCollection('expandedNodes', function(newValue) {
    -                            var notFoundIds = 0;
    -                            var newExpandedNodesMap = {};
    -                            var $liElements = element.find('li');
    -                            var existingScopes = [];
    -                            // find all nodes visible on the tree and the scope $id of the scopes including them
    -                            angular.forEach($liElements, function(liElement) {
    -                                var $liElement = angular.element(liElement);
    -                                var liScope = $liElement.scope();
    -                                existingScopes.push(liScope);
    -                            });
    -                            // iterate over the newValue, the new expanded nodes, and for each find it in the existingNodesAndScopes
    -                            // if found, add the mapping $id -> node into newExpandedNodesMap
    -                            // if not found, add the mapping num -> node into newExpandedNodesMap
    -                            angular.forEach(newValue, function(newExNode) {
    -                                var found = false;
    -                                for (var i=0; (i < existingScopes.length) && !found; i++) {
    -                                    var existingScope = existingScopes[i];
    -                                    if (scope.options.equality(newExNode, existingScope.node)) {
    -                                        newExpandedNodesMap[existingScope.$id] = existingScope.node;
    -                                        found = true;
    -                                    }
    -                                }
    -                                if (!found)
    -                                    newExpandedNodesMap[notFoundIds++] = newExNode;
    -                            });
    -                            scope.expandedNodesMap = newExpandedNodesMap;
    -                        });
    -                        
    -                        $document.bind('click', function() {
    -                            var dropdown = element.find('.dropdown');
    -                            dropdown.removeClass('open');
    -                            scope.currentContextNode = {}
    -                        });
    - 
    -                        scope.clickMenu = function(item) {
    -                            Eif (scope.onClickMenu)
    -                                scope.onClickMenu({item: item, node: scope.currentContextNode});
    -                        };
    - 
    -                        scope.contextMenuNode = function ( event, node ) {
    -                            var dropdown = element.find('.dropdown');
    -                            dropdown.addClass('open');
    - 
    -                            scope.currentContextNode = node;
    -                            dropdown.offset({
    -                                top: event.pageY,
    -                                left: event.pageX
    -                            });
    -                        };
    - 
    -                        //Rendering template for a root node
    -                        treemodelCntr.template( scope, function(clone) {
    -                            element.html('').append( clone );
    -                        });
    - 
    -                        if (scope.treeMenuModel) {
    -                            treemodelCntr.menuTemplate( scope, function(clone) {
    -                                element.append( clone );
    -                            });                            
    -                        }
    - 
    -                        // save the transclude function from compile (which is not bound to a scope as apposed to the one from link)
    -                        // we can fix this to work with the link transclude function with angular 1.2.6. as for angular 1.2.0 we need
    -                        // to keep using the compile function
    -                        scope.$treeTransclude = childTranscludeFn;
    -                    }
    -                }
    -            };
    -        }])
    -        // treenode contextmenu
    -        .directive("treenodeContextmenu", function() {
    -            return {
    -                restrict: 'A',
    -                require: '^treecontrol',
    -                scope: {
    -                    contextMenu: '&treenodeContextmenu'
    -                },
    -                link: function( scope, element, attrs, treemodelCntr) {
    -                    element.on('contextmenu', function (event) {
    -                        event.preventDefault();
    -                        event.stopPropagation();
    - 
    -                        scope.$apply(function() {
    -                            scope.contextMenu({
    -                                $event: event
    -                            });                        
    -                        });
    -                    });
    -                }
    -            }
    -        })
    -        .directive("treeitem", function() {
    -            return {
    -                restrict: 'E',
    -                require: "^treecontrol",
    -                link: function( scope, element, attrs, treemodelCntr) {
    -                    // Rendering template for the current node
    -                    treemodelCntr.template(scope, function(clone) {
    -                        element.html('').append(clone);
    -                    });
    -                }
    -            }
    -        })
    -        .directive("treeTransclude", function() {
    -            return {
    -                link: function(scope, element, attrs, controller) {
    -                    if (!scope.options.isLeaf(scope.node)) {
    -                        angular.forEach(scope.expandedNodesMap, function (node, id) {
    -                            if (scope.options.equality(node, scope.node)) {
    -                                scope.expandedNodesMap[scope.$id] = scope.node;
    -                                scope.expandedNodesMap[id] = undefined;
    -                            }
    -                        });
    -                    }
    -                    if (!scope.options.multiSelection && scope.options.equality(scope.node, scope.selectedNode)) {
    -                        scope.selectedNode = scope.node;
    -                    } else if (scope.options.multiSelection) {
    -                        var newSelectedNodes = [];
    -                        for (var i = 0; (i < scope.selectedNodes.length); i++) {
    -                            if (scope.options.equality(scope.node, scope.selectedNodes[i])) {
    -                                newSelectedNodes.push(scope.node);
    -                            }
    -                        }
    -                        scope.selectedNodes = newSelectedNodes;
    -                    }
    - 
    -                    // create a scope for the transclusion, whos parent is the parent of the tree control
    -                    scope.transcludeScope = scope.parentScopeOfTree.$new();
    -                    scope.transcludeScope.node = scope.node;
    -                    scope.transcludeScope.$parentNode = (scope.$parent.node === scope.synteticRoot)?null:scope.$parent.node;
    -                    scope.transcludeScope.$index = scope.$index;
    -                    scope.transcludeScope.$first = scope.$first;
    -                    scope.transcludeScope.$middle = scope.$middle;
    -                    scope.transcludeScope.$last = scope.$last;
    -                    scope.transcludeScope.$odd = scope.$odd;
    -                    scope.transcludeScope.$even = scope.$even;
    -                    scope.$on('$destroy', function() {
    -                        scope.transcludeScope.$destroy();
    -                    });
    - 
    -                    scope.$treeTransclude(scope.transcludeScope, function(clone) {
    -                        element.empty();
    -                        element.append(clone);
    -                    });
    -                }
    -            }
    -        });
    -})( angular );
    - 
    - -
    - - - - - - - - diff --git a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/index.html b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/index.html deleted file mode 100644 index 9aff0b5..0000000 --- a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/index.html +++ /dev/null @@ -1,333 +0,0 @@ - - - - Code coverage report for ./ - - - - - - - -
    -

    Code coverage report for ./

    -

    - - Statements: 97.06% (198 / 204)      - - - Branches: 89.92% (107 / 119)      - - - Functions: 100% (38 / 38)      - - - Lines: 97.06% (198 / 204)      - -

    -
    All files » ./
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FileStatementsBranchesFunctionsLines
    angular-tree-control.js97.06%(198 / 204)89.92%(107 / 119)100%(38 / 38)97.06%(198 / 204)
    -
    -
    - - - - - - - - diff --git a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.css b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.js b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.js deleted file mode 100644 index ef51e03..0000000 --- a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov.info b/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov.info deleted file mode 100644 index 0369f9b..0000000 --- a/Chrome 40.0.2214 (Mac OS X 10.10.1)/lcov.info +++ /dev/null @@ -1,408 +0,0 @@ -TN: -SF:./angular-tree-control.js -FN:1,(anonymous_1) -FN:5,(anonymous_2) -FN:10,classIfDefined -FN:21,ensureDefault -FN:45,(anonymous_5) -FN:47,defaultIsLeaf -FN:51,shallowCopy -FN:70,defaultEquality -FN:104,isSelectedNode -FN:117,(anonymous_10) -FN:130,(anonymous_11) -FN:137,(anonymous_12) -FN:141,(anonymous_13) -FN:161,(anonymous_14) -FN:190,(anonymous_15) -FN:225,(anonymous_16) -FN:226,(anonymous_17) -FN:228,updateNodeOnRootScope -FN:243,(anonymous_19) -FN:249,(anonymous_20) -FN:257,(anonymous_21) -FN:272,(anonymous_22) -FN:278,(anonymous_23) -FN:283,(anonymous_24) -FN:295,(anonymous_25) -FN:300,(anonymous_26) -FN:314,(anonymous_27) -FN:321,(anonymous_28) -FN:322,(anonymous_29) -FN:326,(anonymous_30) -FN:335,(anonymous_31) -FN:339,(anonymous_32) -FN:341,(anonymous_33) -FN:347,(anonymous_34) -FN:349,(anonymous_35) -FN:351,(anonymous_36) -FN:380,(anonymous_37) -FN:384,(anonymous_38) -FNF:38 -FNH:38 -FNDA:1,(anonymous_1) -FNDA:66,(anonymous_2) -FNDA:2784,classIfDefined -FNDA:938,ensureDefault -FNDA:67,(anonymous_5) -FNDA:1029,defaultIsLeaf -FNDA:440,shallowCopy -FNDA:1216,defaultEquality -FNDA:954,isSelectedNode -FNDA:828,(anonymous_10) -FNDA:844,(anonymous_11) -FNDA:603,(anonymous_12) -FNDA:13,(anonymous_13) -FNDA:19,(anonymous_14) -FNDA:844,(anonymous_15) -FNDA:67,(anonymous_16) -FNDA:67,(anonymous_17) -FNDA:73,updateNodeOnRootScope -FNDA:81,(anonymous_19) -FNDA:44,(anonymous_20) -FNDA:26,(anonymous_21) -FNDA:65,(anonymous_22) -FNDA:1,(anonymous_23) -FNDA:3,(anonymous_24) -FNDA:67,(anonymous_25) -FNDA:5,(anonymous_26) -FNDA:66,(anonymous_27) -FNDA:225,(anonymous_28) -FNDA:3,(anonymous_29) -FNDA:3,(anonymous_30) -FNDA:66,(anonymous_31) -FNDA:24,(anonymous_32) -FNDA:24,(anonymous_33) -FNDA:66,(anonymous_34) -FNDA:225,(anonymous_35) -FNDA:69,(anonymous_36) -FNDA:18,(anonymous_37) -FNDA:225,(anonymous_38) -DA:1,1 -DA:4,1 -DA:10,1 -DA:11,2784 -DA:12,390 -DA:13,22 -DA:15,368 -DA:18,2394 -DA:21,1 -DA:22,938 -DA:23,830 -DA:26,66 -DA:47,1 -DA:48,1029 -DA:51,1 -DA:52,440 -DA:53,0 -DA:55,0 -DA:56,0 -DA:58,440 -DA:59,440 -DA:61,440 -DA:62,1294 -DA:63,870 -DA:68,440 -DA:70,1 -DA:71,1216 -DA:72,996 -DA:73,220 -DA:74,220 -DA:75,220 -DA:76,220 -DA:77,220 -DA:80,67 -DA:81,67 -DA:82,67 -DA:83,67 -DA:84,67 -DA:85,67 -DA:86,67 -DA:87,67 -DA:88,67 -DA:89,67 -DA:90,67 -DA:91,67 -DA:92,67 -DA:93,67 -DA:94,67 -DA:96,67 -DA:97,67 -DA:98,67 -DA:99,67 -DA:100,10 -DA:102,67 -DA:104,1 -DA:105,954 -DA:106,27 -DA:107,927 -DA:108,89 -DA:109,80 -DA:110,31 -DA:113,58 -DA:117,67 -DA:118,828 -DA:119,828 -DA:120,828 -DA:121,4 -DA:122,828 -DA:123,255 -DA:124,573 -DA:125,69 -DA:127,504 -DA:130,67 -DA:131,844 -DA:132,69 -DA:134,775 -DA:137,67 -DA:138,603 -DA:141,67 -DA:142,13 -DA:143,13 -DA:144,13 -DA:145,12 -DA:148,1 -DA:149,1 -DA:150,2 -DA:151,1 -DA:154,1 -DA:155,1 -DA:157,13 -DA:158,13 -DA:161,67 -DA:162,19 -DA:164,1 -DA:167,18 -DA:168,18 -DA:169,8 -DA:170,8 -DA:171,6 -DA:172,6 -DA:174,2 -DA:177,10 -DA:178,8 -DA:179,8 -DA:182,2 -DA:185,18 -DA:186,18 -DA:190,67 -DA:191,844 -DA:192,844 -DA:193,844 -DA:194,844 -DA:195,4 -DA:197,844 -DA:201,67 -DA:202,67 -DA:212,67 -DA:222,67 -DA:223,67 -DA:226,67 -DA:228,67 -DA:229,73 -DA:230,73 -DA:231,4 -DA:232,69 -DA:233,69 -DA:234,69 -DA:237,0 -DA:238,0 -DA:239,0 -DA:243,67 -DA:244,81 -DA:245,81 -DA:246,81 -DA:247,81 -DA:249,81 -DA:250,44 -DA:251,44 -DA:252,44 -DA:257,81 -DA:258,26 -DA:259,26 -DA:260,25 -DA:261,25 -DA:262,16 -DA:263,16 -DA:266,26 -DA:267,10 -DA:269,81 -DA:272,67 -DA:273,65 -DA:274,65 -DA:275,65 -DA:278,67 -DA:279,1 -DA:280,1 -DA:283,67 -DA:284,3 -DA:285,3 -DA:287,3 -DA:288,3 -DA:295,67 -DA:296,67 -DA:299,67 -DA:300,5 -DA:301,5 -DA:308,67 -DA:315,66 -DA:322,225 -DA:323,3 -DA:324,3 -DA:326,3 -DA:327,3 -DA:336,66 -DA:341,24 -DA:342,24 -DA:348,66 -DA:350,225 -DA:351,147 -DA:352,69 -DA:353,11 -DA:354,11 -DA:358,225 -DA:359,2 -DA:360,223 -DA:361,16 -DA:362,16 -DA:363,6 -DA:364,2 -DA:367,16 -DA:371,225 -DA:372,225 -DA:373,225 -DA:374,225 -DA:375,225 -DA:376,225 -DA:377,225 -DA:378,225 -DA:379,225 -DA:380,225 -DA:381,18 -DA:384,225 -DA:385,225 -DA:386,225 -LF:204 -LH:198 -BRDA:11,1,0,390 -BRDA:11,1,1,2394 -BRDA:12,2,0,22 -BRDA:12,2,1,368 -BRDA:22,3,0,830 -BRDA:22,3,1,108 -BRDA:48,4,0,1029 -BRDA:48,4,1,928 -BRDA:52,5,0,0 -BRDA:52,5,1,440 -BRDA:53,6,0,0 -BRDA:53,6,1,0 -BRDA:58,7,0,440 -BRDA:58,7,1,0 -BRDA:59,8,0,440 -BRDA:59,8,1,440 -BRDA:62,9,0,870 -BRDA:62,9,1,424 -BRDA:62,10,0,1294 -BRDA:62,10,1,1294 -BRDA:62,11,0,1294 -BRDA:62,11,1,424 -BRDA:68,12,0,440 -BRDA:68,12,1,0 -BRDA:71,13,0,996 -BRDA:71,13,1,220 -BRDA:71,14,0,1216 -BRDA:71,14,1,1202 -BRDA:80,15,0,67 -BRDA:80,15,1,45 -BRDA:96,16,0,67 -BRDA:96,16,1,66 -BRDA:97,17,0,67 -BRDA:97,17,1,62 -BRDA:105,18,0,27 -BRDA:105,18,1,927 -BRDA:105,19,0,954 -BRDA:105,19,1,865 -BRDA:107,20,0,89 -BRDA:107,20,1,838 -BRDA:107,21,0,927 -BRDA:107,21,1,89 -BRDA:109,22,0,31 -BRDA:109,22,1,49 -BRDA:120,23,0,4 -BRDA:120,23,1,824 -BRDA:120,24,0,828 -BRDA:120,24,1,110 -BRDA:122,25,0,255 -BRDA:122,25,1,573 -BRDA:124,26,0,69 -BRDA:124,26,1,504 -BRDA:131,27,0,69 -BRDA:131,27,1,775 -BRDA:143,28,0,12 -BRDA:143,28,1,1 -BRDA:144,29,0,12 -BRDA:144,29,1,1 -BRDA:149,30,0,3 -BRDA:149,30,1,2 -BRDA:150,31,0,1 -BRDA:150,31,1,1 -BRDA:154,32,0,1 -BRDA:154,32,1,0 -BRDA:157,33,0,13 -BRDA:157,33,1,0 -BRDA:162,34,0,1 -BRDA:162,34,1,18 -BRDA:162,35,0,19 -BRDA:162,35,1,19 -BRDA:162,35,2,17 -BRDA:168,36,0,8 -BRDA:168,36,1,10 -BRDA:170,37,0,6 -BRDA:170,37,1,2 -BRDA:177,38,0,8 -BRDA:177,38,1,2 -BRDA:185,39,0,18 -BRDA:185,39,1,0 -BRDA:194,40,0,4 -BRDA:194,40,1,840 -BRDA:194,41,0,844 -BRDA:194,41,1,110 -BRDA:197,42,0,54 -BRDA:197,42,1,790 -BRDA:201,43,0,2 -BRDA:201,43,1,65 -BRDA:229,44,0,73 -BRDA:229,44,1,0 -BRDA:230,45,0,4 -BRDA:230,45,1,69 -BRDA:230,46,0,73 -BRDA:230,46,1,6 -BRDA:237,47,0,0 -BRDA:237,47,1,0 -BRDA:259,48,0,51 -BRDA:259,48,1,38 -BRDA:261,49,0,16 -BRDA:261,49,1,9 -BRDA:266,50,0,10 -BRDA:266,50,1,16 -BRDA:279,51,0,1 -BRDA:279,51,1,0 -BRDA:299,52,0,5 -BRDA:299,52,1,62 -BRDA:350,53,0,147 -BRDA:350,53,1,78 -BRDA:352,54,0,11 -BRDA:352,54,1,58 -BRDA:358,55,0,2 -BRDA:358,55,1,223 -BRDA:358,56,0,225 -BRDA:358,56,1,209 -BRDA:360,57,0,16 -BRDA:360,57,1,207 -BRDA:363,58,0,2 -BRDA:363,58,1,4 -BRDA:373,59,0,176 -BRDA:373,59,1,49 -BRF:119 -BRH:107 -end_of_record