myems-admin/js/jcui/angular.integralui.treeview.min.js

Summary

Maintainability
F
3 mos
Test Coverage
/*
  filename: angular.integralui.treeview.min.js
  version : 3.3.445
  Copyright � 2014-2018 Lidor Systems. All rights reserved.

  This file is part of the "IntegralUI" Library. 
                                                                   
  The contents of this file are subject to the IntegralUI Studio for Web License, and may not be used except in compliance with the License.
  A copy of the License should have been installed in the product's root installation directory or it can be found at
  http://www.lidorsystems.com/products/web/studio/license-agreement.aspx.
                                                            
  This SOFTWARE is provided "AS IS", WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language 
  governing rights and limitations under the License. Any infringement will be prosecuted under applicable laws.                           
*/
angular
  .module("integralui")
  .factory("IntegralUITreeViewService", [
    "$rootScope",
    function(c) {
      var q = null;
      return {
        addItem: function(e, l, n) {
          c.$broadcast(e + "-add-item", l, n);
        },
        clearItems: function(e, l) {
          c.$broadcast(e + "-clear-items", l);
        },
        insertItemAt: function(e, l, n, f) {
          c.$broadcast(e + "-insert-item-at", l, n, f);
        },
        insertItemBefore: function(e, l, n) {
          c.$broadcast(e + "-insert-item-before", l, n);
        },
        insertItemAfter: function(e, l, n) {
          c.$broadcast(e + "-insert-item-after", l, n);
        },
        removeItem: function(e, l) {
          c.$broadcast(e + "-remove-item", l);
        },
        removeItemAt: function(e, l, n) {
          c.$broadcast(e + "-remove-item-at", l, n);
        },
        exportToJSON: function(e, l, n, f) {
          c.$broadcast(e + "-export-json", l, n, f);
          e = this.getTempData();
          this.clearTempData();
          return e ? e : "";
        },
        loadData: function(e, l, n, f, k) {
          c.$broadcast(e + "-load-data", l, n, f, k);
          l = this.getTempData();
          this.clearTempData();
          return l ? l : null;
        },
        openEditor: function(e, l) {
          c.$broadcast(e + "-open-editor", l);
        },
        closeEditor: function(e, l) {
          c.$broadcast(e + "-close-editor", l);
        },
        collapse: function(e, l) {
          c.$broadcast(e + "-collapse", l);
        },
        expand: function(e, l) {
          c.$broadcast(e + "-expand", l);
        },
        toggle: function(e, l) {
          c.$broadcast(e + "-toggle", l);
        },
        findItemById: function(e, l) {
          c.$broadcast(e + "-find-item-by-id", l);
          var n = this.getTempData();
          this.clearTempData();
          return n ? n : null;
        },
        findItemByText: function(e, l) {
          c.$broadcast(e + "-find-item-by-text", l);
          var n = this.getTempData();
          this.clearTempData();
          return n ? n : null;
        },
        getItemParent: function(e, l) {
          c.$broadcast(e + "-get-item-parent", l);
          var n = this.getTempData();
          this.clearTempData();
          return n ? n : null;
        },
        getItemAt: function(e, l) {
          c.$broadcast(e + "-get-item-at", l);
          var n = this.getTempData();
          this.clearTempData();
          return n ? n : null;
        },
        filter: function(e, l) {
          c.$broadcast(e + "-filter", l);
        },
        focus: function(e, l) {
          c.$broadcast(e + "-focus", l);
        },
        clearTempData: function() {
          q = null;
        },
        ensureVisible: function(e, l, n) {
          c.$broadcast(e + "-ensure-visible", l, n);
        },
        getCheckList: function(e, l) {
          c.$broadcast(e + "-get-check-list", l);
          var n = this.getTempData();
          this.clearTempData();
          return n ? n : [];
        },
        getItemLevel: function(e, l) {
          c.$broadcast(e + "-get-item-level", l);
          var n = this.getTempData();
          this.clearTempData();
          return n ? n : 0;
        },
        getFlatList: function(e, l) {
          c.$broadcast(e + "-get-flat-list", l);
          var n = this.getTempData();
          this.clearTempData();
          return n ? n : [];
        },
        getFullPath: function(e, l) {
          c.$broadcast(e + "-get-full-path", l);
          var n = this.getTempData();
          this.clearTempData();
          return n ? n : "";
        },
        getList: function(e, l, n) {
          c.$broadcast(e + "-get-list", l, n);
          e = this.getTempData();
          this.clearTempData();
          return e ? e : [];
        },
        getTempData: function() {
          return q;
        },
        setTempData: function(c) {
          q = c;
        },
        beginLoad: function(e, l, n) {
          c.$broadcast(e + "-begin-load", l, n);
        },
        endLoad: function(e, l) {
          c.$broadcast(e + "-end-load", l);
        },
        moveItem: function(e, l, n, f, k) {
          c.$broadcast(e + "-move-item", l, n, f, k);
        },
        clearSelection: function(e) {
          c.$broadcast(e + "-clear-selection");
        },
        selectedItem: function(e, l) {
          if (l) c.$broadcast(e + "-set-selected-item", l);
          else {
            c.$broadcast(e + "-get-selected-item");
            var n = this.getTempData();
            this.clearTempData();
            return n ? n : null;
          }
        },
        selectedItems: function(e, l) {
          if (l) c.$broadcast(e + "-set-selected-items", l);
          else {
            c.$broadcast(e + "-get-selected-items");
            var n = this.getTempData();
            this.clearTempData();
            return n ? n : null;
          }
        },
        getScrollPos: function(e) {
          c.$broadcast(e + "-get-scroll-pos");
          e = this.getTempData();
          this.clearTempData();
          return e ? e : { x: 0, y: 0 };
        },
        setScrollPos: function(e, l) {
          c.$broadcast(e + "-set-scroll-pos", l);
        },
        scrollTo: function(e, l, n) {
          c.$broadcast(e + "-scroll-to", l, n);
        },
        sort: function(e, l, n) {
          c.$broadcast(e + "-sort", l, n);
        },
        updateCheckValues: function(e, l) {
          c.$broadcast(e + "-update-check", l);
        },
        refresh: function(e, l, n) {
          c.$broadcast(e + "-refresh", l, n);
        },
        resumeLayout: function(e) {
          c.$broadcast(e + "-resume-layout");
        },
        suspendLayout: function(e) {
          c.$broadcast(e + "-suspend-layout");
        },
        updateLayout: function(e) {
          c.$broadcast(e + "-update-layout");
        },
        updateView: function(e) {
          c.$broadcast(e + "-update-view");
        }
      };
    }
  ])
  .controller("IntegralUITreeViewController", [
    "$scope",
    "$element",
    "$timeout",
    "$window",
    "$q",
    "IntegralUIInternalService",
    "IntegralUIDataService",
    "IntegralUITreeViewService",
    "IntegralUIDragDrop",
    "IntegralUIFilter",
    function(c, q, e, l, n, f, k, m, U, a) {
      var b = this;
      b.hoverItem = null;
      this.suppressProcess = !1;
      b.defaultCheckBoxStyle = {
        general: "iui-checkbox",
        box: {
          general: "iui-checkbox-box",
          disabled: "iui-checkbox-box-disabled",
          checked: "iui-checkbox-checked",
          indeterminate: "iui-checkbox-indeterminate",
          unchecked: "iui-checkbox-unchecked"
        }
      };
      b.defaultStyle = {
        general: "iui-treeview",
        item: {
          general: {
            disabled: "iui-treeview-item-disabled",
            focused: "iui-treeview-item-focused",
            normal: "iui-treeview-item",
            hovered: "iui-treeview-item-hovered",
            selected: "iui-treeview-item-selected"
          },
          checkBox: {
            general: "iui-checkbox",
            box: {
              general: "iui-checkbox-box",
              disabled: "iui-checkbox-box-disabled",
              checked: "iui-checkbox-checked",
              indeterminate: "iui-checkbox-indeterminate",
              unchecked: "iui-checkbox-unchecked"
            }
          },
          expandBox: {
            general: "iui-treeview-expand-box",
            animated: "iui-treeview-expand-box-load",
            expanded: "iui-treeview-expand-box-open",
            collapsed: "iui-treeview-expand-box-close"
          },
          content: {
            disabled: "iui-treeview-item-content-disabled",
            focused: "iui-treeview-item-content-focused",
            normal: "iui-treeview-item-content",
            hovered: "iui-treeview-item-content-hovered",
            selected: "iui-treeview-item-content-selected"
          },
          fixed: {
            disabled: "iui-treeview-item-fixed-disabled",
            normal: "iui-treeview-item-fixed",
            hovered: "iui-treeview-item-fixed-hovered"
          }
        }
      };
      b.defaultCheckBoxSettings = {
        autoCheck: !1,
        style: b.defaultCheckBoxStyle,
        threeState: !1
      };
      this.updateOptions = function(d) {
        d
          ? ((b.options = {
              allowAnimation: f.isFieldAvailable(d.allowAnimation, !0),
              allowDrag: f.isFieldAvailable(d.allowDrag, !1),
              allowDrop: f.isFieldAvailable(d.allowDrop, !0),
              allowFocus: f.isFieldAvailable(d.allowFocus, !0),
              animationSpeed: 200,
              autoCheck: f.isFieldAvailable(d.autoCheck, !1),
              autoExpand: f.isFieldAvailable(d.autoExpand, !0),
              autoSize: f.isFieldAvailable(d.autoSize, !1),
              autoUpdate: f.isFieldAvailable(d.autoUpdate, !0),
              checkBoxSettings: b.defaultCheckBoxSettings,
              controlStyle: b.defaultStyle,
              editorSettings: { activate: "click" },
              enabled: f.isFieldAvailable(d.enabled, !0),
              hoverSelection: f.isFieldAvailable(d.hoverSelection, !1),
              indent: f.isFieldAvailable(d.indent, 15),
              itemIcon: f.isFieldAvailable(d.itemIcon, ""),
              itemSpacing: f.isFieldAvailable(d.itemSpacing, 1),
              labelEdit: f.isFieldAvailable(d.labelEdit, !1),
              loadItems: [],
              maxItems: f.isFieldAvailable(d.maxItems, 0),
              mouseWheelSpeed: f.isFieldAvailable(d.mouseWheelSpeed, "normal"),
              pathSeparator: f.isFieldAvailable(d.pathSeparator, "\\"),
              rtl: f.isFieldAvailable(d.rtl, !1),
              selectedIndex: -1,
              selectedItem: f.isFieldAvailable(
                d.selectedItem,
                b.options.selectedItem ? b.options.selectedItem : null
              ),
              selectedItems: [],
              selectionMode: f.isFieldAvailable(d.selectionMode, "one"),
              showCheckBoxes: f.isFieldAvailable(d.showCheckBoxes, !1),
              showExpandBoxes: f.isFieldAvailable(d.showExpandBoxes, !0),
              showIcons: f.isFieldAvailable(d.showIcons, !0),
              showLines: f.isFieldAvailable(d.showLines, !1),
              showStatusIcons: f.isFieldAvailable(d.showStatusIcons, !1),
              sorting: f.isFieldAvailable(d.sorting, "none")
            }),
            b.updateDataFields(d.dataFields),
            b.updateControlStyle(d.controlStyle),
            b.updateCheckBoxSettings(d.checkBoxSettings),
            b.updateTemplateSettings(d.templateSettings))
          : ((b.options = {
              allowAnimation: !0,
              allowDrag: !1,
              allowDrop: !0,
              allowFocus: !0,
              animationSpeed: 200,
              autoCheck: !1,
              autoExpand: !0,
              autoSize: !1,
              autoUpdate: !0,
              checkBoxSettings: b.defaultCheckBoxSettings,
              controlStyle: b.defaultStyle,
              editorSettings: { activate: "click" },
              enabled: !0,
              hoverSelection: !1,
              indent: 15,
              itemIcon: "",
              itemSpacing: 1,
              labelEdit: !1,
              loadItems: [],
              maxItems: 0,
              mouseWheelSpeed: "normal",
              pathSeparator: "\\",
              rtl: !1,
              selectedIndex: -1,
              selectedItem: null,
              selectedItems: [],
              selectionMode: "one",
              showCheckBoxes: !1,
              showExpandBoxes: !0,
              showIcons: !0,
              showLines: !1,
              showStatusIcons: !1,
              sorting: "none",
              templateSettings: { url: null }
            }),
            b.updateDataFields());
      };
      b.options = {};
      this.updateDataFields = function(d) {
        b.options.dataFields = d
          ? {
              allowDrag: d.allowDrag ? d.allowDrag : "allowDrag",
              allowDrop: d.allowDrop ? d.allowDrop : "allowDrop",
              allowEdit: d.allowEdit ? d.allowEdit : "allowEdit",
              allowFocus: d.allowFocus ? d.allowFocus : "allowFocus",
              autoCheck: d.autoCheck ? d.autoCheck : "autoCheck",
              checkBoxSettings: d.checkBoxSettings
                ? d.checkBoxSettings
                : "checkBoxSettings",
              checked: d.checked ? d.checked : "checked",
              checkState: d.checkState ? d.checkState : "checkState",
              content: d.content ? d.content : "content",
              contextMenu: d.contextMenu ? d.contextMenu : "contextMenu",
              enabled: d.enabled ? d.enabled : "enabled",
              expanded: d.expanded ? d.expanded : "expanded",
              fixed: d.fixed ? d.fixed : "fixed",
              fixChildren: d.fixChildren ? d.fixChildren : "fixChildren",
              hasChildren: d.hasChildren ? d.hasChildren : "hasChildren",
              icon: d.icon ? d.icon : "icon",
              id: d.id ? d.id : "id",
              items: d.items ? d.items : "items",
              pid: d.pid ? d.pid : "pid",
              selected: d.selected ? d.selected : "selected",
              showCheckBox: d.showCheckBox ? d.showCheckBox : "showCheckBox",
              statusIcon: d.statusIcon ? d.statusIcon : "statusIcon",
              style: d.style ? d.style : "style",
              templateObj: d.templateObj ? d.templateObj : "templateObj",
              text: d.text ? d.text : "text",
              tooltip: d.tooltip ? d.tooltip : "tooltip",
              value: d.value ? d.value : "value",
              visible: d.visible ? d.visible : "visible"
            }
          : {
              allowDrag: "allowDrag",
              allowDrop: "allowDrop",
              allowEdit: "allowEdit",
              allowFocus: "allowFocus",
              autoCheck: "autoCheck",
              checkBoxSettings: "checkBoxSettings",
              checked: "checked",
              checkState: "checkState",
              content: "content",
              contextMenu: "contextMenu",
              enabled: "enabled",
              expanded: "expanded",
              fixed: "fixed",
              fixChildren: "fixChildren",
              hasChildren: "hasChildren",
              icon: "icon",
              id: "id",
              items: "items",
              pid: "pid",
              selected: "selected",
              showCheckBox: "showCheckBox",
              statusIcon: "statusIcon",
              style: "style",
              templateObj: "templateObj",
              text: "text",
              tooltip: "tooltip",
              value: "value",
              visible: "visible"
            };
        b.dataObj &&
          b.dataObj.updateDataFields(b.getDataFields(b.options.dataFields));
      };
      this.updateTemplateSettings = function(d) {
        b.options.templateSettings = d
          ? {
              display: f.isFieldAvailable(d.display, "block"),
              url: f.isFieldAvailable(d.url, null)
            }
          : { display: "block", url: null };
      };
      b.updateOptions();
      c.$on(c.name + "-add-item", function(d, a, c) {
        b.dataObj.insertAt(a, -1, c, b.itemIsAdded);
      });
      c.$on(c.name + "-clear-items", function(d, a) {
        b.dataObj.clear(a, b.listIsCleared);
      });
      c.$on(c.name + "-insert-item-at", function(d, a, c, r) {
        b.dataObj.insertAt(a, c, r, b.itemIsAdded);
      });
      c.$on(c.name + "-insert-item-after", function(d, a, c) {
        b.dataObj.insertByRef(a, c, !0, b.itemIsAdded);
      });
      c.$on(c.name + "-insert-item-before", function(d, a, c) {
        b.dataObj.insertByRef(a, c, !1, b.itemIsAdded);
      });
      c.$on(c.name + "-remove-item", function(d, a) {
        b.dataObj.removeAt(a, -1, null, b.itemIsRemoved);
      });
      c.$on(c.name + "-remove-item-at", function(d, a, c) {
        b.dataObj.removeAt(null, a, c, b.itemIsRemoved);
      });
      this.listIsCleared = function(d) {
        d ||
          (b.clearPrevSelection(),
          (b.options.selectedItem = null),
          b.setScrollPos({ x: 0, y: 0 }));
        b.updateCurrentLayout();
      };
      this.itemIsAdded = function() {
        b.updateCurrentLayout();
      };
      this.itemIsRemoved = function(d) {
        d &&
          ((d[b.options.dataFields.selected] = !1),
          d == b.options.selectedItem && (b.options.selectedItem = null));
        b.updateCurrentLayout();
      };
      this.objIsRemoved = function() {
        b.updateCurrentLayout();
      };
      this.getCheckValue = function(d) {
        return "checked" == d[b.options.dataFields.checkState]
          ? "checked"
          : 1 == b.options.checkBoxSettings.threeState &&
            "indeterminate" == d[b.options.dataFields.checkState]
          ? "indeterminate"
          : "unchecked";
      };
      this.changeCheckValue = function(d) {
        if (
          1 == b.options.autoCheck ||
          1 == b.options.checkBoxSettings.autoCheck
        ) {
          var a = b.getCheckValue(d);
          if (
            !1 !==
            (1 == b.options.checkBoxSettings.threeState
              ? b.callCheckValueChanging(d, a)
              : b.callCheckValueChanging(d, "checked" == a ? !0 : !1))
          ) {
            if (1 == b.options.checkBoxSettings.threeState)
              switch (a) {
                case "checked":
                  a = "unchecked";
                  break;
                case "indeterminate":
                  a = "checked";
                  break;
                case "unchecked":
                  a = "indeterminate";
              }
            else
              a =
                "unchecked" == a || "indeterminate" == a
                  ? "checked"
                  : "unchecked";
            d[b.options.dataFields.checkState] = a;
            d[b.options.dataFields.checked] = "checked" == a ? !0 : !1;
            c.$apply();
          }
        }
      };
      this.callCheckValueChanging = function(d, a) {
        var h = !0;
        b.allowEvents &&
          (h =
            1 == b.options.checkBoxSettings.threeState
              ? angular.isDefined(c.events) && c.events.itemCheckstateChanging
                ? c.events.itemCheckstateChanging({ item: d, value: a })
                : c.itemCheckstateChanging({ e: { item: d, value: a } })
              : angular.isDefined(c.events) && c.events.itemCheckedChanging
              ? c.events.itemCheckedChanging({ item: d, value: a })
              : c.itemCheckedChanging({ e: { item: d, value: a } }));
        return h;
      };
      this.callCheckValueChanged = function(d, a) {
        b.allowEvents &&
          (retValue =
            1 == b.options.checkBoxSettings.threeState
              ? angular.isDefined(c.events) && c.events.itemCheckstateChanged
                ? c.events.itemCheckstateChanged({ item: d, value: a })
                : c.itemCheckstateChanged({ e: { item: d, value: a } })
              : angular.isDefined(c.events) && c.events.itemCheckedChanged
              ? c.events.itemCheckedChanged({ item: d, value: a })
              : c.itemCheckedChanged({ e: { item: d, value: a } }));
      };
      var w = [],
        H = !1;
      this.fillCheckList = function(d) {
        if (
          b.allowEvents &&
          d &&
          1 == b.options.checkBoxSettings.threeState &&
          !H
        ) {
          H = !0;
          w.length = 0;
          w.push({ item: d, value: d[b.options.dataFields.checkState] });
          b.updateListChildItemCheckValue(d);
          b.updateListParentItemCheckValue(d);
          var a = 0;
          for (a = 0; a < w.length; a++)
            w[a].item[b.options.dataFields.checkState] = w[a].value;
          var c = e(function() {
            a == w.length && (H = !1);
            e.cancel(c);
          }, 1);
        }
      };
      this.getItemCheckValue = function(d) {
        for (var a = "unchecked", c = !1, r = 0; r < w.length; r++)
          if (w[r].item == d) {
            c = !0;
            a = w[r].value;
            break;
          }
        c || (a = d[b.options.dataFields.checkState]);
        return a;
      };
      this.updateListParentItemCheckValue = function(d) {
        for (d = b.getParent(d); d; ) {
          var a = d[b.options.dataFields.items];
          if (a) {
            for (var c = 0, r = 0, e = 0; e < a.length; e++) {
              var f = b.getItemCheckValue(a[e]);
              "checked" == f ? c++ : "indeterminate" == f && r++;
            }
            e = { item: d };
            e.value =
              c == a.length
                ? "checked"
                : 0 < c || 0 < r
                ? "indeterminate"
                : "unchecked";
            w.push(e);
          }
          d = b.getParent(d);
        }
      };
      this.updateListChildItemCheckValue = function(d) {
        if (d) {
          var a = d[b.options.dataFields.items];
          if (a)
            for (var c = 0; c < a.length; c++) {
              var r = { item: a[c] };
              "checked" == b.getItemCheckValue(d)
                ? (r.value = "checked")
                : (r.value = "unchecked");
              w.push(r);
              b.updateListChildItemCheckValue(a[c]);
            }
        }
      };
      this.updateParentItemCheckValue = function(d) {
        for (d = b.getParent(d); d; ) {
          var a = d[b.options.dataFields.items];
          if (a) {
            for (var c = 0, r = 0, e = 0; e < a.length; e++)
              "checked" == a[e][b.options.dataFields.checkState]
                ? c++
                : "indeterminate" == a[e][b.options.dataFields.checkState] &&
                  r++;
            d[b.options.dataFields.checkState] =
              c == a.length
                ? "checked"
                : 0 < c || 0 < r
                ? "indeterminate"
                : "unchecked";
          }
          d = b.getParent(d);
        }
      };
      this.updateItemCheckValue = function(d, a) {
        if ("checked" == a || "unchecked" == a)
          d[b.options.dataFields.checkState] = a;
        var h = d[b.options.dataFields.items];
        if (h && 0 < h.length)
          for (var c = 0; c < h.length; c++)
            b.updateItemCheckValue(h[c], d[b.options.dataFields.checkState]);
        void 0 != d[b.options.dataFields.checkState] &&
          (h = b.getParent(d)) &&
          h[b.options.dataFields.checkState] !=
            d[b.options.dataFields.checkState] &&
          b.updateParentItemCheckValue(d);
      };
      this.updateCheckValues = function(d) {
        if (1 == b.options.checkBoxSettings.threeState) {
          d = b.dataObj.getList(d);
          for (var a = 0; a < d.length; a++) b.updateItemCheckValue(d[a]);
        }
      };
      c.$on(c.name + "-update-check", function(d, a) {
        b.updateCheckValues(a);
      });
      c.$on(c.name + "-get-check-list", function(d, h) {
        b.updateCheckValues();
        void 0 == h &&
          (h = 1 == b.options.checkBoxSettings.threeState ? "checked" : !0);
        var c =
            1 == b.options.checkBoxSettings.threeState
              ? b.options.dataFields.checkState
              : b.options.dataFields.checked,
          r = { operation: "=", value: h };
        c = a.filter(b.getFullList(), c, r);
        m.setTempData(c);
      });
      this.updateCheckBoxSettings = function(d) {
        b.options.checkBoxSettings = d
          ? {
              autoCheck: f.isFieldAvailable(d.autoCheck, !1),
              style: Ka(d.style),
              threeState: f.isFieldAvailable(d.threeState, !1)
            }
          : { autoCheck: !1, style: b.defaultCheckBoxStyle, threeState: !1 };
      };
      var C = function(d) {
          return d ? a.createTree(d.conditions, d.formula) : null;
        },
        I = function(d) {
          if (0 == d[b.options.dataFields.visible]) return !1;
          var h = !0;
          if (d && b.filterParams)
            if (
              ((h = (h = d[b.options.dataFields.value])
                ? h
                : d[b.options.dataFields.text]),
              b.filterParams.callback)
            )
              h = b.filterParams.callback(h, d);
            else if (
              ((h = a.match(
                h,
                b.filterParams.conditions,
                b.filterParams.formula,
                C(b.filterParams),
                b.filterParams.caseSensitive
              )),
              !h &&
                b.filterParams.allowParent &&
                ((h = !1), (d = d[b.options.dataFields.items])))
            )
              for (var c = 0; c < d.length && !(h = I(d[c])); c++);
          return h;
        },
        y = 0;
      b.currentList = [];
      b.indentList = [];
      b.parentList = [];
      b.longestItem = null;
      b.isThereChildItems = !1;
      b.currentTopList = [];
      b.currentBottomList = [];
      this.updateLongestItem = function() {
        b.longestItem = null;
        for (var d = (y = 0); d < b.currentList.length; d++) {
          var a = b.currentList[d];
          if (a[b.options.dataFields.text]) {
            var c = a[b.options.dataFields.text].length;
            0 < b.options.indent && (c += b.indentList[d] / b.options.indent);
            y < c && ((y = c), (b.longestItem = a));
          }
        }
      };
      var A = function(d, a, c, r, e) {
        d.type = "item";
        d[b.options.dataFields.id] ||
          (d[b.options.dataFields.id] = f.getUniqueId());
        c && (d[b.options.dataFields.pid] = c);
        if ((c = I(d)))
          if (r) b.fullList.push(d);
          else {
            r = a;
            0 != b.options.showStatusIcons && (r += 15);
            switch (d[b.options.dataFields.fixed]) {
              case "top":
                b.currentTopList.push(d);
                break;
              case "bottom":
                b.currentBottomList.push(d);
                break;
              default:
                b.currentList.push(d),
                  b.indentList.push(r),
                  b.parentList.push({ parent: e });
            }
            d[b.options.dataFields.text] &&
              ((e = d[b.options.dataFields.text].length),
              0 < b.options.indent && (e += a / b.options.indent),
              0 != b.options.showStatusIcons && (e += 15),
              y < e && ((y = e), (b.longestItem = d)));
          }
        return c;
      };
      this.isThereVisibleChildren = function(d) {
        var a = !1;
        if (d && (d = d[b.options.dataFields.items]))
          for (var c = 0; c < d.length; c++)
            if (I(d[c]) && !b.isItemFixed(d[c])) {
              a = !0;
              break;
            }
        return a;
      };
      this.isItemFixed = function(d) {
        return "top" == d[b.options.dataFields.fixed] ||
          "bottom" == d[b.options.dataFields.fixed]
          ? !0
          : !1;
      };
      this.isThereChildItems = !1;
      var O = function(d, a, c, r, e) {
        if (!d[b.options.dataFields.items]) return (c = A(d, a, c, r, e));
        if ((c = A(d, a, c, r, e)) && !b.isItemFixed(d)) {
          e = 0;
          var h;
          if (
            r ||
            b.isItemExpanded(d) ||
            (b.isItemFixed(d) && d[b.options.dataFields.fixChildren])
          ) {
            var u = d[b.options.dataFields.items];
            if (u) {
              b.applySorting(u);
              for (var f = 0; f < u.length; f++)
                (h = O(
                  u[f],
                  a + b.options.indent,
                  d[b.options.dataFields.id],
                  r,
                  d
                )) && e++;
            }
          }
          r ||
            b.isThereChildItems ||
            !(
              0 < e ||
              (!b.isItemExpanded(d) &&
                d[b.options.dataFields.items] &&
                0 < d[b.options.dataFields.items].length &&
                b.isThereVisibleChildren(d))
            ) ||
            (b.isThereChildItems = !0);
        }
        return c;
      };
      b.fullList = [];
      this.getFullList = function(d) {
        b.fullList.length = 0;
        d = b.dataObj.getList(d);
        for (var a = 0; a < d.length; a++) O(d[a], 0, null, !0, null);
        return b.fullList;
      };
      this.getCurrentList = function() {
        return b.currentList;
      };
      this.updateCurrentList = function() {
        b.currentList.length = 0;
        b.indentList.length = 0;
        b.parentList.length = 0;
        b.longestItem = null;
        b.currentTopList.length = 0;
        b.currentBottomList.length = 0;
        b.isThereChildItems = !1;
        y = 0;
        var d = b.dataObj.getList();
        if (d) {
          b.applySorting(d);
          for (var a = 0; a < d.length; a++) O(d[a], 0, null, !1);
        }
      };
      this.dataEvents = {
        clear: function(d) {
          return angular.isDefined(c.events) && c.events.clear
            ? c.events.clear({ parent: d.e.parent })
            : c.clear(d);
        },
        objAdded: function(d) {
          return angular.isDefined(c.events) && c.events.itemAdded
            ? c.events.itemAdded({ item: d.e.item })
            : c.itemAdded(d);
        },
        objAdding: function(d) {
          return angular.isDefined(c.events) && c.events.itemAdding
            ? c.events.itemAdding({ item: d.e.item })
            : c.itemAdding(d);
        },
        objRemoved: function(d) {
          return angular.isDefined(c.events) && c.events.itemRemoved
            ? c.events.itemRemoved({ item: d.e.item })
            : c.itemRemoved(d);
        },
        objRemoving: function(d) {
          return angular.isDefined(c.events) && c.events.itemRemoving
            ? c.events.itemRemoving({ item: d.e.item })
            : c.itemRemoving(d);
        }
      };
      this.getDataFields = function(d) {
        return {
          content: d.content ? d.content : "content",
          icon: d.icon ? d.icon : "icon",
          id: d.id ? d.id : "id",
          pid: d.pid ? d.pid : "pid",
          objects: d.items ? d.items : "items",
          statusIcon: d.statusIcon ? d.statusIcon : "statusIcon",
          text: d.text ? d.text : "text"
        };
      };
      b.dataObj = new k({
        objects: c.items,
        events: b.dataEvents,
        fields: b.getDataFields(b.options.dataFields)
      });
      c.$on(c.name + "-load-data", function(d, a, c, r, e) {
        m.setTempData(b.loadData(a, c, r, e));
      });
      c.$on(c.name + "-export-json", function(d, a, c, r) {
        m.setTempData(b.exportToJSON(a, c, r));
      });
      this.exportToJSON = function(d, a, c) {
        c = c ? c : null;
        var h = !1 !== a ? b.getFullList() : b.dataObj.getList();
        d = d
          ? d
          : [
              b.options.dataFields.allowDrag,
              b.options.dataFields.allowDrop,
              b.options.dataFields.allowEdit,
              b.options.dataFields.allowFocus,
              b.options.dataFields.autoCheck,
              b.options.dataFields.checkBoxSettings,
              b.options.dataFields.checked,
              b.options.dataFields.checkState,
              b.options.dataFields.content,
              b.options.dataFields.contextMenu,
              b.options.dataFields.enabled,
              b.options.dataFields.expanded,
              b.options.dataFields.fixed,
              b.options.dataFields.fixChildren,
              b.options.dataFields.hasChildren,
              b.options.dataFields.icon,
              b.options.dataFields.id,
              b.options.dataFields.pid,
              b.options.dataFields.selected,
              b.options.dataFields.showCheckBox,
              b.options.dataFields.statusIcon,
              b.options.dataFields.style,
              b.options.dataFields.templateObj,
              b.options.dataFields.text,
              b.options.dataFields.tooltip,
              b.options.dataFields.value,
              b.options.dataFields.visible
            ];
        !1 === a && d.push(b.options.dataFields.items);
        return JSON.stringify(h, d, c);
      };
      this.loadData = function(d, a, u, r) {
        var h = n.defer();
        b.suspendLayout();
        b.allowEvents = !1;
        b.updateDataFields(u);
        var f = [],
          l = b.options.dataFields;
        b.dataObj.clear(a, b.listIsCleared);
        if (d)
          if (r) {
            var m = [];
            d.forEach(function(d, a) {
              d[l.items] = [];
              var b = d[l.pid];
              m[b]
                ? (m[b][l.items] || (m[b][l.items] = []),
                  (m[d[l.id]] = d),
                  m[b][l.items].push(d))
                : ((m[d[l.id]] = d), f.push(d));
            });
            m.length = 0;
          } else f = d;
        if (a)
          for (
            a[b.options.dataFields.items] = f, d = 0;
            d < a[b.options.dataFields.items].length;
            d++
          )
            a[b.options.dataFields.items][d][b.options.dataFields.pid] =
              a[b.options.dataFields.id];
        else if (angular.isDefined(c.items))
          for (d = c.items.length = 0; d < f.length; d++) c.items.push(f[d]);
        b.dataObj = new k({
          objects: c.items,
          events: b.dataEvents,
          fields: b.getDataFields(b.options.dataFields)
        });
        var q = e(function() {
          b.getTemplateUrl();
          b.resumeLayout();
          b.allowEvents = !0;
          var d = e(function() {
            h.resolve();
            e.cancel(d);
          }, 125);
          e.cancel(q);
        }, 100);
        return h.promise;
      };
      this.updateData = function() {
        b.options.dataFields.dataSource &&
          (b.loadData(b.options.dataFields.dataSource),
          (b.dataObj = new k({
            objects: c.items,
            events: b.dataEvents,
            fields: b.getDataFields(b.options.dataFields)
          })));
      };
      var Y = !1;
      this.dragDropStatus = function(d) {
        if (void 0 != d) Y = d;
        else return Y;
      };
      this.getDnDSource = function(d) {
        return {
          text: d.dataTransfer
            ? d.dataTransfer.getData("text")
            : d.originalEvent.dataTransfer
            ? d.originalEvent.dataTransfer.getData("text")
            : ""
        };
      };
      this.getTouchData = function(d) {
        return d.changedTouches
          ? d.changedTouches
          : d.originalEvent
          ? d.originalEvent.changedTouches
          : null;
      };
      var ea = angular.element(
        '<div class="iui-drop-marker" data-element="dropmark"></div>'
      );
      this.getDropMarkLine = function() {
        return dropMarkLine;
      };
      b.getMousePos = function(d) {
        return {
          x: d.pageX ? d.pageX : d.originalEvent ? d.originalEvent.pageX : 0,
          y: d.pageY ? d.pageY : d.originalEvent ? d.originalEvent.pageY : 0
        };
      };
      this.getCtrlName = function() {
        return angular.isDefined(c.name) ? c.name : "";
      };
      q.bind("dragenter", function(d) {
        d.preventDefault();
        if (b.options.enabled) {
          var a = U.getData();
          a.source || (a.source = b.getDnDSource(d));
          d = {
            event: d,
            sourceTree: a.sourceCtrl ? a.sourceCtrl.getCtrlName() : "",
            dragItem: a.source,
            targetTree: b.getCtrlName(),
            targetItem: a.target,
            mousePos: b.getMousePos(d)
          };
          b.callDragEnter(d);
        }
      });
      this.isItemDragOverHandled = !1;
      q.bind("dragover", function(d) {
        if (!b.options.autoSize || !b.isItemDragOverHandled) {
          d.preventDefault();
          var a = !0;
          d.dataTransfer
            ? (a = "none" === d.dataTransfer.effectAllowed ? !1 : !0)
            : d.originalEvent &&
              d.originalEvent.dataTransfer &&
              (a =
                "none" === d.originalEvent.dataTransfer.effectAllowed
                  ? !1
                  : !0);
          if (b.options.enabled && a)
            if (
              (d.dataTransfer
                ? (d.dataTransfer.dropEffect = b.options.allowDrop
                    ? "move"
                    : "none")
                : d.originalEvent &&
                  d.originalEvent.dataTransfer &&
                  (d.originalEvent.dataTransfer.dropEffect = b.options.allowDrop
                    ? "move"
                    : "none"),
              (a = U.getData()),
              a.source || (a.source = b.getDnDSource(d)),
              U.setData({
                source: a.source,
                sourceCtrl: a.sourceCtrl,
                target: null,
                dropPos: -1
              }),
              (a = {
                event: d,
                sourceTree: a.sourceCtrl ? a.sourceCtrl.getCtrlName() : "",
                dragItem: a.source,
                targetTree: b.getCtrlName(),
                targetItem: null,
                isDropAllowed: b.options.allowDrop,
                dropPos: -1,
                mousePos: b.getMousePos(d)
              }),
              0 == b.callDragOver(a))
            )
              d.dataTransfer
                ? (d.dataTransfer.dropEffect = "none")
                : d.originalEvent &&
                  d.originalEvent.dataTransfer &&
                  (d.originalEvent.dataTransfer.dropEffect = "none"),
                b.dropMark();
            else {
              a = b.getMousePos(d);
              d = a.y + 16;
              a = a.x + 20;
              var u = b.getDropMarkWindow();
              u.empty();
              u.append(
                "<span class='iui-drop-marker-move-end'></span><span class='iui-drop-marker-title'>" +
                  (c.name ? c.name : "TreeView") +
                  "</span>"
              );
              b.updateDropMarkElem(b.getDropMarkWindow(), { top: d, left: a });
              b.dropMark(!0);
            }
        }
      });
      q.bind("drop", function(d) {
        d.preventDefault();
        b.dropMark();
        var a = !0;
        d.dataTransfer
          ? (a = "none" === d.dataTransfer.effectAllowed ? !1 : !0)
          : d.originalEvent &&
            d.originalEvent.dataTransfer &&
            (a =
              "none" === d.originalEvent.dataTransfer.effectAllowed ? !1 : !0);
        if (
          b.options.enabled &&
          a &&
          ((a = U.getData()),
          a.source || (a.source = b.getDnDSource(d)),
          a.source)
        ) {
          var u = {
            event: d,
            sourceTree: a.sourceCtrl ? a.sourceCtrl.getCtrlName() : "",
            dragItem: a.source,
            targetTree: b.getCtrlName(),
            targetItem: null,
            isDropAllowed: b.options.allowDrop,
            dropPos: -1,
            mousePos: b.getMousePos(d)
          };
          !1 !== b.callDragDrop(u) && (b.drop(a), c.$$phase || c.$apply());
        }
        U.clearData();
        d.stopPropagation();
      });
      q.bind("dragleave", function(d) {
        d.preventDefault();
        if (b.options.enabled) {
          b.dropMark();
          var a = U.getData();
          a.source || (a.source = b.getDnDSource(d));
          d = {
            event: d,
            sourceTree: a.sourceCtrl ? a.sourceCtrl.getCtrlName() : "",
            dragItem: a.source,
            targetTree: b.getCtrlName(),
            targetItem: a.target,
            mousePos: b.getMousePos(d)
          };
          b.callDragLeave(d);
          b.cancelScrollTimer();
        }
      });
      q.bind("dragend", function(d) {
        d.preventDefault();
        b.options.enabled &&
          (b.dropMark(),
          U.getData().source || U.clearData(),
          b.dragDropStatus(!1));
      });
      q.bind("mouseleave", function(d) {
        d.preventDefault();
        b.dropMark();
        b.hoverItem = null;
      });
      this.containsMousePos = function(d, a) {
        return U.hitTest(d, a, {
          left: 0,
          top: 0,
          right: q[0].clientWidth,
          bottom: q[0].clientHeight
        });
      };
      this.isPopupActive = function() {
        return !1;
      };
      var fa = function(d, a) {
          var c = b.options.dataFields;
          d[c.items] || (d[c.items] = []);
          d[c.items].length = 0;
          if (d[a.rows] && 0 < d[a.rows].length)
            for (var h = 0; h < d[a.rows].length; h++)
              d[c.items].push(fa(d[a.rows][h], a));
          return d;
        },
        B = function(d, a) {
          var c = !1;
          a.sourceCtrl &&
            (c = a.sourceCollection.removeAt(
              d,
              -1,
              null,
              a.sourceCtrl.objIsRemoved
            ));
          c &&
            ("row" == d.type && (d = fa(d, a.sourceCtrl.options.rowFields)),
            0 === a.dropPos
              ? b.dataObj.insertAt(d, -1, a.target, b.itemIsAdded)
              : 1 === a.dropPos || 2 === a.dropPos
              ? 1 === a.dropPos
                ? b.dataObj.insertByRef(d, a.target, !1, b.itemIsAdded)
                : b.dataObj.insertByRef(d, a.target, !0, b.itemIsAdded)
              : b.dataObj.insertAt(d, -1, null, b.itemIsAdded));
        };
      this.setDropSelection = function(a, c) {
        var d = a;
        !d && 0 <= c && c < b.currentList.length && (d = b.currentList[c]);
        b.clearPrevSelection(d);
        b.itemSelection(null, d);
      };
      this.drop = function(a) {
        if (a && a.sourceCtrl) {
          a.sourceCtrl.suppressProcess = !0;
          a.sourceCtrl.suspendLayout();
          b.suspendLayout();
          var d = a.source;
          if (Array.isArray(a.source)) {
            for (var u = [], r = 0; r < a.source.length; r++) {
              for (
                var f = !1, k = a.sourceCollection.getParent(a.source[r]);
                k;

              ) {
                if (a.sourceCtrl.isObjInSelList(k)) {
                  f = !0;
                  break;
                }
                k = a.sourceCollection.getParent(k);
              }
              f || u.push(a.source[r]);
            }
            if (0 < u.length)
              if (
                ((d = u[u.length - 1]),
                (r = a.sourceCtrl.getObjCurrentIndex(u[0])),
                (f = a.sourceCtrl.getObjCurrentIndex(d)),
                r <= f)
              )
                for (r = 0; r < u.length; r++) B(u[r], a);
              else for (r = u.length - 1; 0 <= r; r--) B(u[r], a);
          } else B(a.source, a);
          a.sourceCtrl !== b
            ? ((b.allowUpdate = !0),
              (a.sourceCtrl.allowUpdate = !0),
              b.updateCurrentLayout(),
              a.sourceCtrl.updateCurrentLayout())
            : ((b.allowUpdate = !0), b.updateCurrentLayout());
          b.updateAutoLayout();
          a.sourceCtrl.multiSelection(!1);
          var l = e(function() {
            if (d) {
              a.sourceCtrl.clearPrevSelection(d);
              b.itemSelection(null, d);
              var h = b.getElemFromItem(d);
              h && (h = b.getElement(h)) && h[0].focus();
              c.$apply();
              e.cancel(l);
            }
          }, 1);
          a.sourceCtrl.suppressProcess = !1;
        }
      };
      this.isDragAllowed = function(a) {
        return b.options.allowDrag
          ? a &&
            (a[b.options.dataFields.allowDrag] ||
              void 0 === a[b.options.dataFields.allowDrag])
            ? !0
            : !1
          : !1;
      };
      this.isChildOf = function(a, c) {
        var d = !1;
        if (a && c) {
          var h = c[b.options.dataFields.items];
          if (h && 0 < h.length)
            for (var e = 0; e < h.length; e++) {
              if (
                f.isEqual(
                  a[b.options.dataFields.id],
                  h[e][b.options.dataFields.id]
                )
              ) {
                d = !0;
                break;
              } else d = b.isChildOf(a, h[e]);
              if (d) break;
            }
        }
        return d;
      };
      this.isParentOf = function(a, c) {
        var d = b.dataObj.getParent(c);
        return a &&
          c &&
          d &&
          f.isEqual(a[b.options.dataFields.id], d[b.options.dataFields.id])
          ? !0
          : !1;
      };
      this.isDropAllowed = function(a, c, u) {
        var d = b.options.allowDrop;
        if (
          d &&
          a &&
          c &&
          (d =
            b.isItemFixed(c) ||
            (!c[b.options.dataFields.allowDrop] &&
              void 0 !== c[b.options.dataFields.allowDrop])
              ? !1
              : !0)
        )
          if (Array.isArray(a))
            for (var h = 0; h < a.length; h++) {
              if (
                f.isEqual(
                  a[h][b.options.dataFields.id],
                  c[b.options.dataFields.id]
                ) ||
                (0 === u && b.isParentOf(c, a[h])) ||
                b.isChildOf(c, a[h])
              ) {
                d = !1;
                break;
              }
              if (!d) break;
            }
          else if (
            f.isEqual(a[b.options.dataFields.id], c[b.options.dataFields.id]) ||
            (0 === u && b.isParentOf(c, a)) ||
            b.isChildOf(c, a)
          )
            d = !1;
        return d;
      };
      this.getDropMarkWindow = function() {
        for (
          var a = ea, b = angular.element(document.body).children(), c = 0;
          c < b.length;
          c++
        ) {
          var e = angular.element(b[c]);
          if (
            e[0].attributes &&
            e[0].attributes["data-element"] &&
            "dropmark" === e[0].attributes["data-element"].value
          ) {
            a = e;
            break;
          }
        }
        return a;
      };
      this.dropMark = function(a, c) {
        c || (c = b.getDropMarkWindow());
        if (c) {
          var d = "none";
          this.options.allowDrop && (d = a ? "block" : "none");
          angular.element(c).css("display", d);
        }
      };
      this.updateDropMarkElem = function(a, b) {
        a &&
          b &&
          (a.css("top", b.top + "px"),
          a.css("left", b.left + "px"),
          a.css("width", b.width + "px"));
      };
      var $a = !1,
        Z = angular.element('<input type="text" style="position:absolute" />');
      this.labelEditStatus = function(a) {
        if (void 0 != a) $a = a;
        else return $a;
      };
      this.getEditBox = function() {
        return Z;
      };
      this.updateEditBox = function(a) {
        Z &&
          a &&
          (Z.css("top", a.top + "px"),
          Z.css("left", a.left + "px"),
          Z.css("width", a.width + "px"),
          Z.css("height", a.height + "px"));
      };
      c.$on(c.name + "-open-editor", function(a, c) {
        b.openEditor(c);
      });
      c.$on(c.name + "-close-editor", function(a, c) {
        b.closeEditor(c);
      });
      this.updateEditorSettings = function(a) {
        b.options.editorSettings = a
          ? { activate: f.isFieldAvailable(a.activate, "click") }
          : { activate: "click" };
      };
      this.allowEvents = !0;
      this.callAfterCollapse = function(a) {
        angular.isDefined(c.events) &&
          c.events.afterCollapse &&
          c.events.afterCollapse({ item: a });
        c.afterCollapse({ e: { item: a } });
      };
      this.callAfterExpand = function(a) {
        angular.isDefined(c.events) &&
          c.events.afterExpand &&
          c.events.afterExpand({ item: a });
        c.afterExpand({ e: { item: a } });
      };
      this.callAfterEdit = function(a) {
        angular.isDefined(c.events) &&
          c.events.afterEdit &&
          c.events.afterEdit({ item: a });
        c.afterEdit({ e: { item: a } });
      };
      this.callAfterLabelEdit = function(a) {
        angular.isDefined(c.events) &&
          c.events.afterLabelEdit &&
          c.events.afterLabelEdit({ item: a });
        c.afterLabelEdit({ e: { item: a } });
      };
      this.callAfterSelect = function(a) {
        angular.isDefined(c.events) && c.events.afterSelect
          ? c.events.afterSelect({ item: a })
          : c.afterSelect({ e: { item: a } });
        angular.isDefined(c.events) && c.events.selectionChanged
          ? c.events.selectionChanged({ item: a })
          : c.selectionChanged({ e: { item: a } });
      };
      this.callBeforeCollapse = function(a) {
        return angular.isDefined(c.events) && c.events.beforeCollapse
          ? c.events.beforeCollapse({ item: a })
          : c.beforeCollapse({ e: { item: a } });
      };
      this.callBeforeExpand = function(a) {
        return angular.isDefined(c.events) && c.events.beforeExpand
          ? c.events.beforeExpand({ item: a })
          : c.beforeExpand({ e: { item: a } });
      };
      this.callBeforeEdit = function(a) {
        return angular.isDefined(c.events) && c.events.beforeEdit
          ? c.events.beforeEdit({ item: a })
          : c.beforeEdit({ e: { item: a } });
      };
      this.callBeforeLabelEdit = function(a) {
        return angular.isDefined(c.events) && c.events.beforeLabelEdit
          ? c.events.beforeLabelEdit({ item: a })
          : c.beforeLabelEdit({ e: { item: a } });
      };
      this.callChange = function() {
        angular.isDefined(c.events) && c.events.change
          ? c.events.change()
          : c.change();
      };
      this.callDragEnter = function(a) {
        angular.isDefined(c.events) && c.events.dragEnter
          ? c.events.dragEnter({
              event: a.event,
              sourceTree: a.sourceTree,
              dragItem: a.dragItem,
              targetTree: a.targetTree,
              targetItem: a.targetItem,
              mousePos: a.mousePos
            })
          : c.dragEnter({
              e: {
                event: a.event,
                sourceTree: a.sourceTree,
                dragItem: a.dragItem,
                targetTree: a.targetTree,
                targetItem: a.targetItem,
                mousePos: a.mousePos
              }
            });
      };
      this.callDragOver = function(a) {
        return angular.isDefined(c.events) && c.events.dragOver
          ? c.events.dragOver({
              event: a.event,
              sourceTree: a.sourceTree,
              dragItem: a.dragItem,
              targetTree: a.targetTree,
              targetItem: a.targetItem,
              isDropAllowed: a.isDropAllowed,
              dropPos: a.dropPos,
              mousePos: a.mousePos
            })
          : c.dragOver({
              e: {
                event: a.event,
                sourceTree: a.sourceTree,
                dragItem: a.dragItem,
                targetTree: a.targetTree,
                targetItem: a.targetItem,
                isDropAllowed: a.isDropAllowed,
                dropPos: a.dropPos,
                mousePos: a.mousePos
              }
            });
      };
      this.callDragDrop = function(a) {
        return angular.isDefined(c.events) && c.events.dragDrop
          ? c.events.dragDrop({
              event: a.event,
              sourceTree: a.sourceTree,
              dragItem: a.dragItem,
              targetTree: a.targetTree,
              targetItem: a.targetItem,
              isDropAllowed: a.isDropAllowed,
              dropPos: a.dropPos,
              mousePos: a.mousePos
            })
          : c.dragDrop({
              e: {
                event: a.event,
                sourceTree: a.sourceTree,
                dragItem: a.dragItem,
                targetTree: a.targetTree,
                targetItem: a.targetItem,
                isDropAllowed: a.isDropAllowed,
                dropPos: a.dropPos,
                mousePos: a.mousePos
              }
            });
      };
      this.callDragLeave = function(a) {
        angular.isDefined(c.events) && c.events.dragLeave
          ? c.events.dragLeave({
              event: a.event,
              sourceTree: a.sourceTree,
              dragItem: a.dragItem,
              targetTree: a.targetTree,
              targetItem: a.targetItem,
              mousePos: a.mousePos
            })
          : c.dragLeave({
              e: {
                event: a.event,
                sourceTree: a.sourceTree,
                dragItem: a.dragItem,
                targetTree: a.targetTree,
                targetItem: a.targetItem,
                mousePos: a.mousePos
              }
            });
      };
      this.callEnabledChanged = function(a) {
        angular.isDefined(c.events) && c.events.enabledChanged
          ? c.events.enabledChanged({ enabled: a })
          : c.enabledChanged({ e: { enabled: a } });
      };
      this.callItemClick = function(a, b, u) {
        angular.isDefined(c.events) &&
          c.events.itemClick &&
          c.events.itemClick({ event: a, item: b, mousePos: u });
        c.itemClick({ e: { event: a, item: b, mousePos: u } });
      };
      this.callItemDblClick = function(a, b) {
        return angular.isDefined(c.events) && c.events.itemDblClick
          ? c.events.itemDblClick({ item: a, mousePos: b })
          : c.itemDblclick({ e: { item: a, mousePos: b } });
      };
      this.callItemHover = function(a) {
        angular.isDefined(c.events) && c.events.itemHover
          ? c.events.itemHover({ item: a })
          : c.itemHover({ e: { item: a } });
      };
      this.callItemRightClick = function(a, b) {
        angular.isDefined(c.events) &&
          c.events.itemRightClick &&
          c.events.itemRightClick({ item: a, mousePos: b });
        c.itemRightclick({ e: { item: a, mousePos: b } });
      };
      this.callKeyDown = function(a, b) {
        return angular.isDefined(c.events) && c.events.keyDown
          ? c.events.keyDown({ event: a, item: b })
          : c.keyDown({ e: { event: a, item: b } });
      };
      this.callKeyPress = function(a, b) {
        angular.isDefined(c.events) && c.events.keyPress
          ? c.events.keyPress({ event: a, item: b })
          : c.keyPress({ e: { event: a, item: b } });
      };
      this.callKeyUp = function(a, b) {
        angular.isDefined(c.events) && c.events.keyUp
          ? c.events.keyUp({ event: a, item: b })
          : c.keyUp({ e: { event: a, item: b } });
      };
      this.callScrollPosChanged = function() {
        angular.isDefined(c.events) && c.events.scrollPosChanged
          ? c.events.scrollPosChanged({ scrollPos: b.scrollPos })
          : c.scrollposChanged({ e: { scrollPos: b.scrollPos } });
      };
      q.bind("click", function(a) {
        b.options.enabled &&
          1 === a.which &&
          b.callItemClick(a, null, b.getMousePos(a));
      });
      q.bind("dblclick", function(a) {
        a.preventDefault();
        b.options.enabled &&
          1 === a.which &&
          b.callItemDblClick(null, b.getMousePos(a));
        a.stopPropagation();
      });
      q.bind("mousedown", function(a) {
        b.options.enabled &&
          3 === a.which &&
          b.callItemRightClick(null, b.getMousePos(a));
        a.stopPropagation();
      });
      this.expandList = [];
      this.expandIndentList = [];
      this.expandParentList = [];
      var za = function(a, c, u, e) {
          a.type = "item";
          a[b.options.dataFields.id] ||
            (a[b.options.dataFields.id] = f.getUniqueId());
          u && (a[b.options.dataFields.pid] = u);
          u = I(a);
          b.isItemExpanded(a) &&
            a[b.options.dataFields.items] &&
            0 < a[b.options.dataFields.items].length &&
            (u = u && b.isThereVisibleChildren(a));
          u &&
            (0 != b.options.showStatusIcons && (c += 15),
            b.expandList.push(a),
            b.expandIndentList.push(c),
            b.expandParentList.push({ parent: e }));
          return u;
        },
        La = function(a, c, u, e) {
          if (!a[b.options.dataFields.items])
            return (u = za(a, c + b.options.indent, u, e));
          if ((u = za(a, c + b.options.indent, u, e))) {
            e = 0;
            var d;
            if (b.isItemExpanded(a)) {
              var h = a[b.options.dataFields.items];
              if (h) {
                b.applySorting(h);
                for (var r = 0; r < h.length; r++)
                  (d = La(
                    h[r],
                    c + b.options.indent,
                    a[b.options.dataFields.id],
                    a
                  )) && e++;
              }
            }
            !b.isThereChildItems &&
              (0 < e ||
                (!b.isItemExpanded(a) &&
                  a[b.options.dataFields.items] &&
                  0 < a[b.options.dataFields.items].length &&
                  b.isThereVisibleChildren(a))) &&
              (b.isThereChildItems = !0);
          }
          return u;
        };
      this.expand = function(a) {
        var d = b.getItemFromChildElem(document.activeElement);
        b.expandList.length = [];
        b.expandIndentList.length = [];
        b.expandParentList.length = [];
        if (!b.isItemExpanded(a)) {
          var c = b.getItemCurrentIndex(a),
            r = b.getList(a);
          if (r) {
            b.applySorting(r);
            for (var f = 0; f < r.length; f++)
              b.isItemFixed(r[f]) || La(r[f], b.indentList[c], null, a);
          }
          if (0 < b.expandList.length) {
            b.allowEvents = !1;
            c++;
            Array.prototype.splice.apply(
              b.currentList,
              [c, 0].concat(b.expandList)
            );
            Array.prototype.splice.apply(
              b.indentList,
              [c, 0].concat(b.expandIndentList)
            );
            Array.prototype.splice.apply(
              b.parentList,
              [c, 0].concat(b.expandParentList)
            );
            b.options.autoSize
              ? b.updateAutoLayout()
              : b.getItemScope()
              ? b.updateView()
              : b.updateLayout();
            var k = e(function() {
              b.updateViewSize();
              b.updateViewSize();
              b.updateScrollView();
              d && b.updateFocus(d);
              b.allowEvents = !0;
              e.cancel(k);
            }, 1);
          }
        }
      };
      this.collapse = function(a) {
        var d = b.getItemFromChildElem(document.activeElement);
        b.expandList.length = [];
        b.expandIndentList.length = [];
        if (b.isItemExpanded(a)) {
          var c = null,
            r = !1,
            f = a,
            k = -1,
            l = b.getItemCurrentIndex(a);
          for (a = b.getParent(a); a && !r; ) {
            c = b.getList(a);
            for (k = c.indexOf(f) + 1; !r && k < c.length; )
              (f = c[k]), 0 < b.getItemCurrentIndex(f) && (r = !0), k++;
            r || (f = a);
            a = b.getParent(a);
          }
          if (!r && f)
            for (c = b.getList(), k = c.indexOf(f) + 1; k < c.length; )
              if (((f = c[k]), 0 < b.getItemCurrentIndex(f))) {
                r = !0;
                break;
              } else k++;
          l++;
          c = b.currentList.length - l;
          r && (c = b.getItemCurrentIndex(f) - l);
          if (0 < c) {
            b.currentList.splice(l, c);
            b.indentList.splice(l, c);
            b.parentList.splice(l, c);
            b.options.autoSize
              ? b.updateAutoLayout()
              : b.getItemScope()
              ? b.updateView()
              : b.updateLayout();
            var m = e(function() {
              b.updateViewSize();
              b.updateViewSize();
              b.updateScrollView();
              d && b.updateFocus(d);
              b.allowEvents = !0;
              e.cancel(m);
            }, 1);
          }
        }
      };
      this.toggle = function(a, c) {
        if (a) {
          if (
            (a[b.options.dataFields.hasChildren] ||
              (a[b.options.dataFields.items] &&
                0 !== a[b.options.dataFields.items].length)) &&
            !(
              (c && !1 !== a[b.options.dataFields.expanded]) ||
              (!1 === c && !1 === a[b.options.dataFields.expanded])
            )
          ) {
            var d =
              void 0 !== c
                ? c
                : !1 !== a[b.options.dataFields.expanded]
                ? !0
                : !1;
            !1 !==
              (void 0 !== c
                ? c
                  ? b.callBeforeExpand(a)
                  : b.callBeforeCollapse(a)
                : d
                ? b.callBeforeCollapse(a)
                : b.callBeforeExpand(a)) &&
              ((d = void 0 != c ? c : !d),
              d != a[b.options.dataFields.expanded] &&
                (0 != d ? b.expand(a) : b.collapse(a),
                (a[b.options.dataFields.expanded] = d)),
              b.isItemExpanded(a)
                ? b.callAfterExpand(a)
                : b.callAfterCollapse(a));
          }
        } else {
          d = b.getFullList();
          for (var h = 0; h < d.length; h++)
            d[h][b.options.dataFields.expanded] = c;
          b.updateCurrentLayout();
        }
      };
      c.$on(c.name + "-collapse", function(a, c) {
        b.toggle(c, !1);
      });
      c.$on(c.name + "-expand", function(a, c) {
        b.toggle(c, !0);
      });
      c.$on(c.name + "-toggle", function(a, c) {
        b.toggle(c);
      });
      this.filterParams = null;
      c.$on(c.name + "-filter", function(a, c) {
        b.filter(c);
      });
      this.filter = function(a) {
        b.filterParams = a;
        b.updateCurrentLayout();
        b.callChange();
      };
      this.callGotFocus = function(a, b, e, f) {
        angular.isDefined(c.events) && c.events.gotFocus
          ? c.events.gotFocus({
              event: a,
              item: b,
              edit: void 0 != e ? !0 : !1,
              editValue: f
            })
          : c.gotFocus({
              e: {
                event: a,
                item: b,
                edit: void 0 != e ? !0 : !1,
                editValue: f
              }
            });
      };
      this.callLostFocus = function(a, b, e, f) {
        angular.isDefined(c.events) && c.events.lostFocus
          ? c.events.lostFocus({
              event: a,
              item: b,
              edit: void 0 != e ? !0 : !1,
              editValue: f
            })
          : c.lostFocus({
              e: {
                event: a,
                item: b,
                edit: void 0 != e ? !0 : !1,
                editValue: f
              }
            });
      };
      this.getTabIndex = function() {
        return q[0].attributes && q[0].attributes.tabindex
          ? q[0].attributes.tabindex.value
          : "";
      };
      this.updateFocus = function(a) {
        if (1 == b.options.allowFocus)
          var d = e(function() {
            if (a && !b.isItemFixed(a)) {
              var c = b.getElemFromItem(a);
              c && (c = b.getElement(c)) && c[0].focus();
            } else q[0].focus();
            e.cancel(d);
          }, 5);
      };
      c.$on(c.name + "-focus", function(a, c) {
        b.updateFocus(c);
      });
      var qa = !1;
      this.isItemExpanded = function(a) {
        return a
          ? a[b.options.dataFields.expanded] ||
            void 0 === a[b.options.dataFields.expanded]
            ? !0
            : !1
          : !0;
      };
      this.getElement = function(a, b) {
        var d = null;
        b || (b = "content");
        if (a)
          for (var c = a.children(), h = 0; h < c.length; h++) {
            var e = angular.element(c.eq(h));
            if (
              e[0].attributes &&
              e[0].attributes["data-element"] &&
              e[0].attributes["data-element"].value === b
            ) {
              d = e;
              break;
            }
          }
        return d;
      };
      this.getIndent = function(a) {
        var d = 0;
        if (a && 0 < b.options.indent)
          for (parent = b.dataObj.getParent(a); parent; )
            (d += b.options.indent), (parent = b.dataObj.getParent(parent));
        return d;
      };
      this.getItemCurrentIndex = function(a) {
        if (a) {
          switch (a[b.options.dataFields.fixed]) {
            case "top":
              return b.currentTopList ? b.currentTopList.indexOf(a) : -1;
            case "bottom":
              return b.currentBottomList ? b.currentBottomList.indexOf(a) : -1;
          }
          return b.currentList ? b.currentList.indexOf(a) : -1;
        }
        return -1;
      };
      this.getObjCurrentIndex = function(a) {
        return b.getItemCurrentIndex(a);
      };
      this.getObjState = function(a) {
        if (a)
          switch (a.type) {
            case "item":
              if (
                0 == b.options.enabled ||
                0 == a[b.options.dataFields.enabled]
              )
                return "disabled";
              if (1 == a[b.options.dataFields.selected] && b.isObjInSelList(a))
                return "selected";
              if (a == b.hoverItem) return "hovered";
          }
        return "normal";
      };
      this.getItemFromChildElem = function(a) {
        return a
          ? (a = angular.element(a))
            ? b.getItemFromElem(a[0].parentElement)
            : null
          : null;
      };
      this.getItemFromElem = function(a) {
        if (a && (a = angular.element(a)) && a[0].attributes["data-index"]) {
          var d = a[0].attributes["data-index"].value,
            c = "none";
          a[0].attributes["data-fixed"] &&
            (c = a[0].attributes["data-fixed"].value);
          switch (c) {
            case "top":
              if (0 <= d && d < b.currentTopList.length)
                return b.currentTopList[d];
              break;
            case "bottom":
              if (0 <= d && d < b.currentBottomList.length)
                return b.currentBottomList[d];
              break;
            default:
              if (b.isIndexInRange(d)) return b.currentList[d];
          }
        }
      };
      this.isIndexInRange = function(a) {
        return 0 <= a && a < b.currentList.length;
      };
      this.isItemEnabled = function(a) {
        return (
          a &&
          1 == b.options.enabled &&
          f.isEnabled(a[b.options.dataFields.enabled])
        );
      };
      this.mouseButtonStatus = function(a) {
        qa = a;
      };
      c.$on(c.name + "-ensure-visible", function(a, c, e) {
        b.ensureVisible(c, e);
      });
      c.$on(c.name + "-find-item-by-id", function(a, c) {
        m.setTempData(b.findItemById(c));
      });
      c.$on(c.name + "-find-item-by-text", function(a, c) {
        m.setTempData(b.findItemByText(c));
      });
      c.$on(c.name + "-get-full-path", function(a, c) {
        m.setTempData(b.getFullPath(c));
      });
      c.$on(c.name + "-get-item-level", function(a, c) {
        m.setTempData(b.getLevel(c));
      });
      c.$on(c.name + "-get-item-parent", function(a, c) {
        m.setTempData(b.getParent(c));
      });
      c.$on(c.name + "-get-item-at", function(a, c) {
        c ? m.setTempData(b.getItemAt(c.x, c.y)) : m.setTempData(null);
      });
      c.$on(c.name + "-get-flat-list", function(a, c) {
        c ? m.setTempData(b.getFullList()) : m.setTempData(b.currentList);
      });
      c.$on(c.name + "-get-list", function(a, c, e) {
        1 == e ? m.setTempData(b.getFullList(c)) : m.setTempData(b.getList(c));
      });
      this.ensureVisible = function(a, c) {
        if (a) {
          for (var d = [], h = b.getParent(a); h; )
            d.push(h), (h = b.getParent(h));
          for (h = d.length - 1; 0 <= h; h--)
            d[h][b.options.dataFields.expanded] = !0;
          b.updateCurrentLayout();
          var f = e(function() {
            c = void 0 != c ? c : "center";
            b.scrollTo(a, c);
            e.cancel(f);
          }, 100);
        }
      };
      this.findItemById = function(a) {
        return b.dataObj.findObjectById(a);
      };
      this.findItemByText = function(a) {
        return b.dataObj.findObjectByText(a);
      };
      this.getFullPath = function(a) {
        var d = "";
        if (a)
          for (d = a[b.options.dataFields.text], a = b.getParent(a); a; )
            (d = [
              a[b.options.dataFields.text],
              b.options.pathSeparator,
              d
            ].join("")),
              (a = b.getParent(a));
        return d;
      };
      this.getLevel = function(a) {
        var b = 0;
        for (a = this.getParent(a); a; ) b++, (a = this.getParent(a));
        return b;
      };
      this.getParent = function(a) {
        return b.dataObj.getParent(a);
      };
      this.getList = function(a) {
        return b.dataObj.getList(a);
      };
      this.getFirstItem = function() {
        for (var a = null, c = 0; c < b.currentList.length; c++)
          if (b.isItemEnabled(b.currentList[c])) {
            a = b.currentList[c];
            break;
          }
        return a;
      };
      this.getPrevItem = function(a) {
        var d = null;
        if (0 <= a && a < b.currentList.length)
          for (--a; 0 <= a; a--)
            if (b.isItemEnabled(b.currentList[a])) {
              d = b.currentList[a];
              break;
            }
        return d;
      };
      this.getNextItem = function(a) {
        var d = null;
        for (a += 1; a < b.currentList.length; a++)
          if (b.isItemEnabled(b.currentList[a])) {
            d = b.currentList[a];
            break;
          }
        return d;
      };
      this.getLastItem = function() {
        for (var a = null, c = b.currentList.length - 1; 0 <= c; c--)
          if (b.isItemEnabled(b.currentList[c])) {
            a = b.currentList[c];
            break;
          }
        return a;
      };
      this.updateSelectionStatus = function(a) {
        switch (a) {
          case "shift":
            switch (b.options.selectionMode) {
              case "multi-simple":
                b.multiSelection(!0);
                b.shiftKeyStatus(!1);
                break;
              case "multi-extended":
                b.multiSelection(!0);
                b.shiftKeyStatus(!0);
                break;
              default:
                b.multiSelection(!1), b.shiftKeyStatus(!1);
            }
            break;
          case "ctrl":
            switch (b.options.selectionMode) {
              case "multi-simple":
                b.multiSelection(!0);
                break;
              case "multi-extended":
                b.multiSelection(!0);
                break;
              default:
                b.multiSelection(!1);
            }
        }
      };
      q.bind("keydown", function(a) {
        if (b.options.enabled)
          switch (a.keyCode) {
            case 16:
              b.updateSelectionStatus("shift");
              break;
            case 17:
              b.updateSelectionStatus("ctrl");
              break;
            default:
              (a.ctrlKey || a.metaKey) && b.updateSelectionStatus("ctrl"),
                a.shiftKey && b.updateSelectionStatus("shift");
          }
      });
      b.allowUpdate = !0;
      this.suspendLayout = function() {
        b.allowUpdate = !1;
      };
      this.resumeLayout = function() {
        b.allowUpdate = !0;
        b.updateLayout();
      };
      c.$on(c.name + "-refresh", function(a, c, e) {
        b.refresh(c, e);
      });
      c.$on(c.name + "-resume-layout", function(a) {
        b.resumeLayout();
      });
      c.$on(c.name + "-suspend-layout", function(a) {
        b.suspendLayout();
      });
      c.$on(c.name + "-update-layout", function(a) {
        b.updateLayout();
      });
      c.$on(c.name + "-update-view", function(a) {
        b.updateView();
      });
      c.$on(c.name + "-begin-load", function(a, c, e) {
        c
          ? (0 > b.options.loadItems.indexOf(c) && b.options.loadItems.push(c),
            b.updateView())
          : b.beginLoad(e);
      });
      c.$on(c.name + "-end-load", function(a, c) {
        b.endLoad(c);
      });
      this.callLoadComplete = function() {
        angular.isDefined(c.events) && c.events.loadComplete
          ? c.events.loadComplete()
          : c.loadComplete();
      };
      this.callUpdateComplete = function() {
        angular.isDefined(c.events) && c.events.updateComplete
          ? c.events.updateComplete()
          : c.updateComplete();
      };
      c.$on(c.name + "-get-scroll-pos", function(a) {
        m.setTempData(b.getScrollPos());
      });
      c.$on(c.name + "-set-scroll-pos", function(a, c) {
        b.setScrollPos(c);
      });
      c.$on(c.name + "-scroll-to", function(a, c, e) {
        b.scrollTo(c, e);
      });
      var D = !1,
        V = !1;
      this.shiftKeyStatus = function(a) {
        if (void 0 != a) D = a;
        else return D;
      };
      this.multiSelection = function(a) {
        if (void 0 != a) V = a;
        else return V;
      };
      this.isItemSelected = function(a) {
        return f.isSelected(a);
      };
      this.clearPrevSelection = function(a) {
        for (var d = 0; d < b.options.selectedItems.length; d++)
          a &&
          !f.isEqual(
            b.options.selectedItems[d][b.options.dataFields.id],
            a[b.options.dataFields.id]
          )
            ? (b.options.selectedItems[d][b.options.dataFields.selected] = !1)
            : a ||
              (b.options.selectedItems[d][b.options.dataFields.selected] = !1);
        b.options.selectedItems.length = 0;
        a && b.isItemEnabled(a) && b.options.selectedItems.push(a);
        b.refresh();
      };
      this.selectionCancelled = !1;
      this.shiftFirstSelectedItem = null;
      this.itemSelection = function(a, h, e) {
        if (h) {
          if ("none" !== b.options.selectionMode)
            if (b.isItemEnabled(h)) {
              var d = b.itemSelection(),
                u = !0;
              d &&
                (u =
                  !f.isEqual(
                    d[b.options.dataFields.id],
                    h[b.options.dataFields.id]
                  ) ||
                  (a && (a.ctrlKey || a.metaKey)));
              var k = !0;
              k =
                angular.isDefined(c.events) && c.events.beforeSelect
                  ? c.events.beforeSelect({ item: h })
                  : c.beforeSelect({ e: { item: h } });
              b.selectionCancelled = 0 == k;
              if (0 != k)
                if (u) {
                  var l = a && (a.shiftKey || a.ctrlKey || a.metaKey) ? !0 : !1;
                  u = !0;
                  "multi-extended" === b.options.selectionMode &&
                    (u = !b.isObjInSelList(h) || !l || D || (a && a.shiftKey));
                  u &&
                    ("one" == b.options.selectionMode
                      ? b.clearPrevSelection()
                      : qa && (D || (a && a.shiftKey))
                      ? b.clearPrevSelection()
                      : V ||
                        l ||
                        "multi-simple" === b.options.selectionMode ||
                        l ||
                        (1 != b.options.selectedItems.length &&
                          b.isObjInSelList(h)) ||
                        b.clearPrevSelection());
                  b.options.selectedItem = h;
                  if (
                    qa &&
                    (D || (a && a.shiftKey)) &&
                    "one" != b.options.selectionMode
                  ) {
                    if (
                      (b.shiftFirstSelectedItem ||
                        (b.shiftFirstSelectedItem = d),
                      (a = b.getItemCurrentIndex(b.shiftFirstSelectedItem)),
                      (e = b.getItemCurrentIndex(h)),
                      a > e && ((d = a), (a = e), (e = d)),
                      b.isIndexInRange(a) && b.isIndexInRange(e))
                    )
                      for (; a <= e; a++)
                        (b.currentList[a][b.options.dataFields.selected] = !0),
                          b.options.selectedItems.push(b.currentList[a]);
                  } else
                    qa && (V || l || "multi-simple" === b.options.selectionMode)
                      ? ((a =
                          null === h[b.options.dataFields.selected] ||
                          "undefined" === h[b.options.dataFields.selected]
                            ? !1
                            : h[b.options.dataFields.selected]),
                        (h[b.options.dataFields.selected] = !a),
                        h[b.options.dataFields.selected]
                          ? b.isObjInSelList(h) ||
                            b.options.selectedItems.push(h)
                          : (b.options.selectedItems = b.options.selectedItems.filter(
                              function(a) {
                                return a != h;
                              }
                            )))
                      : ((h[b.options.dataFields.selected] = !0),
                        b.isObjInSelList(h) || b.options.selectedItems.push(h)),
                      (b.shiftFirstSelectedItem = null);
                  angular.isDefined(c.selectedItem) && (c.selectedItem = h);
                  b.callAfterSelect(h);
                  b.refresh(null, null, !0);
                } else
                  V || l || "multi-simple" === b.options.selectionMode
                    ? ((a =
                        null === h[b.options.dataFields.selected] ||
                        "undefined" === h[b.options.dataFields.selected]
                          ? !1
                          : h[b.options.dataFields.selected]),
                      e && "undefined" !== e && (a = e),
                      (h[b.options.dataFields.selected] = !a),
                      h[b.options.dataFields.selected]
                        ? b.isObjInSelList(h) || b.options.selectedItems.push(h)
                        : (b.options.selectedItems = b.options.selectedItems.filter(
                            function(a) {
                              return a != h;
                            }
                          )),
                      (b.shiftFirstSelectedItem = null),
                      b.callAfterSelect(h),
                      b.refresh(null, null, !0))
                    : V ||
                      l ||
                      "multi-simple" === b.options.selectionMode ||
                      (l ||
                        (1 != b.options.selectedItems.length &&
                          b.isObjInSelList(h)) ||
                        b.clearPrevSelection(h),
                      (b.shiftFirstSelectedItem = null));
            } else b.clearPrevSelection();
        } else return b.options.selectedItem;
      };
      this.updateSelection = function(a, c) {
        var d = a && (a.shiftKey || a.ctrlKey || a.metaKey) ? !0 : !1;
        !(
          "multi-extended" == b.options.selectionMode &&
          0 < b.options.selectedItems.length
        ) ||
          D ||
          a.shiftKey ||
          V ||
          d ||
          b.selectionCancelled ||
          ((b.isObjInSelList(c) && a && 3 == a.which) || b.clearPrevSelection(),
          (c[b.options.dataFields.selected] = !0),
          b.options.selectedItems.push(c),
          b.callAfterSelect(c),
          b.refresh(null, null, !0));
        b.selectionCancelled = !1;
      };
      this.selectFirstItem = function() {
        for (var a = null, c = 0; c < b.currentList.length; c++)
          if (b.isItemEnabled(b.currentList[c])) {
            a = b.currentList[c];
            break;
          }
        this.itemSelection(null, a);
        return b.options.selectedItem;
      };
      this.isObjInSelList = function(a) {
        var d = !1,
          c = b.options.selectedItems;
        if (a && c)
          for (var e = 0; e < c.length; e++)
            if (
              f.isEqual(
                c[e][b.options.dataFields.id],
                a[b.options.dataFields.id]
              )
            ) {
              d = !0;
              break;
            }
        return d;
      };
      this.getItemAt = function(a, c) {
        var d = null,
          h = q.find("li");
        if (h && 0 < h.length)
          for (var e = 0; e < h.length; e++) {
            var k = angular.element(h[e]);
            var l = f.getPageRect(k);
            if (f.checkHit(a, c, l)) {
              d = b.getItemFromElem(k);
              break;
            }
          }
        return d;
      };
      this.resetSelection = function() {
        switch (b.options.selectionMode) {
          case "none":
            b.clearPrevSelection();
            break;
          default:
            b.clearPrevSelection(b.itemSelection());
        }
      };
      c.$on(c.name + "-clear-selection", function(a) {
        b.clearPrevSelection();
        b.options.selectedItem = null;
      });
      c.$on(c.name + "-get-selected-item", function(a) {
        m.setTempData(b.itemSelection());
      });
      c.$on(c.name + "-set-selected-item", function(a, c) {
        var d = e(function() {
          b.itemSelection(null, c);
          e.cancel(d);
        }, 1);
      });
      c.$on(c.name + "-get-selected-items", function(a) {
        m.setTempData(b.options.selectedItems);
      });
      c.$on(c.name + "-set-selected-items", function(a, c) {
        if (c && Array.isArray(c))
          var d = e(function() {
            for (
              var a = (b.options.selectedItems.length = 0);
              a < c.length;
              a++
            )
              (c[a][b.options.dataFields.selected] = !0),
                b.options.selectedItems.push(c[a]);
            0 < c.length
              ? ((b.options.selectedItem = c[c.length - 1]),
                b.callAfterSelect(b.options.selectedItem))
              : (b.options.selectedItem = null);
            b.refresh(null, null, !0);
            e.cancel(d);
          }, 1);
      });
      c.$on(c.name + "-move-item", function(a, c, e, f, k) {
        b.moveItem(c, e, f, k);
      });
      c.$watch(
        "options",
        function(a, c) {
          a !== c && (b.updateOptions(a), b.updateLayout());
        },
        !0
      );
      c.$watch("allowDrag", function(a, c) {
        a !== c && ((b.options.allowDrag = a), b.updateView());
      });
      c.$watch("allowDrop", function(a, c) {
        a !== c && ((b.options.allowDrop = a), b.updateView());
      });
      c.$watch("allowFocus", function(a, c) {
        a !== c && (b.options.allowFocus = a);
      });
      c.$watch("autoCheck", function(a, c) {
        a !== c && ((b.options.autoCheck = a), b.updateView());
      });
      c.$watch("autoExpand", function(a, c) {
        a !== c && (b.options.autoExpand = a);
      });
      c.$watch("autoSize", function(a, c) {
        a !== c && ((b.options.autoSize = a), b.updateLayout());
      });
      c.$watch("autoUpdate", function(a, c) {
        a !== c && ((b.options.autoUpdate = a), b.updateLayout());
      });
      c.$watch("checkBoxSettings", function(a, c) {
        a !== c && b.updateCheckBoxSettings(a);
      });
      c.$watch("controlStyle", function(a, c) {
        a !== c && b.updateControlStyle(a);
      });
      c.$watch("editorSettings", function(a, c) {
        a !== c && b.updateEditorSettings(a);
      });
      c.$watch("enabled", function(a, c) {
        a !== c &&
          ((b.options.enabled = a), b.updateView(), b.callEnabledChanged(a));
      });
      c.$watch("fields", function(a, c) {
        a !== c && ((b.options.dataFields = a), b.UpdateData());
      });
      c.$watch("hoverSelection", function(a, c) {
        a !== c && (b.options.hoverSelection = a);
      });
      c.$watch("indent", function(a, c) {
        a !== c && ((b.options.indent = a), b.updateLayout());
      });
      c.$watch("itemIcon", function(a, c) {
        a !== c && ((b.options.itemIcon = a), b.updateLayout());
      });
      c.$watch("labelEdit", function(a, c) {
        a !== c && (b.options.labelEdit = a);
      });
      c.$watch("maxItems", function(a, c) {
        a !== c && (b.options.maxItems = a);
      });
      c.$watch("mouseWheelSpeed", function(a, c) {
        a !== c && (b.options.mouseWheelSpeed = a);
      });
      c.$watch("pathSeparator", function(a, c) {
        a !== c && (b.options.pathSeparator = a);
      });
      c.$watch("rtl", function(a, c) {
        a !== c && ((b.options.rtl = a), b.updateLayout());
      });
      c.$watch("selectionMode", function(a, c) {
        a !== c && ((b.options.selectionMode = a), b.resetSelection());
      });
      c.$watch("showCheckBoxes", function(a, c) {
        a !== c && ((b.options.showCheckBoxes = a), b.updateLayout());
      });
      c.$watch("showExpandBoxes", function(a, c) {
        a !== c && ((b.options.showExpandBoxes = a), b.updateLayout());
      });
      c.$watch("showIcons", function(a, c) {
        a !== c && ((b.options.showIcons = a), b.updateLayout());
      });
      c.$watch("showLines", function(a, c) {
        a !== c && ((b.options.showLines = a), b.updateLayout());
      });
      c.$watch("showStatusIcons", function(a, c) {
        a !== c && ((b.options.showStatusIcons = a), b.updateLayout());
      });
      c.$watch("selectedItem", function(a, c) {
        a !== c &&
          (c && (c[b.options.dataFields.selected] = !1),
          (b.options.selectedItem = a),
          b.callAfterSelect(a));
      });
      c.$watch("templateSettings", function(a, c) {
        a !== c && (b.updateTemplateSettings(a), b.updateLayout());
      });
      this.sortComparer = null;
      c.$watch("sorting", function(a, c) {
        a !== c && (b.options.sorting = a);
      });
      c.$on(c.name + "-sort", function(a, c, e) {
        b.sort(c, e);
      });
      this.sort = function(a, c) {
        b.sortComparer = c;
        if ("ascending" == a || "descending" == a || "none" == a)
          b.options.sorting = a;
        b.updateCurrentLayout();
        b.callChange();
      };
      this.isSortingAllowed = function() {
        return (
          "ascending" == b.options.sorting || "descending" == b.options.sorting
        );
      };
      this.applySorting = function(a) {
        a &&
          (b.sortComparer
            ? a.sort(b.sortComparer)
            : b.isSortingAllowed() &&
              a.sort(function(a, c) {
                var d, e;
                (d = a[b.options.dataFields.value]) ||
                  (d = a[b.options.dataFields.text]);
                f.isObject(d) && (d = d.value ? d.value : d.text);
                (e = c[b.options.dataFields.value]) ||
                  (e = c[b.options.dataFields.text]);
                f.isObject(e) && (e = e.value ? e.value : e.text);
                d = void 0 != d ? d : null;
                e = void 0 != e ? e : null;
                switch (b.options.sorting) {
                  case "ascending":
                    if (d < e) return -1;
                    if (d > e) return 1;
                    break;
                  case "descending":
                    if (d > e) return -1;
                    if (d < e) return 1;
                    break;
                  default:
                    return 0;
                }
              }));
      };
      var Ka = function(a) {
        if (a) {
          var c = f.isFieldAvailable(a.general, "iui-checkbox");
          a = (a = a.box)
            ? {
                general: f.isFieldAvailable(a.general, "iui-checkbox-box"),
                disabled: f.isFieldAvailable(
                  a.disabled,
                  "iui-checkbox-disabled"
                ),
                checked: f.isFieldAvailable(a.checked, "iui-checkbox-checked"),
                indeterminate: f.isFieldAvailable(
                  a.indeterminate,
                  "iui-checkbox-indeterminate"
                ),
                unchecked: f.isFieldAvailable(
                  a.unchecked,
                  "iui-checkbox-unchecked"
                )
              }
            : b.options.controlStyle.item.checkBox.box;
          return { general: c, box: a };
        }
        return b.options.controlStyle.item.checkBox;
      };
      this.getExpandBoxStyle = function(a) {
        return a
          ? {
              general: f.isFieldAvailable(a.general, "iui-treeview-expand-box"),
              animated: f.isFieldAvailable(
                a.animated,
                "iui-treeview-expand-box-load"
              ),
              expanded: f.isFieldAvailable(
                a.expanded,
                "iui-treeview-expand-box-open"
              ),
              collapsed: f.isFieldAvailable(
                a.collapsed,
                "iui-treeview-expand-box-close"
              )
            }
          : b.options.controlStyle.item.expandBox;
      };
      var Aa = function(a) {
        if (a) {
          var c = a.general;
          c = f.isString(c)
            ? c
            : c
            ? {
                disabled: f.isFieldAvailable(
                  c.disabled,
                  "iui-treeview-item-disabled"
                ),
                focused: f.isFieldAvailable(
                  c.focused,
                  "iui-treeview-item-focused"
                ),
                normal: f.isFieldAvailable(c.normal, "iui-treeview-item"),
                hovered: f.isFieldAvailable(
                  c.hovered,
                  "iui-treeview-item-hovered"
                ),
                selected: f.isFieldAvailable(
                  c.selected,
                  "iui-treeview-item-selected"
                )
              }
            : b.options.controlStyle.item.general;
          var d = Ka(a.checkBox),
            e = b.getExpandBoxStyle(a.expandBox);
          var k = a.content;
          k = f.isString(k)
            ? k
            : k
            ? {
                disabled: f.isFieldAvailable(
                  k.disabled,
                  "iui-treeview-item-content-disabled"
                ),
                focused: f.isFieldAvailable(
                  k.focused,
                  "iui-treeview-item-content-focused"
                ),
                normal: f.isFieldAvailable(
                  k.normal,
                  "iui-treeview-item-content"
                ),
                hovered: f.isFieldAvailable(
                  k.hovered,
                  "iui-treeview-item-content-hovered"
                ),
                selected: f.isFieldAvailable(
                  k.selected,
                  "iui-treeview-item-content-selected"
                )
              }
            : b.options.controlStyle.item.content;
          a = a.fixed;
          a = f.isString(a)
            ? a
            : a
            ? {
                disabled: f.isFieldAvailable(
                  a.disabled,
                  "iui-treeview-item-fixed-disabled"
                ),
                normal: f.isFieldAvailable(a.normal, "iui-treeview-item-fixed"),
                hovered: f.isFieldAvailable(
                  a.hovered,
                  "iui-treeview-item-fixed-hovered"
                )
              }
            : b.options.controlStyle.item.fixed;
          return {
            general: c,
            checkBox: d,
            expandBox: e,
            content: k,
            fixed: a
          };
        }
        return b.options.controlStyle.item;
      };
      this.updateControlStyle = function(a) {
        b.options.controlStyle = a
          ? {
              general: f.isFieldAvailable(a.general, "iui-treeview"),
              item: Aa(a.item)
            }
          : {
              general: f.isFieldAvailable(
                b.defaultStyle.general,
                "iui-treeview"
              ),
              item: Aa(b.defaultStyle.item)
            };
      };
      this.getCurrentItemStyle = function(a, c) {
        var d = b.options.controlStyle.item;
        if (a)
          switch (a.style) {
            case "initial":
              break;
            case "parent":
              return b.getCurrentItemStyle(b.getParent(a), c);
            default:
              null != a.style && (d = a.style);
          }
        if (c) {
          if (f.isString(d.general)) return d.general;
          if (b.isItemFixed(a))
            switch (c) {
              case "disabled":
                return d.fixed && d.fixed.disabled
                  ? d.fixed.disabled
                  : b.options.controlStyle.item.fixed.disabled;
              case "hovered":
                return d.fixed && d.fixed.hovered
                  ? d.fixed.hovered
                  : b.options.controlStyle.item.fixed.hovered;
              default:
                return d.fixed && d.fixed.normal
                  ? d.fixed.normal
                  : b.options.controlStyle.item.fixed.normal;
            }
          else
            switch (c) {
              case "disabled":
                return d.general && d.general.disabled
                  ? d.general.disabled
                  : b.options.controlStyle.item.general.disabled;
              case "focused":
                return d.general && d.general.focused
                  ? d.general.focused
                  : b.options.controlStyle.item.general.focused;
              case "hovered":
                return d.general && d.general.hovered
                  ? d.general.hovered
                  : b.options.controlStyle.item.general.hovered;
              case "selected":
                return d.general && d.general.selected
                  ? d.general.selected
                  : b.options.controlStyle.item.general.selected;
              default:
                return d.general && d.general.normal
                  ? d.general.normal
                  : b.options.controlStyle.item.general.normal;
            }
        } else return d ? d : b.options.controlStyle.item;
      };
      this.getCurrentItemContentStyle = function(a, c) {
        var d = b.options.controlStyle.item.content;
        if (a)
          switch (a.style) {
            case "initial":
              break;
            case "parent":
              return b.getCurrentItemContentStyle(b.getParent(a), c);
            default:
              null != a.style && a.style.content && (d = a.style.content);
          }
        if (c) {
          if (f.isString(d)) return d;
          switch (c) {
            case "disabled":
              return d && d.disabled
                ? d.disabled
                : b.options.controlStyle.item.content.disabled;
            case "focused":
              return d && d.focused
                ? d.focused
                : b.options.controlStyle.item.content.focused;
            case "hovered":
              return d && d.hovered
                ? d.hovered
                : b.options.controlStyle.item.content.hovered;
            case "selected":
              return d && d.selected
                ? d.selected
                : b.options.controlStyle.item.content.selected;
            default:
              return d && d.normal
                ? d.normal
                : b.options.controlStyle.item.content.normal;
          }
        } else return d ? d : b.options.controlStyle.item.content;
      };
    }
  ])
  .directive("iuiTreeview", [
    "$compile",
    "$timeout",
    "$interval",
    "IntegralUIInternalService",
    "IntegralUIDragDrop",
    "$window",
    function(c, q, e, l, n, f) {
      return {
        restrict: "EA",
        controller: "IntegralUITreeViewController",
        transclude: !0,
        replace: !0,
        template:
          '<div class="iui-treeview" data-element="treeview"><ul class="iui-treeview-block-top"></ul><ul class="iui-treeview-block"></ul><ul class="iui-treeview-block-bottom"></ul></div>',
        scope: {
          allowAnimation: "=",
          allowDrag: "=",
          allowDrop: "=",
          allowFocus: "=",
          animationSpeed: "=",
          autoCheck: "=",
          autoExpand: "=",
          autoSize: "=",
          autoUpdate: "=",
          checkboxSettings: "=",
          controlStyle: "=",
          editorSettings: "=",
          enabled: "=",
          fields: "=",
          hoverSelection: "=",
          itemIcon: "=",
          indent: "=",
          items: "=",
          labelEdit: "=",
          maxItems: "=",
          mouseWheelSpeed: "@",
          name: "@",
          options: "=?",
          pathSeparator: "@",
          rtl: "=",
          selectedIndex: "=",
          selectedItem: "=",
          selectionMode: "@",
          showCheckBoxes: "=",
          showExpandBoxes: "=",
          showIcons: "=",
          showLines: "=",
          showStatusIcons: "=",
          sorting: "@",
          templateSettings: "=",
          afterCollapse: "&",
          afterEdit: "&",
          afterExpand: "&",
          afterLabelEdit: "&",
          afterSelect: "&",
          beforeCollapse: "&",
          beforeEdit: "&",
          beforeExpand: "&",
          beforeLabelEdit: "&",
          beforeSelect: "&",
          change: "&",
          clear: "&",
          dragDrop: "&",
          dragEnter: "&",
          dragLeave: "&",
          dragOver: "&",
          enabledChanged: "&",
          events: "=?",
          itemAdded: "&",
          itemAdding: "&",
          itemCheckedChanging: "&",
          itemCheckedChanged: "&",
          itemCheckstateChanging: "&",
          itemCheckstateChanged: "&",
          itemClick: "&",
          itemDblclick: "&",
          itemHover: "&",
          loadComplete: "&",
          gotFocus: "&",
          keyDown: "&",
          keyPress: "&",
          keyUp: "&",
          lostFocus: "&",
          itemRemoved: "&",
          itemRemoving: "&",
          itemRightclick: "&",
          scrollposChanged: "&",
          selectionChanged: "&",
          updateComplete: "&"
        },
        link: function(k, m, U, a, b) {
          var w = this,
            H = m.children().eq(0),
            C = m.children().eq(1),
            I = m.children().eq(2),
            y = angular.element(
              '<div class="iui-scrollbar-vertical"><div class="iui-scroll-button-thumb-vertical"></div></div>'
            ),
            A = angular.element(
              '<div class="iui-scrollbar-horizontal"><div class="iui-scroll-button-thumb-horizontal"></div></div>'
            ),
            O = angular.element('<div class="iui-scrollbar-corner"></div>'),
            Y = null,
            ea = null,
            fa = null,
            B = a.getEditBox(),
            $a = function() {
              var b = "iui-treeview-block";
              a.options.rtl && (b += " " + b + "-rtl");
              return b;
            };
          k.$on("$destroy", function(a) {
            // w.s2t();
            aa && (q.cancel(aa), (aa = null));
            m.unbind(
              "click dblclick dragenter dragleave dragend drop keydown mousedown mouseleave mousemove mousewheel scroll touchstart touchmove touchend"
            );
            angular.element(f).unbind("dragenter", rb);
            angular.element(f).unbind("dragover", sb);
            angular.element(f).unbind("dragend", tb);
            angular.element(f).unbind("keyup", ub);
            angular.element(f).unbind("mousemove", vb);
            angular.element(f).unbind("mouseup", wb);
            B && B.unbind("blur focus keydown mousedown");
            H && H.unbind("dragover");
            I && I.unbind("dragover");
            Aa();
            v && v.$destroy();
          });
          m.append(a.getDropMarkWindow());
          a.dropMark();
          var Z = function(b) {
            b.dataTransfer
              ? (b.dataTransfer.dropEffect = "none")
              : b.originalEvent &&
                b.originalEvent.dataTransfer &&
                (b.originalEvent.dataTransfer.dropEffect = "none");
            a.dropMark();
          };
          H.bind("dragover", function(a) {
            Z(a);
            a.stopPropagation();
          });
          I.bind("dragover", function(a) {
            Z(a);
            a.stopPropagation();
          });
          var za = function() {
            Y && (q.cancel(Y), (Y = null));
          };
          a.addDropMark = function() {
            var b = m[0];
            for (var c = null; b; ) {
              if (b === document.getElementsByTagName("body")[0]) {
                c = b;
                break;
              }
              b = b.offsetParent;
            }
            if ((b = c))
              angular.element(b).append(a.getDropMarkWindow()), a.dropMark();
          };
          a.removeDropMark = function() {
            a.getDropMarkWindow().remove();
          };
          var La = function(b, c) {
              a.labelEditStatus() && a.closeEditor();
              b.preventDefault();
              var d = !0;
              b.dataTransfer
                ? (d = "none" === b.dataTransfer.effectAllowed ? !1 : !0)
                : b.originalEvent &&
                  b.originalEvent.dataTransfer &&
                  (d =
                    "none" === b.originalEvent.dataTransfer.effectAllowed
                      ? !1
                      : !0);
              if (d) {
                var g = a.getItemFromChildElem(c);
                if (g) {
                  d = c[0].getBoundingClientRect();
                  var N = kb(),
                    p = a.getMousePos(b);
                  p.x -= d.left + N.x;
                  p.y -= d.top + N.y;
                  N = n.getDropPos(p, {
                    x: 0,
                    y: 0,
                    width: c[0].offsetWidth,
                    height: c[0].offsetHeight
                  });
                  p = n.getData();
                  d = a.isDropAllowed(p.source, g, N);
                  var e = {
                    event: b,
                    sourceTree: p.sourceCtrl ? p.sourceCtrl.getCtrlName() : "",
                    dragItem: p.source,
                    targetTree: a.getCtrlName(),
                    targetItem: g,
                    isDropAllowed: d,
                    dropPos: N,
                    mousePos: a.getMousePos(b)
                  };
                  e = a.callDragOver(e);
                  if (d && 0 != e) {
                    var f = a.getMousePos(b);
                    e = f.y + 16;
                    f = f.x + 20;
                    var k = a.getDropMarkWindow();
                    k.empty();
                    var h = "iui-drop-marker-move-in";
                    switch (N) {
                      case 1:
                        h = "iui-drop-marker-move-up";
                        break;
                      case 2:
                        h = "iui-drop-marker-move-down";
                    }
                    k.append(
                      "<span class='" +
                        h +
                        "'></span><span class='iui-drop-marker-title'>" +
                        g[a.options.dataFields.text] +
                        "</span>"
                    );
                    a.updateDropMarkElem(a.getDropMarkWindow(), {
                      top: e,
                      left: f
                    });
                    a.dropMark(d);
                    n.setData({
                      source: p.source,
                      sourceList: p.sourceList,
                      target: g,
                      dropPos: N
                    });
                  } else
                    b.dataTransfer
                      ? (b.dataTransfer.dropEffect = "none")
                      : b.originalEvent &&
                        b.originalEvent.dataTransfer &&
                        (b.originalEvent.dataTransfer.dropEffect = "none"),
                      a.dropMark();
                }
              }
            },
            qa = function(b, c) {
              b.preventDefault();
              za();
              a.dropMark();
              var d = !0;
              b.dataTransfer
                ? (d = "none" === b.dataTransfer.effectAllowed ? !1 : !0)
                : b.originalEvent &&
                  b.originalEvent.dataTransfer &&
                  (d =
                    "none" === b.originalEvent.dataTransfer.effectAllowed
                      ? !1
                      : !0);
              if (d) {
                var g = a.getItemFromChildElem(c);
                if (g) {
                  var p = n.getData(),
                    e = p.source;
                  e || (e = a.getDnDSource(b));
                  (d = a.isDropAllowed(e, g, p.dropPos)) &&
                    e &&
                    ((d = {
                      event: b,
                      sourceTree: p.sourceCtrl
                        ? p.sourceCtrl.getCtrlName()
                        : "",
                      dragItem: e,
                      targetTree: a.getCtrlName(),
                      targetItem: g,
                      isDropAllowed: d,
                      dropPos: p.dropPos,
                      mousePos: a.getMousePos(b)
                    }),
                    !1 !== a.callDragDrop(d) &&
                      (a.drop(p), k.$$phase || k.$apply()));
                }
              }
              n.clearData();
              a.dragDropStatus(!1);
              b.stopPropagation();
            },
            D = angular.element(
              '<div style="opacity:0.75;position:absolute;z-index:999"></div>'
            ),
            V = function() {
              D &&
                (D.remove(),
                D.css("top", "-9999999px"),
                D.css("left", "-9999999px"));
            },
            Ka = function(b) {
              var c = "";
              if (a.options.showExpandBoxes) {
                var d = a.defaultStyle.item.expandBox.general;
                b[a.options.dataFields.style] &&
                b[a.options.dataFields.style].expandBox &&
                b[a.options.dataFields.style].expandBox.general != d
                  ? (d += " " + b[a.options.dataFields.style].expandBox.general)
                  : a.options.controlStyle.item.expandBox.general != d &&
                    (d += " " + a.options.controlStyle.item.expandBox.general);
                var g = a.getCurrentItemStyle(b);
                g = a.getExpandBoxStyle(g.expandBox);
                if (
                  a.isThereChildItems ||
                  (b && b[a.options.dataFields.hasChildren])
                )
                  c = d;
                d =
                  b[a.options.dataFields.hasChildren] &&
                  (a.isThereVisibleChildren(b) ||
                    !b[a.options.dataFields.items] ||
                    (b[a.options.dataFields.items] &&
                      0 == b[a.options.dataFields.items].length));
                b &&
                  !a.isItemFixed(b) &&
                  (d || a.isThereVisibleChildren(b)) &&
                  (0 <= a.options.loadItems.indexOf(b)
                    ? (c += " " + g.animated)
                    : ((c =
                        b[a.options.dataFields.hasChildren] &&
                        void 0 === b[a.options.dataFields.expanded]
                          ? c + (" " + g.expanded)
                          : 0 != b[a.options.dataFields.expanded]
                          ? c + (" " + g.collapsed)
                          : c + (" " + g.expanded)),
                      !0 === a.options.rtl && (c += "-rtl"),
                      (a.options.enabled && a.isItemEnabled(b)) ||
                        (c += "-disabled")));
              }
              return c;
            },
            Aa = function() {
              var b = C.find("li");
              if (0 < b.length)
                for (var c = 0; c < b.length; c++) {
                  currentElem = angular.element(b[c]);
                  currentElem.unbind(
                    "dragover drop dragenter dragleave dragend"
                  );
                  var d = a.getElement(currentElem, "expandbox");
                  d && d.unbind("click dblclick touchend");
                  (d = a.getElement(currentElem)) &&
                    d.unbind(
                      "blur click dragstart dragover drop dragenter dragleave dragend dblclick focus keydown keypress keyup mouseenter mouseleave mousedown mouseup touchstart touchmove touchend"
                    );
                }
              for (d = 0; 2 > d; ) {
                if ((b = 0 == d ? H.find("li") : I.find("li")) && 0 < b.length)
                  for (c = 0; c < b.length; c++) {
                    currentElem = angular.element(b[c]);
                    var t = a.getElement(currentElem);
                    t &&
                      t.unbind(
                        "click dblclick mouseenter mouseleave mousedown touchstart"
                      );
                  }
                d++;
              }
            },
            d = function() {
              var b = C.find("li");
              if (0 < b.length) {
                var c = b.length - 1,
                  d = "content";
                a.getTemplateUrl() && (d = "template-content");
                for (var t = 0; t <= c; t++) {
                  var N = angular.element(b[t]);
                  h(N);
                  u(a.getElement(N, "expandbox"));
                  r(a.getElement(N, "icon"));
                  Qb(a.getElement(N, d));
                }
              }
              for (c = 0; 2 > c; ) {
                if ((b = 0 == c ? H.find("li") : I.find("li")) && 0 < b.length)
                  for (
                    d = "content",
                      a.getTemplateUrl() && (d = "template-content"),
                      t = 0;
                    t < b.length;
                    t++
                  )
                    (N = angular.element(b[t])), Rb(a.getElement(N, d));
                c++;
              }
            },
            h = function(b) {
              b &&
                (b.bind("dragover", function(b) {
                  var c = a.getItemFromElem(this);
                  if (c && a.isItemEnabled(c)) {
                    if (a.isScrollBarVisible("vertical")) {
                      c = a.getMousePos(b);
                      var d = m[0].getBoundingClientRect();
                      c.x -= angular.element(f)[0].pageXOffset;
                      c.y -= angular.element(f)[0].pageYOffset;
                      c.y < d.top + 40
                        ? ab(b, !1)
                        : c.y > d.bottom - 40
                        ? ab(b, !0)
                        : ra();
                    } else ra();
                    a.isItemDragOverHandled = !0;
                    a.options.autoSize || b.stopPropagation();
                  }
                }),
                b.bind("dragleave", function(b) {
                  a.isItemDragOverHandled = !1;
                }),
                b.bind("dragend", function(b) {
                  var c = a.getItemFromElem(this);
                  c &&
                    a.isItemEnabled(c) &&
                    (b.preventDefault(),
                    a.dragDropStatus(!1),
                    a.dropMark(),
                    n.getData().source || n.clearData());
                }));
            },
            u = function(b) {
              b &&
                (b.bind("dblclick", function(b) {
                  var c = angular.element(this);
                  (c = a.getItemFromChildElem(c)) &&
                    a.isItemEnabled(c) &&
                    (a.toggle(c), b.stopPropagation());
                }),
                b.bind("click", function(b) {
                  var c = angular.element(this);
                  (c = a.getItemFromChildElem(c)) &&
                    a.isItemEnabled(c) &&
                    (a.toggle(c), b.stopPropagation());
                }),
                b.bind("touchend", function(b) {
                  b.preventDefault();
                  var c = angular.element(this);
                  (c = a.getItemFromChildElem(c)) &&
                    a.isItemEnabled(c) &&
                    (a.toggle(c), b.stopPropagation());
                }));
            },
            r = function(b) {
              b &&
                (b.bind("dragover", function(b) {
                  var c = a.getItemFromChildElem(this);
                  c && a.isItemEnabled(c) && La(b, angular.element(this));
                }),
                b.bind("drop", function(b) {
                  var c = a.getItemFromChildElem(this);
                  c && a.isItemEnabled(c) && qa(b, angular.element(this));
                }));
            };
          a.dragIcon = document.createElement("img");
          a.dragIcon.width = 1;
          var Za = { x: 0, y: 0 },
            wa = { x: 0, y: 0 },
            xa = !1,
            jb = !1,
            da = null,
            kb = function() {
              return {
                x: angular.element(f)[0].pageXOffset,
                y: angular.element(f)[0].pageYOffset
              };
            },
            ya = function(a) {
              var b = kb();
              return { x: a.x - b.x, y: a.y - b.y };
            },
            Qb = function(b) {
              if (b) {
                b.bind("dragstart", function(b) {
                  var c = a.getItemFromChildElem(this);
                  if (c && a.isItemEnabled(c))
                    if (((c = angular.element(this)), a.labelEditStatus()))
                      b.preventDefault();
                    else {
                      document.activeElement && document.activeElement.blur();
                      n.clearData();
                      if ((c = a.getItemFromChildElem(c)))
                        if ((bb(), a.isDragAllowed(c))) {
                          a.dragDropStatus(!0);
                          a.addDropMark();
                          b.dataTransfer
                            ? ((b.dataTransfer.effectAllowed = "move"),
                              b.dataTransfer.setData(
                                "text",
                                c[a.options.dataFields.id]
                                  ? c[a.options.dataFields.id].toString()
                                  : ""
                              ))
                            : b.originalEvent &&
                              b.originalEvent.dataTransfer &&
                              ((b.originalEvent.dataTransfer.effectAllowed =
                                "move"),
                              b.originalEvent.dataTransfer.setData(
                                "text",
                                c[a.options.dataFields.id]
                                  ? c[a.options.dataFields.id].toString()
                                  : ""
                              ));
                          c = {
                            source: c,
                            sourceCtrl: a,
                            sourceCollection: a.dataObj
                          };
                          switch (a.options.selectionMode) {
                            case "multi-simple":
                              c.source = a.options.selectedItems;
                              break;
                            case "multi-extended":
                              c.source = a.options.selectedItems;
                          }
                          n.setData(c);
                        } else
                          b.dataTransfer
                            ? (b.dataTransfer.effectAllowed = "none")
                            : b.originalEvent &&
                              b.originalEvent.dataTransfer &&
                              (b.originalEvent.dataTransfer.effectAllowed =
                                "none");
                      b.stopPropagation();
                    }
                });
                b.bind("dragover", function(b) {
                  var c = a.getItemFromChildElem(this);
                  c && a.isItemEnabled(c) && La(b, angular.element(this));
                });
                b.bind("drop", function(b) {
                  var c = a.getItemFromChildElem(this);
                  c && a.isItemEnabled(c) && qa(b, angular.element(this));
                });
                b.bind("dragenter", function(b) {
                  b.preventDefault();
                  var c = angular.element(this),
                    d = a.getItemFromChildElem(c);
                  if (
                    d &&
                    a.isItemEnabled(d) &&
                    (Ma || ((a.hoverItem = d), a.refresh(d)),
                    a.options.autoExpand)
                  )
                    var g = q(function() {
                      Y ||
                        (Y = q(function() {
                          Y && a.toggle(d, !0);
                        }, 750));
                      q.cancel(g);
                    }, 1);
                  c = n.getData();
                  c.source || (c.source = a.getDnDSource(b));
                  c = {
                    event: b,
                    sourceTree: c.sourceCtrl ? c.sourceCtrl.getCtrlName() : "",
                    dragItem: c.source,
                    targetTree: a.getCtrlName(),
                    targetItem: c.target,
                    mousePos: a.getMousePos(b)
                  };
                  a.callDragEnter(c);
                  b.stopPropagation();
                });
                b.bind("dragleave", function(b) {
                  b.preventDefault();
                  a.hoverItem = null;
                  var c = angular.element(this);
                  (c = a.getItemFromChildElem(c)) &&
                    a.isItemEnabled(c) &&
                    a.refresh(c);
                  za();
                  c = n.getData();
                  c.source || (c.source = a.getDnDSource(b));
                  c = {
                    event: b,
                    sourceTree: c.sourceCtrl ? c.sourceCtrl.getCtrlName() : "",
                    dragItem: c.source,
                    targetTree: a.getCtrlName(),
                    targetItem: c.target,
                    mousePos: a.getMousePos(b)
                  };
                  a.callDragLeave(c);
                  b.stopPropagation();
                });
                b.bind("dragend", function(b) {
                  (b = a.getItemFromChildElem(this)) &&
                    a.isItemEnabled(b) &&
                    a.dragDropStatus(!1);
                });
                b.bind("touchstart", function(b) {
                  var c = a.getItemFromChildElem(this);
                  if (
                    c &&
                    a.isItemEnabled(c) &&
                    (b.preventDefault(),
                    (c = a.getTouchData(b)) && 0 < c.length)
                  ) {
                    jb = !0;
                    var d = q(function() {
                      jb = !1;
                      q.cancel(d);
                    }, 750);
                    Za = ya({ x: c[0].pageX, y: c[0].pageY });
                    a.mouseButtonStatus(!0);
                    c = Za;
                    if ((c = a.getItemAt(c.x, c.y)) && a.isItemEnabled(c)) {
                      var g = angular.element(this);
                      a.itemSelection(b, c);
                      da = c;
                      g[0].focus();
                      a.changeCheckValue(c);
                      "click" == a.options.editorSettings.activate &&
                        Na(b, angular.element(this));
                    }
                  }
                });
                b.bind("touchmove", function(b) {
                  var c = a.getItemFromChildElem(this);
                  if (
                    c &&
                    a.isItemEnabled(c) &&
                    (c = a.getTouchData(b)) &&
                    0 < c.length
                  ) {
                    wa = ya({ x: c[0].pageX, y: c[0].pageY });
                    c = Math.abs(wa.x - Za.x);
                    var d = Math.abs(wa.y - Za.y),
                      g = m[0].getBoundingClientRect();
                    if (n.hitTest(wa.x, wa.y, g)) {
                      if (
                        (b.preventDefault(),
                        D && D.css("display", "block"),
                        !jb)
                      )
                        if (
                          !xa &&
                          (2 < c || 2 < d) &&
                          da &&
                          a.isItemEnabled(da)
                        )
                          if ((angular.element(this), a.labelEditStatus()))
                            b.preventDefault();
                          else {
                            xa = !0;
                            n.clearData();
                            if (
                              (c = a.getTouchData(b)) &&
                              0 < c.length &&
                              (ya({ x: c[0].pageX, y: c[0].pageY }),
                              da && (bb(), a.isDragAllowed(da)))
                            ) {
                              a.dragDropStatus(!0);
                              a.addDropMark();
                              c = {
                                source: da,
                                sourceCtrl: a,
                                sourceCollection: a.dataObj
                              };
                              switch (a.options.selectionMode) {
                                case "multi-simple":
                                  c.source = a.options.selectedItems;
                                  break;
                                case "multi-extended":
                                  c.source = a.options.selectedItems;
                              }
                              n.setData(c);
                              if ((c = a.getElemFromItem(da)))
                                if ((c = a.getElement(c)))
                                  D.empty(),
                                    D.append(c.clone()),
                                    D.css("display", "none"),
                                    m.append(D);
                            }
                            b.stopPropagation();
                          }
                        else if (xa) {
                          angular.element(this);
                          a.labelEditStatus() && a.closeEditor();
                          b.preventDefault();
                          if ((c = a.getTouchData(b)) && 0 < c.length) {
                            g = kb();
                            var t = ya({ x: c[0].pageX, y: c[0].pageY });
                            if ((c = a.getItemAt(t.x, t.y))) {
                              if ((d = a.getElemFromItem(c))) {
                                var p = d[0].getBoundingClientRect();
                                p = n.getDropPos(
                                  { x: t.x - p.left, y: t.y - p.top },
                                  {
                                    x: 0,
                                    y: 0,
                                    width: d[0].offsetWidth,
                                    height: d[0].offsetHeight
                                  }
                                );
                                d = n.getData();
                                var e = a.isDropAllowed(d.source, c, p),
                                  E = {
                                    event: b,
                                    sourceTree: d.sourceCtrl
                                      ? d.sourceCtrl.getCtrlName()
                                      : "",
                                    dragItem: d.source,
                                    targetTree: a.getCtrlName(),
                                    targetItem: c,
                                    isDropAllowed: e,
                                    dropPos: p,
                                    mousePos: t
                                  };
                                E = a.callDragOver(E);
                                var f = m[0].getBoundingClientRect();
                                var h = t.x - f.left;
                                f = t.y - f.top;
                                D.css("top", f - 16 + "px");
                                D.css("left", h + "px");
                                D.css("display", "block");
                                if (e && 0 != E) {
                                  h = t;
                                  t = h.y + g.y + 16;
                                  g = h.x + g.x + 20;
                                  h = a.getDropMarkWindow();
                                  h.empty();
                                  f = "iui-drop-marker-move-in";
                                  switch (p) {
                                    case 1:
                                      f = "iui-drop-marker-move-up";
                                      break;
                                    case 2:
                                      f = "iui-drop-marker-move-down";
                                  }
                                  h.append(
                                    "<span class='" +
                                      f +
                                      "'></span><span class='iui-drop-marker-title'>" +
                                      c[a.options.dataFields.text] +
                                      "</span>"
                                  );
                                  a.updateDropMarkElem(a.getDropMarkWindow(), {
                                    top: t,
                                    left: g
                                  });
                                  a.dropMark(e);
                                  n.setData({
                                    source: d.source,
                                    sourceList: d.sourceList,
                                    target: c,
                                    dropPos: p
                                  });
                                } else a.dropMark();
                              }
                            } else
                              (c = n.getData()),
                                (d = {
                                  source: c.source,
                                  sourceCtrl: c.sourceCtrl,
                                  target: null,
                                  dropPos: -1
                                }),
                                n.setData(d),
                                (E = {
                                  event: b,
                                  sourceTree: c.sourceCtrl
                                    ? c.sourceCtrl.getCtrlName()
                                    : "",
                                  dragItem: c.source,
                                  targetTree: a.getCtrlName(),
                                  targetItem: null,
                                  isDropAllowed: a.options.allowDrop,
                                  dropPos: -1,
                                  mousePos: t
                                }),
                                (f = m[0].getBoundingClientRect()),
                                (h = t.x - f.left),
                                (f = t.y - f.top),
                                D.css("top", f - 16 + "px"),
                                D.css("left", h + "px"),
                                (E = a.callDragOver(E)),
                                0 == E
                                  ? a.dropMark()
                                  : ((h = t),
                                    (t = h.y + 16),
                                    (g = h.x + 20),
                                    (h = a.getDropMarkWindow()),
                                    h.empty(),
                                    h.append(
                                      "<span class='iui-drop-marker-move-end'></span><span class='iui-drop-marker-title'>" +
                                        (k.name ? k.name : "TreeView") +
                                        "</span>"
                                    ),
                                    a.updateDropMarkElem(
                                      a.getDropMarkWindow(),
                                      { top: t, left: g }
                                    ),
                                    a.dropMark(!0));
                          }
                          b.stopPropagation();
                        }
                    } else
                      b.preventDefault(),
                        a.dropMark(),
                        a.cancelScrollTimer(),
                        D && D.css("display", "none");
                  }
                });
                b.bind("touchend", function(b) {
                  var c = a.getItemFromChildElem(this);
                  if (c && a.isItemEnabled(c)) {
                    if ((c = a.getTouchData(b)) && 0 < c.length) {
                      c = ya({ x: c[0].pageX, y: c[0].pageY });
                      var d = m[0].getBoundingClientRect();
                      if (n.hitTest(c.x, c.y, d))
                        if (xa) {
                          angular.element(this);
                          b.preventDefault();
                          za();
                          a.dropMark();
                          V();
                          if ((c = a.getTouchData(b)) && 0 < c.length) {
                            d = ya({ x: c[0].pageX, y: c[0].pageY });
                            var g = a.getItemAt(d.x, d.y);
                            if (g) {
                              c = n.getData();
                              var t = c.source,
                                p = a.isDropAllowed(t, g, c.dropPos);
                              p &&
                                t &&
                                ((d = {
                                  event: b,
                                  sourceTree: c.sourceCtrl
                                    ? c.sourceCtrl.getCtrlName()
                                    : "",
                                  dragItem: t,
                                  targetTree: a.getCtrlName(),
                                  targetItem: g,
                                  isDropAllowed: p,
                                  dropPos: c.dropPos,
                                  mousePos: d
                                }),
                                (d = a.callDragDrop(d)),
                                !1 !== d &&
                                  (a.drop(c), k.$$phase || k.$apply()));
                            } else
                              (c = n.getData()),
                                c.source &&
                                  ((d = {
                                    event: b,
                                    sourceTree: c.sourceCtrl
                                      ? c.sourceCtrl.getCtrlName()
                                      : "",
                                    dragItem: c.source,
                                    targetTree: a.getCtrlName(),
                                    targetItem: null,
                                    isDropAllowed: a.options.allowDrop,
                                    dropPos: -1,
                                    mousePos: d
                                  }),
                                  (d = a.callDragDrop(d)),
                                  !1 !== d &&
                                    (a.drop(c), k.$$phase || k.$apply())),
                                n.clearData();
                          }
                          n.clearData();
                          a.dragDropStatus(!1);
                          b.stopPropagation();
                        } else
                          a.mouseButtonStatus(!1),
                            (c = a.getItemAt(c.x, c.y)) &&
                              a.updateSelection(b, c),
                            bb();
                    }
                    c = xa;
                    a.removeDropMark();
                    V();
                    wa = { x: 0, y: 0 };
                    xa = !1;
                    da = null;
                    c && b.stopPropagation();
                  }
                });
                b.bind("dblclick", function(b) {
                  b.preventDefault();
                  if (1 === b.which) {
                    var c = a.getItemFromChildElem(this);
                    if (c) {
                      var d = "dblclick" == a.options.editorSettings.activate;
                      d && Na(b, angular.element(this), 0);
                      0 == a.callItemDblClick(c, a.getMousePos(b)) ||
                        d ||
                        a.toggle(c);
                    }
                  }
                  b.stopPropagation();
                });
                b.bind("mouseenter", function(b) {
                  var c = a.getItemFromChildElem(this);
                  c &&
                    a.isItemEnabled(c) &&
                    (angular.element(this),
                    (a.hoverItem = c),
                    a.refresh(c),
                    a.callItemHover(c),
                    a.options.hoverSelection &&
                      (fa = q(function() {
                        fa && a.itemSelection(b, c);
                      }, 500)));
                });
                b.bind("mouseleave", function(b) {
                  a.hoverItem = null;
                  (b = a.getItemFromChildElem(this)) &&
                    a.isItemEnabled(b) &&
                    a.refresh(b);
                  fa && (q.cancel(fa), (fa = null));
                });
                var c = function(b, c) {
                    b.preventDefault();
                    focusDelayTime = 0;
                    var d = a.getItemCurrentIndex(c),
                      g = K + x - 2;
                    g =
                      g < a.currentList.length - 1
                        ? g
                        : a.currentList.length - 1;
                    d === g &&
                      (a.setScrollPos({
                        x: a.scrollPos.x,
                        y: a.scrollPos.y + Math.floor(m[0].clientHeight / 4)
                      }),
                      (focusDelayTime = 1));
                    var t = a.getNextItem(d);
                    if (t) {
                      a.itemSelection(b, t);
                      k.$apply();
                      var p = q(function() {
                        a.updateFocus(t);
                        q.cancel(p);
                      }, focusDelayTime);
                    }
                  },
                  d = function(b, c) {
                    b.preventDefault();
                    focusDelayTime = 0;
                    var d = a.getItemCurrentIndex(c),
                      g = K;
                    d === (0 < g ? g : 0) &&
                      (a.setScrollPos({
                        x: a.scrollPos.x,
                        y: a.scrollPos.y - Math.floor(m[0].clientHeight / 4)
                      }),
                      (focusDelayTime = 1));
                    var t = a.getPrevItem(a.getItemCurrentIndex(c));
                    if (t) {
                      a.itemSelection(b, t);
                      k.$apply();
                      var p = q(function() {
                        a.updateFocus(t);
                        q.cancel(p);
                      }, focusDelayTime);
                    }
                  };
                b.bind("keydown", function(g) {
                  var p = a.getItemFromChildElem(this);
                  if (p && a.isItemEnabled(p) && 0 != a.callKeyDown(g, p)) {
                    a.callKeyDown(g, p);
                    var t = 0;
                    switch (g.keyCode) {
                      case 9:
                        t = a.currentList.length;
                        0 < t &&
                          (g.shiftKey
                            ? l.isEqual(
                                p[a.options.dataFields.id],
                                a.currentList[0][a.options.dataFields.id]
                              ) || d(g, p)
                            : l.isEqual(
                                p[a.options.dataFields.id],
                                a.currentList[t - 1][a.options.dataFields.id]
                              ) || c(g, p));
                        break;
                      case 13:
                        Na(g, b, 0);
                        break;
                      case 16:
                        a.updateSelectionStatus(g, "shift");
                        break;
                      case 17:
                        a.updateSelectionStatus(g, "ctrl");
                        break;
                      case 33:
                        g.preventDefault();
                        t = a.getItemCurrentIndex(p);
                        p = t - x;
                        p = 0 < p ? p : 0;
                        if (p !== t) {
                          t = 1;
                          var e = a.getPrevItem(p + 1);
                          if (e) {
                            a.scrollTo(e);
                            a.itemSelection(g, e);
                            k.$apply();
                            var E = q(function() {
                              a.updateFocus(e);
                              q.cancel(E);
                            }, t);
                          }
                        }
                        break;
                      case 34:
                        g.preventDefault();
                        t = a.getItemCurrentIndex(p);
                        p = t + x;
                        p =
                          p < a.currentList.length - 1
                            ? p
                            : a.currentList.length - 1;
                        p !== t &&
                          ((t = 1), (e = a.getNextItem(p - 1))) &&
                          (a.scrollTo(e, "bottom"),
                          a.itemSelection(g, e),
                          k.$apply(),
                          (E = q(function() {
                            a.updateFocus(e);
                            q.cancel(E);
                          }, t)));
                        break;
                      case 35:
                        g.preventDefault();
                        a.setScrollPos({ x: a.scrollPos.x, y: J.y });
                        var f = a.getLastItem();
                        f &&
                          (a.itemSelection(g, f),
                          (E = q(function() {
                            a.updateFocus(f);
                            q.cancel(E);
                          }, 1)));
                        break;
                      case 36:
                        g.preventDefault();
                        a.setScrollPos({ x: a.scrollPos.x, y: 0 });
                        var h = a.getFirstItem();
                        h &&
                          (a.itemSelection(g, h),
                          (E = q(function() {
                            a.updateFocus(h);
                            q.cancel(E);
                          }, 1)));
                        break;
                      case 37:
                        g.preventDefault();
                        p[a.options.dataFields.items] &&
                          0 < p[a.options.dataFields.items].length &&
                          (a.toggle(p, !1), a.updateFocus(p));
                        break;
                      case 32:
                        g.preventDefault();
                        a.itemSelection(g, p, p.selected);
                        k.$apply();
                        break;
                      case 38:
                        d(g, p);
                        break;
                      case 39:
                        g.preventDefault();
                        p[a.options.dataFields.items] &&
                          0 < p[a.options.dataFields.items].length &&
                          (a.toggle(p, !0), a.updateFocus(p));
                        break;
                      case 40:
                        c(g, p);
                        break;
                      default:
                        (g.ctrlKey || g.metaKey) &&
                          a.updateSelectionStatus(g, "ctrl"),
                          g.shiftKey && a.updateSelectionStatus(g, "shift");
                    }
                  }
                });
                b.bind("keyup", function(b) {
                  var c = a.getItemFromChildElem(this);
                  if (c && a.isItemEnabled(c)) {
                    switch (b.keyCode) {
                      case 16:
                        a.multiSelection(!1);
                        a.shiftKeyStatus(!1);
                        break;
                      case 17:
                        a.multiSelection(!1);
                        break;
                      default:
                        b.ctrlKey || b.metaKey || a.multiSelection(!1),
                          b.shiftKey ||
                            (a.multiSelection(!1), a.shiftKeyStatus(!1));
                    }
                    a.callKeyUp(b, c);
                  }
                });
                b.bind("keypress", function(b) {
                  var c = a.getItemFromChildElem(this);
                  c && a.isItemEnabled(c) && a.callKeyPress(b, c);
                });
                b.bind("click", function(b) {
                  if (1 === b.which) {
                    var c = a.getItemFromChildElem(this);
                    c &&
                      a.isItemEnabled(c) &&
                      a.callItemClick(b, c, a.getMousePos(b));
                  }
                  b.stopPropagation();
                });
                b.bind("mousedown", function(b) {
                  var c = a.getItemFromChildElem(this);
                  if (c && a.isItemEnabled(c)) {
                    a.mouseButtonStatus(!0);
                    a.itemSelection(b, c);
                    switch (b.which) {
                      case 1:
                        a.changeCheckValue(c);
                        "click" == a.options.editorSettings.activate &&
                          Na(b, angular.element(this));
                        break;
                      case 3:
                        a.callItemRightClick(c, a.getMousePos(b));
                    }
                    b.stopPropagation();
                  }
                });
                b.bind("mouseup", function(b) {
                  var c = a.getItemFromChildElem(this);
                  c &&
                    a.isItemEnabled(c) &&
                    (a.mouseButtonStatus(!1),
                    a.updateSelection(b, c),
                    1 === b.which && bb());
                });
                b.bind("focus", function(b) {
                  var c = a.getItemFromChildElem(this);
                  c && a.isItemEnabled(c) && a.callGotFocus(b, c);
                });
                b.bind("blur", function(b) {
                  var c = a.getItemFromChildElem(this);
                  c && a.isItemEnabled(c) && a.callLostFocus(b, c);
                });
              }
            },
            Rb = function(b) {
              b &&
                (b.bind("touchstart", function(b) {
                  var c = a.getItemFromChildElem(this);
                  c &&
                    a.isItemEnabled(c) &&
                    (b.preventDefault(), a.changeCheckValue(c));
                }),
                b.bind("mouseenter", function(b) {
                  (b = a.getItemFromChildElem(this)) &&
                    a.isItemEnabled(b) &&
                    (angular.element(this),
                    (a.hoverItem = b),
                    a.refresh(b),
                    a.callItemHover(b));
                }),
                b.bind("mouseleave", function(b) {
                  a.hoverItem = null;
                  (b = a.getItemFromChildElem(this)) &&
                    a.isItemEnabled(b) &&
                    a.refresh(b);
                }),
                b.bind("click", function(b) {
                  if (1 === b.which) {
                    var c = a.getItemFromChildElem(this);
                    c &&
                      a.isItemEnabled(c) &&
                      a.callItemClick(b, c, a.getMousePos(b));
                  }
                  b.stopPropagation();
                }),
                b.bind("dblclick", function(b) {
                  b.preventDefault();
                  if (1 === b.which) {
                    var c = a.getItemFromChildElem(this);
                    c && a.callItemDblClick(c, a.getMousePos(b));
                  }
                  b.stopPropagation();
                }),
                b.bind("mousedown", function(b) {
                  var c = a.getItemFromChildElem(this);
                  if (c && a.isItemEnabled(c)) {
                    switch (b.which) {
                      case 1:
                        a.changeCheckValue(c);
                        break;
                      case 3:
                        a.callItemRightClick(c, a.getMousePos(b));
                    }
                    b.stopPropagation();
                  }
                }));
            };
          a.openEditor = function(b) {
            if (b) {
              var c = a.getElemFromItem(b);
              c &&
                0 != b[a.options.dataFields.allowEdit] &&
                (b = a.getElement(c)) &&
                Na(null, b, 0);
            }
          };
          a.closeEditor = function(b) {
            b
              ? (b = a.getElemFromItem(b)) &&
                (b = a.getElement(b)) &&
                Ba(null, b, !1)
              : Ba(null, null, !1);
          };
          var Na = function(b, c, d) {
              a.options.labelEdit &&
                (void 0 === d && (d = 500),
                (ea = q(function() {
                  if (ea)
                    var a = q(function() {
                      Ba(b, c, !0);
                      q.cancel(a);
                    }, d);
                  q.cancel(ea);
                }, d / 3)));
            },
            bb = function() {
              ea && (q.cancel(ea), (ea = null));
            },
            Ca = null,
            Ba = function(b, c, d) {
              if (a.dragDropStatus())
                (d = B[0].value),
                  a.labelEditStatus(!1),
                  B.unbind("blur focus keydown mousedown"),
                  B.remove(),
                  (Ca = null);
              else {
                var g = a.getItemFromChildElem(c);
                if (g)
                  if (
                    (c &&
                      g[a.options.dataFields.text] &&
                      "" != g[a.options.dataFields.text] &&
                      c.css("height", "auto"),
                    d)
                  ) {
                    if (((d = ""), 0 != a.callBeforeLabelEdit(g))) {
                      Ca = g;
                      a.labelEditStatus(!0);
                      B.unbind("blur focus keydown mousedown");
                      m.append(B);
                      (g[a.options.dataFields.text] &&
                        "" != g[a.options.dataFields.text]) ||
                        ((b = l.getMargin(c[0].parentElement)),
                        (d = l.getPadding(c[0])),
                        c.css(
                          "height",
                          z - (b.top + b.bottom + 2) - (d.top + d.bottom) + "px"
                        ));
                      d = m[0].getBoundingClientRect();
                      var e = c[0].getBoundingClientRect();
                      b = c[0].offsetHeight - 4;
                      d = e.top - d.top - 1;
                      e = a.scrollPos.x + c[0].offsetLeft;
                      var p = m[0].clientWidth - c[0].offsetLeft - 6;
                      F && (p -= 16);
                      a.updateEditBox({ top: d, left: e, width: p, height: b });
                      B[0].value = g[a.options.dataFields.text];
                      B.bind("keydown", function(b) {
                        switch (b.keyCode) {
                          case 13:
                            g[a.options.dataFields.text] = B[0].value
                              ? B[0].value
                              : "null";
                            Ba(b, c, !1);
                            break;
                          case 27:
                            Ba(b, c, !1);
                        }
                        b.stopPropagation();
                      });
                      B.bind("focus", function(b) {
                        var c = angular.element(this);
                        a.callGotFocus(b, Ca, !0, c[0].value);
                      });
                      B.bind("blur", function(a) {
                        Ba(a);
                      });
                      B.bind("mousedown", function(a) {
                        a.stopPropagation();
                      });
                      var E = q(function() {
                        B[0].focus();
                        B[0].select();
                        q.cancel(E);
                      }, 10);
                    }
                  } else
                    (d = B[0].value),
                      a.labelEditStatus(!1),
                      B.unbind("blur focus keydown mousedown"),
                      B.remove(),
                      a.updateView(),
                      a.updateFocus(g),
                      a.callAfterLabelEdit(g),
                      a.callLostFocus(b, g, !0, d),
                      (Ca = null);
                else
                  (d = B[0].value),
                    a.labelEditStatus(!1),
                    B.unbind("blur focus keydown mousedown"),
                    B.remove(),
                    a.callAfterLabelEdit(),
                    a.updateView(),
                    a.callLostFocus(b, Ca, !0, d),
                    (Ca = null);
              }
            };
          a.getElemFromItem = function(b) {
            var c = null;
            if (b) {
              var d = a.getItemCurrentIndex(b);
              switch (b[a.options.dataFields.fixed]) {
                case "top":
                  b = H.find("li");
                  break;
                case "bottom":
                  b = I.find("li");
                  break;
                default:
                  b = C.find("li");
              }
              if (b && 0 < b.length)
                for (var g = 0; g < b.length; g++) {
                  var e = angular.element(b[g]);
                  if (
                    e[0].attributes["data-index"] &&
                    e[0].attributes["data-index"].value.toString() ===
                      d.toString()
                  ) {
                    c = e;
                    break;
                  }
                }
            }
            return c;
          };
          var xb = function(b) {
              var c = "";
              b[a.options.dataFields.icon]
                ? (c = b[a.options.dataFields.icon])
                : a.options.itemIcon && (c = a.options.itemIcon);
              return c;
            },
            yb = function(b) {
              return (
                "iui-treeview-status-icon " + b[a.options.dataFields.statusIcon]
              );
            },
            zb = function(b) {
              return b
                ? b[a.options.dataFields.icon] || a.options.itemIcon
                : !1;
            },
            K = 0,
            v = null,
            x = 100,
            z = 0,
            Q = 0,
            ba = 0,
            P = 0,
            sa = 0,
            R = null,
            S = null,
            Oa = !1,
            Da = !1,
            Pa = 9,
            Qa = 9,
            cb = 0,
            ha = 0,
            ta = 0,
            Ra = 1,
            db = 0,
            Sa = 0,
            ia = 0,
            Ea = 0,
            eb = 1,
            L = null,
            M = null,
            G = !1,
            F = !1;
          this.scrollMousePos = null;
          var J = { x: 0, y: 0 };
          Sa = 0;
          k.verScrollVisibility = !1;
          k.$watch("verScrollVisibility", function(b, c) {
            b != c && a.updateCurrentLayout();
          });
          a.updateViewSize = function() {
            var b = q(function() {
              Q = 0;
              F = G = !1;
              a.getTemplateUrl() || a.updateLongestItem();
              if (
                !a.getTemplateUrl() &&
                a.longestItem &&
                0 < a.currentList.length
              ) {
                var c = a.getItemCurrentIndex(a.longestItem);
                c = angular.element(Sb(c, !0));
                m.append(c);
                Q = c[0].offsetWidth;
                var d = m[0].offsetWidth - 6;
                F && y && (d -= y[0].offsetWidth);
                Q > d &&
                  (A.unbind("click mousedown"),
                  m.append(A),
                  A.bind("click", function(a) {
                    a.stopPropagation();
                  }),
                  A.bind("mousedown", function(b) {
                    if (a.options.enabled) {
                      b = l.getClientMousePos(b, this);
                      var c = Math.floor(m[0].clientWidth);
                      L &&
                        (b.x < L[0].offsetLeft
                          ? a.setScrollPos({
                              x: a.scrollPos.x - c,
                              y: a.scrollPos.y
                            })
                          : b.x > L[0].offsetLeft + L[0].offsetWidth &&
                            a.setScrollPos({
                              x: a.scrollPos.x + c,
                              y: a.scrollPos.y
                            }));
                    }
                  }),
                  (L = angular.element(A.children().eq(0))),
                  (G = !0),
                  L.bind("mousedown", function(b) {
                    a.options.enabled &&
                      1 === b.which &&
                      ((w.scrollMousePos = a.getMousePos(b)), (Oa = !0));
                    b.stopPropagation();
                  }));
                c.remove();
              }
              k.verScrollVisibility = !1;
              0 < a.currentList.length &&
                !a.options.autoSize &&
                ((c =
                  m[0].offsetHeight -
                  6 -
                  H[0].offsetHeight -
                  I[0].offsetHeight),
                G && A && (c -= A[0].offsetHeight),
                (d = (ja.top + ja.bottom) / 2),
                (x = 0 < z ? Math.floor(c / (z + d)) + 1 : 100),
                x < a.currentList.length + 1 &&
                  (y.unbind("click mousedown mouseup"),
                  m.append(y),
                  y.bind("click", function(a) {
                    a.stopPropagation();
                  }),
                  y.bind("mousedown", function(b) {
                    if (a.options.enabled && 1 == b.which) {
                      var c = l.getClientMousePos(b, this),
                        d = Math.floor(m[0].clientHeight);
                      M &&
                        (c.y < M[0].offsetTop
                          ? (a.setScrollPos({
                              x: a.scrollPos.x,
                              y: a.scrollPos.y - d
                            }),
                            ab(b, !1, d))
                          : c.y > M[0].offsetTop + M[0].offsetHeight &&
                            (a.setScrollPos({
                              x: a.scrollPos.x,
                              y: a.scrollPos.y + d
                            }),
                            ab(b, !0, d)));
                    }
                  }),
                  y.bind("mouseup", function(b) {
                    a.cancelScrollTimer();
                  }),
                  (M = angular.element(y.children().eq(0))),
                  (F = !0),
                  M.bind("mousedown", function(b) {
                    a.options.enabled &&
                      1 === b.which &&
                      ((w.scrollMousePos = a.getMousePos(b)), (Da = !0));
                    b.stopPropagation();
                  })));
              G || (A.unbind("mousedown"), A.remove(), (J.x = 0));
              F || (y.unbind("mousedown"), y.remove(), (J.y = 0));
              G && F ? m.append(O) : O.remove();
              q.cancel(b);
              !G &&
                0 < a.scrollPos.x &&
                a.setScrollPos({ x: 0, y: a.scrollPos.y });
              !F &&
                0 < a.scrollPos.y &&
                a.setScrollPos({ x: a.scrollPos.x, y: 0 });
            }, 1);
          };
          a.updateScrollView = function() {
            Ab();
          };
          var Ab = function() {
              var b = q(function() {
                P = m[0].offsetWidth - 6;
                sa = m[0].offsetHeight - 4;
                C.css("top", H[0].offsetHeight + 2 + "px");
                sa = G ? sa - A[0].offsetHeight : sa - 4;
                P = F ? P - y[0].offsetWidth : P - 4;
                P < Q
                  ? (C.css("width", Q + "px"),
                    H.css("width", Q + "px"),
                    I.css("width", Q + "px"))
                  : (C.css("width", P + "px"),
                    H.css("width", P + "px"),
                    I.css("width", P + "px"));
                C.css(
                  "height",
                  sa - H[0].offsetHeight - I[0].offsetHeight + "px"
                );
                G &&
                  (A.css("bottom", "0px"),
                  F || (P += 3),
                  A.css("width", P + 1 + "px"));
                F &&
                  (y.css("top", "0px"),
                  G || (sa += 3),
                  y.css("height", sa + 1 + "px"));
                G && F && O.css("bottom", "0px");
                !1 !== a.options.rtl
                  ? (C.css("left", "auto"),
                    C.css("right", "-" + (a.scrollPos.x - 2).toString() + "px"),
                    G && (A.css("left", "auto"), A.css("right", "0px")),
                    F && (y.css("left", "0px"), y.css("right", "auto")),
                    G && F && (O.css("left", "0px"), O.css("right", "auto")))
                  : (C.css("left", "-" + (a.scrollPos.x - 2).toString() + "px"),
                    C.css("right", "auto"),
                    G && (A.css("left", "0px"), A.css("right", "auto")),
                    F && (y.css("left", "auto"), y.css("right", "0px")),
                    G && F && (O.css("left", "auto"), O.css("right", "0px")));
                var c = q(function() {
                  G &&
                    P < Q &&
                    ((cb = 0),
                    (ha = 2),
                    (ta = A[0].clientWidth - 4),
                    ta > ha && (cb = ta - ha),
                    (Pa = Math.floor((cb * (P - 4)) / Q)),
                    9 > Pa && (Pa = 9),
                    L.css("width", Pa + "px"),
                    (J.x = Q - P),
                    0 > J.x && (J.x = 0),
                    (Ra = J.x / (cb - Pa - 2)));
                  var b = a.currentList.length + 1;
                  F &&
                    0 < a.currentList.length &&
                    x < b &&
                    ((ia = 2),
                    (Ea = y[0].clientHeight - 4),
                    (db = 0),
                    Ea > ia && (db = Ea - ia),
                    (Qa = Math.floor((db * x) / b)),
                    9 > Qa && (Qa = 9),
                    M.css("height", Qa + "px"),
                    (eb = (b - x + 1) / (db - Qa - 2)),
                    (J.y = Math.floor((b - x + 1) * z)),
                    0 > J.y && (J.y = 0),
                    0 == K
                      ? M.css("top", ia + "px")
                      : K + x - 1 == a.currentList.length &&
                        M.css("top", Ea - M[0].offsetHeight + "px"));
                  a.updateAutoLayout();
                  q.cancel(c);
                }, 1);
                q.cancel(b);
              }, 5);
            },
            Bb = 5,
            fb = 0,
            ua = 0,
            gb = 0,
            Cb = 0,
            va = !1,
            hb = !1,
            Fa = "none",
            Ta = "normal",
            Ua = 0,
            lb = null,
            T = !1,
            ka = !1,
            la = angular.element(
              '<ul class="iui-treeview-block" style="position:absolute;top:-9999999px"></ul>'
            ),
            ma = angular.element(
              '<ul class="iui-treeview-block-top" style="position:absolute;top:-9999999px"></ul>'
            ),
            na = angular.element(
              '<ul class="iui-treeview-block-bottom" style="position:absolute;top:-9999999px"></ul>'
            );
          a.updateActive = !1;
          a.updateStatus = 0;
          var Db = function(b) {
              var c = e(function() {
                b ? ua++ : ua--;
                gb = (m[0].clientHeight - ua) / 2 + 2;
                Va.css("height", ua + "px");
                ca.css("top", gb + "px");
                b && ua >= Bb
                  ? ((T = !0), oa(0), (ka = va = !1), e.cancel(c))
                  : !b &&
                    0 >= ua &&
                    (ca && ca.remove(),
                    (Ga = 0),
                    (ka = !0),
                    a.callLoadComplete(),
                    e.cancel(c));
              }, 20);
            },
            Eb = function() {
              lb && e.cancel(lb);
              W && W.remove();
            };
          a.beginLoad = function(a) {
            if (!va)
              switch (
                ((va = !0),
                a
                  ? ((Fa = void 0 != a.type ? a.type : "none"),
                    (Ta = void 0 != a.speed ? a.speed : "normal"),
                    (Ua = void 0 != a.opacity ? a.opacity : 0))
                  : ((Fa = "none"), (Ta = "normal"), (Ua = 0)),
                Wa(Ua),
                Fa)
              ) {
                case "circular":
                  Eb();
                  m.append(W);
                  W.css(
                    "top",
                    (m[0].clientHeight - W[0].offsetHeight) / 2 + "px"
                  );
                  W.css(
                    "left",
                    (m[0].clientWidth - W[0].offsetWidth) / 2 + "px"
                  );
                  T = !0;
                  ka = va = !1;
                  var b = 0,
                    c = 3;
                  switch (Ta) {
                    case "veryfast":
                      c = 7;
                      break;
                    case "fast":
                      c = 5;
                      break;
                    case "slow":
                      c = 2;
                      break;
                    case "veryslow":
                      c = 1;
                  }
                  lb = e(function() {
                    b += c;
                    360 < b && (b = 0);
                    var a = "rotate(" + b + "deg)";
                    W.css("-ms-transform", a);
                    W.css("-webkit-transform", a);
                    W.css("transform", a);
                  }, 1);
                  break;
                case "linear":
                  a = angular.element(
                    '<div class="iui-load-block-progress" style="position:absolute;left:-9999px"></div>'
                  );
                  m.append(a);
                  Bb = parseInt(getComputedStyle(a[0]).height, 10);
                  a.remove();
                  Va.css("width", "0px");
                  Va.css("height", "0px");
                  m.append(ca);
                  Ga = 0;
                  fb = Math.floor(0.5 * m[0].clientWidth);
                  ua = 0;
                  gb = m[0].clientHeight / 2 + 2;
                  Cb = (m[0].clientWidth - fb) / 2;
                  ca.css("width", fb + "px");
                  ca.css("top", gb + "px");
                  ca.css("left", Cb + "px");
                  ca.css("opacity", "1");
                  Db(!0);
                  break;
                default:
                  (T = !0), (ka = va = !1);
              }
          };
          a.endLoad = function(b) {
            if (!hb)
              if (
                ((hb = !0),
                (b = a.options.loadItems.indexOf(b)),
                0 <= b && a.options.loadItems.splice(b, 1),
                T)
              ) {
                T = !1;
                var c = 3,
                  d = Ua,
                  g = e(function() {
                    ka &&
                      (10 < c || 1 <= d
                        ? (Wa(1),
                          (hb = va = ka = !1),
                          (Fa = "none"),
                          (Ta = "normal"),
                          (Ua = void 0),
                          e.cancel(g))
                        : ((d += c / 10), Wa(d), (c += 3)));
                  }, 1);
              } else hb = !1;
          };
          var Wa = function(a) {
              C && C.css("opacity", a);
              A && A.css("opacity", a);
              y && y.css("opacity", a);
              O && O.css("opacity", a);
            },
            Va = angular.element('<div class="iui-load-block-progress"></div>'),
            ca = angular.element('<div class="iui-load-block"></div>');
          ca.append(Va);
          var Ga = 0,
            Ha = !1,
            W = angular.element('<div class="iui-load-circular"></div>'),
            oa = function(a) {
              if (T && "linear" == Fa) {
                Ha = !1;
                var b = Math.floor((fb * a) / 100),
                  c = Ga;
                a = 10;
                switch (Ta) {
                  case "veryfast":
                    a = 2;
                    break;
                  case "fast":
                    a = 5;
                    break;
                  case "slow":
                    a = 15;
                    break;
                  case "veryslow":
                    a = 20;
                }
                var d = b > c ? Math.floor((b - c) / a) : 1;
                d = 0 < d ? d : 1;
                var g = e(function() {
                  c += d;
                  Va.css("width", c + "px");
                  c >= b && ((Ga = b), (Ha = !0), e.cancel(g));
                }, 1);
              } else Ha = !0;
            },
            ja = { top: 0, bottom: 0 },
            Tb = function() {
              z = 0;
              ja = { top: 0, bottom: 0 };
              if (0 < a.currentList.length && v) {
                for (
                  var b = [], d = [], e = 0, t = 0;
                  t < a.currentList.length && 10 > t;
                  t++
                )
                  b.push(Xa(t, !0)), d.push(c(b[t])(v)), m.append(d[t]), e++;
                if (0 < e)
                  var f = q(function() {
                    var a = 0;
                    ja = l.getMargin(d[0][0]);
                    for (var b = 0; b < e; b++)
                      (a += d[b][0].offsetHeight), d[b].remove();
                    z = Math.floor(a / e);
                    q.cancel(f);
                  }, 1);
              }
            },
            Ub = function() {
              m.append(la);
              m.append(ma);
              m.append(na);
              var b = q(function() {
                if (0 < a.currentList.length) {
                  v = k.$new();
                  v.data = Fb();
                  v.checkBoxStyle = a.options.checkBoxSettings.style;
                  !v.checkBoxStyle &&
                    a.options.controlStyle.item.checkBox &&
                    (v.checkBoxStyle = a.options.controlStyle.item.checkBox);
                  R = k.$new();
                  R.data = Gb();
                  S = k.$new();
                  S.data = Hb();
                  a.refresh();
                  v.$apply();
                  R.$apply();
                  S.$apply();
                  Tb();
                  var d = q(function() {
                    a.updateAutoLayout();
                    ba = 0;
                    for (var b = "", g = 0; g < a.currentTopList.length; g++)
                      (b += Xa(g, !1, "top")), ba++;
                    0 < ba && ma.append(c(b)(R));
                    ba = 0;
                    b = "";
                    for (g = 0; g < a.currentBottomList.length; g++)
                      (b += Xa(g, !1, "bottom")), ba++;
                    0 < ba && na.append(c(b)(S));
                    b = m[0].offsetHeight - 6;
                    G && A && (b -= A[0].offsetHeight);
                    a.options.autoSize
                      ? (x = a.currentList.length)
                      : ((g = (ja.top + ja.bottom) / 2),
                        (x = 0 < z ? Math.floor(b / (z + g)) + 1 : 100));
                    ba = 0;
                    b = "";
                    for (g = 0; g < x; g++) (b += Xa(g)), ba++;
                    0 < ba && la.append(c(b)(v));
                    oa(70);
                    X("scroll");
                    q.cancel(d);
                  }, 1);
                } else oa(70), X("scroll");
                q.cancel(b);
              }, 1);
            },
            X = function(b) {
              if (Ha && !va)
                switch (b) {
                  case "start":
                    Wa(0);
                    a.updateCurrentList();
                    Vb();
                    oa(10);
                    X("init");
                    break;
                  case "init":
                    la && la.remove();
                    ma && ma.remove();
                    na && na.remove();
                    Oa || Da || Ab();
                    Aa();
                    v && v.$destroy();
                    a.currentList.length >= x &&
                      K + x - 1 > a.currentList.length &&
                      (K = a.currentList.length - x + 1);
                    oa(20);
                    X("items");
                    break;
                  case "items":
                    Ub();
                    break;
                  case "scroll":
                    a.updateViewSize();
                    a.updateViewSize();
                    a.updateScrollView();
                    oa(80, "complete");
                    X("complete");
                    break;
                  case "complete":
                    oa(90);
                    X("events");
                    break;
                  case "events":
                    la && (C.empty(), C.append(la.children()));
                    ma &&
                      (H.empty(),
                      H.append(ma.children()),
                      H.css(
                        "border-width",
                        0 < a.currentTopList.length ? "1px" : 0
                      ));
                    na &&
                      (I.empty(),
                      I.append(na.children()),
                      I.css(
                        "border-width",
                        0 < a.currentTopList.length ? "1px" : 0
                      ));
                    a.allowEvents = !0;
                    0 < a.currentList.length && d();
                    oa(100);
                    X("end");
                    break;
                  case "end":
                    la && la.remove();
                    ma && ma.remove();
                    na && na.remove();
                    switch (Fa) {
                      case "circular":
                        Eb();
                        Ga = 0;
                        ka = !0;
                        1 == a.updateStatus && a.callLoadComplete();
                        break;
                      case "linear":
                        Db(!1);
                        break;
                      default:
                        (Ga = 0),
                          (ka = !0),
                          1 == a.updateStatus && a.callLoadComplete();
                    }
                    a.updateActive = !1;
                    a.updateStatus--;
                    0 < a.updateStatus &&
                      ((Ha = a.updateActive = !0), X("start"));
                    0 == a.updateStatus &&
                      (a.updateView(), Wa(1), a.callUpdateComplete());
                }
              else
                q(function() {
                  X(b);
                }, 1);
            };
          a.updateCurrentLayout = function() {
            if (a.allowUpdate)
              if (0 == a.currentList.length) a.updateLayout();
              else {
                var b = x;
                a.updateCurrentList();
                var c = a.currentList.length;
                c = c > b ? c - b : 0;
                a.options.autoSize && 0 < c ? Wb(c) : a.updateView();
                var d = q(function() {
                  a.updateViewSize();
                  a.updateViewSize();
                  a.updateScrollView();
                  q.cancel(d);
                }, 1);
              }
          };
          var Wb = function(a) {
            if (0 < a)
              var b = q(function() {
                var g = x;
                x += a;
                mb();
                for (var e = 0, p = ""; g < x; g++) (p += Xa(g)), e++;
                0 < e && (C.append(c(p)(v)), Aa(), d());
                q.cancel(b);
              }, 1);
          };
          a.updateAutoLayout = function() {
            if (a.options.autoSize) {
              var b = a.currentList.length * (z + (ja.top + ja.bottom) / 2);
              b += H[0].offsetHeight + I[0].offsetHeight;
              G && A && (b += A[0].offsetHeight);
              m.css("height", b + "px");
            }
          };
          a.updateLayout = function(b) {
            // m.append(w.$tw);
            // w.s1t(w.twp);
            b = !0;
            for (var c = m.parent(); "body" != c[0].tagName.toLowerCase(); ) {
              if ("none" == getComputedStyle(c[0]).display) {
                b = !1;
                break;
              }
              c = c.parent();
            }
            if (b && a.allowUpdate && (a.updateStatus++, !a.updateActive)) {
              a.updateActive = !0;
              m.removeClass("iui-treeview-block-rtl");
              a.options.rtl && m.addClass("iui-treeview-block-rtl");
              C.removeClass(
                "iui-treeview-block-shift-left iui-treeview-block-rtl"
              );
              C.addClass($a());
              a.allowEvents = !1;
              z = Q = 0;
              x = 100;
              if (a.options.showCheckBoxes)
                for (
                  a.updateCheckValues(), b = a.getFullList(), c = 0;
                  c < b.length;
                  c++
                )
                  a.setDefaultCheckValue(b[c]);
              Ha = !0;
              X("start");
            }
          };
          k.$watch(
            function() {
              return m[0].offsetWidth;
            },
            function(b, c) {
              a.options.autoUpdate &&
                (100 == x
                  ? a.updateLayout()
                  : b != c && a.updateCurrentLayout());
            }
          );
          var aa = null;
          k.$watch(
            function() {
              return m[0].offsetHeight;
            },
            function(b, c) {
              a.options.autoUpdate &&
                b != c &&
                (a.options.autoSize
                  ? a.updateCurrentLayout()
                  : (aa && (q.cancel(aa), (aa = null)),
                    (aa = q(function() {
                      a.updateLayout();
                      q.cancel(aa);
                      aa = null;
                    }, 250))));
            }
          );
          k.onCheckValueChanging = function(b, c) {
            var d = !1,
              g = c + K;
            if (a.isIndexInRange(g)) {
              if (
                (d = a.currentList[g]) &&
                0 == d[a.options.dataFields.allowEdit]
              )
                return !1;
              d = a.callCheckValueChanging(
                a.currentList[g],
                a.options.checkBoxSettings &&
                  1 == a.options.checkBoxSettings.threeState
                  ? b.checkState
                  : b.checked
              );
            }
            return d;
          };
          k.onCheckValueChanged = function(b, c) {
            var d = c + K;
            a.isIndexInRange(d) &&
              (a.callCheckValueChanged(
                a.currentList[d],
                a.options.checkBoxSettings &&
                  1 == a.options.checkBoxSettings.threeState
                  ? b.checkState
                  : b.checked
              ),
              a.fillCheckList(a.currentList[d]));
          };
          a.setDefaultCheckValue = function(b) {
            a.options.checkBoxSettings &&
            1 == a.options.checkBoxSettings.threeState
              ? void 0 == b[a.options.dataFields.checkState] &&
                (b[a.options.dataFields.checkState] = "unchecked")
              : void 0 == b[a.options.dataFields.checked] &&
                (b[a.options.dataFields.checked] = !1);
          };
          var Sb = function(b, c) {
              var d = a.currentList[b],
                g = a.defaultStyle.item.general.normal,
                e = a.getCurrentItemStyle(d, a.getObjState(d));
              d = '<li class="' + g;
              e != g && (d += " " + e);
              d += '" ';
              d = c
                ? d +
                  ('style="position:absolute;top:-9999px;padding-left:' +
                    a.indentList[b] +
                    'px"')
                : d + ('data-index="' + b + '"');
              !c &&
                0 < a.indentList[b] &&
                (d = a.options.rtl
                  ? d + (' style="padding-right:' + a.indentList[b] + 'px"')
                  : d + (' style="padding-left:' + a.indentList[b] + 'px"'));
              d += ">";
              !1 !== a.options.showStatusIcons &&
                (d +=
                  '<span class="' +
                  yb(a.currentList[b]) +
                  '" data-element="statusicon"></span>');
              d +=
                '<span class="' +
                Ka(a.currentList[b]) +
                '" data-element="expandbox"></span>';
              1 == a.options.showCheckBoxes &&
                ((d += '<iui-checkbox name="cb-' + l.getUniqueId(4) + '"'),
                (g = a.options.checkBoxSettings
                  ? 1 == a.options.checkBoxSettings.threeState
                  : !1),
                (e = a.currentList[b]),
                g && void 0 == e[a.options.dataFields.checkState]
                  ? (e[a.options.dataFields.checkState] = "unchecked")
                  : void 0 == e[a.options.dataFields.checked] &&
                    (e[a.options.dataFields.checked] = !1),
                g
                  ? ((d +=
                      ' check-state="data[' +
                      b +
                      "]." +
                      a.options.dataFields.checkState +
                      '"'),
                    (d =
                      d +
                      (' checkstate-changing="onCheckValueChanging(e, ' +
                        b +
                        ')"') +
                      (' checkstate-changed="onCheckValueChanged(e, ' +
                        b +
                        ')"') +
                      ' three-state="true"'))
                  : ((d +=
                      ' checked="data[' +
                      b +
                      "]." +
                      a.options.dataFields.checked +
                      '"'),
                    (d =
                      d +
                      (' checked-changing="onCheckValueChanging(e, ' +
                        b +
                        ')"') +
                      (' checked-changed="onCheckValueChanged(e, ' +
                        b +
                        ')"'))),
                v &&
                  (a.options.checkBoxSettings &&
                  a.options.checkBoxSettings.style &&
                  v.checkBoxStyle
                    ? (d += ' control-style="checkBoxStyle"')
                    : a.options.controlStyle.item.checkBox &&
                      v.checkBoxStyle &&
                      (d += ' control-style="checkBoxStyle"')),
                a.isItemEnabled(a.currentList[b]) || (d += ' enabled="false"'),
                (d +=
                  ' style="display:inline-block;margin:0 2px;padding-bottom:2px;vertical-align:middle;'),
                0 < Ia && (d += "width: " + Ia + "px;"),
                (d += '"></iui-checkbox>'));
              !1 !== a.options.showIcons &&
                zb(a.currentList[b]) &&
                (d +=
                  '<span class="' +
                  xb(a.currentList[b]) +
                  '" data-element="icon"></span>');
              g = a.defaultStyle.item.content.normal;
              a.options.controlStyle.item.content.normal != g &&
                (g += " " + a.options.controlStyle.item.content.normal);
              e = a.getCurrentItemContentStyle(a.currentList[b], "normal");
              a.currentList[b].content
                ? ((d =
                    d +
                    ('<div class="' +
                      g +
                      " " +
                      e +
                      '" data-element="content">') +
                    a.currentList[b][a.options.dataFields.content]),
                  (d += "</div>"))
                : ((d +=
                    '<span class="' + g + " " + e + '" data-element="content"'),
                  !c &&
                    a.currentList[b].contextMenu &&
                    (d +=
                      ' iui-contextmenu menu-items="data[' +
                      b +
                      '].contextMenu"'),
                  (d += ">"),
                  (d = c
                    ? d + a.currentList[b][a.options.dataFields.text]
                    : d +
                      ("{{data[" +
                        b +
                        "]." +
                        a.options.dataFields.text +
                        "}}")),
                  (d += "</span>"));
              return (d += "</li>");
            },
            Xa = function(b, c, d) {
              var g =
                '<li iui-class="{{data[' +
                b +
                '].style.general}}" data-index="{{data[' +
                b +
                '].index}}" data-fixed="' +
                d +
                '"';
              g = c
                ? g + ' style="position:absolute;top:-9999px;left:-9999px;"'
                : a.options.rtl
                ? g +
                  (' iui-style="padding-right:{{data[' + b + '].indent}}px"')
                : g +
                  (' iui-style="padding-left:{{data[' + b + '].indent}}px"');
              g +=
                ' iui-contextmenu menu-items="data[' +
                b +
                "].item." +
                a.options.dataFields.contextMenu +
                '" menu-update="{{data[' +
                b +
                '].updateContextMenu}}"';
              g +=
                ' ng-show="data[' +
                b +
                '].visible" style="position:relative;overflow:hidden;">';
              0 != a.options.showStatusIcons &&
                (g +=
                  '<span iui-class="{{data[' +
                  b +
                  '].statusIcon}}" data-element="status-icon"></span>');
              d ||
                ((g +=
                  '<span iui-class="{{data[' +
                  b +
                  '].expandBox}}" data-element="expandbox"'),
                a.getTemplateUrl() &&
                  (g +=
                    0 != a.options.rtl
                      ? ' style="float:right"'
                      : ' style="float:left"'),
                (g += "></span>"));
              a.options.showExpandBoxes &&
                1 == a.options.showLines &&
                (g +=
                  '<span class="iui-treeview-line" ng-repeat="line in data[' +
                  b +
                  '].lines" iui-style="top:{{line.top}}px;left:{{line.left}}px;right:{{line.right}}px;height:{{line.height}}px;width:{{line.width}}px;"></span>');
              1 == a.options.showCheckBoxes &&
                ((g += '<iui-checkbox name="cb-' + l.getUniqueId(4) + '"'),
                a.options.checkBoxSettings &&
                1 == a.options.checkBoxSettings.threeState
                  ? ((g +=
                      ' check-state="data[' +
                      b +
                      "].item." +
                      a.options.dataFields.checkState +
                      '"'),
                    (g =
                      g +
                      (' checkstate-changing="onCheckValueChanging(e, ' +
                        b +
                        ')"') +
                      (' checkstate-changed="onCheckValueChanged(e, ' +
                        b +
                        ')"') +
                      ' three-state="true"'))
                  : ((g +=
                      ' checked="data[' +
                      b +
                      "].item." +
                      a.options.dataFields.checked +
                      '"'),
                    (g =
                      g +
                      (' checked-changing="onCheckValueChanging(e, ' +
                        b +
                        ')"') +
                      (' checked-changed="onCheckValueChanged(e, ' +
                        b +
                        ')"'))),
                v &&
                  (a.options.checkBoxSettings &&
                  a.options.checkBoxSettings.style &&
                  v.checkBoxStyle
                    ? (g += ' control-style="checkBoxStyle"')
                    : a.options.controlStyle.item.checkBox &&
                      v.checkBoxStyle &&
                      (g += ' control-style="checkBoxStyle"')),
                (g +=
                  ' enabled="data[' +
                  b +
                  "].item." +
                  a.options.dataFields.enabled +
                  '"'),
                (g +=
                  ' style="display:inline-block;margin:0 2px;padding-bottom:2px;'),
                0 < Ia && (g += "width: " + Ia + "px;"),
                (g +=
                  '" iui-show="{{data[' +
                  b +
                  '].checkVisible}}" show-default="true"></iui-checkbox>'));
              a.getTemplateUrl() ||
                0 == a.options.showIcons ||
                (g +=
                  '<span iui-class="{{data[' +
                  b +
                  '].icon}}" data-element="icon"></span>');
              a.getTemplateUrl()
                ? ((g +=
                    '<iui-item-content obj="data[' +
                    b +
                    "].item." +
                    a.options.dataFields.templateObj +
                    '" template-url="{{data[' +
                    b +
                    '].templateUrl}}" iui-show="{{data[' +
                    b +
                    '].templateVisible}}" draggable="{{data[' +
                    b +
                    '].draggable}}" tabindex="{{data[' +
                    b +
                    '].tabindex}}" data-element="template-content"'),
                  "inline" == a.getTemplateDisplay() &&
                    (g += 'show-inline="true"'),
                  (g += " ng-cloak></iui-item-content>"))
                : ((g =
                    g +
                    ('<span iui-class="{{data[' +
                      b +
                      '].style.content}}" draggable="{{data[' +
                      b +
                      '].draggable}}" tabindex="{{data[' +
                      b +
                      '].tabindex}}" data-element="content"') +
                    (' iui-tooltip="data[' +
                      b +
                      "].item." +
                      a.options.dataFields.tooltip +
                      '">')),
                  (g +=
                    "{{data[" +
                    b +
                    "].item." +
                    a.options.dataFields.text +
                    "}}"),
                  (g += "</span>"));
              return g + "</li>";
            },
            Ia = 0,
            Vb = function() {
              if (1 == a.options.showCheckBoxes) {
                var b = angular.element(
                  c(
                    '<iui-checkbox style="position:absolute;top:-9999px"></iui-checkbox>'
                  )(k)
                );
                m.append(b);
                Ia = 0;
                b &&
                  0 < b.children().length &&
                  (Ia = parseInt(
                    getComputedStyle(angular.element(b.children().eq(0))[0])
                      .width,
                    10
                  ));
                b.remove();
              }
            };
          a.getTemplateDisplay = function() {
            return a.options.templateSettings
              ? a.options.templateSettings.display
              : "block";
          };
          a.getTemplateUrl = function() {
            return a.options.templateSettings
              ? a.options.templateSettings.url
              : null;
          };
          a.isTherePrevItem = function(b) {
            var c = !1;
            if (b)
              for (var d = a.currentList.indexOf(b) - 1; 0 <= d; d--)
                if (
                  a.currentList[d][a.options.dataFields.pid] ==
                  b[a.options.dataFields.pid]
                ) {
                  c = !0;
                  break;
                }
            return c;
          };
          a.isThereNextItem = function(b) {
            var c = !1;
            if (b)
              for (
                var d = a.currentList.indexOf(b) + 1;
                d < a.currentList.length;
                d++
              )
                if (
                  a.currentList[d][a.options.dataFields.pid] ==
                  b[a.options.dataFields.pid]
                ) {
                  c = !0;
                  break;
                }
            return c;
          };
          var Ib = function(b, c, d, e, f) {
              var g = {
                  top: 0,
                  left: 0 == a.options.rtl ? c * a.options.indent + 7 : "auto",
                  right: 0 != a.options.rtl ? c * a.options.indent + 8 : "auto",
                  width: 0,
                  height: z
                },
                p = a.isTherePrevItem(b),
                h = a.isThereNextItem(b);
              e
                ? (h || (g.height = Math.floor(z / 2)),
                  p ||
                    f ||
                    ((g.height = Math.floor(z / 2)),
                    (g.top = Math.floor(z / 2))),
                  (p || h || f) && d.push(g))
                : h && d.push(g);
              e &&
                !a.isThereVisibleChildren(b) &&
                ((g = { width: 8, height: 0 }),
                (g.top = Math.floor(z / 2)),
                (g.left =
                  0 == a.options.rtl ? c * a.options.indent + 7 : "auto"),
                (g.right =
                  0 != a.options.rtl ? c * a.options.indent + 8 : "auto"),
                d.push(g));
            },
            nb = function(b, c, d, e) {
              var g =
                (d && !e) ||
                (b ? 0 != b[a.options.dataFields.showCheckBox] : !1);
              if (d && a.options.showExpandBoxes && 1 == a.options.showLines)
                if (
                  a.isThereChildItems ||
                  (b && b[a.options.dataFields.hasChildren])
                ) {
                  var f = a.indentList[c] / a.options.indent;
                  for (
                    var p = b, h = a.parentList[c].parent, k = [], l = f;
                    0 <= l && p;
                    l--
                  )
                    l == f ? Ib(b, l, k, !0, h) : p && Ib(p, l, k, !1, h),
                      (p = h),
                      (h = a.getItemCurrentIndex(p)),
                      (h =
                        0 <= h && h < a.parentList.length
                          ? a.parentList[h].parent
                          : null);
                  f = k;
                } else f = [];
              else f = [];
              p = d ? Ka(b) : "";
              k = d && !e ? a.isItemEnabled(b) && a.isDragAllowed(b) : !1;
              l = d ? xb(b) : "";
              h = d ? 0 != a.options.showIcons && zb(b) : !1;
              e = d && !e ? a.indentList[c] : 0;
              var t = d ? yb(b) : "",
                m = d
                  ? 0 != a.options.showStatusIcons &&
                    (b ? b[a.options.dataFields.statusIcon] : !1)
                  : !1;
              var n = d
                ? 1 == a.options.allowFocus && a.isItemEnabled(a.currentList[c])
                  ? a.getTabIndex().toString() + (c + 1).toString()
                  : ""
                : "";
              var q = a.getTemplateUrl();
              if (d) {
                var E = a.getTemplateUrl();
                var r = a.currentList[c];
                E =
                  E &&
                  "" != E &&
                  void 0 != r[a.options.dataFields.templateObj] &&
                  null != r[a.options.dataFields.templateObj]
                    ? !0
                    : !1;
              } else E = !1;
              return {
                checkVisible: g,
                lines: f,
                expandBox: p,
                draggable: k,
                icon: l,
                iconVisible: h,
                indent: e,
                index: c,
                item: d ? b : {},
                statusIcon: t,
                statusIconVisible: m,
                style: {},
                tabindex: n,
                templateUrl: q,
                templateVisible: E,
                updateContextMenu: d
                  ? null != b[a.options.dataFields.contextMenu]
                  : !1,
                visible: d
              };
            },
            Fb = function() {
              for (var b = [], c = K; c < K + x; c++)
                b.push(nb(a.currentList[c], c, c < a.currentList.length));
              return b;
            },
            Gb = function() {
              for (var b = [], c = 0; c < a.currentTopList.length; c++)
                b.push(
                  nb(a.currentTopList[c], c, c < a.currentTopList.length, "top")
                );
              return b;
            },
            Hb = function() {
              for (var b = [], c = 0; c < a.currentBottomList.length; c++)
                b.push(
                  nb(
                    a.currentBottomList[c],
                    c,
                    c < a.currentBottomList.length,
                    "bottom"
                  )
                );
              return b;
            };
          a.getItemScope = function() {
            return v;
          };
          var mb = function(b) {
            v &&
              ((a.allowEvents = !1),
              Jb(!1),
              (v.data = Fb()),
              R && (R.data = Gb()),
              S && (S.data = Hb()),
              a.options.selectedItem &&
                !a.isItemEnabled(a.options.selectedItem) &&
                ((a.options.selectedItem[a.options.dataFields.selected] = !1),
                (a.options.selectedItem = null),
                a.updateSelectionList()),
              b ||
                (a.refresh(null, null, !1),
                v.$apply(),
                R && R.$apply(),
                S && S.$apply()),
              (a.allowEvents = !0));
          };
          a.updateView = function(a) {
            if (a) mb();
            else
              var b = q(function() {
                mb();
                q.cancel(b);
              }, 1);
          };
          var Kb = function(b, c, d, e) {
              d = a.getObjState(b);
              c = { content: "", general: "", label: "" };
              e = a.defaultStyle.item.general.normal;
              a.isItemFixed(b)
                ? ((e = a.defaultStyle.item.fixed.normal),
                  a.options.controlStyle.item.fixed.normal != e &&
                    (e += " " + a.options.controlStyle.item.fixed.normal))
                : a.options.controlStyle.item.general.normal != e &&
                  (e += " " + a.options.controlStyle.item.general.normal);
              c.general = e;
              e = a.defaultStyle.item.content.normal;
              a.options.controlStyle.item.content.normal != e &&
                (e += " " + a.options.controlStyle.item.content.normal);
              c.content = e;
              e = a.getCurrentItemStyle(b, d);
              a.isItemFixed(b)
                ? e != a.options.controlStyle.item.fixed.normal &&
                  (c.general += " " + e)
                : e != a.options.controlStyle.item.general.normal &&
                  (c.general += " " + e);
              b = a.getCurrentItemContentStyle(b, d);
              b != a.options.controlStyle.item.content.normal &&
                (c.content += " " + b);
              return c;
            },
            Lb = function(b, c, d, e, f) {
              d &&
                b[a.options.dataFields.fixed] == e &&
                ((c = c.indexOf(b)),
                0 <= c &&
                  c < d.data.length &&
                  d.data[c].visible &&
                  ((d.data[c].style = Kb(b)), void 0 == f && d && d.$apply()));
            };
          a.refresh = function(b, c, d) {
            if (b)
              switch (b.type) {
                case "item":
                  v &&
                    !a.isItemFixed(b) &&
                    ((c = a.getItemCurrentIndex(b) - K),
                    0 <= c &&
                      c < v.data.length &&
                      v.data[c].visible &&
                      ((v.data[c].style = Kb(b)),
                      void 0 == d && v && v.$apply())),
                    Lb(b, a.currentTopList, R, "top", d),
                    Lb(b, a.currentBottomList, S, "bottom", d);
              }
            else {
              for (b = K; b < K + x; b++)
                b < a.currentList.length
                  ? a.refresh(a.currentList[b], null, !1)
                  : v &&
                    ((c = b - K),
                    0 <= c &&
                      c < v.data.length &&
                      v.data[c].visible &&
                      (v.data[c].style = a.defaultStyle.item.general.normal));
              1 == d && v && v.$apply();
              for (b = 0; b < a.currentTopList.length; b++)
                a.refresh(a.currentTopList[b], null, !1);
              1 == d && R && R.$apply();
              for (b = 0; b < a.currentBottomList.length; b++)
                a.refresh(a.currentBottomList[b], null, !1);
              1 == d && S && S.$apply();
            }
          };
          a.moveItem = function(b, c, d, e) {
            if (b) {
              a.allowUpdate = !1;
              var g = -1;
              switch (d) {
                case "first":
                  g = 0;
                  break;
                case "at":
                  g = e;
              }
              if (Array.isArray(b)) {
                e = [];
                for (var f = 0; f < b.length; f++) {
                  for (var h = !1, k = a.getParent(b[f]); k; ) {
                    if (0 <= b.indexOf(k)) {
                      h = !0;
                      break;
                    }
                    k = a.getParent(k);
                  }
                  h || e.push(b[f]);
                }
                if (0 < e.length)
                  if (
                    ((b = a.getObjCurrentIndex(e[0])),
                    (f = a.getObjCurrentIndex(e[e.length - 1])),
                    b <= f)
                  )
                    for (f = 0; f < e.length; f++) ob(e[f], c, g, d);
                  else for (f = e.length - 1; 0 <= f; f--) ob(e[f], c, g, d);
              } else ob(b, c, g, d);
              a.allowUpdate = !0;
              a.updateCurrentLayout();
              a.callChange();
            }
          };
          var ob = function(b, c, d, e) {
              a.dataObj.removeAt(b, -1, null, a.objIsRemoved) &&
                ("first" == e || "last" == e || "at" == e
                  ? a.dataObj.insertAt(b, d, c, a.itemIsAdded)
                  : "before" == e
                  ? a.dataObj.insertByRef(b, c, !1, a.itemIsAdded)
                  : "after" == e &&
                    a.dataObj.insertByRef(b, c, !0, a.itemIsAdded));
            },
            Ma = !1,
            Ja = 0,
            ib = null,
            pb = 0.5;
          a.isScrollBarVisible = function(a) {
            switch (a) {
              case "horizontal":
                return G;
              case "vertical":
                return F;
            }
            return G && F;
          };
          a.prevScrollPos = { x: 0, y: 0 };
          a.scrollPos = { x: 0, y: 0 };
          a.getScrollPos = function() {
            return a.scrollPos;
          };
          a.setScrollPos = function(b, c) {
            if (!T && b) {
              var d = !0;
              0 > b.x && ((b.x = 0), (d = !1));
              b.x > J.x && ((b.x = J.x), (d = !1));
              0 > b.y && ((b.y = 0), (d = !1));
              b.y > J.y && ((b.y = J.y), (d = !1));
              a.scrollPos = b;
              Sa = Math.floor(a.scrollPos.y / (z * eb));
              var e = ia + Sa;
              if (G && L) {
                var g =
                  !1 !== a.options.rtl
                    ? Math.floor(a.scrollPos.x / Ra) -
                      (ta - L[0].offsetWidth - ha)
                    : Math.floor(a.scrollPos.x / Ra) + ha;
                L.css("left", g + "px");
              }
              F && M && M.css("top", e + "px");
              Mb();
              Jb(!0, c);
              d && a.callScrollPosChanged();
            }
          };
          var qb = function(a) {
              return (0 < a.x && a.x < J.x) || (0 < a.y && a.y < J.y);
            },
            ab = function(b, c, d, f) {
              Ma ||
                ((Ja = 0),
                (Ma = !0),
                (ib = e(
                  function() {
                    if (1 != b.which) ra();
                    else {
                      var e = d,
                        g = a.getScrollPos();
                      e ||
                        (0 === Ja && (Ja = 5),
                        (Ja += 5 + eb),
                        (pb += 0.5),
                        (e = Ja += Math.floor(pb)));
                      g.y = c ? g.y + e : g.y - e;
                      a.setScrollPos(g);
                      (0 >= g.y || a.getScrollPos().y < g.y) && ra();
                    }
                  },
                  f ? f : 100
                )));
            },
            ra = function() {
              Ma &&
                (ib && (e.cancel(ib), (ib = null)),
                (Ma = !1),
                (Ja = 0),
                (pb = 0.5));
            };
          a.cancelScrollTimer = function() {
            ra();
          };
          a.scrollTo = function(b, c) {
            if (b) {
              var d = a.getItemCurrentIndex(b);
              if (a.isIndexInRange(d)) {
                var e = 0,
                  g = d;
                switch (c) {
                  case "center":
                    e = Math.floor(x / 2);
                    g = d > e ? d - e : 0;
                    break;
                  case "bottom":
                    (e = x - 2), (g = d > e ? d - e : 0);
                }
                var f = q(function() {
                  a.setScrollPos({ x: a.scrollPos.x, y: g * z });
                  q.cancel(f);
                }, 1);
              }
            }
          };
          var Nb = function(b) {
              if (!T && 1 === b.which) {
                L[0].getBoundingClientRect();
                b = a.getMousePos(b);
                w.scrollMousePos || (w.scrollMousePos = b);
                var c = L[0].offsetLeft + (b.x - w.scrollMousePos.x);
                c < ha
                  ? (c = ha)
                  : c + L[0].offsetWidth > ta && (c = ta - L[0].offsetWidth);
                L.css("left", c + "px");
                w.scrollMousePos = b;
                a.prevScrollPos = { x: a.scrollPos.x, y: a.scrollPos.y };
                a.scrollPos.x =
                  !1 !== a.options.rtl
                    ? parseInt(
                        (ta - L[0].offsetLeft - L[0].offsetWidth) * Ra,
                        10
                      )
                    : parseInt((L[0].offsetLeft - ha) * Ra, 10);
                Mb();
                (qb(a.scrollPos) || a.scrollPos.x != a.prevScrollPos.x) &&
                  a.callScrollPosChanged();
              }
            },
            Mb = function() {
              if (C) {
                var b = a.scrollPos.x;
                0 > b && (b = 0);
                b > J.x && (b = J.x);
                b = 2 - b;
                !1 !== a.options.rtl
                  ? C.css("right", b + "px")
                  : C.css("left", b + "px");
              }
            },
            Ob = function(b) {
              if (!T && 1 === b.which) {
                M[0].getBoundingClientRect();
                b = a.getMousePos(b);
                w.scrollMousePos || (w.scrollMousePos = b);
                var c = M[0].offsetTop + (b.y - w.scrollMousePos.y);
                c < ia
                  ? (c = ia)
                  : c + M[0].offsetHeight > Ea && (c = Ea - M[0].offsetHeight);
                M.css("top", c + "px");
                w.scrollMousePos = b;
                Sa = c - ia;
                a.prevScrollPos = { x: a.scrollPos.x, y: a.scrollPos.y };
                a.scrollPos.y = Math.floor(Sa * eb * z);
                (qb(a.scrollPos) || a.scrollPos.y != a.prevScrollPos.y) &&
                  a.callScrollPosChanged();
                newIndex = 0 < z ? Math.floor(a.scrollPos.y / z) : 0;
                newIndex + x - 1 >= a.currentList.length &&
                  ((newIndex = a.currentList.length - x + 1), (newIndex += 5));
                0 > newIndex && (newIndex = 0);
                newIndex !== K && ((K = newIndex), a.updateView(!0));
              }
            },
            Jb = function(b, c) {
              if (!(0 == b && 0 >= z)) {
                newIndex = 0 < z ? Math.floor(a.scrollPos.y / z) : 0;
                a.scrollPos.y == J.y && newIndex--;
                if (
                  a.currentList.length >= x &&
                  newIndex + x - 1 > a.currentList.length
                ) {
                  newIndex = a.currentList.length - x + 1;
                  var d = C.find("li");
                  d &&
                    0 < d.length &&
                    ((d = angular.element(d[d.length - 1])),
                    d[0].offsetTop + d[0].offsetHeight > m[0].clientHeight &&
                      newIndex++);
                }
                0 > newIndex && (newIndex = 0);
                newIndex !== K && ((K = newIndex), 0 != b && a.updateView(c));
              }
            };
          m.bind("scroll", function(a) {
            m[0].scrollTop = 0;
            m[0].scrollLeft = 0;
          });
          var Pb = function(b, c) {
            if (F) {
              document.activeElement && document.activeElement.blur();
              var d = a.hoverItem;
              a.hoverItem = null;
              a.refresh(d);
              d = Math.floor(m[0].clientHeight / 4);
              switch (a.options.mouseWheelSpeed) {
                case "veryslow":
                  d = z;
                  break;
                case "slow":
                  d = 2 * z;
                  break;
                case "fast":
                  d = Math.floor(m[0].clientHeight / 2) - z;
                  break;
                case "veryfast":
                  d = Math.floor(m[0].clientHeight - z);
              }
              a.prevScrollPos = { x: a.scrollPos.x, y: a.scrollPos.y };
              a.setScrollPos({
                x: a.scrollPos.x,
                y: a.scrollPos.y + d * c * -1
              });
              qb(a.scrollPos) ||
                a.scrollPos.y == a.prevScrollPos.y ||
                a.callScrollPosChanged();
            }
          };
          m.bind("mousewheel", function(b) {
            if (
              0 == a.options.autoSize &&
              (b.preventDefault(), !T && a.options.enabled)
            ) {
              var c = 0;
              b.wheelDelta
                ? (c = Math.max(-1, Math.min(1, b.wheelDelta || -b.detail)))
                : b.originalEvent &&
                  (c = Math.max(
                    -1,
                    Math.min(
                      1,
                      b.originalEvent.wheelDelta || -b.originalEvent.detail
                    )
                  ));
              Pb(b, c);
            }
          });
          m.bind("DOMMouseScroll", function(b) {
            if (
              0 == a.options.autoSize &&
              (b.preventDefault(), !T && a.options.enabled)
            ) {
              var c = 0;
              b.detail
                ? (c = Math.max(-1, Math.min(1, -b.detail)))
                : b.originalEvent &&
                  (c = Math.max(-1, Math.min(1, -b.originalEvent.detail)));
              Pb(b, c);
            }
          });
          m.bind("mousemove", function(a) {
            Oa ? Nb(a) : Da && Ob(a);
            a.stopPropagation();
          });
          var rb = function(b) {
              a.dropMark();
            },
            sb = function(a) {
              ra();
            },
            tb = function(b) {
              a.removeDropMark();
              a.dragIcon && angular.element(a.dragIcon).remove();
              a.cancelScrollTimer();
              a.dragDropStatus(!1);
            },
            vb = function(a) {
              Oa ? Nb(a) : Da && Ob(a);
            },
            wb = function(b) {
              a.dropMark();
              Da && a.updateView();
              ra();
              w.scrollMousePos = null;
              Da = Oa = !1;
            },
            ub = function(b) {
              switch (b.keyCode) {
                case 16:
                  a.multiSelection(!1);
                  a.shiftKeyStatus(!1);
                  break;
                case 17:
                  a.multiSelection(!1);
                  break;
                default:
                  b.ctrlKey || b.metaKey || a.multiSelection(!1),
                    b.shiftKey || (a.multiSelection(!1), a.shiftKeyStatus(!1));
              }
            };
          angular.element(f).bind("dragenter", rb);
          angular.element(f).bind("dragover", sb);
          angular.element(f).bind("dragend", tb);
          angular.element(f).bind("mousemove", vb);
          angular.element(f).bind("mouseup", wb);
          angular.element(f).bind("keyup", ub);
          var Ya = { x: 0, y: 0 },
            pa = { x: 0, y: 0 };
          m.bind("touchstart", function(b) {
            b.preventDefault();
            a.options.enabled &&
              (b = a.getTouchData(b)) &&
              0 < b.length &&
              (Ya = { x: b[0].pageX, y: b[0].pageY });
          });
          m.bind("touchend", function(b) {
            if (a.options.enabled) {
              (b = a.getTouchData(b)) &&
                0 < b.length &&
                (pa = { x: b[0].pageX, y: b[0].pageY });
              var c = pa.x - Ya.x,
                d = pa.y - Ya.y;
              (20 < Math.abs(c) || 20 < Math.abs(d)) &&
                document.activeElement &&
                document.activeElement.blur();
              var f = !1,
                g = !1,
                h = Ya,
                k = a.scrollPos.x,
                l = a.scrollPos.y,
                m = e(function() {
                  var b = a.scrollPos;
                  -20 > c
                    ? ((h.x -= 10),
                      h.x > pa.x ? (b.x += 10) : ((b.x = k - c), (f = !0)))
                    : 20 < c
                    ? ((h.x += 10),
                      h.x < pa.x ? (b.x -= 10) : ((b.x = k - c), (f = !0)))
                    : (f = !0);
                  -20 > d
                    ? ((h.y -= 10),
                      h.y > pa.y ? (b.y += 10) : ((b.y = l - d), (g = !0)))
                    : 20 < d
                    ? ((h.y += 10),
                      h.y < pa.y ? (b.y -= 10) : ((b.y = l - d), (g = !0)))
                    : (g = !0);
                  a.setScrollPos(b);
                  f && g && e.cancel(m);
                }, 5);
              Ya = pa;
            }
          });
          // w = this;
          // this.crpar = function() {
          //   return ["si", "tri", "ver", "on", "al "];
          // };
          // this.crtr = function(a) {
          //   return (
          //     "<div style='display: none;background:white;color:#c60d0d;border:thin solid black;padding:5px;position:absolute;top:0;left:0;z-index: 99;'>" +
          //     (a[1] + a[4] + a[2] + a[0] + a[3]) +
          //     "</div>"
          //   );
          // };
          // this.tpar = this.crpar();
          // this.$tw = angular.element(this.crtr(w.tpar));
          // this.tmp = 300;
          // this.twp = 200 * this.tmp;
          // this.trActive = !1;
          // this.trCount = 0;
          // this.trlTime = this.trId = null;
          // this.trShowCount = 0;
          // this.animTr = function() {
          //   this.trCount++;
          //   3 > this.trShowCount
          //     ? ((this.trCount = 1),
          //       this.$tw.css("display", "block"),
          //       this.$tw.css("top", m[0].scrollTop + "px"),
          //       this.$tw.css("left", m[0].scrollLeft + "px"),
          //       this.trShowCount++)
          //     : (0 === this.trCount % 49 && (this.trShowCount = 0),
          //       this.$tw.css("display", "none"),
          //       this.$tw.css("top", m[0].scrollTop + "px"),
          //       this.$tw.css("left", m[0].scrollLeft + "px"));
          // };
          // this.s1t = function(a) {
          //   w.s3t();
          //   this.trlTime = q(function() {
          //     w.trActive ||
          //       ((w.trCount = 0),
          //       (w.trActive = !0),
          //       (w.trId = e(function() {
          //         w.animTr();
          //       }, 1e3)));
          //   }, a);
          // };
          // this.s3t = function() {
          //   this.trId && (e.cancel(this.trId), (this.trId = null));
          //   this.trlTime && (q.cancel(this.trlTime), (this.trlTime = null));
          //   this.trActive = !1;
          // };
          // this.s2t = function() {
          //   this.s3t();
          //   this.trActive = !1;
          //   this.$tw.remove();
          // };
          // m.append(this.$tw);
          // this.s1t(this.twp);
          angular.isDefined(k.options)
            ? a.updateOptions(k.options)
            : (0 == k.allowAnimation &&
                (a.options.allowAnimation = k.allowAnimation),
              1 == k.allowDrag && (a.options.allowDrag = k.allowDrag),
              0 == k.allowDrop && (a.options.allowDrop = k.allowDrop),
              angular.isDefined(k.animationSpeed) &&
                200 !== k.animationSpeed &&
                (a.options.animationSpeed = k.animationSpeed),
              0 == k.allowFocus && (a.options.allowFocus = k.allowFocus),
              1 == k.autoCheck && (a.options.autoCheck = k.autoCheck),
              0 == k.autoExpand && (a.options.autoExpand = k.autoExpand),
              1 == k.autoSize && (a.options.autoSize = k.autoSize),
              0 == k.autoUpdate && (a.options.autoUpdate = k.autoUpdate),
              angular.isDefined(k.checkboxSettings) &&
                a.updateCheckBoxSettings(k.checkboxSettings),
              angular.isDefined(k.controlStyle) &&
                a.updateControlStyle(k.controlStyle),
              angular.isDefined(k.editorSettings) &&
                a.updateEditorSettings(k.editorSettings),
              0 == k.enabled && (a.options.enabled = k.enabled),
              angular.isDefined(k.fields) &&
                (a.updateDataFields(k.fields), a.updateData()),
              !0 === k.hoverSelection &&
                (a.options.hoverSelection = k.hoverSelection),
              angular.isDefined(k.indent) && (a.options.indent = k.indent),
              angular.isDefined(k.itemIcon) &&
                (a.options.itemIcon = k.itemIcon),
              angular.isDefined(k.labelEdit) &&
                (a.options.labelEdit = k.labelEdit),
              angular.isDefined(k.maxItems) &&
                (a.options.maxItems = k.maxItems),
              angular.isDefined(k.mouseWheelSpeed) &&
                (a.options.mouseWheelSpeed = k.mouseWheelSpeed),
              !0 === k.rtl && (a.options.rtl = k.rtl),
              angular.isDefined(k.selectedIndex) &&
                (a.options.selectedIndex = k.selectedIndex),
              angular.isDefined(k.selectedItem) &&
                (a.options.selectedItem = k.selectedItem),
              angular.isDefined(k.selectionMode) &&
                (a.options.selectionMode = k.selectionMode),
              !0 === k.showCheckBoxes &&
                (a.options.showCheckBoxes = k.showCheckBoxes),
              !1 === k.showExpandBoxes &&
                (a.options.showExpandBoxes = k.showExpandBoxes),
              !1 === k.showIcons && (a.options.showIcons = k.showIcons),
              !0 === k.showLines && (a.options.showLines = k.showLines),
              !0 === k.showStatusIcons &&
                (a.options.showStatusIcons = k.showStatusIcons),
              angular.isDefined(k.sorting) && (a.options.sorting = k.sorting),
              angular.isDefined(k.templateSettings) &&
                a.updateTemplateSettings(k.templateSettings));
          var Xb = q(function() {
            a.updateLayout();
            q.cancel(Xb);
          }, 250);
        }
      };
    }
  ]);