[TIC-UI] Implementing package selection in package page 79/103779/4
authorChangHyun Lee <leechwin.lee@samsung.com>
Fri, 9 Dec 2016 10:59:54 +0000 (19:59 +0900)
committerChangHyun Lee <leechwin.lee@samsung.com>
Mon, 12 Dec 2016 01:53:56 +0000 (10:53 +0900)
Signed-off-by: ChangHyun Lee <leechwin.lee@samsung.com>
Change-Id: I2ec3748956771c85d6ee545140118c4a443cd7ef

bower.json
gulpfile.js
public/src/css/style.css
public/src/index.html
public/src/js/main.js
public/src/js/page/image.js
public/src/js/page/package.js
public/src/js/page/settings.js
public/src/js/util.js
public/src/lib/bootstrap-treeview/bootstrap-treeview.min.css
public/src/lib/bootstrap-treeview/bootstrap-treeview.min.js

index c301780..c29fb4b 100644 (file)
@@ -26,6 +26,7 @@
     "lodash": ">= 4.17.2",
     "jquery": "~3.1.1",
     "bootstrap": ">= 3.0.0",
-    "bootstrap-treeview": "https://github.com/jonmiles/bootstrap-treeview.git#develop"
+    "bootstrap-treeview": "https://github.com/skateman/bootstrap-treeview.git#master",
+    "components-font-awesome": "~4.7.0"
   }
 }
index cc326e3..18b310e 100644 (file)
@@ -14,7 +14,9 @@ gulp.task('copy', ['clean'], function() {
     var jquery = gulp.src('bower_components/jquery/dist/**/*').pipe(gulp.dest('public/src/lib/jquery'));
     var bootstrap = gulp.src('bower_components/bootstrap/dist/**/*').pipe(gulp.dest('public/src/lib/bootstrap'));
     var bootstrapTreeview = gulp.src('bower_components/bootstrap-treeview/dist/**/*').pipe(gulp.dest('public/src/lib/bootstrap-treeview'));
-    return merge(requirejs, lodash, jquery, bootstrap, bootstrapTreeview);
+    var componentsFontAwesomeCss = gulp.src('bower_components/components-font-awesome/css/**/*').pipe(gulp.dest('public/src/lib/components-font-awesome/css'));
+    var componentsFontAwesomeFont = gulp.src('bower_components/components-font-awesome/fonts/**/*').pipe(gulp.dest('public/src/lib/components-font-awesome/fonts'));
+    return merge(requirejs, lodash, jquery, bootstrap, bootstrapTreeview, componentsFontAwesomeCss, componentsFontAwesomeFont);
 });
 
 // deploy to dist
index 6546c8b..f97e6f0 100644 (file)
@@ -33,11 +33,13 @@ html {
   }
 }
 
+/* Modal Dialog */
 .modal-dialog {
   display: inline-block;
   text-align: left;
   vertical-align: middle;
 }
+
 /* Main Navigator Bar */
 .navbar-brand {
     padding: 10px 15px;
@@ -57,6 +59,7 @@ html {
     background: #e1e1e1;
 }
 
+
 /* Package Page */
 #tic-package-left-col-tree-toolbar, #tic-package-left-col-tree {
     padding-top: 10px;
@@ -68,17 +71,26 @@ html {
     overflow: auto;
 }
 
+#tic-package-left-col-tree .list-group-item {
+    padding: 3px 10px;
+}
+
 /* TODO: Height of Treeview, Package Information and Summary grid in Package Page */
 #tic-package-info-table {
-    height: 50vh;
+    height: 43.7vh;
     display: inline-block;
     position: relative;
     overflow: auto;
-
 }
-#tic-package-info-dependency {
+
+#tic-package-summary {
+    height: 20vh;
+    display: inline-block;
+    position: relative;
+    overflow: auto;
 }
 
+
 /* Image Page */
 #tic-image-section {
     height: 100%;
@@ -86,6 +98,14 @@ html {
     background: #e1e1e1;
 }
 
+#tic-image-summary {
+    height: 70vh;
+    display: inline-block;
+    position: relative;
+    overflow: auto;
+}
+
+
 /* Settings Page */
 #tic-settings-section {
     height: 100%;
index ce46c11..c4663e1 100644 (file)
@@ -10,6 +10,7 @@
         <link rel="shortcut icon" href="/image/tizen.ico">
         <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.css">
         <link rel="stylesheet" href="/lib/bootstrap-treeview/bootstrap-treeview.min.css">
+        <link rel="stylesheet" href="/lib/components-font-awesome/css/font-awesome.min.css">
         <link rel="stylesheet" href="/css/style.css">
         <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
         <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
                             <div class="panel-body">
                                 <table id="tic-package-info-table" class="table table-condensed">
                                     <tbody>
-                                        <tr><td>Name</td><td id="tic-package-info-name"></td></tr>
+                                        <tr><td>Name</td><td id="tic-package-info-text"></td></tr>
                                         <tr><td>Version</td><td id="tic-package-info-version"></td></tr>
                                         <tr><td>Architecture</td><td id="tic-package-info-arch"></td></tr>
                                         <tr><td>Size</td><td id="tic-package-info-size"></td></tr>
                         <div class="panel panel-primary">
                             <div class="panel-heading">Summary</div>
                             <div class="panel-body">
-                                <h1>Bla Bla Bla...</h1>
-                                <h1>Image Size: Bla...</h1>
+                                <table id="tic-package-summary" class="table table-condensed">
+                                    <tbody>
+                                        <tr><td>Image Size</td><td id="tic-package-image-size"></td></tr>
+                                        <tr><td>Image Installed Size</td><td id="tic-package-image-installed-size"></td></tr>
+                                        <tr><td>Number of Packages</td><td id="tic-package-count"></td></tr>
+                                        <tr><td>Package List</td><td id="tic-package-list"></td></tr>
+                                    </tbody>
+                                </table>
                             </div>
                             <div class="panel-footer">
-                                <a type="button" class="btn btn-default" href="#tic-image-section">Create Image</a>
+                                <a type="button" id="tic-package-create" class="btn btn-primary" href="#tic-image-section">Create Image</a>
                             </div>
                         </div>
                     </div><!-- /End Package Right Column -->
                         <div class="panel panel-primary">
                             <div class="panel-heading">Image</div>
                             <div class="panel-body">
-                                <h1>TODO</h1>
-                                <h1>Bla Bla Bla...</h1>
-                                <h1>Image Size: Bla...</h1>
+                                <table id="tic-image-summary" class="table table-condensed">
+                                    <tbody>
+                                        <tr><td>Image Size</td><td id="tic-image-image-size"></td></tr>
+                                        <tr><td>Image Installed Size</td><td id="tic-image-image-installed-size"></td></tr>
+                                        <tr><td>Number of Packages</td><td id="tic-image-package-count"></td></tr>
+                                        <tr><td>Package List</td><td id="tic-image-package-list"></td></tr>
+                                    </tbody>
+                                </table>
                             </div>
                             <div class="panel-footer">
-                                <a type="button" class="btn btn-default" href="#tic-image-section">Create Image</a>
+                                <button type="button" id="tic-image-create" class="btn btn-primary">Create Image</button>
                             </div>
                         </div>
                     </div><!-- /End Image Column -->
 
         <!-- Loading Dialog -->
         <div class="modal fade" id="tic-load-dialog" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static">
+            <i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i>
+        </div><!-- /End Loading Dialog -->
+
+        <!-- Alert Dialog -->
+         <div class="modal fade" id="tic-alert-dialog" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static">
             <div class="modal-dialog modal-sm">
                 <div class="modal-content">
-                    <div class="modal-header">
-                        <h4 class="modal-title"><span class="glyphicon glyphicon-time"/></span> Loading...</h4>
-                    </div>
                     <div class="modal-body">
-                        <div class="progress">
-                            <div class="progress-bar progress-bar-striped active" style="width: 100%"/>
-                        </div>
+                        <p id="tic-alert-content"></p>
                     </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
+                </div>
                 </div>
             </div>
-        </div><!-- /End Loading Dialog -->
-
-        <!-- TODO: Alert Dialog -->
-        <div class="alert alert-danger fade in">
-        <!-- /End Alert Dialog -->
-
+        </div>><!-- /End Alert Dialog -->
 
         <!-- library loading -->
         <script src="/socket.io/socket.io.js"></script>
