{"version":3,"file":"kendo.orgchart.min.js","names":["factory","define","amd","$","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","this","_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","NS","CLICK","COLLAPSE","EXPAND","MENU","SELECT","DOT","SPACE","HASH","TABINDEX","UID","PX","PLUS","MINUS","ARIA_OWNS","ARIA_SELECTED","ORGCHART_STYLES","GROUP_TEMPLATE","BUTTON_TEMPLATE","CARD_TEMPLATE","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","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","label","messages","wrapperContainer","total","_total","widgetPadding","css","append","_renderGroup","width","Number","split","_setHeight","_restoreSelection","_renderNode","cardWrapperTemplate","contentTemplate","level","guid","content","cardWrapper","borderColors","cardsColors","getSeriesColors","node","menuLabel","color","attributes","JSON","parse","stringify","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","buttonSign","_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","OrgChart","_events","_wrapper","_view","_dataSource","_contextMenu","autoBind","fetch","notify","form","buttonsTemplate","orientation","edit","destroyContent","destroyTitle","cancel","save","uploadAvatar","none","_menu","_editWindow","_confirmDestroy","wrapper","setDataSource","setOptions","$parent","add","sync","cancelChanges","hasChanges","delete","remove","_edit","getCollapsedNodes","saveChanges","_avatarPreview","fileName","formWrapper","_form","pop","prepend","menuElement","menuOptions","_onMenuItemClick","activate","_onMenuOpen","deactivate","_onMenuClose","showOn","animation","dsOptions","unbind","_dataSourceChangeHandler","_errorHandler","_progressHandler","_requestStartHandler","_onDataSourceChange","_onDataSourceError","_progress","_onDataSourceRequestStart","_destroyItem","confirm","Confirm","okText","show","setTimeout","open","result","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 (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.data', 'kendo.treelist', 'kendo.core', 'kendo.menu', 'kendo.dialog', 'kendo.form', 'kendo.upload', 'kendo.window'], factory) :\n factory();\n})((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 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\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\" ]\n };\n\n (function($, undefined$1) {\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$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\n}));\n"]}