{"version":3,"file":"kendo.orgchart.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendoorgchart","js","this","$","undefined$1","extend","data","kendo","Query","DataSource","TreeListDataSource","Model","ObservableArray","OrgChartModel","id","parentId","fields","type","editable","nullable","name","validation","required","title","avatar","init","value","fn","call","_loaded","parentIdField","nameField","titleField","avatarField","get","accept","set","field","initiator","loaded","shouldSerialize","base","options","model","OrgChartDataSource","schema","modelBase","groupedItemsTree","map","_childrenMap","view","currentChildren","_defaultParentId","grouped","group","toArray","_innerGroupedItemsTree","itemChildren","item","fromView","itemId","filter","operator","order","_sort","length","sort","itemsTree","current","children","i","items","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","window","jQuery","keys","encode","htmlEncode","NS","CLICK","COLLAPSE","EXPAND","MENU","SELECT","DOT","SPACE","HASH","TABINDEX","UID","PX","PLUS","MINUS","ARIA_OWNS","ARIA_SELECTED","ORGCHART_STYLES","ROOT_TEMPLATE","ref","label","GROUP_TEMPLATE","guid","level","NODE_GROUP_CONTAINER","result","BUTTON_TEMPLATE","buttonSign","html","renderButton","icon","CARD_TEMPLATE","color","menuLabel","attr","fillMode","CARD_WRAPPER","uid","cssClass","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","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","dataItems","_keyHome","e","key","keyCode","focused","isRtl","support","nextKey","LEFT","RIGHT","prevKey","expandKey","DOWN","collapseKey","UP","HOME","END","indexOf","preventDefault","stopPropagation","ENTER","ESC","that","currentTarget","shouldExpand","el","siblings","_orientation","isElement","totalWidth","_itemsTree","root","template","messages","wrapperContainer","total","_total","widgetPadding","css","append","_renderGroup","width","Number","split","_setHeight","_restoreSelection","_renderNode","cardWrapperTemplate","contentTemplate","content","cardWrapper","borderColors","cardsColors","getSeriesColors","node","attributes","JSON","parse","stringify","applyStylesFromKendoAttributes","toFocusItem","toFocus","_getToFocus","_preventTriggerSelect","buttonHeight","selector","elements","min","MAX_VALUE","max","height","each","top","offset","bottom","SingleView","outerWidth","previousMax","itemsLength","maxColumnsPerLevel","_maxColumnsPerLevel","nestedChildren","shouldReset","container","parentUid","parentItem","dataItem","childItem","ownedGroup","next","parent","prev","vertical","vLine","before","clone","parentColumns","parentLeft","nodeContainer","_renderInner","button","innerGroup","itemWidth","spacing","buttonTemplate","numberOfColumns","hLine","_renderInnerGroup","after","left","groupTemplate","offsetDirection","GroupedView","$group","ds","_groupFocused","getAttribute","groups","currentLength","groupsLength","maxColumns","_maxGroups","currentTotal","maxGroups","groupField","some","toSelect","ownedGroupId","_renderChildren","index","nodesGroup","nodesGroupWidth","currentVertical","_renderNodesContainer","_renderItems","groupHeaderTemplate","nodeGroupContainerTemplate","nodeGroup","nodeGroupContainer","orgChart","DataBoundWidget","ContextMenu","CANCEL","CHANGE","CREATE","DATABINDING","DATABOUND","DELETE","EDIT","ERROR","PROGRESS","SAVE","REQUEST_START","MENU_ITEMS","edit","AVATAR_PREVIEW_TEMPLATE","fileName","EDITOR_BUTTONS_TEMPLATE","cancel","save","themeColor","OrgChart","_events","_wrapper","_view","_dataSource","_contextMenu","autoBind","fetch","notify","form","buttonsTemplate","orientation","destroyContent","destroyTitle","uploadAvatar","none","_menu","_editWindow","_confirmDestroy","wrapper","setDataSource","setOptions","$parent","add","sync","cancelChanges","hasChanges","delete","remove","_edit","getCollapsedNodes","saveChanges","_avatarPreview","formWrapper","_form","pop","prepend","menuElement","menuOptions","_onMenuItemClick","activate","_onMenuOpen","deactivate","_onMenuClose","showOn","animation","MENU_TEMPLATE","dsOptions","unbind","_dataSourceChangeHandler","_errorHandler","_progressHandler","_requestStartHandler","_onDataSourceChange","_onDataSourceError","_progress","_onDataSourceRequestStart","_destroyItem","confirm","Confirm","okText","show","setTimeout","open","done","fail","formElement","windowElement","formOptions","_formOptions","Form","Window","modal","close","center","validate","parentsDs","optionsItems","optionsForm","editor","editorOptions","dataValueField","dataTextField","valuePrimitive","_uploadEditor","formData","action","document","activeElement","newItem","targetItem","_openMenu","toggle","progress","_triggerCollapse","_triggerExpand","_triggerSelect","appendTo","kendoUpload","async","multiple","fileInfo","files","raw","rawFile","reader","FileReader","validationErrors","onloadend","readAsDataURL","allowedExtensions","maxFileSize","plugin"],"sources":["kendo.orgchart.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.data.js'), require('kendo.treelist.js'), require('kendo.core.js'), require('kendo.html.button.js'), require('kendo.menu.js'), require('kendo.dialog.js'), require('kendo.form.js'), require('kendo.upload.js'), require('kendo.window.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.data', 'kendo.treelist', 'kendo.core', 'kendo.html.button', 'kendo.menu', 'kendo.dialog', 'kendo.form', 'kendo.upload', 'kendo.window'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendoorgchart = global.kendoorgchart || {}, global.kendoorgchart.js = factory()));\n})(this, (function () {\n (function($, undefined$1) {\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$1) {\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$1) {\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$1 || 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$1) {\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$1;\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$1) {\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\n (function($, undefined$1) {\n var kendo = window.kendo,\n keys = kendo.keys,\n encode = kendo.htmlEncode,\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 plusIconSelector: \".k-i-plus,.k-svg-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 = function (ref) {\n var label = ref.label;\n\n return (\"
\");\n };\n\n var GROUP_TEMPLATE = function (ref) {\n var guid = ref.guid;\n var level = ref.level;\n\n return (\"
\");\n };\n\n var NODE_GROUP_CONTAINER = function (ref) {\n var hasChildren = ref.hasChildren;\n var guid = ref.guid;\n var expanded = ref.expanded;\n var level = ref.level;\n\n var result = '
\";\n\n return result;\n };\n\n var NODE_CONTAINER = '
';\n\n var NODE_CONTAINER_GROUPED = '
';\n\n var ITEM_TEMPLATE = '
';\n\n var BUTTON_TEMPLATE = function (ref) {\n var label = ref.label;\n var buttonSign = ref.buttonSign;\n\n return kendo.html.renderButton((\"\"), {\n icon: encode(buttonSign)\n });\n };\n\n var CARD_TEMPLATE = function (ref) {\n var color = ref.color;\n var avatar = ref.avatar;\n var name = ref.name;\n var title = ref.title;\n var editable = ref.editable;\n var menuLabel = ref.menuLabel;\n\n var result = \"
\";\n\n if (!!avatar) {\n result += '
' +\n '' +\n \"\\\"\"\" +\n '' +\n '
';\n }\n\n result += '
' +\n \"
\" + (encode(name)) + \"
\";\n\n if (title) {\n result += '' +\n \"
\" + (encode(title)) + \"
\";\n }\n\n result += '
';\n\n if (editable) {\n result += '' +\n '
' +\n kendo.html.renderButton((\"\"), {\n icon: 'more-vertical',\n fillMode: \"flat\"\n }) +\n '
';\n }\n\n result += '
';\n\n return result;\n };\n\n var CARD_WRAPPER = function (ref) {\n var uid = ref.uid;\n var guid = ref.guid;\n var hasChildren = ref.hasChildren;\n var expanded = ref.expanded;\n var cssClass = ref.cssClass;\n var level = ref.level;\n\n var result = \"
\";\n\n return result;\n };\n\n var GROUPED_CARD_WRAPPER = function (ref) {\n var uid = ref.uid;\n var level = ref.level;\n var cssClass = ref.cssClass;\n\n return \"
';\n };\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(ORGCHART_STYLES.plusIconSelector).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 kendo.applyStylesFromKendoAttributes(node, [\"border-color\"]);\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).css(\"width\", \"100%\");\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).css(\"width\", \"100%\"),\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\n var __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\", \"data\", \"treelist\", \"html.button\" ]\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n encode = kendo.htmlEncode,\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: \"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: \"x\"\n };\n\n var MENU_ITEMS = {\n edit: function (ref) {\n var edit = ref.edit;\n\n return (\"
  • \" + (encode(edit)) + \"
  • \");\n },\n create: function (ref) {\n var create = ref.create;\n\n return (\"
  • \" + (encode(create)) + \"
  • \");\n },\n destroy: function (ref) {\n var destroy = ref.destroy;\n\n return (\"
  • \" + (encode(destroy)) + \"
  • \");\n }\n };\n\n var MENU_TEMPLATE = function (messages, editable) {\n var result = \"
      \";\n\n if (editable === true) {\n result += MENU_ITEMS.edit(messages);\n result += MENU_ITEMS.create(messages);\n result += MENU_ITEMS.destroy(messages);\n } else {\n if (editable.fields || editable.parent) {\n result += MENU_ITEMS.edit(messages);\n }\n if (editable.create) {\n result += MENU_ITEMS.create(messages);\n }\n if (editable.destroy) {\n result += MENU_ITEMS.destroy(messages);\n }\n }\n\n return result;\n };\n\n var GROUP_HEADER_TEMPLATE = function (ref) {\n var value = ref.value;\n var field = ref.field;\n\n return '
      ' +\n \"
      \" + (encode(value)) + \"
      \" +\n \"
      \" + (encode(field)) + \"
      \" +\n '
      ';\n };\n\n var AVATAR_PREVIEW_TEMPLATE = function (ref) {\n var avatar = ref.avatar;\n var name = ref.name;\n var destroy = ref.destroy;\n var fileName = ref.fileName;\n\n return '
      ' +\n '
      ' +\n '' +\n \"\\\"\"\" +\n '' +\n '
      ' +\n \"
      \" + (encode(fileName)) + \"
      \" +\n kendo.html.renderButton((\"\"), {\n icon: 'trash',\n fillMode: \"flat\"\n }) +\n '
      ';\n };\n\n var EDITOR_BUTTONS_TEMPLATE = function (ref) {\n var cancel = ref.cancel;\n var save = ref.save;\n\n return '
      ' +\n kendo.html.renderButton((\"\"), {\n icon: \"save\",\n themeColor: \"primary\"\n }) +\n kendo.html.renderButton((\"\"), {\n icon: \"cancel-outline\"\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: function () { return \"\"; },\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 = MENU_TEMPLATE(messages, editable);\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 that._editWindow.wrapper.off(CLICK);\n that._editWindow.destroy();\n that._editWindow = null;\n that.view._restoreSelection();\n }\n });\n\n windowElement.after(kendo.template(EDITOR_BUTTONS_TEMPLATE)({\n save: messages.save,\n cancel: messages.cancel\n }));\n\n that._editWindow.center().open();\n\n that._editWindow.wrapper.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 that._editWindow.wrapper.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$1) {\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 var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}