{"version":3,"file":"kendo.orgchart.min.js","sources":["kendo.orgchart.js"],"sourcesContent":["(function(f, define) {\n define('orgchart/data',[\"kendo.data\", \"kendo.treelist\"], f);\n})(function() {\n\n(function($, undefined) {\n var extend = $.extend,\n\n data = kendo.data,\n Query = data.Query,\n DataSource = data.DataSource,\n TreeListDataSource = data.TreeListDataSource,\n Model = data.Model,\n ObservableArray = data.ObservableArray;\n\n var OrgChartModel = Model.define({\n id: \"id\",\n parentId: \"parentId\",\n\n fields: {\n id: { type: \"number\", editable: false },\n parentId: { type: \"number\", nullable: true },\n name: { type: \"string\", validation: { required: true } },\n title: { type: \"string\" },\n avatar: { type: \"string\" }\n },\n\n init: function(value) {\n Model.fn.init.call(this, value);\n\n this._loaded = false;\n\n if (!this.parentIdField) {\n this.parentIdField = \"parentId\";\n }\n if (!this.nameField) {\n this.nameField = \"name\";\n }\n if (!this.titleField) {\n this.titleField = \"title\";\n }\n if (!this.avatarField) {\n this.avatarField = \"avatar\";\n }\n\n this.parentId = this.get(this.parentIdField);\n this.name = this.get(this.nameField);\n this.title = this.get(this.titleField);\n this.avatar = this.get(this.avatarField);\n },\n\n accept: function(data) {\n Model.fn.accept.call(this, data);\n\n this.parentId = this.get(this.parentIdField);\n this.name = this.get(this.nameField);\n this.title = this.get(this.titleField);\n this.avatar = this.get(this.avatarField);\n },\n\n set: function(field, value, initiator) {\n if (field == \"parentId\" && this.nameField != \"parentId\") {\n this[this.parentIdField] = value;\n }\n if (field == \"name\" && this.nameField != \"name\") {\n this[this.nameField] = value;\n }\n if (field == \"title\" && this.titleField != \"title\") {\n this[this.titleField] = value;\n }\n if (field == \"avatar\" && this.avatarField != \"avatar\") {\n this[this.avatarField] = value;\n }\n\n Model.fn.set.call(this, field, value, initiator);\n\n if (field == this.parentIdField) {\n this.parentId = this.get(this.parentIdField);\n }\n if (field == this.nameField) {\n this.name = this.get(this.nameField);\n }\n if (field == this.titleField) {\n this.title = this.get(this.titleField);\n }\n if (field == this.avatarField) {\n this.avatar = this.get(this.avatarField);\n }\n },\n\n loaded: function(value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n\n shouldSerialize: function(field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== \"_loaded\" && field != \"_error\" && field != \"_edit\" && !(this.parentIdField !== \"parentId\" && field === \"parentId\");\n }\n });\n\n OrgChartModel.parentIdField = \"parentId\";\n OrgChartModel.nameField = \"name\";\n OrgChartModel.titleField = \"title\";\n OrgChartModel.avatarField = \"avatar\";\n\n OrgChartModel.define = function(base, options) {\n if (options === undefined) {\n options = base;\n base = OrgChartModel;\n }\n\n var parentId = options.parentId || \"parentId\";\n var name = options.name || \"name\";\n var title = options.title || \"title\";\n var avatar = options.avatar || \"avatar\";\n\n options.parentIdField = parentId;\n options.nameField = name;\n options.titleField = title;\n options.avatarField = avatar;\n\n var model = Model.define(base, options);\n\n if (parentId) {\n model.parentIdField = parentId;\n }\n if (name) {\n model.nameField = name;\n }\n if (title) {\n model.titleField = title;\n }\n if (avatar) {\n model.avatarField = avatar;\n }\n\n return model;\n };\n\n var OrgChartDataSource = TreeListDataSource.extend({\n init: function(options) {\n TreeListDataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: OrgChartModel,\n model: OrgChartModel\n }\n }, options));\n },\n\n groupedItemsTree: function(field) {\n var map = this._childrenMap(this.view()),\n defaultParentId = this._defaultParentId(),\n currentChildren = map[defaultParentId] || [],\n grouped = new Query(currentChildren).group({ field: field }).toArray();\n\n return this._innerGroupedItemsTree(field, grouped, map);\n },\n\n itemChildren: function(item, fromView) {\n var filter = {\n field: \"parentId\",\n operator: \"eq\",\n value: null\n };\n\n var order = (this._sort && this._sort.length) ? this._sort : {};\n var itemId, data;\n\n if (fromView) {\n data = this.view();\n } else {\n data = this.data();\n }\n\n if (!!item) {\n itemId = item.get(\"id\");\n\n if (itemId === undefined || itemId === null || itemId === \"\") {\n return [];\n }\n\n filter.value = itemId;\n }\n\n data = new Query(data).filter(filter).sort(order).toArray();\n\n return data;\n },\n\n itemsTree: function(item, field) {\n var data = [],\n current,\n items = this.itemChildren(item, true),\n children, i;\n\n for (i = 0; i < items.length; i++) {\n current = items[i];\n\n if (current.get(\"expanded\")) {\n children = this.itemsTree(current, field);\n\n current = extend(true, {}, current);\n current.children = children;\n }\n\n current = extend(true, {}, current);\n data.push(current);\n }\n\n if (field !== null && field !== undefined) {\n data = new Query(data).group({ field: field }).toArray();\n }\n\n return data;\n },\n\n prospectParents: function(skippedItem, item) {\n var data = [],\n current,\n items = this.itemChildren(item, false),\n children, i;\n\n for (i = 0; i < items.length; i++) {\n current = items[i];\n\n if (current.get(\"id\") === skippedItem.get(\"id\")) {\n continue;\n }\n\n data.push(current);\n\n if (current.get(\"hasChildren\")) {\n children = this.prospectParents(skippedItem, current);\n\n data = data.concat(children);\n }\n }\n\n return data;\n },\n\n read: function(data) {\n return DataSource.fn.read.call(this, data).then(this._loadExpanded.bind(this, data));\n },\n\n toggleChildren: function(item, expand) {\n var defaultPromise = $.Deferred().resolve().promise(),\n loaded = item.loaded();\n\n // reset error state\n if (item._error) {\n item.expanded = false;\n item._error = undefined;\n }\n\n // toggle expanded state\n if (typeof expand == \"undefined\") {\n expand = !item.expanded;\n }\n\n item.expanded = expand;\n\n if (!loaded) {\n defaultPromise = this.load(item);\n }\n\n return defaultPromise;\n },\n\n _innerGroupedItemsTree: function(field, grouped, map) {\n var group, i, j, itemId, innerGrouped, children, current, hasChildren;\n\n\n for (i = 0; i < grouped.length; i++) {\n group = grouped[i];\n children = [];\n hasChildren = false;\n\n for (j = 0; j < group.items.length; j++) {\n current = group.items[j];\n\n if (!group.hasChildren && current.hasChildren) {\n group.hasChildren = true;\n }\n\n if (current.expanded) {\n group.expanded = true;\n }\n\n itemId = group.items[j].get(\"id\");\n children = children.concat(map[itemId]);\n }\n\n if (group.expanded) {\n innerGrouped = new Query(children).group({ field: field }).toArray();\n group.children = this._innerGroupedItemsTree(field, innerGrouped, map);\n }\n\n if (!group.hasChildren && children.length > 0) {\n group.hasChildren = true;\n }\n }\n\n return grouped;\n },\n\n _loadExpanded: function(data) {\n var items, i, current;\n\n if (!data) {\n return;\n }\n\n if (data.id !== null && data.id !== undefined) {\n items = this._byParentId(data.id);\n } else {\n items = this._byParentId(this._defaultParentId());\n }\n\n for (i = 0; i < items.length; i++) {\n current = items[i];\n\n if (current.expanded && !current.loaded()) {\n this.toggleChildren(current, true);\n }\n }\n }\n });\n\n OrgChartDataSource.create = function(options) {\n if (Array.isArray(options)) {\n options = { data: options };\n } else if (options instanceof ObservableArray) {\n options = { data: options.toJSON() };\n }\n\n if (!(options instanceof OrgChartDataSource) && options instanceof DataSource) {\n throw new Error(\"Incorrect DataSource type. Only OrgChartDataSource instances are supported\");\n }\n\n return options instanceof OrgChartDataSource ? options : new OrgChartDataSource(options);\n };\n\n extend(true, kendo.data, {\n OrgChartModel: OrgChartModel,\n OrgChartDataSource: OrgChartDataSource\n });\n})(window.kendo.jQuery);\n\nreturn window.kendo;\n\n}, typeof define == 'function' && define.amd ? define : function(a1, a2, a3) { (a3 || a2)(); });\n\n(function(f, define) {\n define('orgchart/view',[\"kendo.core\"], f);\n})(function() {\n\n(function($, undefined) {\n var kendo = window.kendo,\n keys = kendo.keys,\n extend = $.extend,\n\n NS = \".kendoOrgChartView\",\n\n BLUR = \"blur\",\n CLICK = \"click\",\n COLLAPSE = \"collapse\",\n EXPAND = \"expand\",\n FOCUS = \"focus\",\n KEYDOWN = \"keydown\",\n MENU = \"menu\",\n SELECT = \"select\",\n\n DOT = \".\",\n SPACE = \" \",\n COMMA = \",\",\n HASH = \"#\",\n STRING = \"string\",\n TABINDEX = \"tabindex\",\n ID = \"id\",\n UID = \"uid\",\n PX = \"px\",\n PLUS = \"plus\",\n MINUS = \"minus\",\n\n ARIA_OWNS = \"aria-owns\",\n ARIA_SELECTED = \"aria-selected\";\n\n var ORGCHART_STYLES = {\n wrapper: \"k-orgchart\",\n container: \"k-orgchart-container\",\n line: \"k-orgchart-line\",\n lineVertical: \"k-orgchart-line-v\",\n lineHorizontal: \"k-orgchart-line-h\",\n lineVerticalTop: \"k-orgchart-line-v-top\",\n group: \"k-orgchart-group\",\n groupVertical: \"k-orgchart-group-v\",\n groupHorizontal: \"k-orgchart-group-h\",\n nodesGroup: \"k-orgchart-node-group\",\n nodesGroupContainer: \"k-orgchart-node-group-container\",\n nodeContainer: \"k-orgchart-node-container\",\n node: \"k-orgchart-node\",\n card: \"k-orgchart-card\",\n cardMenu: \"k-orgchart-card-menu\",\n button: \"k-orgchart-button\",\n focused: \"k-focus\",\n plusIcon: \"k-i-plus\",\n menuItem: \"k-item\",\n avatarPreview: \"k-orgchart-avatar-preview\",\n update: \"k-orgchart-update\",\n cancel: \"k-orgchart-cancel\",\n vstack: \"k-vstack\",\n hstack: \"k-hstack\"\n };\n\n var ROOT_TEMPLATE = '
';\n\n var GROUP_TEMPLATE = '
';\n\n var NODE_GROUP_CONTAINER = '
';\n\n var NODE_CONTAINER = '
';\n\n var NODE_CONTAINER_GROUPED = '
';\n\n var ITEM_TEMPLATE = '
';\n\n var BUTTON_TEMPLATE = '';\n\n var CARD_TEMPLATE = '
' +\n '# if(!!data.avatar) { #' +\n '
' +\n '' +\n '\"#:' +\n '' +\n '
' +\n '# } #' +\n '
' +\n '
#: name #
' +\n '# if(data.title) { #' +\n '' +\n '
#: title #
' +\n '# } #' +\n '
' +\n '# if(editable) { #' +\n '' +\n '
' +\n '' +\n '
' +\n '# } #' +\n '
';\n\n var CARD_WRAPPER = '
' +\n '
';\n\n var GROUPED_CARD_WRAPPER = '
';\n\n var View = kendo.Observable.extend({\n init: function(element, options) {\n this.element = element;\n this.options = options || {};\n\n kendo.Observable.fn.init.call(this);\n\n this._attachEvents();\n },\n\n events: [\n COLLAPSE,\n EXPAND,\n SELECT,\n MENU\n ],\n\n destroy: function() {\n kendo.ui.Widget.fn.destroy.call(this);\n this.element.off(NS);\n },\n\n collapse: function() {\n return false;\n },\n\n expand: function() {\n return false;\n },\n\n jqueryGroupElement: function(group) {\n if (!group) {\n return;\n }\n\n var jQueryElement = this._processItem(group);\n\n if (!jQueryElement.hasClass(ORGCHART_STYLES.nodesGroupContainer)) {\n jQueryElement = jQueryElement.closest(DOT + ORGCHART_STYLES.nodesGroupContainer);\n }\n\n return jQueryElement && jQueryElement.length ? jQueryElement : null;\n },\n\n jqueryItemElement: function(item) {\n if (!item) {\n return;\n }\n\n var jQueryElement = this._processItem(item);\n\n if (!jQueryElement.hasClass(ORGCHART_STYLES.card)) {\n jQueryElement = jQueryElement.closest(DOT + ORGCHART_STYLES.card);\n }\n\n return jQueryElement && jQueryElement.length ? jQueryElement : null;\n },\n\n refresh: function() {\n this._cacheFocused();\n this._clearContent();\n this._generateItemsTree();\n this._calculateLevels();\n this._render();\n },\n\n select: function(item) {\n var $item = this._getToSelect(item),\n previousSelection = this.element.find(\"[tabindex=0]\");\n\n if (!$item) {\n return;\n }\n\n previousSelection.removeAttr(TABINDEX)\n .removeClass(ORGCHART_STYLES.focused)\n .attr(ARIA_SELECTED, false);\n\n $item.attr(TABINDEX, \"0\")\n .addClass(ORGCHART_STYLES.focused)\n .trigger(\"focus\")\n .attr(ARIA_SELECTED, true);\n },\n\n _attachEvents: function() {\n var itemsSelector = DOT + ORGCHART_STYLES.card + COMMA + DOT + ORGCHART_STYLES.nodesGroupContainer;\n\n this.element.on(KEYDOWN + NS, itemsSelector, this._onKeyDown.bind(this))\n .on(CLICK + NS, itemsSelector, this._onSelect.bind(this))\n .on(CLICK + NS, DOT + ORGCHART_STYLES.button, this._onButtonClick.bind(this))\n .on(FOCUS + NS, itemsSelector, this._onFocus.bind(this))\n .on(BLUR + NS, DOT + ORGCHART_STYLES.focused, this._onBlur.bind(this));\n },\n\n _cacheFocused: function() {\n var focusableItem = this.element.find(\"[tabindex='0']\"),\n focusableDataItem = this._dataItems(focusableItem);\n\n if (!focusableItem.length || !focusableDataItem || !focusableDataItem.length || !!this._idTabIndex) {\n return;\n }\n\n this._idTabIndex = focusableDataItem[0].get(ID);\n\n if (focusableItem.hasClass(ORGCHART_STYLES.focused)) {\n this._shouldRestoreSelection = true;\n } else {\n this._shouldRestoreSelection = false;\n }\n },\n\n _calculateDimensions: function() {\n var itemElement = this.element.find(DOT + this._selector).first();\n\n if (!this._buttonHeight) {\n this._buttonHeight = this.element.find(DOT + ORGCHART_STYLES.button).first().outerHeight();\n }\n\n if (!this._spacing) {\n this._spacing = this.element.find(DOT + ORGCHART_STYLES.lineVertical).first().outerHeight();\n }\n\n if (!this._itemWidth) {\n this._itemWidth = this._calculateItemWidth();\n }\n\n if (!this._itemHeight) {\n this._itemHeight = itemElement.outerHeight(true);\n }\n },\n\n _calculateItemWidth: function() {\n return false;\n },\n\n _calculateLevel: function() {\n return false;\n },\n\n _calculateLevels: function() {\n return false;\n },\n\n _clearContent: function() {\n this.element.empty();\n },\n\n _dataItem: function(item) {\n var $item = this.jqueryItemElement(item);\n\n if (!$item || !$item.data(UID)) {\n return;\n }\n\n return this.dataSource.getByUid($item.data(UID));\n },\n\n _dataItems: function() {\n return false;\n },\n\n _generateItemsTree: function() {\n return false;\n },\n\n _getToSelect: function() {\n return false;\n },\n\n _groupIsVertical: function() {\n return false;\n },\n\n _keyCollapse: function() {\n return false;\n },\n\n _keyExpand: function() {\n return false;\n },\n\n _keyNext: function() {\n return false;\n },\n\n _keyPrev: function() {\n return false;\n },\n\n _keyEnter: function() {\n return false;\n },\n\n _keyEscape: function() {\n return false;\n },\n\n _keyEnd: function() {\n var target = this.element.find(DOT + ORGCHART_STYLES.card).last(),\n previous = this.element.find(\"[tabindex=0]\");\n\n\n if (previous[0] === target[0]) {\n return;\n }\n\n this.trigger(SELECT, {\n item: target,\n dataItems: [this._dataItem(target)]\n });\n },\n\n _keyHome: function() {\n var target = this.element.find(DOT + ORGCHART_STYLES.card).first(),\n previous = this.element.find(\"[tabindex=0]\");\n\n\n if (previous[0] === target[0]) {\n return;\n }\n\n this.trigger(SELECT, {\n item: target,\n dataItems: [this._dataItem(target)]\n });\n },\n\n _onBlur: function() {\n this.element.find(DOT + ORGCHART_STYLES.focused).removeClass(ORGCHART_STYLES.focused);\n },\n\n _onKeyDown: function(e) {\n var key = e.keyCode,\n focused = this.element.find(\"[tabindex=0]\"),\n isRtl = kendo.support.isRtl(this.element),\n nextKey = isRtl ? [ keys.LEFT ] : [ keys.RIGHT ],\n prevKey = isRtl ? [ keys.RIGHT ] : [ keys.LEFT ],\n expandKey = keys.DOWN,\n collapseKey = keys.UP,\n groupIsVertical;\n\n if (!focused) {\n return;\n }\n\n groupIsVertical = this._groupIsVertical(focused);\n\n if (groupIsVertical) {\n nextKey.push(keys.DOWN);\n prevKey.push(keys.UP);\n }\n\n if (key === keys.HOME) {\n this._keyHome();\n } else if (key === keys.END) {\n this._keyEnd();\n } else if (nextKey.indexOf(key) > -1) {\n e.preventDefault();\n e.stopPropagation();\n\n this._keyNext(focused);\n } else if (prevKey.indexOf(key) > -1) {\n e.preventDefault();\n e.stopPropagation();\n\n this._keyPrev(focused);\n } else if (key === expandKey) {\n e.preventDefault();\n e.stopPropagation();\n\n this._keyExpand(focused);\n } else if (key === collapseKey) {\n e.preventDefault();\n e.stopPropagation();\n\n this._keyCollapse(focused);\n } else if (key === keys.ENTER) {\n this._keyEnter(focused);\n } else if (key === keys.ESC) {\n this._keyEscape(focused);\n }\n },\n\n _onButtonClick: function(e) {\n var that = this,\n target = $(e.currentTarget),\n shouldExpand = target.find(DOT + ORGCHART_STYLES.plusIcon).length > 0 ? true : false,\n el = target.siblings(DOT + this._selector),\n items = this._dataItems(el),\n i;\n\n if (shouldExpand) {\n if (that.trigger(EXPAND, { item: el, dataItems: items })) {\n return;\n }\n } else {\n if (that.trigger(COLLAPSE, { item: el, dataItems: items })) {\n return;\n }\n }\n\n for (i = 0; i < items.length; i++) {\n that.dataSource.toggleChildren(items[i], shouldExpand).then(this.refresh.bind(this));\n }\n },\n\n _onFocus: function() {\n return false;\n },\n\n _onSelect: function() {\n return false;\n },\n\n _orientation: function() {\n return false;\n },\n\n _processItem: function(el) {\n var jQueryElement;\n\n // Substitute with kendo.type() when merged and taken from master\n if ($.type(el) === STRING) {\n jQueryElement = this.element.find(el);\n } else if (kendo.isElement(el)) {\n jQueryElement = $(el);\n } else if (el instanceof jQuery) {\n jQueryElement = el;\n }\n\n return jQueryElement;\n },\n\n _render: function() {\n var items = this._itemsTree,\n root = $(kendo.template(ROOT_TEMPLATE)({ label: this.options.messages.label })),\n wrapperContainer = this.element,\n total = this._total,\n widgetPadding = wrapperContainer.closest(DOT + ORGCHART_STYLES.wrapper).css(\"padding-left\"),\n totalWidth;\n\n wrapperContainer.append(root);\n\n this._renderGroup(root, items, 1, this._total, 0);\n totalWidth = total * this._itemWidth + (total - 1) * this._spacing;\n root.width(totalWidth);\n wrapperContainer.width(totalWidth + Number(widgetPadding.split(PX)[0]));\n\n this._setHeight();\n this._restoreSelection();\n },\n\n _renderNode: function(cardWrapperTemplate, contentTemplate, item, level, guid) {\n var messages = this.options.messages,\n borderColors = this.options.cardsColors || kendo.getSeriesColors(),\n node = $(ITEM_TEMPLATE),\n content, cardWrapper;\n\n cardWrapper = $(cardWrapperTemplate(extend(true, {}, item, {\n menuLabel: messages.menuLabel,\n level: level,\n guid: guid,\n editable: !!this.options.editable,\n color: borderColors[level - 1] || borderColors[0]\n })));\n\n if (item.attributes) {\n cardWrapper.attr(JSON.parse(JSON.stringify(item.attributes)));\n }\n\n content = $(contentTemplate(extend(true, {}, item, {\n menuLabel: messages.menuLabel,\n level: level,\n guid: guid,\n editable: !!this.options.editable,\n color: borderColors[level - 1] || borderColors[0]\n })));\n\n cardWrapper.append(content);\n node.append(cardWrapper);\n\n return node;\n },\n\n _renderGroup: function() {\n return false;\n },\n\n _restoreSelection: function() {\n var toFocusItem, toFocus;\n\n if (!this._idTabIndex) {\n toFocus = this.element.find(DOT + this._selector).first();\n\n toFocus.attr(TABINDEX, \"0\");\n } else {\n toFocusItem = this.dataSource.get(this._idTabIndex);\n toFocus = toFocusItem ? this._getToFocus(toFocusItem) : this.element.find(DOT + this._selector).first();\n toFocus.attr(TABINDEX, \"0\");\n\n this._idTabIndex = null;\n }\n\n if (this._shouldRestoreSelection) {\n this._shouldRestoreSelection = false;\n this._preventTriggerSelect = true;\n toFocus.trigger(\"focus\");\n toFocus.addClass(ORGCHART_STYLES.focused);\n }\n },\n\n _setHeight: function() {\n var selector = this._selector,\n elements = this.element.find(DOT + ORGCHART_STYLES.button + COMMA + DOT + selector),\n min = Number.MAX_VALUE, max = 0,\n buttonHeight;\n\n this._calculateDimensions();\n\n buttonHeight = this._buttonHeight;\n this.element.find(DOT + ORGCHART_STYLES.lineVerticalTop).height(this._spacing + buttonHeight / 2);\n\n elements.each(function(i, el) {\n var top = $(el).offset().top,\n bottom = top + $(el).outerHeight(true);\n\n if (top < min) {\n min = top;\n }\n\n if (bottom > max) {\n max = bottom;\n }\n });\n\n this.element.height(max - min);\n }\n });\n\n var SingleView = View.extend({\n init: function(element, options) {\n View.fn.init.call(this, element, options);\n\n this._selector = ORGCHART_STYLES.card;\n },\n\n collapse: function(item) {\n var $item = this.jqueryItemElement(item);\n\n if (!$item) {\n return;\n }\n\n this.dataSource.toggleChildren(this._dataItem($item), false).then(this.refresh.bind(this));\n },\n\n expand: function(item) {\n var $item = this.jqueryItemElement(item);\n\n if (!$item) {\n return;\n }\n\n this.dataSource.toggleChildren(this._dataItem($item), true).then(this.refresh.bind(this));\n },\n\n _calculateItemWidth: function() {\n return this.element.find(DOT + this._selector).first().outerWidth(true);\n },\n\n _calculateLevel: function(items, level) {\n var itemsLength = items.length,\n maxColumnsPerLevel = this._maxColumnsPerLevel,\n nestedChildren = false,\n shouldReset = false,\n previousMax, i, item;\n\n if (!maxColumnsPerLevel[level] || maxColumnsPerLevel[level] < itemsLength) {\n previousMax = maxColumnsPerLevel[level];\n shouldReset = true;\n maxColumnsPerLevel[level] = itemsLength;\n }\n\n for (i = 0; i < itemsLength; i++) {\n item = items[i];\n\n if (item.hasChildren) {\n nestedChildren = true;\n\n if (item.expanded) {\n this._calculateLevel(item.children, level + 1);\n }\n }\n }\n\n if (!nestedChildren && shouldReset && level > 0) {\n shouldReset = false;\n maxColumnsPerLevel[level] = previousMax || 1;\n }\n },\n\n _calculateLevels: function() {\n var items = this._itemsTree,\n maxColumnsPerLevel = this._maxColumnsPerLevel = [],\n total = 1,\n i;\n\n this._calculateLevel(items, 0);\n\n for (i = 0; i < maxColumnsPerLevel.length; i++) {\n total = total * maxColumnsPerLevel[i];\n }\n\n this._total = total;\n },\n\n _dataItems: function(container) {\n var item = this.dataSource.getByUid(container.data(UID));\n\n if (item) {\n return [item];\n } else {\n return null;\n }\n },\n\n _generateItemsTree: function() {\n this._itemsTree = this.dataSource.itemsTree();\n },\n\n _getToFocus: function(item) {\n return this.element.find(\"[data-uid='\" + item.get(UID) + \"']\");\n },\n\n _getToSelect: function(el) {\n return this.jqueryItemElement(el);\n },\n\n _groupIsVertical: function(focused) {\n var itemGroup = focused.closest(DOT + ORGCHART_STYLES.group);\n\n return itemGroup.hasClass(ORGCHART_STYLES.groupVertical);\n },\n\n _keyCollapse: function(focused) {\n var dataItem = this._dataItem(focused),\n parentUid, parentItem;\n\n if (dataItem.expanded) {\n if (!this.trigger(COLLAPSE, { item: focused, dataItems: [dataItem] })) {\n this.collapse(focused);\n }\n } else if (dataItem.parentId) {\n parentUid = this.dataSource.get(dataItem.parentId).get(UID);\n parentItem = this.element.find(\"[data-uid='\" + parentUid + \"']\");\n\n this.trigger(SELECT, {\n item: parentItem,\n dataItems: [this._dataItem(parentItem)]\n });\n }\n },\n\n _keyEnter: function(focused) {\n if (focused.find(DOT + ORGCHART_STYLES.cardMenu).length > 0) {\n this.trigger(MENU, focused);\n }\n },\n\n _keyExpand: function(focused) {\n var dataItem = this._dataItem(focused),\n ownedGroup = this.element.find(HASH + focused.attr(ARIA_OWNS)),\n childItem;\n\n if (!dataItem.hasChildren) {\n return;\n }\n\n if (!dataItem.expanded) {\n if (!this.trigger(EXPAND, { item: focused, dataItems: [dataItem] })) {\n this.expand(focused);\n }\n } else {\n childItem = ownedGroup.find(DOT + this._selector).first();\n\n this.trigger(SELECT, {\n item: childItem,\n dataItems: [this._dataItem(childItem)]\n });\n }\n },\n\n _keyNext: function(focused) {\n var dataItem = this._dataItem(focused),\n next = focused.parent().next(DOT + ORGCHART_STYLES.node).find(DOT + ORGCHART_STYLES.card),\n ownedGroup = this.element.find(HASH + focused.attr(ARIA_OWNS));\n\n if (!next.length && dataItem.hasChildren && dataItem.expanded) {\n next = ownedGroup.find(DOT + ORGCHART_STYLES.card).first();\n }\n\n if (next.length === 0 || next.hasClass(ORGCHART_STYLES.focused)) {\n return;\n }\n\n this.trigger(SELECT, {\n item: next,\n dataItems: [this._dataItem(next)]\n });\n },\n\n _keyPrev: function(focused) {\n var dataItem = this._dataItem(focused),\n prev = focused.parent().prev(DOT + ORGCHART_STYLES.node).find(DOT + ORGCHART_STYLES.card),\n parentUid;\n\n if (!prev.length && dataItem.parentId) {\n parentUid = this.dataSource.get(dataItem.parentId).get(UID);\n prev = this.element.find(\"[data-uid='\" + parentUid + \"']\");\n }\n\n if (prev.length === 0 || prev.hasClass(ORGCHART_STYLES.focused)) {\n return;\n }\n\n this.trigger(SELECT, {\n item: prev,\n dataItems: [this._dataItem(prev)]\n });\n },\n\n _onFocus: function(e) {\n var currentTarget = $(e.currentTarget),\n target = $(e.target);\n\n if (this._preventTriggerSelect) {\n e.stopPropagation();\n this._preventTriggerSelect = false;\n return;\n }\n\n if (target.hasClass(ORGCHART_STYLES.cardMenu)) {\n if (target.closest(\"[tabindex='0']\").length > 0) {\n e.stopPropagation();\n return;\n } else {\n this._preventTriggerSelect = true;\n }\n }\n\n if (!currentTarget.hasClass(ORGCHART_STYLES.card)) {\n currentTarget = currentTarget.closest(DOT + ORGCHART_STYLES.card);\n }\n\n if (!currentTarget.hasClass(ORGCHART_STYLES.focused)) {\n this.trigger(SELECT, {\n item: currentTarget,\n dataItems: [this._dataItem(currentTarget)]\n });\n }\n },\n\n _onSelect: function(e) {\n var target = $(e.currentTarget),\n item = target.hasClass(ORGCHART_STYLES.card) ? target : target.closest(DOT + ORGCHART_STYLES.card),\n menuButtonTarget = $(e.target).hasClass(ORGCHART_STYLES.cardMenu) ? $(e.target) : $(e.target).closest(DOT + ORGCHART_STYLES.cardMenu);\n\n if (menuButtonTarget.length > 0) {\n return;\n }\n\n if (!target.hasClass(ORGCHART_STYLES.focused)) {\n this.trigger(SELECT, {\n item: item,\n dataItems: [this._dataItem(item)]\n });\n }\n },\n\n _orientation: function(group, level, vertical) {\n var vLine = $(\"
\").addClass(ORGCHART_STYLES.line + SPACE + ORGCHART_STYLES.lineVertical);\n\n if (vertical && level > 1) {\n group.addClass(ORGCHART_STYLES.groupVertical + SPACE + ORGCHART_STYLES.vstack);\n group.find(DOT + ORGCHART_STYLES.nodeContainer).addClass(ORGCHART_STYLES.vstack);\n\n if (group.find(DOT + ORGCHART_STYLES.button).length === 0 || group.find(DOT + ORGCHART_STYLES.card).length === 1) {\n group.find(DOT + ORGCHART_STYLES.card).before(vLine.clone());\n group.find(DOT + ORGCHART_STYLES.node).first().find(DOT + ORGCHART_STYLES.lineVertical).addClass(ORGCHART_STYLES.lineVerticalTop);\n } else if (level > 1) {\n group.find(DOT + ORGCHART_STYLES.card).first().before(vLine.clone());\n }\n } else {\n group.addClass(ORGCHART_STYLES.groupHorizontal + SPACE + ORGCHART_STYLES.hstack);\n group.find(DOT + ORGCHART_STYLES.nodeContainer).addClass(ORGCHART_STYLES.hstack);\n\n if (level > 1) {\n group.find(DOT + ORGCHART_STYLES.card).before(vLine.clone().addClass(ORGCHART_STYLES.lineVerticalTop));\n }\n }\n },\n\n _renderGroup: function(group, items, level, parentColumns, parentLeft) {\n var vertical = true,\n nodeContainer;\n\n nodeContainer = $(NODE_CONTAINER);\n group.append(nodeContainer);\n vertical = this._renderInner(nodeContainer, items, level, parentColumns, parentLeft);\n\n this._orientation(group, level, vertical);\n },\n\n _renderInner: function(nodeContainer, items, level, parentColumns, parentLeft) {\n var buttonTemplate = kendo.template(BUTTON_TEMPLATE),\n cardWrapperTemplate = kendo.template(CARD_WRAPPER),\n numberOfColumns = parentColumns / items.length,\n vertical = true,\n vLine = $(\"
\").addClass(ORGCHART_STYLES.line + SPACE + ORGCHART_STYLES.lineVertical),\n hLine = $(\"
\").addClass(ORGCHART_STYLES.line + SPACE + ORGCHART_STYLES.lineHorizontal),\n messages = this.options.messages,\n i, item, guid, node, button, innerGroup, itemWidth, spacing, contentTemplate;\n\n if (!this.options.template) {\n contentTemplate = kendo.template(CARD_TEMPLATE);\n } else if (typeof this.options.template === \"function\") {\n contentTemplate = this.options.template;\n } else {\n contentTemplate = kendo.template(this.options.template);\n }\n\n for (i = 0; i < items.length; i++) {\n item = items[i];\n guid = kendo.guid();\n\n node = this._renderNode(cardWrapperTemplate, contentTemplate, item, level, guid);\n\n if (item.hasChildren) {\n node.append(vLine.clone());\n button = $(buttonTemplate({ buttonSign: item.expanded ? MINUS : PLUS, label: item.expanded ? messages.collapse : messages.expand }));\n node.append(button);\n }\n\n nodeContainer.append(node);\n\n this._calculateDimensions();\n\n itemWidth = this._itemWidth;\n spacing = this._spacing;\n\n if (item.hasChildren) {\n vertical = false;\n\n if (item.expanded) {\n innerGroup = this._renderInnerGroup(item, numberOfColumns, parentLeft, i, level, guid);\n }\n }\n\n if (!!innerGroup && innerGroup.hasClass(ORGCHART_STYLES.groupHorizontal) && item.expanded && !!item.children && item.children.length > 1) {\n button.after(hLine.clone().css({\n width: (numberOfColumns - numberOfColumns / item.children.length) * (itemWidth + spacing) + PX,\n \"margin-top\": this._buttonHeight / -2 + PX\n }));\n }\n }\n\n if (numberOfColumns > 1 && !vertical) {\n nodeContainer.find(DOT + ORGCHART_STYLES.node).width((numberOfColumns - 1) * (spacing + itemWidth));\n }\n\n return vertical;\n },\n\n _renderInnerGroup: function(item, numberOfColumns, parentLeft, i, level, guid) {\n var itemWidth = this._itemWidth,\n spacing = this._spacing,\n width = numberOfColumns * itemWidth + (numberOfColumns - 1) * spacing,\n left = (i * numberOfColumns * itemWidth) + parentLeft,\n groupTemplate = kendo.template(GROUP_TEMPLATE),\n offsetDirection = kendo.support.isRtl(this.element) ? \"right\" : \"left\",\n top = level * (this._itemHeight + this._buttonHeight + spacing) + spacing * (level - 1) - this._buttonHeight / 2,\n innerGroup;\n\n if (i > 0) {\n left += (i * numberOfColumns * spacing);\n }\n\n innerGroup = $(groupTemplate({\n guid: guid,\n level: level + 1\n }));\n\n innerGroup.css({\n width: width + PX,\n top: top + PX\n });\n\n innerGroup.css(offsetDirection, left + PX);\n\n this.element.append(innerGroup);\n this._renderGroup(innerGroup, item.children, level + 1, numberOfColumns, left);\n\n return innerGroup;\n }\n });\n\n var GroupedView = View.extend({\n init: function(element, options) {\n View.fn.init.call(this, element, options);\n\n this._selector = ORGCHART_STYLES.nodesGroupContainer;\n },\n\n collapse: function(group) {\n var $group = this.jqueryGroupElement(group),\n dataItems, i;\n\n if (!$group) {\n return;\n }\n\n dataItems = this._dataItems($group);\n\n for (i = 0; i < dataItems.length; i++) {\n this.dataSource.toggleChildren(dataItems[i], false).then(this.refresh.bind(this));\n }\n },\n\n expand: function(group) {\n var $group = this.jqueryGroupElement(group),\n dataItems, i;\n\n if (!$group) {\n return;\n }\n\n dataItems = this._dataItems($group);\n\n for (i = 0; i < dataItems.length; i++) {\n this.dataSource.toggleChildren(dataItems[i], true).then(this.refresh.bind(this));\n }\n },\n\n _dataItems: function(container) {\n var ds = this.dataSource,\n dataItems = [],\n items, item, current;\n\n if (container.hasClass(ORGCHART_STYLES.card)) {\n item = ds.getByUid(container.data(UID));\n\n if (item) {\n dataItems.push(item);\n }\n } else if (container.hasClass(ORGCHART_STYLES.nodesGroupContainer)) {\n this._groupFocused = true;\n\n items = container.find(DOT + ORGCHART_STYLES.card);\n\n items.each(function(i, item) {\n current = ds.getByUid(item.getAttribute(\"data-uid\"));\n\n if (current) {\n dataItems.push(current);\n }\n });\n }\n\n return dataItems;\n },\n\n _calculateItemWidth: function() {\n var itemElement = this.element.find(DOT + this._selector).first(),\n cardWidth = this.element.find(DOT + ORGCHART_STYLES.card).first().outerWidth(true),\n padding = Number(itemElement.css(\"padding-left\").split(PX)[0]),\n border = Number(itemElement.css(\"border-left\").split(PX)[0]);\n\n return cardWidth + 2 * padding + 2 * border;\n },\n\n _calculateLevel: function(groups, level) {\n var groupsLength = groups.length,\n nestedChildren = false,\n maxColumns = 0,\n currentLength, i, group;\n\n this._maxColumnsPerLevel[level] = this._maxColumnsPerLevel[level] || 0;\n this._maxGroups[level] = this._maxGroups[level] || 0;\n\n for (i = 0; i < groupsLength; i++) {\n group = groups[i];\n currentLength = group.items.length;\n\n if (currentLength > maxColumns) {\n maxColumns = currentLength;\n }\n\n group = groups[i];\n\n if (group.hasChildren) {\n nestedChildren = true;\n\n if (group.expanded) {\n this._calculateLevel(group.children, level + 1);\n }\n }\n }\n\n if (groupsLength > this._maxGroups[level]) {\n this._maxGroups[level] = groupsLength;\n }\n\n if (!nestedChildren) {\n maxColumns = 1;\n }\n\n if (maxColumns > this._maxColumnsPerLevel[level]) {\n this._maxColumnsPerLevel[level] = maxColumns;\n }\n },\n\n _calculateLevels: function() {\n var items = this._itemsTree,\n maxColumnsPerLevel = this._maxColumnsPerLevel = [],\n maxGroups = this._maxGroups = [],\n total = 1,\n i, currentTotal;\n\n this._calculateLevel(items, 0);\n\n for (i = maxColumnsPerLevel.length - 1; i >= 0; i--) {\n currentTotal = maxColumnsPerLevel[i] * maxGroups[i];\n\n if (total > maxColumnsPerLevel[i]) {\n total = total * maxGroups[i];\n } else if (total < currentTotal) {\n total = currentTotal;\n }\n }\n\n this._total = total;\n },\n\n _generateItemsTree: function() {\n this._itemsTree = this.dataSource.groupedItemsTree(this.options.groupField);\n },\n\n _getToFocus: function(item) {\n if (!this._groupFocused) {\n return this.element.find(\"[data-uid='\" + item.get(UID) + \"']\");\n } else {\n this._groupFocused = false;\n return this.element.find(\"[data-uid='\" + item.get(UID) + \"']\").closest(DOT + ORGCHART_STYLES.nodesGroupContainer);\n }\n },\n\n _getToSelect: function(el) {\n var item = this.jqueryItemElement(el);\n\n return item || this.jqueryGroupElement(el);\n },\n\n _groupIsVertical: function(focused) {\n var itemGroup = focused.closest(DOT + ORGCHART_STYLES.nodeContainer);\n\n return itemGroup.hasClass(ORGCHART_STYLES.vstack);\n },\n\n _keyCollapse: function(focused) {\n var dataItems = [],\n parentUid, expanded;\n\n dataItems = this._dataItems(focused);\n\n expanded = dataItems.some(function(item) {\n return item.expanded;\n });\n\n if (expanded) {\n if (focused.hasClass(ORGCHART_STYLES.card)) {\n focused = focused.closest(DOT + ORGCHART_STYLES.nodesGroupContainer);\n dataItems = this._dataItems(focused);\n }\n\n if (!this.trigger(COLLAPSE, { item: focused, dataItems: dataItems })) {\n this.collapse(focused);\n }\n } else if (dataItems[0].parentId) {\n parentUid = this.dataSource.get(dataItems[0].parentId).get(UID);\n\n this.trigger(SELECT, {\n item: this.element.find(\"[data-uid='\" + parentUid + \"']\").closest(DOT + this._selector),\n dataItems: dataItems\n });\n }\n },\n\n _keyEnter: function(focused) {\n var toSelect,\n dataItems = [];\n\n if (focused.hasClass(ORGCHART_STYLES.card) && focused.find(DOT + ORGCHART_STYLES.cardMenu).length > 0) {\n this.trigger(MENU, focused);\n } else {\n toSelect = focused.find(DOT + ORGCHART_STYLES.card).first();\n dataItems = this._dataItems(toSelect);\n\n this.trigger(SELECT, {\n item: toSelect,\n dataItems: dataItems\n });\n }\n },\n\n _keyEscape: function(focused) {\n if (!focused.hasClass(ORGCHART_STYLES.card)) {\n return;\n }\n\n var group = focused.closest(DOT + ORGCHART_STYLES.nodesGroupContainer),\n dataItems = this._dataItems(group);\n\n this.trigger(SELECT, {\n item: group,\n dataItems: dataItems\n });\n },\n\n _keyExpand: function(focused) {\n var ownedGroupId = focused.attr(ARIA_OWNS) || focused.closest(DOT + this._selector).attr(ARIA_OWNS),\n ownedGroup = this.element.find(HASH + ownedGroupId),\n dataItems = this._dataItems(focused),\n hasChildren, expanded, item;\n\n hasChildren = dataItems.some(function(item) {\n return item.hasChildren;\n });\n\n if (!hasChildren) {\n return;\n }\n\n expanded = dataItems.some(function(item) {\n return item.expanded;\n });\n\n if (!expanded) {\n if (focused.hasClass(ORGCHART_STYLES.card)) {\n focused = focused.closest(DOT + ORGCHART_STYLES.nodesGroupContainer);\n dataItems = this._dataItems(focused);\n }\n\n if (!this.trigger(EXPAND, { item: focused, dataItems: dataItems })) {\n this.expand(focused);\n }\n } else {\n item = ownedGroup.find(DOT + this._selector).first();\n\n this.trigger(SELECT, {\n item: item,\n dataItems: this._dataItems(item)\n });\n }\n },\n\n _keyNext: function(focused) {\n var ownedGroup = this.element.find(HASH + focused.attr(ARIA_OWNS)),\n dataItems = this._dataItems(focused),\n hasChildren = dataItems.some(function(item) {\n return item.hasChildren;\n }),\n expanded = dataItems.some(function(item) {\n return item.expanded;\n }),\n next;\n\n if (focused.hasClass(ORGCHART_STYLES.card)) {\n next = focused.parent().next(DOT + ORGCHART_STYLES.node).find(DOT + ORGCHART_STYLES.card);\n } else {\n next = focused.parent().next(DOT + ORGCHART_STYLES.nodesGroup).find(DOT + ORGCHART_STYLES.nodesGroupContainer);\n }\n\n if (!next.length && hasChildren && expanded) {\n next = ownedGroup.find(DOT + this._selector).first();\n }\n\n if (next.length === 0) {\n return;\n }\n\n this.trigger(SELECT, {\n item: next,\n dataItems: this._dataItems(next)\n });\n },\n\n _keyPrev: function(focused) {\n var dataItems = this._dataItems(focused),\n parentUid, prev;\n\n if (focused.hasClass(ORGCHART_STYLES.card)) {\n prev = focused.parent().prev(DOT + ORGCHART_STYLES.node).find(DOT + ORGCHART_STYLES.card);\n } else {\n prev = focused.parent().prev(DOT + ORGCHART_STYLES.nodesGroup).find(DOT + ORGCHART_STYLES.nodesGroupContainer);\n }\n\n if (!prev.length && dataItems[0].parentId) {\n parentUid = this.dataSource.get(dataItems[0].parentId).get(UID);\n prev = this.element.find(\"[data-uid='\" + parentUid + \"']\").closest(DOT + this._selector);\n }\n\n if (prev.length === 0) {\n return;\n }\n\n this.trigger(SELECT, {\n item: prev,\n dataItems: this._dataItems(prev)\n });\n },\n\n _onFocus: function(e) {\n var target = $(e.target),\n items, current;\n\n if (this._preventTriggerSelect) {\n e.stopPropagation();\n this._preventTriggerSelect = false;\n return;\n }\n\n if (target.hasClass(ORGCHART_STYLES.cardMenu)) {\n if (target.closest(\"[tabindex='0']\").length > 0) {\n e.stopPropagation();\n return;\n } else {\n this._preventTriggerSelect = true;\n }\n }\n\n if (!target.hasClass(ORGCHART_STYLES.card) && !target.hasClass(ORGCHART_STYLES.nodesGroupContainer)) {\n current = target.closest(DOT + ORGCHART_STYLES.card);\n\n if (!current.length) {\n current = target.closest(DOT + ORGCHART_STYLES.nodesGroupContainer);\n }\n\n target = current;\n }\n\n if (target.length === 0) {\n return;\n }\n\n items = this._dataItems(target);\n\n if (!target.hasClass(ORGCHART_STYLES.focused)) {\n e.stopPropagation();\n this.trigger(SELECT, {\n item: target,\n dataItems: items\n });\n }\n },\n\n _onSelect: function(e) {\n var target = $(e.target),\n previousSelection = this.element.find(\"[tabindex=0]\"),\n items, current;\n\n if (!target.hasClass(ORGCHART_STYLES.card) && !target.hasClass(ORGCHART_STYLES.nodesGroupContainer)) {\n current = target.closest(DOT + ORGCHART_STYLES.card);\n\n if (!current.length) {\n current = target.closest(DOT + ORGCHART_STYLES.nodesGroupContainer);\n }\n\n target = current;\n }\n\n if (target.length === 0 || previousSelection[0] === target[0]) {\n return;\n }\n\n items = this._dataItems(target);\n\n this.trigger(SELECT, {\n item: target,\n dataItems: items\n });\n },\n\n _orientation: function(group, level, vertical) {\n var vLine = $(\"
\").addClass(ORGCHART_STYLES.line + SPACE + ORGCHART_STYLES.lineVertical + SPACE + ORGCHART_STYLES.lineVerticalTop);\n\n group.addClass(ORGCHART_STYLES.hstack);\n\n if (level > 1) {\n group.find(DOT + ORGCHART_STYLES.nodesGroupContainer).before(vLine.clone());\n }\n\n if (vertical && level > 1) {\n group.find(DOT + ORGCHART_STYLES.nodeContainer).removeClass(ORGCHART_STYLES.hstack);\n group.find(DOT + ORGCHART_STYLES.nodeContainer).addClass(ORGCHART_STYLES.vstack);\n } else {\n group.addClass(ORGCHART_STYLES.groupHorizontal);\n }\n },\n\n _renderChildren: function(item, index, numberOfColumns, level, nodesGroup, parentLeft, guid) {\n var buttonTemplate = kendo.template(BUTTON_TEMPLATE),\n groupTemplate = kendo.template(GROUP_TEMPLATE),\n vLine = $(\"
\").addClass(ORGCHART_STYLES.line + SPACE + ORGCHART_STYLES.lineVertical),\n hLine = $(\"
\").addClass(ORGCHART_STYLES.line + SPACE + ORGCHART_STYLES.lineHorizontal),\n messages = this.options.messages,\n vertical = true,\n offsetDirection = kendo.support.isRtl(this.element) ? \"right\" : \"left\",\n innerGroup, button, left, top, width, nodesGroupWidth, spacing;\n\n if (item.hasChildren) {\n vertical = false;\n nodesGroup.append(vLine.clone());\n button = $(buttonTemplate({ buttonSign: item.expanded ? MINUS : PLUS, label: item.expanded ? messages.collapse : messages.expand }));\n\n nodesGroup.append(button);\n\n this._calculateDimensions();\n\n nodesGroupWidth = this._itemWidth;\n spacing = this._spacing;\n\n if (item.expanded) {\n width = nodesGroupWidth * numberOfColumns + (numberOfColumns - 1) * spacing;\n left = (index * numberOfColumns * nodesGroupWidth) + parentLeft;\n top = level * (this._itemHeight + this._buttonHeight + spacing) + spacing * (level - 1) - this._buttonHeight / 2;\n\n if (index > 0) {\n left += (index * numberOfColumns * spacing);\n }\n\n innerGroup = $(groupTemplate({\n guid: guid,\n level: level + 1\n }));\n\n innerGroup.css({\n width: width + PX,\n top: top + PX\n });\n\n innerGroup.css(offsetDirection, left + PX);\n\n this.element.append(innerGroup);\n this._renderGroup(innerGroup, item.children, level + 1, numberOfColumns, left);\n }\n }\n\n if (!!innerGroup && item.expanded && !!item.children && item.children.length > 1) {\n button.after(hLine.clone().css({\n width: (numberOfColumns - numberOfColumns / item.children.length) * (nodesGroupWidth + spacing) + PX,\n \"margin-top\": this._buttonHeight / -2 + PX\n }));\n }\n\n return vertical;\n },\n\n _renderGroup: function(group, items, level, parentColumns, parentLeft) {\n var vertical = true,\n numberOfColumns = parentColumns / items.length,\n nodeContainer, nodesGroup, i, guid, currentVertical, item;\n\n for (i = 0; i < items.length; i++) {\n guid = kendo.guid();\n item = items[i];\n nodeContainer = this._renderNodesContainer(group, extend(true, {}, item, {\n guid: guid,\n level: level\n }));\n nodesGroup = nodeContainer.closest(DOT + ORGCHART_STYLES.nodesGroup);\n\n this._renderItems(nodeContainer, item.items, level, guid);\n currentVertical = this._renderChildren(item, i, numberOfColumns, level, nodesGroup, parentLeft, guid);\n\n if (vertical) {\n vertical = currentVertical;\n }\n }\n\n var width = this._itemWidth * numberOfColumns + (numberOfColumns - 1) * this._spacing;\n group.find(DOT + ORGCHART_STYLES.nodesGroup).width(width);\n\n this._orientation(group, level, vertical);\n },\n\n _renderItems: function(nodeContainer, items, level, guid) {\n var cardWrapperTemplate = kendo.template(GROUPED_CARD_WRAPPER),\n i, item, node, contentTemplate;\n\n if (!this.options.template) {\n contentTemplate = kendo.template(CARD_TEMPLATE);\n } else if (typeof this.options.template === \"function\") {\n contentTemplate = this.options.template;\n } else {\n contentTemplate = kendo.template(this.options.template);\n }\n\n for (i = 0; i < items.length; i++) {\n item = items[i];\n node = this._renderNode(cardWrapperTemplate, contentTemplate, item, level, guid);\n nodeContainer.append(node);\n }\n },\n\n _renderNodesContainer: function(group, data) {\n var nodeGroupContainerTemplate = kendo.template(NODE_GROUP_CONTAINER),\n nodeGroup = $('
'),\n nodeContainer = $(NODE_CONTAINER_GROUPED),\n nodeGroupContainer = $(nodeGroupContainerTemplate(data)),\n groupHeaderTemplate;\n\n if (typeof this.options.groupHeaderTemplate === \"function\") {\n groupHeaderTemplate = this.options.groupHeaderTemplate;\n } else {\n groupHeaderTemplate = kendo.template(this.options.groupHeaderTemplate);\n }\n\n nodeGroupContainer.append(groupHeaderTemplate({\n value: data.value,\n field: data.field\n }));\n nodeGroupContainer.append(nodeContainer);\n\n nodeGroup.append(nodeGroupContainer);\n group.append(nodeGroup);\n\n return nodeContainer;\n }\n });\n\n kendo.orgChart = {\n View: View,\n SingleView: SingleView,\n GroupedView: GroupedView\n };\n})(window.kendo.jQuery);\n\nreturn window.kendo;\n\n}, typeof define == 'function' && define.amd ? define : function(a1, a2, a3) { (a3 || a2)(); });\n(function(f, define) {\n define('kendo.orgchart',[ \"./orgchart/data\", \"./orgchart/view\", \"kendo.menu\", \"kendo.dialog\", \"kendo.form\", \"kendo.upload\", \"kendo.window\" ], f);\n})(function() {\n\nvar __meta__ = {\n id: \"orgchart\",\n name: \"OrgChart\",\n category: \"web\",\n description: \"The OrgChart widget displays hierarchical organizational structure.\",\n depends: [ \"core\", \"menu\", \"dialog\", \"form\", \"upload\", \"window\" ]\n};\n\n(function($, undefined) {\n var kendo = window.kendo,\n DataBoundWidget = kendo.ui.DataBoundWidget,\n OrgChartDataSource = kendo.data.OrgChartDataSource,\n ContextMenu = kendo.ui.ContextMenu,\n\n extend = $.extend,\n isArray = Array.isArray,\n\n NS = \".kendoOrgChart\",\n\n CANCEL = \"cancel\",\n CHANGE = \"change\",\n CLICK = \"click\",\n COLLAPSE = \"collapse\",\n CREATE = \"create\",\n DATABINDING = \"dataBinding\",\n DATABOUND = \"dataBound\",\n DELETE = \"delete\",\n DESTROY = \"destroy\",\n EDIT = \"edit\",\n ERROR = \"error\",\n EXPAND = \"expand\",\n FOCUS = \"focus\",\n KENDOKEYDOWN = \"kendoKeydown\",\n MENU = \"menu\",\n PROGRESS = \"progress\",\n SAVE = \"save\",\n SELECT = \"select\",\n REQUEST_START = \"requestStart\",\n\n DOT = \".\",\n SPACE = \" \",\n COMMA = \",\",\n ID = \"id\",\n UID = \"uid\",\n ACTION = \"action\";\n\n var ORGCHART_STYLES = {\n wrapper: \"k-orgchart\",\n container: \"k-orgchart-container\",\n line: \"k-orgchart-line\",\n lineVertical: \"k-orgchart-line-v\",\n lineHorizontal: \"k-orgchart-line-h\",\n lineVerticalTop: \"k-orgchart-line-v-top\",\n group: \"k-orgchart-group\",\n groupVertical: \"k-orgchart-group-v\",\n groupHorizontal: \"k-orgchart-group-h\",\n nodesGroup: \"k-orgchart-node-group\",\n nodesGroupContainer: \"k-orgchart-node-group-container\",\n nodeContainer: \"k-orgchart-node-container\",\n node: \"k-orgchart-node\",\n card: \"k-orgchart-card\",\n cardMenu: \"k-orgchart-card-menu\",\n button: \"k-orgchart-button\",\n focused: \"k-focus\",\n plusIcon: \"k-i-plus\",\n menuItem: \"k-item\",\n avatarPreview: \"k-orgchart-avatar-preview\",\n update: \"k-orgchart-update\",\n cancel: \"k-orgchart-cancel\",\n vstack: \"k-vstack\",\n hstack: \"k-hstack\",\n closeButton: \"k-i-close\"\n };\n\n var MENU_ITEMS = {\n edit: \"
  • #: edit #
  • \",\n create: \"
  • #: create #
  • \",\n destroy: \"
  • #: destroy #
  • \"\n };\n\n var GROUP_HEADER_TEMPLATE = '
    ' +\n '
    #: value #
    ' +\n '
    #: field #
    ' +\n '
    ';\n\n var AVATAR_PREVIEW_TEMPLATE = '
    ' +\n '
    ' +\n '' +\n '\"#:' +\n '' +\n '
    ' +\n '
    #: fileName #
    ' +\n '' +\n '
    ';\n\n var EDITOR_BUTTONS_TEMPLATE = '
    ' +\n '' +\n '' +\n '
    ';\n\n var OrgChart = DataBoundWidget.extend({\n init: function(element, options, events) {\n if (isArray(options)) {\n options = { dataSource: options };\n }\n\n options = options || {};\n\n DataBoundWidget.fn.init.call(this, element, options);\n\n if (events) {\n this._events = events;\n }\n\n this._wrapper();\n this._view();\n this._dataSource();\n this._contextMenu();\n\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n\n kendo.notify(this);\n },\n\n options: {\n name: \"OrgChart\",\n autoBind: true,\n cardsColors: null,\n dataSource: {},\n editable: {\n create: true,\n destroy: true,\n fields: true,\n form: {\n buttonsTemplate: \"\",\n orientation: \"vertical\"\n },\n parent: true\n },\n groupField: null,\n groupHeaderTemplate: GROUP_HEADER_TEMPLATE,\n template: null,\n messages: {\n label: \"Org Chart\",\n edit: \"Edit\",\n create: \"Create\",\n destroy: \"Delete\",\n destroyContent: \"Are you sure you want to delete this item and all its children?\",\n destroyTitle: \"Delete item\",\n cancel: \"Cancel\",\n save: \"Save\",\n menuLabel: \"Edit menu\",\n uploadAvatar: \"Upload new avatar\",\n parent: \"Parent\",\n name: \"Name\",\n title: \"Title\",\n none: \"--None--\",\n expand: \"expand\",\n collapse: \"collapse\"\n }\n },\n\n events: [\n CANCEL,\n CHANGE,\n COLLAPSE,\n CREATE,\n DATABINDING,\n DATABOUND,\n DELETE,\n EDIT,\n EXPAND,\n KENDOKEYDOWN,\n SAVE,\n SELECT\n ],\n\n destroy: function() {\n if (this._menu) {\n this._menu.destroy();\n }\n if (this._editWindow) {\n this._editWindow.destroy();\n }\n if (this._confirmDestroy) {\n this._confirmDestroy.destroy();\n }\n\n this.view.destroy();\n\n DataBoundWidget.fn.destroy.call(this);\n this.wrapper.off(NS);\n },\n\n setDataSource: function(dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n\n if (this.options.autoBind) {\n dataSource.fetch();\n }\n },\n\n setOptions: function(options) {\n var that = this;\n\n DataBoundWidget.fn.setOptions.call(that, options);\n },\n\n append: function(item, parent) {\n var that = this,\n $parent = that.view.jqueryItemElement(parent),\n parentItem = that.dataItem($parent);\n\n if (!$parent || !parentItem) {\n return;\n }\n\n if (!parentItem.loaded()) {\n that.dataSource.read({ id: parentItem.id })\n .then(function() {\n that.dataSource.add(extend({}, item, { parentId: parentItem.id }));\n that.dataSource.sync();\n });\n } else {\n that.dataSource.add(extend({}, item, { parentId: parentItem.id }));\n that.dataSource.sync();\n }\n },\n\n cancelChanges: function() {\n if (this.dataSource.hasChanges()) {\n this.dataSource.cancelChanges();\n }\n },\n\n collapse: function(item) {\n return this.view.collapse(item);\n },\n\n dataItem: function(item) {\n var $item = this.view.jqueryItemElement(item);\n\n if (!$item || !$item.data(UID)) {\n return;\n }\n\n return this.dataSource.getByUid($item.data(UID));\n },\n\n delete: function(item) {\n var $item = this.view.jqueryItemElement(item);\n\n if (!$item) {\n return;\n }\n\n this.dataSource.remove(this.dataItem($item));\n this.dataSource.sync();\n },\n\n edit: function(item) {\n var $item = this.view.jqueryItemElement(item),\n dataItem = this.dataItem($item);\n\n if (!$item || !dataItem) {\n return;\n }\n\n this._edit(dataItem);\n },\n\n expand: function(item) {\n return this.view.expand(item);\n },\n\n getCollapsedNodes: function() {\n return this.wrapper.find(\"[aria-expanded='false']\");\n },\n\n items: function() {\n return this.wrapper.find(DOT + ORGCHART_STYLES.card);\n },\n\n parent: function(item) {\n var $item = this.view.jqueryItemElement(item),\n id;\n\n if (!$item) {\n return;\n }\n\n id = $item.closest(DOT + ORGCHART_STYLES.group).attr(ID);\n\n return this.wrapper.find(\"[aria-owns='\" + id + \"']\");\n },\n\n saveChanges: function() {\n this.dataSource.sync();\n },\n\n select: function(item) {\n var $item = this.view._getToSelect(item);\n\n if (!$item) {\n return;\n } else {\n return this.view.select($item);\n }\n },\n\n _avatarPreview: function(item, fileName) {\n var form = this._form,\n avatar = item.avatar,\n avatarRemove = function() {\n formWrapper.find(DOT + ORGCHART_STYLES.avatarPreview).remove();\n item.set(\"avatar\", null);\n },\n formWrapper, data;\n\n if (!form) {\n return;\n }\n\n if (!fileName) {\n fileName = avatar.split('\\\\').pop().split('/').pop();\n\n if (!fileName || fileName.indexOf('.') == -1) {\n fileName = item.name;\n }\n }\n\n data = {\n name: item.name,\n avatar: avatar,\n fileName: fileName,\n destroy: this.options.messages.destroy\n };\n\n formWrapper = form.wrapper;\n formWrapper.find(DOT + ORGCHART_STYLES.avatarPreview).remove();\n\n formWrapper.find('[type=\"file\"]').closest(DOT + \"k-form-field\").prepend(kendo.template(AVATAR_PREVIEW_TEMPLATE)(data));\n formWrapper.find(DOT + ORGCHART_STYLES.avatarPreview + SPACE + DOT + \"k-button\").on(CLICK, avatarRemove);\n },\n\n _contextMenu: function() {\n var options = this.options,\n editable = options.editable,\n messages = options.messages,\n menuOptions = {\n target: this.wrapper,\n filter: DOT + ORGCHART_STYLES.cardMenu,\n select: this._onMenuItemClick.bind(this),\n activate: this._onMenuOpen.bind(this),\n deactivate: this._onMenuClose.bind(this),\n showOn: \"click\",\n animation: false\n },\n menuElement;\n\n if (editable === true ||\n (editable !== false &&\n (editable.create || editable.destroy || editable.fields || editable.parent))) {\n menuElement = \"
      \";\n\n if (editable === true) {\n menuElement += MENU_ITEMS.edit;\n menuElement += MENU_ITEMS.create;\n menuElement += MENU_ITEMS.destroy;\n } else {\n if (editable.fields || editable.parent) {\n menuElement += MENU_ITEMS.edit;\n }\n if (editable.create) {\n menuElement += MENU_ITEMS.create;\n }\n if (editable.destroy) {\n menuElement += MENU_ITEMS.destroy;\n }\n }\n\n menuElement = kendo.template(menuElement)(messages);\n\n this._menu = new ContextMenu(menuElement, menuOptions);\n }\n },\n\n _dataSource: function() {\n var ds = this.dataSource,\n dsOptions = this.options.dataSource;\n\n if (ds) {\n ds.unbind(CHANGE, this._dataSourceChangeHandler);\n ds.unbind(ERROR, this._errorHandler);\n ds.unbind(PROGRESS, this._progressHandler);\n ds.unbind(REQUEST_START, this._requestStartHandler);\n }\n\n this._dataSourceChangeHandler = this._onDataSourceChange.bind(this);\n this._errorHandler = this._onDataSourceError.bind(this);\n this._progressHandler = this._progress.bind(this);\n this._requestStartHandler = this._onDataSourceRequestStart.bind(this);\n\n ds = this.dataSource = OrgChartDataSource.create(dsOptions);\n\n ds.bind(CHANGE, this._dataSourceChangeHandler);\n ds.bind(ERROR, this._errorHandler);\n ds.bind(PROGRESS, this._progressHandler);\n ds.bind(REQUEST_START, this._requestStartHandler);\n\n this.view.dataSource = ds;\n },\n\n _destroyItem: function(item) {\n var that = this,\n el = $(\"
      \"),\n messages = that.options.messages,\n restoreFocus = function() {\n that.wrapper\n .find(DOT + ORGCHART_STYLES.card + \"[tabindex=0]\" + COMMA + DOT + ORGCHART_STYLES.nodesGroup + \"[tabindex=0]\")\n .addClass(ORGCHART_STYLES.focused)\n .trigger(\"focus\");\n },\n confirm = this._confirmDestroy = new kendo.ui.Confirm(el, {\n title: messages.destroyTitle,\n content: messages.destroyContent,\n messages: {\n okText: messages.destroy,\n cancel: messages.cancel\n },\n show: function() {\n setTimeout(function() {\n confirm.element.trigger(\"focus\");\n });\n }\n });\n\n confirm.open();\n\n confirm.result.done(function() {\n if (!that.trigger(DELETE, { dataItem: item })) {\n that.dataSource.remove(item);\n that.dataSource.sync();\n }\n\n that.view._shouldRestoreSelection = true;\n that.view._restoreSelection();\n });\n\n confirm.result.fail(restoreFocus);\n },\n\n _edit: function(dataItem) {\n var that = this,\n formElement = $(\"
      \"),\n windowElement = $(\"
      \"),\n messages = this.options.messages,\n formOptions = this._formOptions(dataItem),\n save;\n\n if (!formOptions) {\n return;\n }\n\n that._form = new kendo.ui.Form(formElement, formOptions);\n\n if (!!dataItem.avatar) {\n that._avatarPreview(dataItem);\n }\n\n windowElement.append(formElement);\n\n that._editWindow = new kendo.ui.Window(windowElement, {\n title: messages.edit,\n width: \"380 px\",\n modal: true,\n close: function(e) {\n if (!save) {\n if (!that.trigger(CANCEL, { dataItem: dataItem })) {\n that.cancelChanges();\n } else {\n e.preventDefault();\n }\n } else {\n save = false;\n }\n },\n deactivate: function() {\n windowElement.off(CLICK);\n that._editWindow.destroy();\n that._editWindow = null;\n that.view._restoreSelection();\n }\n });\n\n windowElement.append(kendo.template(EDITOR_BUTTONS_TEMPLATE)({\n save: messages.save,\n cancel: messages.cancel\n }));\n\n that._editWindow.center().open();\n\n windowElement.on(CLICK, DOT + ORGCHART_STYLES.update, function() {\n if (that._form.validate()) {\n save = true;\n\n if (!that.trigger(SAVE, { dataItem: dataItem })) {\n that._editWindow.close();\n that.saveChanges();\n }\n }\n });\n\n windowElement.on(CLICK, DOT + ORGCHART_STYLES.cancel, function() {\n that._editWindow.close();\n });\n },\n\n _formOptions: function(item) {\n var options = this.options,\n messages = options.messages,\n optionsForm = options.editable.form,\n items = [],\n parentsDs, optionsItems;\n\n if (optionsForm) {\n optionsItems = optionsForm.items;\n }\n\n if ((!optionsItems || optionsItems.length === 0) &&\n (options.editable === true || (options.editable && options.editable.parent))) {\n\n parentsDs = [{\n id: null,\n name: messages.none\n }].concat(this.dataSource.prospectParents(item));\n\n items.push({\n field: \"parentId\",\n editor: \"DropDownList\",\n label: messages.parent,\n editorOptions: {\n dataSource: parentsDs,\n dataValueField: \"id\",\n dataTextField: \"name\",\n valuePrimitive: true\n }\n });\n }\n\n if ((!optionsItems || optionsItems.length === 0) &&\n (options.editable === true || (options.editable && options.editable.fields))) {\n\n items = items.concat([{\n field: \"name\",\n label: messages.name,\n validation: { required: true }\n }, {\n field: \"title\",\n label: messages.title\n }, {\n field: \"avatar\",\n label: messages.uploadAvatar,\n editor: this._uploadEditor.bind(this, item)\n }]);\n }\n\n if (optionsForm) {\n delete optionsForm.formData;\n }\n\n if (items.length > 0 || (optionsItems && optionsItems.length > 0)) {\n return extend(true, {}, {\n formData: item,\n items: items\n }, optionsForm);\n } else {\n return false;\n }\n },\n\n _onDataSourceChange: function(e) {\n if (e.action === \"add\" || e.action === \"itemchange\" && this._editWindow) {\n return;\n }\n\n if (!e.action || e.action === \"sync\") {\n if (this.trigger(DATABINDING, e)) {\n this._progress(false);\n return;\n }\n }\n\n this._progress(true);\n this.view.refresh();\n\n if (!e.action || e.action === \"sync\") {\n this.trigger(DATABOUND);\n }\n\n this._progress(false);\n },\n\n _onDataSourceError: function() {\n this._progress(false);\n },\n\n _onDataSourceRequestStart: function() {\n this.view._cacheFocused();\n },\n\n _onMenuClose: function() {\n if ($(document.activeElement).closest(\"[role='alertdialog']\").length === 0) {\n this.wrapper.find(\"[tabindex='0']\")\n .addClass(ORGCHART_STYLES.focused)\n .trigger(\"focus\");\n }\n },\n\n _onMenuItemClick: function(e) {\n var that = this,\n targetItem = $(e.target).closest(DOT + ORGCHART_STYLES.node).find(DOT + ORGCHART_STYLES.card),\n dataItem = that.dataItem(targetItem),\n action = $(e.item).data(ACTION),\n newItem;\n\n if (!dataItem) {\n return;\n }\n\n if (action === EDIT) {\n if (!that.trigger(EDIT, { dataItem: dataItem })) {\n that._edit(dataItem);\n }\n } else if (action === CREATE) {\n if (!that.trigger(CREATE, { dataItem: dataItem })) {\n if (!dataItem.loaded()) {\n that.dataSource.read({ id: dataItem.id })\n .then(function() {\n newItem = that.dataSource.add({\n parentId: dataItem.id\n });\n\n that._edit(newItem);\n });\n } else {\n newItem = that.dataSource.add({\n parentId: dataItem.id\n });\n\n that._edit(newItem);\n }\n }\n } else if (action === DESTROY) {\n that._destroyItem(dataItem);\n }\n },\n\n _onMenuOpen: function() {\n this.view._cacheFocused();\n this.wrapper.find(DOT + ORGCHART_STYLES.focused).removeClass(ORGCHART_STYLES.focused);\n this._menu.element.find(DOT + ORGCHART_STYLES.menuItem).first().trigger(FOCUS);\n },\n\n _openMenu: function(focused) {\n if (this._menu) {\n this._menu.open(focused.find(DOT + ORGCHART_STYLES.cardMenu));\n }\n },\n\n _progress: function(toggle) {\n kendo.ui.progress(this.container, toggle);\n },\n\n _triggerCollapse: function(e) {\n if (this.trigger(COLLAPSE, { item: e.item, dataItems: e.dataItems })) {\n e.preventDefault();\n }\n },\n\n _triggerExpand: function(e) {\n if (this.trigger(EXPAND, { item: e.item, dataItems: e.dataItems })) {\n e.preventDefault();\n }\n },\n\n _triggerSelect: function(e) {\n if (!this.trigger(SELECT, { item: e.item, dataItems: e.dataItems })) {\n this.view.select(e.item);\n this.trigger(CHANGE, { item: e.item, dataItems: e.dataItems });\n }\n },\n\n _uploadEditor: function(item, container) {\n var that = this;\n\n $('')\n .appendTo(container)\n .kendoUpload({\n async: false,\n multiple: false,\n select: function(e) {\n var fileInfo = e.files[0];\n var raw = fileInfo.rawFile;\n var reader = new FileReader();\n\n if (fileInfo.validationErrors && fileInfo.validationErrors.length > 0) {\n return;\n }\n\n if (raw) {\n reader.onloadend = function() {\n item.set(\"avatar\", this.result);\n that._avatarPreview(item, raw.name);\n };\n\n reader.readAsDataURL(raw);\n }\n },\n validation: {\n allowedExtensions: [\".gif\", \".jpg\", \".png\"],\n maxFileSize: 1048576\n }\n });\n },\n\n _view: function() {\n if (this.options.groupField !== null && this.options.groupField !== undefined) {\n this.view = new kendo.orgChart.GroupedView(this.container, this.options);\n } else {\n this.view = new kendo.orgChart.SingleView(this.container, this.options);\n }\n\n this.view.bind(SELECT, this._triggerSelect.bind(this));\n this.view.bind(EXPAND, this._triggerExpand.bind(this));\n this.view.bind(COLLAPSE, this._triggerCollapse.bind(this));\n this.view.bind(MENU, this._openMenu.bind(this));\n\n },\n\n _wrapper: function() {\n var container = $(\"
      \");\n\n this.wrapper = this.element;\n this.container = container;\n\n this.wrapper.addClass(ORGCHART_STYLES.wrapper);\n this.wrapper.append(container);\n }\n });\n\n kendo.ui.plugin(OrgChart);\n\n})(window.kendo.jQuery);\n\nreturn window.kendo;\n\n}, typeof define == 'function' && define.amd ? define : function(a1, a2, a3) { (a3 || a2)(); });\n\n// add validation to upload images only in the edit pop-up;\n"],"names":["define","$","window","kendo","jQuery","undefined","extend","data","Query","DataSource","TreeListDataSource","Model","ObservableArray","OrgChartModel","id","parentId","fields","type","editable","nullable","name","validation","required","title","avatar","init","value","fn","call","this","_loaded","parentIdField","nameField","titleField","avatarField","get","accept","set","field","initiator","loaded","shouldSerialize","OrgChartDataSource","base","options","model","schema","modelBase","groupedItemsTree","map","_childrenMap","view","defaultParentId","_defaultParentId","currentChildren","grouped","group","toArray","_innerGroupedItemsTree","itemChildren","item","fromView","filter","operator","order","_sort","length","itemId","sort","itemsTree","current","items","children","i","push","prospectParents","skippedItem","concat","read","then","_loadExpanded","bind","toggleChildren","expand","defaultPromise","Deferred","resolve","promise","_error","expanded","load","j","innerGrouped","hasChildren","_byParentId","create","Array","isArray","toJSON","Error","amd","a1","a2","a3","keys","NS","BLUR","CLICK","COLLAPSE","EXPAND","FOCUS","KEYDOWN","MENU","SELECT","DOT","SPACE","COMMA","HASH","STRING","TABINDEX","ID","UID","PX","PLUS","MINUS","ARIA_OWNS","ARIA_SELECTED","ORGCHART_STYLES","wrapper","container","line","lineVertical","lineHorizontal","lineVerticalTop","groupVertical","groupHorizontal","nodesGroup","nodesGroupContainer","nodeContainer","node","card","cardMenu","button","focused","plusIcon","menuItem","avatarPreview","update","cancel","vstack","hstack","ROOT_TEMPLATE","GROUP_TEMPLATE","NODE_GROUP_CONTAINER","NODE_CONTAINER","NODE_CONTAINER_GROUPED","ITEM_TEMPLATE","BUTTON_TEMPLATE","CARD_TEMPLATE","CARD_WRAPPER","GROUPED_CARD_WRAPPER","View","Observable","element","_attachEvents","events","destroy","ui","Widget","off","collapse","jqueryGroupElement","jQueryElement","_processItem","hasClass","closest","jqueryItemElement","refresh","_cacheFocused","_clearContent","_generateItemsTree","_calculateLevels","_render","select","$item","_getToSelect","previousSelection","find","removeAttr","removeClass","attr","addClass","trigger","itemsSelector","on","_onKeyDown","_onSelect","_onButtonClick","_onFocus","_onBlur","focusableItem","focusableDataItem","_dataItems","_idTabIndex","_shouldRestoreSelection","_calculateDimensions","itemElement","_selector","first","_buttonHeight","outerHeight","_spacing","_itemWidth","_calculateItemWidth","_itemHeight","_calculateLevel","empty","_dataItem","dataSource","getByUid","_groupIsVertical","_keyCollapse","_keyExpand","_keyNext","_keyPrev","_keyEnter","_keyEscape","_keyEnd","target","last","previous","dataItems","_keyHome","e","key","keyCode","isRtl","support","nextKey","LEFT","RIGHT","prevKey","expandKey","DOWN","collapseKey","UP","groupIsVertical","HOME","END","indexOf","preventDefault","stopPropagation","ENTER","ESC","that","currentTarget","shouldExpand","el","siblings","_orientation","isElement","_itemsTree","root","template","label","messages","wrapperContainer","total","_total","widgetPadding","css","totalWidth","append","_renderGroup","width","Number","split","_setHeight","_restoreSelection","_renderNode","cardWrapperTemplate","contentTemplate","level","guid","borderColors","cardsColors","getSeriesColors","content","cardWrapper","menuLabel","color","attributes","JSON","parse","stringify","toFocusItem","toFocus","_getToFocus","_preventTriggerSelect","selector","elements","min","MAX_VALUE","max","buttonHeight","height","each","top","offset","bottom","SingleView","outerWidth","itemsLength","maxColumnsPerLevel","_maxColumnsPerLevel","nestedChildren","shouldReset","previousMax","itemGroup","dataItem","parentUid","parentItem","ownedGroup","childItem","next","parent","prev","menuButtonTarget","vertical","vLine","before","clone","parentColumns","parentLeft","_renderInner","buttonTemplate","numberOfColumns","hLine","innerGroup","itemWidth","spacing","buttonSign","_renderInnerGroup","after","margin-top","left","groupTemplate","offsetDirection","GroupedView","$group","ds","_groupFocused","getAttribute","cardWidth","padding","border","groups","groupsLength","maxColumns","currentLength","_maxGroups","maxGroups","currentTotal","groupField","some","toSelect","ownedGroupId","_renderChildren","index","nodesGroupWidth","currentVertical","_renderNodesContainer","_renderItems","nodeGroupContainerTemplate","nodeGroup","nodeGroupContainer","groupHeaderTemplate","orgChart","__meta__","category","description","depends","DataBoundWidget","ContextMenu","CANCEL","CHANGE","CREATE","DATABINDING","DATABOUND","DELETE","DESTROY","EDIT","ERROR","KENDOKEYDOWN","PROGRESS","SAVE","REQUEST_START","ACTION","closeButton","MENU_ITEMS","edit","GROUP_HEADER_TEMPLATE","AVATAR_PREVIEW_TEMPLATE","EDITOR_BUTTONS_TEMPLATE","OrgChart","_events","_wrapper","_view","_dataSource","_contextMenu","autoBind","fetch","notify","form","buttonsTemplate","orientation","destroyContent","destroyTitle","save","uploadAvatar","none","_menu","_editWindow","_confirmDestroy","setDataSource","setOptions","$parent","add","sync","cancelChanges","hasChanges","delete","remove","_edit","getCollapsedNodes","saveChanges","_avatarPreview","fileName","_form","avatarRemove","formWrapper","pop","prepend","menuOptions","_onMenuItemClick","activate","_onMenuOpen","deactivate","_onMenuClose","showOn","animation","menuElement","dsOptions","unbind","_dataSourceChangeHandler","_errorHandler","_progressHandler","_requestStartHandler","_onDataSourceChange","_onDataSourceError","_progress","_onDataSourceRequestStart","_destroyItem","restoreFocus","confirm","Confirm","okText","show","setTimeout","open","result","done","fail","formElement","windowElement","formOptions","_formOptions","Form","Window","modal","close","center","validate","optionsForm","parentsDs","optionsItems","editor","editorOptions","dataValueField","dataTextField","valuePrimitive","_uploadEditor","formData","action","document","activeElement","targetItem","newItem","_openMenu","toggle","progress","_triggerCollapse","_triggerExpand","_triggerSelect","appendTo","kendoUpload","async","multiple","fileInfo","files","raw","rawFile","reader","FileReader","validationErrors","onloadend","readAsDataURL","allowedExtensions","maxFileSize","plugin"],"mappings":"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"}