index cce6b94..0cd6076 100644 (file)
@@ -3,15 +3,16 @@ define([
     'bootstrap',
     'bootstrap-treeview',
     'js/util',
+    'js/page/package',
     'js/page/settings',
-    'js/page/package'
+    'js/page/image'
 ], function (
     $,
     bootstrap,
-    bst,
+    bootstrapTreeview,
     Util,
-    Settings,
-    Package
+    Package,
+    Settings
 ) {
     'use strict';
 
@@ -20,9 +21,6 @@ define([
 
         Util.setAnimateScroll();
 
-        Settings.init();
-        Package.init();
-
         /* client - socket test */
         var socket = io.connect();
         socket.on('connect', function () {
@@ -33,7 +31,18 @@ define([
     $(document).ready(function () {
         init();
 
-        Settings.updatePackage();
+        // TODO: refactoring
+        Util.showLoadingDialog(true);
+        Settings.updatePackage()
+        .then(function (data) {
+            Package.updatePackageTree(data)
+            // TODO: Util.showLoadingDialog(false) after Package.updatePackageTree(data)
+        })
+        .catch(function (reason) {
+            console.error(reason);
+            Util.showLoadingDialog(false);
+        });
+
     });
 
 });
index 3edbd53..85dcd13 100644 (file)
@@ -7,12 +7,49 @@ define([
 ) {
     'use strict';
 
+    function updateSummary() {
+        var pacakgeImageSize = $('#tic-image-image-size').empty();
+        var packageImageInstalledSize = $('#tic-image-image-installed-size').empty();
+        var packageCount = $('#tic-image-package-count').empty();
+        var packageList = $('#tic-image-package-list').empty();
+
+        var list = require('js/page/package').getCheckedPackages();
+        var count = _.size(list);
+        var imageSize = _.sumBy(list, function getImageSize(item) {
+            return _.toNumber(item.size);
+        });
+        var imageInstalledSize = _.sumBy(list, function getImageInstalled(item) {
+            return _.toNumber(item.installed);
+        });
+
+        if (_.isNumber(imageSize)) {
+            pacakgeImageSize.html(Util.bytesToSize(imageSize));
+        }
+        if (_.isNumber(imageInstalledSize)) {
+            packageImageInstalledSize.html(Util.bytesToSize(imageInstalledSize));
+        }
+        if (_.isNumber(count)) {
+            packageCount.html(count);
+        }
+        if (!_.isEmpty(list)) {
+            packageList.html(_.orderBy(_.map(list, 'text')).join('<br>'));
+        }
+
+        $('#tic-image-create').prop('disabled', count === 0);
+    }
+
     function init() {
-        // TODO
+        console.log('image: init');
     }
 
+    init();
+
     return {
-        init : init
+        /**
+         * Update summary in image page
+         * @method updateSummary
+         */
+        updateSummary: updateSummary
     }
 
 });
\ No newline at end of file
index 45657a0..1767540 100644 (file)
@@ -12,36 +12,69 @@ define([
     'use strict';
 
     var $tree = $('#tic-package-left-col-tree');
+    var packages = [];
 
-    function init() {
-        console.log('package: init');
+    function _getChecked() {
+        return _.filter(packages, ['state.checked', true]);
+    }
 
-        function filter() {
-            var filterText = $('#tic-package-left-col-tree-toolbar-filter').val();
-            var matchNodes = $tree.treeview('search', [ filterText, {
-                ignoreCase: true,     // case insensitive
-                exactMatch: false,    // like or equals
-                revealResults: true,  // reveal matching nodes
-            }]);
-            // TODO: matchNodes
+    function _find(name, data) {
+        if (_.isEmpty(data)) {
+            data = packages;
         }
-        $('#tic-package-left-col-tree-toolbar-filter').on('input', filter);
+        return _.find(data, {'text' : name});
+    }
 
-        function collapseAll() {
-            $tree.treeview('collapseAll');
+    function _findTreeNode(name) {
+        var regular = name.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
+        return $tree.treeview('findNodes', [  '^' + regular + '$' ])[0];
+    }
+
+    /**
+     * Summary page
+     */
+    function _updateSummary() {
+        var pacakgeImageSize = $('#tic-package-image-size').empty();
+        var packageImageInstalledSize = $('#tic-package-image-installed-size').empty();
+        var packageCount = $('#tic-package-count').empty();
+        var packageList = $('#tic-package-list').empty();
+
+        var list = _getChecked();
+        var count = _.size(list);
+        var imageSize = _.sumBy(list, function getImageSize(item) {
+            return _.toNumber(item.size);
+        });
+        var imageInstalledSize = _.sumBy(list, function getImageInstalled(item) {
+            return _.toNumber(item.installed);
+        });
+
+        if (_.isNumber(imageSize)) {
+            pacakgeImageSize.html(Util.bytesToSize(imageSize));
+        }
+        if (_.isNumber(imageInstalledSize)) {
+            packageImageInstalledSize.html(Util.bytesToSize(imageInstalledSize));
+        }
+        if (_.isNumber(count)) {
+            packageCount.html(count);
+        }
+        if (!_.isEmpty(list)) {
+            packageList.html(_.orderBy(_.map(list, 'text')).join('<br>'));
         }
-        $('#tic-package-left-col-tree-toolbar-collapse-all').on('click', collapseAll);
 
-        function expandAll() {
-            $tree.treeview('expandAll');
+        if (count === 0) {
+            $('#tic-package-create').addClass('disabled');
+        } else {
+            $('#tic-package-create').removeClass('disabled');
         }
-        $('#tic-package-left-col-tree-toolbar-expand-all').on('click', expandAll);
 
-        $tree.on('nodeSelected', nodeSelected);
+        require('js/page/image').updateSummary();
     }
 
-    function nodeSelected(event, node) {
-        var name = $('#tic-package-info-name').empty();
+    /**
+     * Treeview: A node is selected.
+     */
+    function _nodeSelected(event, node) {
+        var text = $('#tic-package-info-text').empty();
         var version = $('#tic-package-info-version').empty();
         var arch = $('#tic-package-info-arch').empty();
         var size = $('#tic-package-info-size').empty();
@@ -50,8 +83,8 @@ define([
         var description = $('#tic-package-info-description').empty();
         var dependency = $('#tic-package-info-dependency').empty();
 
-        if (!_.isEmpty(node.name)) {
-            name.html(node.name);
+        if (!_.isEmpty(node.text)) {
+            text.html(node.text);
         }
         if (!_.isEmpty(node.version)) {
             version.html(node.version);
@@ -73,21 +106,209 @@ define([
         }
         if (!_.isEmpty(node.dependency)) {
             // TODO: remove dependency ui in div and apply scroll ui
-            dependency.html(node.dependency.join('\r\n'));
+            dependency.html(_.orderBy(node.dependency).join('<br>'));
+        }
+    }
+
+    /**
+     * Treeview: A node is checked.
+     */
+    function _onNodeChecked(event, node) {
+        if (_find(node.text).state.checked === true) {
+            $tree.treeview('uncheckNode', [node, { silent: false }]);
+            return;
+        }
+
+        console.info('checked: ' + node.text);
+
+        _nodeSelected(event, node);
+
+        var localNode = _find(node.text);
+        localNode.selfChecked = true;
+        localNode.state.checked = true;
+
+        var toggleNode = [];
+        if (!_.isEmpty(localNode.dependency) && localNode.dependency.length > 0) {
+            _.forEach(localNode.dependency, function(name) {
+                var depNode = _find(name);
+                if (depNode.state.checked === false) {
+                    toggleNode.push(depNode);
+                }
+                // TODO: Can not find dependency package
+            });
+            $tree.treeview('checkNode', [toggleNode, { silent: true }]);
+
+            // update local data
+            _.forEach(toggleNode, function(node) {
+                node.state.checked = true;
+            });
+            _updateSummary();
+        }
+    }
+
+    /**
+     * Treeview: A node is unchecked.
+     */
+    function _onNodeUnchecked(event, node) {
+        if (_find(node.text).state.checked === false) {
+            $tree.treeview('checkNode', [node, { silent: false }]);
+            return;
+        }
+
+        console.info('unchecked: ' + node.text);
+
+        // TODO: Refactoring
+        var localNode = _find(node.text);
+        var checkedData = _getChecked();
+
+        // check reference node
+        var checkedRefNode = [];
+        if (!_.isEmpty(localNode.reference)) {
+            _.forEach(localNode.reference, function(name) {
+                var refNode = _find(name, checkedData);
+                if (!_.isEmpty(refNode) && !_.isEqual(refNode.text, localNode.text)) {
+                    checkedRefNode.push(refNode);
+                }
+            });
+            if (!_.isEmpty(checkedRefNode)) {
+                Util.showAlertDialog('\'' +localNode.text + '\'' +' package repuired from ' + '\'' + _.toString(_.map(checkedRefNode, 'text')) + '\'');
+
+                // cancel for unchecked
+                $tree.treeview('checkNode', [node, { silent: true }]);
+                localNode.state.checked = true;
+                _updateSummary();
+                return;
+            }
+        }
+
+        // check dependency node
+        var toggleNode = [];
+        if (!_.isEmpty(localNode.dependency) && localNode.dependency.length > 0 && localNode.selfChecked === true) {
+            _.forEach(localNode.dependency, function(name) {
+                var depNode = _find(name);
+                if (!_.isEqual(localNode.text, depNode.text)) {
+                    if (depNode.state.checked === true) {
+                        if (depNode.selfChecked === true) {
+                            console.warn('\'' + depNode.text + '\'' + ' package was still checked because user checked item.');
+                        } else {
+                            toggleNode.push(depNode);
+                        }
+                    }
+                }
+            });
+
+            // check reference of dependency node
+            var checkedRefNode2 = [];
+            _.forEach(toggleNode, function(node) {
+                if (!_.isEmpty(node.reference)) {
+                    checkedRefNode2.push(node);
+                    _.forEach(node.reference, function(name) {
+                        var refNode = _find(name);
+                        if (!_.isEqual(refNode.text, node.text) && !_.isEqual(refNode.text, localNode.text)) {
+                            if (refNode.state.checked === true && refNode.selfChecked === true) {
+                                checkedRefNode2.pop();
+                                return false;
+                            }
+                        }
+                    });
+                }
+            });
+
+            $tree.treeview('uncheckNode', [checkedRefNode2, { silent: true }]);
+            _.forEach(checkedRefNode2, function(node) {
+                node.state.checked = false;
+            });
+            localNode.state.checked = false;
+            localNode.selfChecked = false;
+            _updateSummary();
         }
     }
 
+    /**
+     * Treeview: Initialize tree data.
+     */
     function updatePackageTree(packageData) {
+        function _onRendered(event, nodes) {
+            packages = _.uniqBy(_.values(nodes), 'text');
+            _.forEach(packages, function(node) {
+                _.forEach(node.dependency, function(name) {
+                    var depNode = _.find(packages, {'text' : name});
+                    depNode.selfChecked = false;
+                    if (_.isEmpty(depNode.reference)) {
+                        depNode.reference = [];
+                    }
+                    if (!_.isEqual(depNode.text, node.text)) {
+                        depNode.reference.push(node.text);
+                    }
+                });
+            });
+            _updateSummary();
+            Util.showLoadingDialog(false);
+        }
+        function _onNodeUnselected(event, node) {
+            $('#tic-package-info-text').empty();
+            $('#tic-package-info-version').empty();
+            $('#tic-package-info-arch').empty();
+            $('#tic-package-info-size').empty();
+            $('#tic-package-info-installed-size').empty();
+            $('#tic-package-info-summary').empty();
+            $('#tic-package-info-description').empty();
+            $('#tic-package-info-dependency').empty();
+        }
+
         $tree.treeview({
             data: packageData,
             showIcon: false,
             showCheckbox: true,
-            onNodeSelected: nodeSelected
+            onRendered: _onRendered,
+            onNodeSelected: _nodeSelected,
+            onNodeUnselected: _onNodeUnselected,
+            onNodeChecked: _onNodeChecked,
+            onNodeUnchecked: _onNodeUnchecked
         });
     }
 
+    function init() {
+        console.log('package: init');
+
+        function _filter() {
+            var filterText = $('#tic-package-left-col-tree-toolbar-filter').val();
+            var matchNodes = $tree.treeview('search', [ filterText, {
+                ignoreCase: true,     // case insensitive
+                exactMatch: false,    // like or equals
+                revealResults: true,  // reveal matching nodes
+            }]);
+            // TODO: matchNodes show and hide
+        }
+        $('#tic-package-left-col-tree-toolbar-filter').on('input', _filter);
+
+        function _collapseAll() {
+            $tree.treeview('collapseAll');
+        }
+        $('#tic-package-left-col-tree-toolbar-collapse-all').on('click', _collapseAll);
+
+        function _expandAll() {
+            $tree.treeview('expandAll');
+        }
+        $('#tic-package-left-col-tree-toolbar-expand-all').on('click', _expandAll);
+
+    }
+
+    init();
+
     return {
-        init : init,
-        updatePackageTree : updatePackageTree
+        /**
+         * Initialize for treeview
+         * @method updatePackageTree
+         * @param {array} array of objects
+         */
+        updatePackageTree: updatePackageTree,
+
+        /**
+         * Get checked package nodes
+         * @method getCheckedPackages
+         * @return {array} array of objects
+         */
+        getCheckedPackages: _getChecked
     }
-});
\ No newline at end of file
+});
index 561a260..1fac6b6 100644 (file)
@@ -1,23 +1,25 @@
 define([
     'jquery',
     'lodash',
-    'js/util',
-    'js/page/package'
+    'js/util'
 ], function (
     $,
     _,
-    Util,
-    Package
+    Util
 ) {
     'use strict';
 
-    var repoStore = []; // {order, url}
-    var recipeStore = []; // TODO:
-    var packageData;
+    function SettingsData() {
+        var self = this;
+        self.repoStore = []; // {order, url}
+        self.recipeStore = []; // TODO:
+        self.packageData = [];
+    }
+    var Data = new SettingsData();
 
-    // FIXME: 172.21.110.103:59001
+    // FIXME: query to server
+    // var TIC_CORE_URL = 'http://172.21.110.103:59001';
     var TIC_CORE_URL = 'http://172.21.17.231:59001';
-    // var TIC_CORE_URL = location.origin;
     var TIC_CORE_QUERY_URL = TIC_CORE_URL + '/analysis';
 
     /* FIXME: */
@@ -29,12 +31,12 @@ define([
         order: 2,
         url: "https://download.tizen.org/snapshots/tizen/mobile/latest/repos/arm64-wayland/packages"
     }
-    repoStore.push(baseRepo);
-    repoStore.push(mobileRepo);
+    Data.repoStore.push(baseRepo);
+    Data.repoStore.push(mobileRepo);
 
 
     var postBody = {
-        repos : _.map(_.orderBy(repoStore, ['order']), 'url'),
+        repos : _.map(_.orderBy(Data.repoStore, ['order']), 'url'),
         recipes : []
     };
 
@@ -44,48 +46,44 @@ define([
     }
 
     function updatePackage() {
-        Util.showLoadingDialog(true);
+        /* local json data loading test */
+        /*
+        return new Promise(function (resolve, reject) {
+            $.ajax({
+                url: "./temp/tempData.json",
+                dataType: "json",
+                success: function(rawData) {
+                    Data.packageData = rawData;
+                    resolve(rawData);
+                }
+            });
+        });
+        */
 
-        $.ajax({
-            contentType: 'text/plain',
-            data: JSON.stringify(postBody),
-            dataType: 'json',
-            success: function(rawData) {
-                packageData = rawData.data;
-                Package.updatePackageTree(packageData);
-                Util.showLoadingDialog(false);
-            },
-            error: function(err) {
-                /* local json data loading test */
-                /*
-                $.ajax({
-                    url: "./temp/tempData.json",
-                    dataType: "json",
-                    success: function(data) {
-                        $('#tic-package-left-col-tree').treeview({
-                            data: data,
-                            showIcon: false,
-                            showCheckbox: true
-                        });
-                    }
-                });
-                */
-                Util.showLoadingDialog(false);
-            },
-            processData: false,
-            type: 'POST',
-            url: TIC_CORE_QUERY_URL
+        return new Promise(function (resolve, reject) {
+            $.ajax({
+                contentType: 'text/plain',
+                data: JSON.stringify(postBody),
+                dataType: 'json',
+                success: function(rawData) {
+                    Data.packageData = rawData.data;
+                    resolve(rawData.data);
+                },
+                error: function(err) {
+                    reject(err);
+                },
+                processData: false,
+                type: 'POST',
+                url: TIC_CORE_QUERY_URL
+            });
         });
     }
 
-    function getPackageData() {
-        return packageData;
-    }
+    init();
 
     return {
-        init : init,
-        updatePackage : updatePackage,
-        getPackageData : getPackageData
+        updatePackage: updatePackage,
+        Data: Data
     }
 
-});
\ No newline at end of file
+});
index 7c63b55..b93fbdb 100644 (file)
@@ -1,5 +1,5 @@
 define([
-    'jquery'
+    'jquery',
 ], function (
     $
 ) {
@@ -22,6 +22,11 @@ define([
         }
     }
 
+    function showAlertDialog(content) {
+        $('#tic-alert-content').text(content);
+        $('#tic-alert-dialog').modal('show');
+    }
+
     function bytesToSize(bytes) {
         var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
         if (bytes == 0) {
@@ -34,19 +39,31 @@ define([
     return {
         /**
          * Set smooth scrolling, one page websites
+         * @method setAnimateScroll
          */
-        setAnimateScroll : setAnimateScroll,
+        setAnimateScroll: setAnimateScroll,
 
         /**
          * Display or hide the loading dialog.
+         * @method showLoadingDialog
+         * @param {boolean} display flag
+         */
+        showLoadingDialog: showLoadingDialog,
+
+        /**
+         * Display the alert dialog.
+         * @method showAlertDialog
+         * @param {string} content in dialog
          */
-        showLoadingDialog : showLoadingDialog,
+        showAlertDialog: showAlertDialog,
 
         /*
-         * Convert size in bytes to KB, MB, GB
+         * Convert size in bytes to KB, MB, GB, TB
          * {@link http://stackoverflow.com/questions/15900485/correct-way-to-convert-size-in-bytes-to-kb-mb-gb-in-javascript}
+         * @method bytesToSize
+         * @param {number} byte number
          */
-        bytesToSize : bytesToSize
+        bytesToSize: bytesToSize
     }
 
 });
\ No newline at end of file
index b64a53b..6c3b921 100644 (file)
@@ -1 +1 @@
-.treeview .list-group-item{cursor:pointer}.treeview span.indent{margin-left:10px;margin-right:10px}.treeview span.icon{width:12px;margin-right:5px}.treeview .node-disabled{color:silver;cursor:not-allowed}.treeview .node-hidden{display:none}
\ No newline at end of file
+.treeview .list-group-item{cursor:pointer}.treeview span.indent{margin-left:10px;margin-right:10px}.treeview span.icon,.treeview span.image{width:12px;margin-right:5px}.treeview .node-disabled{color:silver;cursor:not-allowed}.treeview .node-hidden{display:none}.treeview span.image{display:inline-block;height:1.19em;vertical-align:middle;background-size:contain;background-repeat:no-repeat;line-height:1em}
\ No newline at end of file
index e86b764..4a5fd0c 100644 (file)
@@ -1 +1 @@
-!function(a,b,c,d){"use strict";var e="treeview",f={};f.settings={injectStyle:!0,levels:2,expandIcon:"glyphicon glyphicon-plus",collapseIcon:"glyphicon glyphicon-minus",emptyIcon:"glyphicon",nodeIcon:"",selectedIcon:"",checkedIcon:"glyphicon glyphicon-check",uncheckedIcon:"glyphicon glyphicon-unchecked",color:d,backColor:d,borderColor:d,onhoverColor:"#F5F5F5",selectedColor:"#FFFFFF",selectedBackColor:"#428bca",searchResultColor:"#D9534F",searchResultBackColor:d,highlightSelected:!0,highlightSearchResults:!0,showBorder:!0,showIcon:!0,showCheckbox:!1,showTags:!1,multiSelect:!1,preventUnselect:!1,onLoading:d,onLoadingFailed:d,onInitialized:d,onNodeRendered:d,onRendered:d,onDestroyed:d,onNodeChecked:d,onNodeCollapsed:d,onNodeDisabled:d,onNodeEnabled:d,onNodeExpanded:d,onNodeSelected:d,onNodeUnchecked:d,onNodeUnselected:d,onSearchComplete:d,onSearchCleared:d},f.options={silent:!1,ignoreChildren:!1},f.searchOptions={ignoreCase:!0,exactMatch:!1,revealResults:!0},f.dataUrl={method:"GET",dataType:"json",cache:!1};var g=function(b,c){return this.$element=a(b),this._elementId=b.id,this._styleId=this._elementId+"-style",this._init(c),{options:this._options,init:a.proxy(this._init,this),remove:a.proxy(this._remove,this),findNodes:a.proxy(this.findNodes,this),getNodes:a.proxy(this.getNodes,this),getParents:a.proxy(this.getParents,this),getSiblings:a.proxy(this.getSiblings,this),getSelected:a.proxy(this.getSelected,this),getUnselected:a.proxy(this.getUnselected,this),getExpanded:a.proxy(this.getExpanded,this),getCollapsed:a.proxy(this.getCollapsed,this),getChecked:a.proxy(this.getChecked,this),getUnchecked:a.proxy(this.getUnchecked,this),getDisabled:a.proxy(this.getDisabled,this),getEnabled:a.proxy(this.getEnabled,this),addNode:a.proxy(this.addNode,this),addNodeAfter:a.proxy(this.addNodeAfter,this),addNodeBefore:a.proxy(this.addNodeBefore,this),removeNode:a.proxy(this.removeNode,this),updateNode:a.proxy(this.updateNode,this),selectNode:a.proxy(this.selectNode,this),unselectNode:a.proxy(this.unselectNode,this),toggleNodeSelected:a.proxy(this.toggleNodeSelected,this),collapseAll:a.proxy(this.collapseAll,this),collapseNode:a.proxy(this.collapseNode,this),expandAll:a.proxy(this.expandAll,this),expandNode:a.proxy(this.expandNode,this),toggleNodeExpanded:a.proxy(this.toggleNodeExpanded,this),revealNode:a.proxy(this.revealNode,this),checkAll:a.proxy(this.checkAll,this),checkNode:a.proxy(this.checkNode,this),uncheckAll:a.proxy(this.uncheckAll,this),uncheckNode:a.proxy(this.uncheckNode,this),toggleNodeChecked:a.proxy(this.toggleNodeChecked,this),disableAll:a.proxy(this.disableAll,this),disableNode:a.proxy(this.disableNode,this),enableAll:a.proxy(this.enableAll,this),enableNode:a.proxy(this.enableNode,this),toggleNodeDisabled:a.proxy(this.toggleNodeDisabled,this),search:a.proxy(this.search,this),clearSearch:a.proxy(this.clearSearch,this)}};g.prototype._init=function(b){this._tree=[],this._initialized=!1,this._options=a.extend({},f.settings,b),this._destroy(),this._subscribeEvents(),this._triggerEvent("loading",null,f.options),this._load(b).then(a.proxy(function(b){return this._tree=a.extend(!0,[],b)},this),a.proxy(function(a){this._triggerEvent("loadingFailed",a,f.options)},this)).then(a.proxy(function(a){return this._setInitialStates({nodes:a},0)},this)).then(a.proxy(function(){this._render()},this))},g.prototype._load=function(b){var c=new a.Deferred;return b.data?this._loadLocalData(b,c):b.dataUrl&&this._loadRemoteData(b,c),c.promise()},g.prototype._loadRemoteData=function(b,c){a.ajax(a.extend(!0,{},f.dataUrl,b.dataUrl)).done(function(a){c.resolve(a)}).fail(function(a,b,d){c.reject(d)})},g.prototype._loadLocalData=function(b,c){c.resolve("string"==typeof b.data?a.parseJSON(b.data):a.extend(!0,[],b.data))},g.prototype._remove=function(){this._destroy(),a.removeData(this,e),a("#"+this._styleId).remove()},g.prototype._destroy=function(){this._initialized&&(this._initialized=!1,this._triggerEvent("destroyed",null,f.options),this._unsubscribeEvents(),this.$wrapper.remove(),this.$wrapper=null)},g.prototype._unsubscribeEvents=function(){this.$element.off("loading"),this.$element.off("loadingFailed"),this.$element.off("initialized"),this.$element.off("nodeRendered"),this.$element.off("rendered"),this.$element.off("destroyed"),this.$element.off("click"),this.$element.off("nodeChecked"),this.$element.off("nodeCollapsed"),this.$element.off("nodeDisabled"),this.$element.off("nodeEnabled"),this.$element.off("nodeExpanded"),this.$element.off("nodeSelected"),this.$element.off("nodeUnchecked"),this.$element.off("nodeUnselected"),this.$element.off("searchComplete"),this.$element.off("searchCleared")},g.prototype._subscribeEvents=function(){this._unsubscribeEvents(),"function"==typeof this._options.onLoading&&this.$element.on("loading",this._options.onLoading),"function"==typeof this._options.onLoadingFailed&&this.$element.on("loadingFailed",this._options.onLoadingFailed),"function"==typeof this._options.onInitialized&&this.$element.on("initialized",this._options.onInitialized),"function"==typeof this._options.onNodeRendered&&this.$element.on("nodeRendered",this._options.onNodeRendered),"function"==typeof this._options.onRendered&&this.$element.on("rendered",this._options.onRendered),"function"==typeof this._options.onDestroyed&&this.$element.on("destroyed",this._options.onDestroyed),this.$element.on("click",a.proxy(this._clickHandler,this)),"function"==typeof this._options.onNodeChecked&&this.$element.on("nodeChecked",this._options.onNodeChecked),"function"==typeof this._options.onNodeCollapsed&&this.$element.on("nodeCollapsed",this._options.onNodeCollapsed),"function"==typeof this._options.onNodeDisabled&&this.$element.on("nodeDisabled",this._options.onNodeDisabled),"function"==typeof this._options.onNodeEnabled&&this.$element.on("nodeEnabled",this._options.onNodeEnabled),"function"==typeof this._options.onNodeExpanded&&this.$element.on("nodeExpanded",this._options.onNodeExpanded),"function"==typeof this._options.onNodeSelected&&this.$element.on("nodeSelected",this._options.onNodeSelected),"function"==typeof this._options.onNodeUnchecked&&this.$element.on("nodeUnchecked",this._options.onNodeUnchecked),"function"==typeof this._options.onNodeUnselected&&this.$element.on("nodeUnselected",this._options.onNodeUnselected),"function"==typeof this._options.onSearchComplete&&this.$element.on("searchComplete",this._options.onSearchComplete),"function"==typeof this._options.onSearchCleared&&this.$element.on("searchCleared",this._options.onSearchCleared)},g.prototype._triggerEvent=function(b,c,d){d&&!d.silent&&this.$element.trigger(b,a.extend(!0,{},c))},g.prototype._setInitialStates=function(b,c){return this._nodes={},a.when.apply(this,this._setInitialState(b,c)).done(a.proxy(function(){this._orderedNodes=this._sortNodes(),this._triggerEvent("initialized",this._orderedNodes,f.options)},this))},g.prototype._setInitialState=function(b,c,d){if(b.nodes){c+=1,d=d||[];var e=b;return a.each(b.nodes,a.proxy(function(b,f){var g=new a.Deferred;d.push(g.promise()),f.level=c,f.index=b,f.nodeId=e&&e.nodeId?e.nodeId+"."+f.index:c-1+"."+f.index,f.parentId=e.nodeId,f.hasOwnProperty("selectable")||(f.selectable=!0),f.state=f.state||{},f.state.hasOwnProperty("checked")||(f.state.checked=!1),f.state.hasOwnProperty("disabled")||(f.state.disabled=!1),f.state.hasOwnProperty("expanded")||(!f.state.disabled&&c<this._options.levels&&f.nodes&&f.nodes.length>0?f.state.expanded=!0:f.state.expanded=!1),f.state.hasOwnProperty("selected")||(f.state.selected=!1),e&&e.state&&e.state.expanded||c<=this._options.levels?f.state.visible=!0:f.state.visible=!1,f.nodes&&(f.nodes.length>0?this._setInitialState(f,c,d):delete f.nodes),this._nodes[f.nodeId]=f,g.resolve()},this)),d}},g.prototype._sortNodes=function(){return a.map(Object.keys(this._nodes).sort(),a.proxy(function(a,b){return this._nodes[a]},this))},g.prototype._clickHandler=function(b){var c=a(b.target),d=this.targetNode(c);if(d&&!d.state.disabled){var e=c.attr("class")?c.attr("class").split(" "):[];-1!==e.indexOf("expand-icon")?this._toggleExpanded(d,a.extend({},f.options)):-1!==e.indexOf("check-icon")?this._toggleChecked(d,a.extend({},f.options)):d.selectable?this._toggleSelected(d,a.extend({},f.options)):this._toggleExpanded(d,a.extend({},f.options))}},g.prototype.targetNode=function(a){var b=a.closest("li.list-group-item").attr("data-nodeId"),c=this._nodes[b];return c||console.log("Error: node does not exist"),c},g.prototype._toggleExpanded=function(a,b){a&&this._setExpanded(a,!a.state.expanded,b)},g.prototype._setExpanded=function(b,c,d){d&&c===b.state.expanded||(c&&b.nodes?(b.state.expanded=!0,b.$el&&b.$el.children("span.expand-icon").removeClass(this._options.expandIcon).addClass(this._options.collapseIcon),b.nodes&&d&&a.each(b.nodes,a.proxy(function(a,b){this._setVisible(b,!0,d)},this)),this._triggerEvent("nodeExpanded",b,d)):c||(b.state.expanded=!1,b.$el&&b.$el.children("span.expand-icon").removeClass(this._options.collapseIcon).addClass(this._options.expandIcon),b.nodes&&d&&a.each(b.nodes,a.proxy(function(a,b){this._setVisible(b,!1,d),this._setExpanded(b,!1,d)},this)),this._triggerEvent("nodeCollapsed",b,d)))},g.prototype._setVisible=function(a,b,c){c&&b===a.state.visible||(b?(a.state.visible=!0,a.$el&&a.$el.removeClass("node-hidden")):(a.state.visible=!1,a.$el&&a.$el.addClass("node-hidden")))},g.prototype._toggleSelected=function(a,b){return a?(this._setSelected(a,!a.state.selected,b),this):void 0},g.prototype._setSelected=function(b,c,d){if(!d||c!==b.state.selected){if(c)this._options.multiSelect||a.each(this._findNodes("true","state.selected"),a.proxy(function(b,c){this._setSelected(c,!1,a.extend(d,{unselecting:!0}))},this)),b.state.selected=!0,b.$el&&(b.$el.addClass("node-selected"),(b.selectedIcon||this._options.selectedIcon)&&b.$el.children("span.node-icon").removeClass(b.icon||this._options.nodeIcon).addClass(b.selectedIcon||this._options.selectedIcon)),this._triggerEvent("nodeSelected",b,d);else{if(this._options.preventUnselect&&d&&!d.unselecting&&1===this._findNodes("true","state.selected").length)return this;b.state.selected=!1,b.$el&&(b.$el.removeClass("node-selected"),(b.selectedIcon||this._options.selectedIcon)&&b.$el.children("span.node-icon").removeClass(b.selectedIcon||this._options.selectedIcon).addClass(b.icon||this._options.nodeIcon)),this._triggerEvent("nodeUnselected",b,d)}return this}},g.prototype._toggleChecked=function(a,b){a&&this._setChecked(a,!a.state.checked,b)},g.prototype._setChecked=function(a,b,c){c&&b===a.state.checked||(b?(a.state.checked=!0,a.$el&&(a.$el.addClass("node-checked"),a.$el.children("span.check-icon").removeClass(this._options.uncheckedIcon).addClass(this._options.checkedIcon)),this._triggerEvent("nodeChecked",a,c)):(a.state.checked=!1,a.$el&&(a.$el.removeClass("node-checked"),a.$el.children("span.check-icon").removeClass(this._options.checkedIcon).addClass(this._options.uncheckedIcon)),this._triggerEvent("nodeUnchecked",a,c)))},g.prototype._setDisabled=function(a,b,c){c&&b===a.state.disabled||(b?(a.state.disabled=!0,this._setSelected(a,!1,c),this._setChecked(a,!1,c),this._setExpanded(a,!1,c),a.$el&&a.$el.addClass("node-disabled"),this._triggerEvent("nodeDisabled",a,c)):(a.state.disabled=!1,a.$el&&a.$el.removeClass("node-disabled"),this._triggerEvent("nodeEnabled",a,c)))},g.prototype._setSearchResult=function(a,b,c){c&&b===a.searchResult||(b?(a.searchResult=!0,a.$el&&a.$el.addClass("node-result")):(a.searchResult=!1,a.$el&&a.$el.removeClass("node-result")))},g.prototype._render=function(){this._initialized||(this.$wrapper=a(this._template.tree),this.$element.empty().addClass(e).append(this.$wrapper),this._injectStyle(),this._initialized=!0);var b;a.each(this._orderedNodes,a.proxy(function(a,c){this._renderNode(c,b),b=c},this)),this._triggerEvent("rendered",this._orderedNodes,f.options)},g.prototype._renderNode=function(b,c){if(b){b.$el?b.$el.empty():b.$el=this._newNodeEl(b,c).addClass("node-"+this._elementId),b.$el.attr("data-nodeId",b.nodeId);for(var d=0;d<b.level-1;d++)b.$el.append(this._template.indent);b.$el.append(a(this._template.icon).addClass(b.nodes?"expand-icon":this._options.emptyIcon)),this._options.showIcon&&b.$el.append(a(this._template.icon).addClass("node-icon").addClass(b.icon||this._options.nodeIcon)),this._options.showCheckbox&&b.$el.append(a(this._template.icon).addClass("check-icon")),b.$el.append(b.text),this._options.showTags&&b.tags&&a.each(b.tags,a.proxy(function(c,d){b.$el.append(a(this._template.badge).append(d))},this)),this._setSelected(b,b.state.selected),this._setChecked(b,b.state.checked),this._setSearchResult(b,b.searchResult),this._setExpanded(b,b.state.expanded),this._setDisabled(b,b.state.disabled),this._setVisible(b,b.state.visible),this._triggerEvent("nodeRendered",b,f.options)}},g.prototype._newNodeEl=function(b,c){var d=a(this._template.node);return c?this.$wrapper.children().eq(c.$el.index()).after(d):this.$wrapper.prepend(d),d},g.prototype._removeNodeEl=function(b){b&&(b.nodes&&a.each(b.nodes,a.proxy(function(a,b){this._removeNodeEl(b)},this)),b.$el.remove())},g.prototype._expandNode=function(b){b.nodes&&a.each(b.nodes.slice(0).reverse(),a.proxy(function(a,c){c.level=b.level+1,this._renderNode(c,b.$el)},this))},g.prototype._injectStyle=function(){this._options.injectStyle&&!c.getElementById(this._styleId)&&a('<style type="text/css" id="'+this._styleId+'"> '+this._buildStyle()+" </style>").appendTo("head")},g.prototype._buildStyle=function(){var b=".node-"+this._elementId+"{";if(this._options.color&&(b+="color:"+this._options.color+";"),this._options.backColor&&(b+="background-color:"+this._options.backColor+";"),this._options.showBorder?this._options.borderColor&&(b+="border:1px solid "+this._options.borderColor+";"):b+="border:none;",b+="}",this._options.onhoverColor&&(b+=".node-"+this._elementId+":not(.node-disabled):hover{background-color:"+this._options.onhoverColor+";}"),this._options.highlightSearchResults&&(this._options.searchResultColor||this._options.searchResultBackColor)){var c="";this._options.searchResultColor&&(c+="color:"+this._options.searchResultColor+";"),this._options.searchResultBackColor&&(c+="background-color:"+this._options.searchResultBackColor+";"),b+=".node-"+this._elementId+".node-result{"+c+"}",b+=".node-"+this._elementId+".node-result:hover{"+c+"}"}if(this._options.highlightSelected&&(this._options.selectedColor||this._options.selectedBackColor)){var c="";this._options.selectedColor&&(c+="color:"+this._options.selectedColor+";"),this._options.selectedBackColor&&(c+="background-color:"+this._options.selectedBackColor+";"),b+=".node-"+this._elementId+".node-selected{"+c+"}",b+=".node-"+this._elementId+".node-selected:hover{"+c+"}"}return a.each(this._orderedNodes,a.proxy(function(a,c){if(c.color||c.backColor){var d="";c.color&&(d+="color:"+c.color+";"),c.backColor&&(d+="background-color:"+c.backColor+";"),b+=".node-"+this._elementId+'[data-nodeId="'+c.nodeId+'"]{'+d+"}"}},this)),this._css+b},g.prototype._template={tree:'<ul class="list-group"></ul>',node:'<li class="list-group-item"></li>',indent:'<span class="indent"></span>',icon:'<span class="icon"></span>',badge:'<span class="badge"></span>'},g.prototype._css=".treeview .list-group-item{cursor:pointer}.treeview span.indent{margin-left:10px;margin-right:10px}.treeview span.icon{width:12px;margin-right:5px}.treeview .node-disabled{color:silver;cursor:not-allowed}",g.prototype.findNodes=function(a,b){return this._findNodes(a,b)},g.prototype.getNodes=function(){return this._orderedNodes},g.prototype.getParents=function(b){b instanceof Array||(b=[b]);var c=[];return a.each(b,a.proxy(function(a,b){var d=b.parentId?this._nodes[b.parentId]:!1;d&&c.push(d)},this)),c},g.prototype.getSiblings=function(b){b instanceof Array||(b=[b]);var c=[];return a.each(b,a.proxy(function(a,b){var d=this.getParents([b]),e=d[0]?d[0].nodes:this._tree;c=e.filter(function(a){return a.nodeId!==b.nodeId})},this)),a.map(c,function(a){return a})},g.prototype.getSelected=function(){return this._findNodes("true","state.selected")},g.prototype.getUnselected=function(){return this._findNodes("false","state.selected")},g.prototype.getExpanded=function(){return this._findNodes("true","state.expanded")},g.prototype.getCollapsed=function(){return this._findNodes("false","state.expanded")},g.prototype.getChecked=function(){return this._findNodes("true","state.checked")},g.prototype.getUnchecked=function(){return this._findNodes("false","state.checked")},g.prototype.getDisabled=function(){return this._findNodes("true","state.disabled")},g.prototype.getEnabled=function(){return this._findNodes("false","state.disabled")},g.prototype.addNode=function(b,c,d,e){b instanceof Array||(b=[b]),c instanceof Array&&(c=c[0]),e=a.extend({},f.options,e);var g;g=c&&c.nodes?c.nodes:c?c.nodes=[]:this._tree,a.each(b,a.proxy(function(a,b){var c="number"==typeof d?d+a:g.length+1;g.splice(c,0,b)},this)),this._setInitialStates({nodes:this._tree},0).done(a.proxy(function(){c&&!c.state.expanded&&this._setExpanded(c,!0,e),this._render()},this))},g.prototype.addNodeAfter=function(b,c,d){b instanceof Array||(b=[b]),c instanceof Array&&(c=c[0]),d=a.extend({},f.options,d),this.addNode(b,this.getParents(c)[0],c.index+1,d)},g.prototype.addNodeBefore=function(b,c,d){b instanceof Array||(b=[b]),c instanceof Array&&(c=c[0]),d=a.extend({},f.options,d),this.addNode(b,this.getParents(c)[0],c.index,d)},g.prototype.removeNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c);var d,e;a.each(b,a.proxy(function(a,b){e=this._nodes[b.parentId],d=e?e.nodes:this._tree,d.splice(b.index,1),this._removeNodeEl(b)},this)),this._setInitialStates({nodes:this._tree},0).done(this._render.bind(this))},g.prototype.updateNode=function(b,c,d){b instanceof Array&&(b=b[0]),d=a.extend({},f.options,d);var e,g=this._nodes[b.parentId];e=g?g.nodes:this._tree,e.splice(b.index,1,c),this._removeNodeEl(b),this._setInitialStates({nodes:this._tree},0).done(this._render.bind(this))},g.prototype.selectNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setSelected(b,!0,c)},this))},g.prototype.unselectNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setSelected(b,!1,c)},this))},g.prototype.toggleNodeSelected=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._toggleSelected(b,c)},this))},g.prototype.collapseAll=function(b){b=a.extend({},f.options,b),b.levels=b.levels||999,this.collapseNode(this._tree,b)},g.prototype.collapseNode=function(b,c){c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setExpanded(b,!1,c)},this))},g.prototype.expandAll=function(b){b=a.extend({},f.options,b),b.levels=b.levels||999,this.expandNode(this._tree,b)},g.prototype.expandNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setExpanded(b,!0,c),b.nodes&&this._expandLevels(b.nodes,c.levels-1,c)},this))},g.prototype._expandLevels=function(b,c,d){b instanceof Array||(b=[b]),d=a.extend({},f.options,d),a.each(b,a.proxy(function(a,b){this._setExpanded(b,c>0,d),b.nodes&&this._expandLevels(b.nodes,c-1,d)},this))},g.prototype.revealNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){for(var d,e=b;d=this.getParents([e])[0];)e=d,this._setExpanded(e,!0,c)},this))},g.prototype.toggleNodeExpanded=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._toggleExpanded(b,c)},this))},g.prototype.checkAll=function(b){b=a.extend({},f.options,b);var c=this._findNodes("false","state.checked");a.each(c,a.proxy(function(a,c){this._setChecked(c,!0,b)},this))},g.prototype.checkNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setChecked(b,!0,c)},this))},g.prototype.uncheckAll=function(b){b=a.extend({},f.options,b);var c=this._findNodes("true","state.checked");a.each(c,a.proxy(function(a,c){this._setChecked(c,!1,b)},this))},g.prototype.uncheckNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setChecked(b,!1,c)},this))},g.prototype.toggleNodeChecked=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._toggleChecked(b,c)},this))},g.prototype.disableAll=function(b){b=a.extend({},f.options,b);var c=this._findNodes("false","state.disabled");a.each(c,a.proxy(function(a,c){this._setDisabled(c,!0,b)},this))},g.prototype.disableNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setDisabled(b,!0,c)},this))},g.prototype.enableAll=function(b){b=a.extend({},f.options,b);var c=this._findNodes("true","state.disabled");a.each(c,a.proxy(function(a,c){this._setDisabled(c,!1,b)},this))},g.prototype.enableNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setDisabled(b,!1,c)},this))},g.prototype.toggleNodeDisabled=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setDisabled(b,!b.state.disabled,c)},this))},g.prototype.search=function(b,c){c=a.extend({},f.searchOptions,c);var d=this._getSearchResults(),e=[];if(b&&b.length>0){c.exactMatch&&(b="^"+b+"$");var g="g";c.ignoreCase&&(g+="i"),e=this._findNodes(b,"text",g)}return a.each(this._diffArray(e,d),a.proxy(function(a,b){this._setSearchResult(b,!1,c)},this)),a.each(this._diffArray(d,e),a.proxy(function(a,b){this._setSearchResult(b,!0,c)},this)),e&&c.revealResults&&this.revealNode(e),this._triggerEvent("searchComplete",e,c),e},g.prototype.clearSearch=function(b){b=a.extend({},{render:!0},b);var c=a.each(this._getSearchResults(),a.proxy(function(a,c){this._setSearchResult(c,!1,b)},this));this._triggerEvent("searchCleared",c,b)},g.prototype._getSearchResults=function(){return this._findNodes("true","searchResult")},g.prototype._diffArray=function(b,c){var d=[];return a.grep(c,function(c){-1===a.inArray(c,b)&&d.push(c)}),d},g.prototype._findNodes=function(b,c,d){return c=c||"text",d=d||"g",a.grep(this._orderedNodes,a.proxy(function(a){var e=this._getNodeValue(a,c);return"string"==typeof e?e.match(new RegExp(b,d)):void 0},this))},g.prototype._getNodeValue=function(a,b){var c=b.indexOf(".");if(c>0){var e=a[b.substring(0,c)],f=b.substring(c+1,b.length);return this._getNodeValue(e,f)}return a.hasOwnProperty(b)?a[b].toString():d};var h=function(a){b.console&&b.console.error(a)};a.fn[e]=function(b,c){var d;return this.each(function(){var f=a.data(this,e);"string"==typeof b?f?a.isFunction(f[b])&&"_"!==b.charAt(0)?(c instanceof Array||(c=[c]),d=f[b].apply(f,c)):h("No such method : "+b):h("Not initialized, can not call method : "+b):"boolean"==typeof b?d=f:a.data(this,e,new g(this,a.extend(!0,{},b)))}),d||this}}(jQuery,window,document);
\ No newline at end of file
+!function(a,b,c,d){"use strict";var e="treeview",f={};f.settings={injectStyle:!0,levels:2,expandIcon:"glyphicon glyphicon-plus",collapseIcon:"glyphicon glyphicon-minus",loadingIcon:"glyphicon glyphicon-hourglass",emptyIcon:"glyphicon",nodeIcon:"",selectedIcon:"",checkedIcon:"glyphicon glyphicon-check",partiallyCheckedIcon:"glyphicon glyphicon-expand",uncheckedIcon:"glyphicon glyphicon-unchecked",color:d,backColor:d,borderColor:d,changedNodeColor:"#39A5DC",onhoverColor:"#F5F5F5",selectedColor:"#FFFFFF",selectedBackColor:"#428bca",searchResultColor:"#D9534F",searchResultBackColor:d,highlightSelected:!0,highlightSearchResults:!0,showBorder:!0,showIcon:!0,showImage:!1,showCheckbox:!1,checkboxFirst:!1,highlightChanges:!1,showTags:!1,multiSelect:!1,preventUnselect:!1,allowReselect:!1,hierarchicalCheck:!1,propagateCheckEvent:!1,wrapNodeText:!1,onLoading:d,onLoadingFailed:d,onInitialized:d,onNodeRendered:d,onRendered:d,onDestroyed:d,onNodeChecked:d,onNodeCollapsed:d,onNodeDisabled:d,onNodeEnabled:d,onNodeExpanded:d,onNodeSelected:d,onNodeUnchecked:d,onNodeUnselected:d,onSearchComplete:d,onSearchCleared:d},f.options={silent:!1,ignoreChildren:!1},f.searchOptions={ignoreCase:!0,exactMatch:!1,revealResults:!0},f.dataUrl={method:"GET",dataType:"json",cache:!1};var g=function(b,c){return this.$element=a(b),this._elementId=b.id,this._styleId=this._elementId+"-style",this._init(c),{options:this._options,init:a.proxy(this._init,this),remove:a.proxy(this._remove,this),findNodes:a.proxy(this.findNodes,this),getNodes:a.proxy(this.getNodes,this),getParents:a.proxy(this.getParents,this),getSiblings:a.proxy(this.getSiblings,this),getSelected:a.proxy(this.getSelected,this),getUnselected:a.proxy(this.getUnselected,this),getExpanded:a.proxy(this.getExpanded,this),getCollapsed:a.proxy(this.getCollapsed,this),getChecked:a.proxy(this.getChecked,this),getUnchecked:a.proxy(this.getUnchecked,this),getDisabled:a.proxy(this.getDisabled,this),getEnabled:a.proxy(this.getEnabled,this),addNode:a.proxy(this.addNode,this),addNodeAfter:a.proxy(this.addNodeAfter,this),addNodeBefore:a.proxy(this.addNodeBefore,this),removeNode:a.proxy(this.removeNode,this),updateNode:a.proxy(this.updateNode,this),selectNode:a.proxy(this.selectNode,this),unselectNode:a.proxy(this.unselectNode,this),toggleNodeSelected:a.proxy(this.toggleNodeSelected,this),collapseAll:a.proxy(this.collapseAll,this),collapseNode:a.proxy(this.collapseNode,this),expandAll:a.proxy(this.expandAll,this),expandNode:a.proxy(this.expandNode,this),toggleNodeExpanded:a.proxy(this.toggleNodeExpanded,this),revealNode:a.proxy(this.revealNode,this),checkAll:a.proxy(this.checkAll,this),checkNode:a.proxy(this.checkNode,this),uncheckAll:a.proxy(this.uncheckAll,this),uncheckNode:a.proxy(this.uncheckNode,this),toggleNodeChecked:a.proxy(this.toggleNodeChecked,this),unmarkCheckboxChanges:a.proxy(this.unmarkCheckboxChanges,this),disableAll:a.proxy(this.disableAll,this),disableNode:a.proxy(this.disableNode,this),enableAll:a.proxy(this.enableAll,this),enableNode:a.proxy(this.enableNode,this),toggleNodeDisabled:a.proxy(this.toggleNodeDisabled,this),search:a.proxy(this.search,this),clearSearch:a.proxy(this.clearSearch,this)}};g.prototype._init=function(b){this._tree=[],this._initialized=!1,this._options=a.extend({},f.settings,b),this._template.icon.empty.addClass(this._options.emptyIcon),this._destroy(),this._subscribeEvents(),this._triggerEvent("loading",null,f.options),this._load(b).then(a.proxy(function(b){return this._tree=a.extend(!0,[],b)},this),a.proxy(function(a){this._triggerEvent("loadingFailed",a,f.options)},this)).then(a.proxy(function(a){return this._setInitialStates({nodes:a},0)},this)).then(a.proxy(function(){this._render()},this))},g.prototype._load=function(b){var c=new a.Deferred;return b.data?this._loadLocalData(b,c):b.dataUrl&&this._loadRemoteData(b,c),c.promise()},g.prototype._loadRemoteData=function(b,c){a.ajax(a.extend(!0,{},f.dataUrl,b.dataUrl)).done(function(a){c.resolve(a)}).fail(function(a,b,d){c.reject(d)})},g.prototype._loadLocalData=function(b,c){c.resolve("string"==typeof b.data?JSON.parse(b.data):a.extend(!0,[],b.data))},g.prototype._remove=function(){this._destroy(),a.removeData(this,e),a("#"+this._styleId).remove()},g.prototype._destroy=function(){this._initialized&&(this._initialized=!1,this._triggerEvent("destroyed",null,f.options),this._unsubscribeEvents(),this.$wrapper.remove(),this.$wrapper=null)},g.prototype._unsubscribeEvents=function(){this.$element.off("loading"),this.$element.off("loadingFailed"),this.$element.off("initialized"),this.$element.off("nodeRendered"),this.$element.off("rendered"),this.$element.off("destroyed"),this.$element.off("click"),this.$element.off("nodeChecked"),this.$element.off("nodeCollapsed"),this.$element.off("nodeDisabled"),this.$element.off("nodeEnabled"),this.$element.off("nodeExpanded"),this.$element.off("nodeSelected"),this.$element.off("nodeUnchecked"),this.$element.off("nodeUnselected"),this.$element.off("searchComplete"),this.$element.off("searchCleared")},g.prototype._subscribeEvents=function(){this._unsubscribeEvents(),"function"==typeof this._options.onLoading&&this.$element.on("loading",this._options.onLoading),"function"==typeof this._options.onLoadingFailed&&this.$element.on("loadingFailed",this._options.onLoadingFailed),"function"==typeof this._options.onInitialized&&this.$element.on("initialized",this._options.onInitialized),"function"==typeof this._options.onNodeRendered&&this.$element.on("nodeRendered",this._options.onNodeRendered),"function"==typeof this._options.onRendered&&this.$element.on("rendered",this._options.onRendered),"function"==typeof this._options.onDestroyed&&this.$element.on("destroyed",this._options.onDestroyed),this.$element.on("click",a.proxy(this._clickHandler,this)),"function"==typeof this._options.onNodeChecked&&this.$element.on("nodeChecked",this._options.onNodeChecked),"function"==typeof this._options.onNodeCollapsed&&this.$element.on("nodeCollapsed",this._options.onNodeCollapsed),"function"==typeof this._options.onNodeDisabled&&this.$element.on("nodeDisabled",this._options.onNodeDisabled),"function"==typeof this._options.onNodeEnabled&&this.$element.on("nodeEnabled",this._options.onNodeEnabled),"function"==typeof this._options.onNodeExpanded&&this.$element.on("nodeExpanded",this._options.onNodeExpanded),"function"==typeof this._options.onNodeSelected&&this.$element.on("nodeSelected",this._options.onNodeSelected),"function"==typeof this._options.onNodeUnchecked&&this.$element.on("nodeUnchecked",this._options.onNodeUnchecked),"function"==typeof this._options.onNodeUnselected&&this.$element.on("nodeUnselected",this._options.onNodeUnselected),"function"==typeof this._options.onSearchComplete&&this.$element.on("searchComplete",this._options.onSearchComplete),"function"==typeof this._options.onSearchCleared&&this.$element.on("searchCleared",this._options.onSearchCleared)},g.prototype._triggerEvent=function(b,c,d){d&&!d.silent&&this.$element.trigger(b,a.extend(!0,{},c))},g.prototype._setInitialStates=function(b,c){return this._nodes={},a.when.apply(this,this._setInitialState(b,c)).done(a.proxy(function(){this._orderedNodes=this._sortNodes(),this._inheritCheckboxChanges(),this._triggerEvent("initialized",this._orderedNodes,f.options)},this))},g.prototype._setInitialState=function(b,c,e){if(b.nodes){c+=1,e=e||[];var f=b;return a.each(b.nodes,a.proxy(function(b,g){var h=new a.Deferred;e.push(h.promise()),g.level=c,g.index=b,g.nodeId=f&&f.nodeId?f.nodeId+"."+g.index:c-1+"."+g.index,g.parentId=f.nodeId,g.hasOwnProperty("selectable")||(g.selectable=!0),g.hasOwnProperty("checkable")||(g.checkable=!0),g.state=g.state||{},g.state.hasOwnProperty("checked")||(g.state.checked=!1),this._options.hierarchicalCheck&&"undefined"===g.state.checked&&(g.state.checked=d),g.state.hasOwnProperty("disabled")||(g.state.disabled=!1),g.state.hasOwnProperty("expanded")||(!g.state.disabled&&c<this._options.levels&&g.nodes&&g.nodes.length>0?g.state.expanded=!0:g.state.expanded=!1),g.state.hasOwnProperty("selected")||(g.state.selected=!1),f&&f.state&&f.state.expanded||c<=this._options.levels?g.state.visible=!0:g.state.visible=!1,g.nodes&&(g.nodes.length>0?this._setInitialState(g,c,e):delete g.nodes),this._nodes[g.nodeId]=g,h.resolve()},this)),e}},g.prototype._sortNodes=function(){return a.map(Object.keys(this._nodes).sort(function(a,b){if(a===b)return 0;for(var a=a.split(".").map(function(a){return parseInt(a)}),b=b.split(".").map(function(a){return parseInt(a)}),c=Math.max(a.length,b.length),e=0;e<c;e++){if(a[e]===d)return-1;if(b[e]===d)return 1;if(a[e]-b[e]>0)return 1;if(a[e]-b[e]<0)return-1}}),a.proxy(function(a,b){return this._nodes[a]},this))},g.prototype._clickHandler=function(b){var c=a(b.target),d=this.targetNode(c);if(d&&!d.state.disabled){var e=c.attr("class")?c.attr("class").split(" "):[];e.indexOf("expand-icon")!==-1?this._toggleExpanded(d,a.extend({},f.options)):e.indexOf("check-icon")!==-1?d.checkable&&this._toggleChecked(d,a.extend({},f.options)):d.selectable?this._toggleSelected(d,a.extend({},f.options)):this._toggleExpanded(d,a.extend({},f.options))}},g.prototype.targetNode=function(a){var b=a.closest("li.list-group-item").attr("data-nodeId"),c=this._nodes[b];return c||console.log("Error: node does not exist"),c},g.prototype._toggleExpanded=function(a,b){a&&("function"==typeof this._options.lazyLoad&&a.lazyLoad?this._lazyLoad(a):this._setExpanded(a,!a.state.expanded,b))},g.prototype._lazyLoad=function(a){a.$el.children("span.expand-icon").removeClass(this._options.expandIcon).addClass(this._options.loadingIcon);var b=this;this._options.lazyLoad(a,function(c){b.addNode(c,a)}),delete a.lazyLoad},g.prototype._setExpanded=function(b,c,d){d&&c===b.state.expanded||(c&&b.nodes?(b.state.expanded=!0,b.$el&&b.$el.children("span.expand-icon").removeClass(this._options.expandIcon).removeClass(this._options.loadingIcon).addClass(this._options.collapseIcon),b.nodes&&d&&a.each(b.nodes,a.proxy(function(a,b){this._setVisible(b,!0,d)},this)),this._triggerEvent("nodeExpanded",b,d)):c||(b.state.expanded=!1,b.$el&&b.$el.children("span.expand-icon").removeClass(this._options.collapseIcon).addClass(this._options.expandIcon),b.nodes&&d&&a.each(b.nodes,a.proxy(function(a,b){this._setVisible(b,!1,d),this._setExpanded(b,!1,d)},this)),this._triggerEvent("nodeCollapsed",b,d)))},g.prototype._setVisible=function(a,b,c){c&&b===a.state.visible||(b?(a.state.visible=!0,a.$el&&a.$el.removeClass("node-hidden")):(a.state.visible=!1,a.$el&&a.$el.addClass("node-hidden")))},g.prototype._toggleSelected=function(a,b){if(a)return this._setSelected(a,!a.state.selected,b),this},g.prototype._setSelected=function(b,c,d){if(!d||c!==b.state.selected){if(c)this._options.multiSelect||a.each(this._findNodes("true","state.selected"),a.proxy(function(b,c){this._setSelected(c,!1,a.extend(d,{unselecting:!0}))},this)),b.state.selected=!0,b.$el&&(b.$el.addClass("node-selected"),(b.selectedIcon||this._options.selectedIcon)&&b.$el.children("span.node-icon").removeClass(b.icon||this._options.nodeIcon).addClass(b.selectedIcon||this._options.selectedIcon)),this._triggerEvent("nodeSelected",b,d);else{if(this._options.preventUnselect&&d&&!d.unselecting&&1===this._findNodes("true","state.selected").length)return this._options.allowReselect&&this._triggerEvent("nodeSelected",b,d),this;b.state.selected=!1,b.$el&&(b.$el.removeClass("node-selected"),(b.selectedIcon||this._options.selectedIcon)&&b.$el.children("span.node-icon").removeClass(b.selectedIcon||this._options.selectedIcon).addClass(b.icon||this._options.nodeIcon)),this._triggerEvent("nodeUnselected",b,d)}return this}},g.prototype._inheritCheckboxChanges=function(){this._options.showCheckbox&&this._options.highlightChanges&&(this._checkedNodes=a.grep(this._orderedNodes,function(a){return a.state.checked}))},g.prototype._toggleChecked=function(b,c){if(b){if(this._options.hierarchicalCheck){var e,f=a.extend({},c,{silent:c.silent||!this._options.propagateCheckEvent}),g=b;for(b.state.checked=!b.state.checked;g=this._nodes[g.parentId];)e=g.nodes.reduce(function(a,b){return a===b.state.checked?a:d},g.nodes[0].state.checked),this._setChecked(g,e,f);if(b.nodes&&b.nodes.length>0)for(var h,i=b.nodes.slice();i&&i.length>0;)h=i.pop(),this._setChecked(h,b.state.checked,f),h.nodes&&h.nodes.length>0&&(i=i.concat(h.nodes.slice()));b.state.checked=!b.state.checked}this._setChecked(b,!b.state.checked,c)}},g.prototype._setChecked=function(a,b,c){c&&b===a.state.checked||(this._options.highlightChanges&&a.$el.toggleClass("node-check-changed",this._checkedNodes.indexOf(a)==-1==b),b?(a.state.checked=!0,a.$el&&(a.$el.addClass("node-checked").removeClass("node-checked-partial"),a.$el.children("span.check-icon").removeClass(this._options.uncheckedIcon).removeClass(this._options.partiallyCheckedIcon).addClass(this._options.checkedIcon)),this._triggerEvent("nodeChecked",a,c)):b===d&&this._options.hierarchicalCheck?(a.state.checked=d,a.$el&&(a.$el.addClass("node-checked-partial").removeClass("node-checked"),a.$el.children("span.check-icon").removeClass(this._options.uncheckedIcon).removeClass(this._options.checkedIcon).addClass(this._options.partiallyCheckedIcon)),this._triggerEvent("nodeUnchecked",a,c)):(a.state.checked=!1,a.$el&&(a.$el.removeClass("node-checked node-checked-partial"),a.$el.children("span.check-icon").removeClass(this._options.checkedIcon).removeClass(this._options.partiallyCheckedIcon).addClass(this._options.uncheckedIcon)),this._triggerEvent("nodeUnchecked",a,c)))},g.prototype._setDisabled=function(a,b,c){c&&b===a.state.disabled||(b?(a.state.disabled=!0,c&&!c.keepState&&(this._setSelected(a,!1,c),this._setChecked(a,!1,c),this._setExpanded(a,!1,c)),a.$el&&a.$el.addClass("node-disabled"),this._triggerEvent("nodeDisabled",a,c)):(a.state.disabled=!1,a.$el&&a.$el.removeClass("node-disabled"),this._triggerEvent("nodeEnabled",a,c)))},g.prototype._setSearchResult=function(a,b,c){c&&b===a.searchResult||(b?(a.searchResult=!0,a.$el&&a.$el.addClass("node-result")):(a.searchResult=!1,a.$el&&a.$el.removeClass("node-result")))},g.prototype._render=function(){this._initialized||(this.$wrapper=this._template.tree.clone(),this.$element.empty().addClass(e).append(this.$wrapper),this._injectStyle(),this._initialized=!0);var b;a.each(this._orderedNodes,a.proxy(function(a,c){this._renderNode(c,b),b=c},this)),this._triggerEvent("rendered",this._orderedNodes,f.options)},g.prototype._renderNode=function(b,c){if(b){b.$el?b.$el.empty():b.$el=this._newNodeEl(b,c).addClass("node-"+this._elementId),b.$el.addClass(b["class"]),b.id&&b.$el.attr("id",b.id),b.dataAttr&&a.each(b.dataAttr,function(a,c){b.$el.attr("data-"+a,c)}),b.$el.attr("data-nodeId",b.nodeId),b.tooltip&&b.$el.attr("title",b.tooltip);for(var d=0;d<b.level-1;d++)b.$el.append(this._template.indent.clone());if(b.$el.append(b.nodes||b.lazyLoad?this._template.icon.expand.clone():this._template.icon.empty.clone()),this._options.checkboxFirst?(this._addCheckbox(b),this._addIcon(b),this._addImage(b)):(this._addIcon(b),this._addImage(b),this._addCheckbox(b)),this._options.wrapNodeText){var e=this._template.text.clone();b.$el.append(e),e.append(b.text)}else b.$el.append(b.text);this._options.showTags&&b.tags&&a.each(b.tags,a.proxy(function(a,c){b.$el.append(this._template.badge.clone().append(c))},this)),this._setSelected(b,b.state.selected),this._setChecked(b,b.state.checked),this._setSearchResult(b,b.searchResult),this._setExpanded(b,b.state.expanded),this._setDisabled(b,b.state.disabled),this._setVisible(b,b.state.visible),this._triggerEvent("nodeRendered",b,f.options)}},g.prototype._addCheckbox=function(a){!this._options.showCheckbox||a.hideCheckbox!==d&&a.hideCheckbox!==!1||a.$el.append(this._template.icon.check.clone())},g.prototype._addIcon=function(a){!this._options.showIcon||this._options.showImage&&a.image||a.$el.append(this._template.icon.node.clone().addClass(a.icon||this._options.nodeIcon))},g.prototype._addImage=function(a){this._options.showImage&&a.image&&a.$el.append(this._template.image.clone().addClass("node-image").css("background-image","url('"+a.image+"')"))},g.prototype._newNodeEl=function(a,b){var c=this._template.node.clone();return b?b.$el.after(c):this.$wrapper.prepend(c),c},g.prototype._removeNodeEl=function(b){b&&(b.nodes&&a.each(b.nodes,a.proxy(function(a,b){this._removeNodeEl(b)},this)),b.$el.remove())},g.prototype._expandNode=function(b){b.nodes&&a.each(b.nodes.slice(0).reverse(),a.proxy(function(a,c){c.level=b.level+1,this._renderNode(c,b.$el)},this))},g.prototype._injectStyle=function(){this._options.injectStyle&&!c.getElementById(this._styleId)&&a('<style type="text/css" id="'+this._styleId+'"> '+this._buildStyle()+" </style>").appendTo("head")},g.prototype._buildStyle=function(){var b=".node-"+this._elementId+"{";if(this._options.color&&(b+="color:"+this._options.color+";"),this._options.backColor&&(b+="background-color:"+this._options.backColor+";"),this._options.showBorder?this._options.borderColor&&(b+="border:1px solid "+this._options.borderColor+";"):b+="border:none;",b+="}",this._options.onhoverColor&&(b+=".node-"+this._elementId+":not(.node-disabled):hover{background-color:"+this._options.onhoverColor+";}"),this._options.highlightSearchResults&&(this._options.searchResultColor||this._options.searchResultBackColor)){var c="";this._options.searchResultColor&&(c+="color:"+this._options.searchResultColor+";"),this._options.searchResultBackColor&&(c+="background-color:"+this._options.searchResultBackColor+";"),b+=".node-"+this._elementId+".node-result{"+c+"}",b+=".node-"+this._elementId+".node-result:hover{"+c+"}"}if(this._options.highlightSelected&&(this._options.selectedColor||this._options.selectedBackColor)){var c="";this._options.selectedColor&&(c+="color:"+this._options.selectedColor+";"),this._options.selectedBackColor&&(c+="background-color:"+this._options.selectedBackColor+";"),b+=".node-"+this._elementId+".node-selected{"+c+"}",b+=".node-"+this._elementId+".node-selected:hover{"+c+"}"}if(this._options.highlightChanges){var c="color: "+this._options.changedNodeColor+";";b+=".node-"+this._elementId+".node-check-changed{"+c+"}"}return a.each(this._orderedNodes,a.proxy(function(a,c){if(c.color||c.backColor){var d="";c.color&&(d+="color:"+c.color+";"),c.backColor&&(d+="background-color:"+c.backColor+";"),b+=".node-"+this._elementId+'[data-nodeId="'+c.nodeId+'"]{'+d+"}"}},this)),this._css+b},g.prototype._template={tree:a('<ul class="list-group"></ul>'),node:a('<li class="list-group-item"></li>'),indent:a('<span class="indent"></span>'),icon:{node:a('<span class="icon node-icon"></span>'),expand:a('<span class="icon expand-icon"></span>'),check:a('<span class="icon check-icon"></span>'),empty:a('<span class="icon"></span>')},image:a('<span class="image"></span>'),badge:a('<span class="badge"></span>'),text:a('<span class="text"></span>')},g.prototype._css=".treeview .list-group-item{cursor:pointer}.treeview span.indent{margin-left:10px;margin-right:10px}.treeview span.icon{width:12px;margin-right:5px}.treeview .node-disabled{color:silver;cursor:not-allowed}",g.prototype.findNodes=function(a,b){return this._findNodes(a,b)},g.prototype.getNodes=function(){return this._orderedNodes},g.prototype.getParents=function(b){b instanceof Array||(b=[b]);var c=[];return a.each(b,a.proxy(function(a,b){var d=!!b.parentId&&this._nodes[b.parentId];d&&c.push(d)},this)),c},g.prototype.getSiblings=function(b){b instanceof Array||(b=[b]);var c=[];return a.each(b,a.proxy(function(a,b){var d=this.getParents([b]),e=d[0]?d[0].nodes:this._tree;c=e.filter(function(a){return a.nodeId!==b.nodeId})},this)),a.map(c,function(a){return a})},g.prototype.getSelected=function(){return this._findNodes("true","state.selected")},g.prototype.getUnselected=function(){return this._findNodes("false","state.selected")},g.prototype.getExpanded=function(){return this._findNodes("true","state.expanded")},g.prototype.getCollapsed=function(){return this._findNodes("false","state.expanded")},g.prototype.getChecked=function(){return this._findNodes("true","state.checked")},g.prototype.getUnchecked=function(){return this._findNodes("false","state.checked")},g.prototype.getDisabled=function(){return this._findNodes("true","state.disabled")},g.prototype.getEnabled=function(){return this._findNodes("false","state.disabled")},g.prototype.addNode=function(b,c,d,e){b instanceof Array||(b=[b]),c instanceof Array&&(c=c[0]),e=a.extend({},f.options,e);var g;g=c&&c.nodes?c.nodes:c?c.nodes=[]:this._tree,a.each(b,a.proxy(function(a,b){var c="number"==typeof d?d+a:g.length+1;g.splice(c,0,b)},this)),this._setInitialStates({nodes:this._tree},0).done(a.proxy(function(){c&&!c.state.expanded&&this._setExpanded(c,!0,e),this._render()},this))},g.prototype.addNodeAfter=function(b,c,d){b instanceof Array||(b=[b]),c instanceof Array&&(c=c[0]),d=a.extend({},f.options,d),this.addNode(b,this.getParents(c)[0],c.index+1,d)},g.prototype.addNodeBefore=function(b,c,d){b instanceof Array||(b=[b]),c instanceof Array&&(c=c[0]),d=a.extend({},f.options,d),this.addNode(b,this.getParents(c)[0],c.index,d)},g.prototype.removeNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c);var d,e;a.each(b,a.proxy(function(a,b){e=this._nodes[b.parentId],d=e?e.nodes:this._tree,d.splice(b.index,1),this._removeNodeEl(b)},this)),this._setInitialStates({nodes:this._tree},0).done(this._render.bind(this))},g.prototype.updateNode=function(b,c,d){b instanceof Array&&(b=b[0]),d=a.extend({},f.options,d);var e,g=this._nodes[b.parentId];e=g?g.nodes:this._tree,e.splice(b.index,1,c),this._removeNodeEl(b),this._setInitialStates({nodes:this._tree},0).done(this._render.bind(this))},g.prototype.selectNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setSelected(b,!0,c)},this))},g.prototype.unselectNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setSelected(b,!1,c)},this))},g.prototype.toggleNodeSelected=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._toggleSelected(b,c)},this))},g.prototype.collapseAll=function(b){b=a.extend({},f.options,b),b.levels=b.levels||999,this.collapseNode(this._tree,b)},g.prototype.collapseNode=function(b,c){c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setExpanded(b,!1,c)},this))},g.prototype.expandAll=function(b){b=a.extend({},f.options,b),b.levels=b.levels||999,this.expandNode(this._tree,b)},g.prototype.expandNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){b.state.expanded||("function"==typeof this._options.lazyLoad&&b.lazyLoad&&this._lazyLoad(b),this._setExpanded(b,!0,c),b.nodes&&this._expandLevels(b.nodes,c.levels-1,c))},this))},g.prototype._expandLevels=function(b,c,d){b instanceof Array||(b=[b]),d=a.extend({},f.options,d),a.each(b,a.proxy(function(a,b){this._setExpanded(b,c>0,d),b.nodes&&this._expandLevels(b.nodes,c-1,d)},this))},g.prototype.revealNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){for(var d,e=b;d=this.getParents([e])[0];)e=d,this._setExpanded(e,!0,c)},this))},g.prototype.toggleNodeExpanded=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._toggleExpanded(b,c)},this))},g.prototype.checkAll=function(b){b=a.extend({},f.options,b);var c=a.grep(this._orderedNodes,function(a){return!a.state.checked});a.each(c,a.proxy(function(a,c){this._setChecked(c,!0,b)},this))},g.prototype.checkNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setChecked(b,!0,c)},this))},g.prototype.uncheckAll=function(b){b=a.extend({},f.options,b);var c=a.grep(this._orderedNodes,function(a){return a.state.checked||a.state.checked===d});a.each(c,a.proxy(function(a,c){this._setChecked(c,!1,b)},this))},g.prototype.uncheckNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setChecked(b,!1,c)},this))},g.prototype.toggleNodeChecked=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._toggleChecked(b,c)},this))},g.prototype.unmarkCheckboxChanges=function(){this._inheritCheckboxChanges(),a.each(this._nodes,function(a,b){b.$el.removeClass("node-check-changed")})},g.prototype.disableAll=function(b){b=a.extend({},f.options,b);var c=this._findNodes("false","state.disabled");a.each(c,a.proxy(function(a,c){this._setDisabled(c,!0,b)},this))},g.prototype.disableNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setDisabled(b,!0,c)},this))},g.prototype.enableAll=function(b){b=a.extend({},f.options,b);var c=this._findNodes("true","state.disabled");a.each(c,a.proxy(function(a,c){this._setDisabled(c,!1,b)},this))},g.prototype.enableNode=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setDisabled(b,!1,c)},this))},g.prototype.toggleNodeDisabled=function(b,c){b instanceof Array||(b=[b]),c=a.extend({},f.options,c),a.each(b,a.proxy(function(a,b){this._setDisabled(b,!b.state.disabled,c)},this))},g.prototype.search=function(b,c){c=a.extend({},f.searchOptions,c);var d=this._getSearchResults(),e=[];if(b&&b.length>0){c.exactMatch&&(b="^"+b+"$");var g="g";c.ignoreCase&&(g+="i"),e=this._findNodes(b,"text",g)}return a.each(this._diffArray(e,d),a.proxy(function(a,b){this._setSearchResult(b,!1,c)},this)),a.each(this._diffArray(d,e),a.proxy(function(a,b){this._setSearchResult(b,!0,c)},this)),e&&c.revealResults&&this.revealNode(e),this._triggerEvent("searchComplete",e,c),e},g.prototype.clearSearch=function(b){b=a.extend({},{render:!0},b);var c=a.each(this._getSearchResults(),a.proxy(function(a,c){this._setSearchResult(c,!1,b)},this));this._triggerEvent("searchCleared",c,b)},g.prototype._getSearchResults=function(){return this._findNodes("true","searchResult")},g.prototype._diffArray=function(b,c){var d=[];return a.grep(c,function(c){a.inArray(c,b)===-1&&d.push(c)}),d},g.prototype._findNodes=function(b,c,d){return c=c||"text",d=d||"g",a.grep(this._orderedNodes,a.proxy(function(a){var e=this._getNodeValue(a,c);if("string"==typeof e)return e.match(new RegExp(b,d))},this))},g.prototype._getNodeValue=function(a,b){var c=b.indexOf(".");if(c>0){var e=a[b.substring(0,c)],f=b.substring(c+1,b.length);return this._getNodeValue(e,f)}return a.hasOwnProperty(b)&&a[b]!==d?a[b].toString():d};var h=function(a){b.console&&b.console.error(a)};a.fn[e]=function(b,c){var d;return this.each(function(){var f=a.data(this,e);"string"==typeof b?f?a.isFunction(f[b])&&"_"!==b.charAt(0)?(c instanceof Array||(c=[c]),d=f[b].apply(f,c)):h("No such method : "+b):h("Not initialized, can not call method : "+b):"boolean"==typeof b?d=f:a.data(this,e,new g(this,a.extend(!0,{},b)))}),d||this}}(jQuery,window,document);
\ No newline at end of file