{"version":3,"file":"kendo.binder.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendobinder","js","this","$","undefined$1","kendo","window","encode","htmlEncode","Observable","ObservableObject","data","ObservableArray","toString","binders","Class","VALUE","SOURCE","EVENTS","CHECKED","deleteExpando","CHANGE","a","document","createElement","test","e","Binding","extend","init","parents","path","that","fn","call","source","dependencies","observable","_access","field","_change","change","bind","_parents","value","get","parent","inArray","concat","dependency","ch","trigger","indexOf","charAt","length","start","stop","unbind","index","result","lastIndexOf","substring","currentSource","set","getter","destroy","EventBinding","handler","TemplateBinding","template","render","html","Binder","element","bindings","options","binding","attribute","refresh","TypedBinder","dataType","getAttribute","ns","type","toLowerCase","parsedValue","_parseValue","parseDate","parseFloat","Boolean","dataSourceBinding","bindingName","fieldName","setter","widget","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","item","_ns","idx","items","removedItems","unbindElementTree","ui","all","dataviz","mobile","splice","unshift","rolesFromNamespaces","view","addedItems","dataSource","hds","HierarchicalDataSource","addedDataItems","flatView","select","multiselect","action","DataSource","_dataSource","Select","MultiSelect","DropDownTree","treeview","retrievePrimitiveValues","dataValueField","attr","key","setAttribute","css","classes","className","addClass","removeClass","style","enabled","removeAttribute","readonly","disabled","events","handlers","off","on","text","dataFormat","visible","display","invisible","innerHTML","eventName","valueUpdate","_initChange","autoBind","fetch","add","remove","container","nodeName","tBodies","appendChild","valueField","textField","valueAttr","innerText","child","clone","cloneNode","reference","children","insertBefore","roles","parentNode","removeChild","unbindElementChildren","input","checked","Date","i","push","val","selectedIndex","target","option","values","selected","attributes","specified","valueIndex","valuePrimitive","sourceValue","String","apply","optionIndex","optionValue","check","range","end","_range","wrapper","floatingLabel","enable","first","_valueIsObservableObject","_valueIsObservableArray","_source","dataItem","valueLength","sourceItem","dataTextField","isArray","isObservableObject","slice","cascadeFrom","listView","bound","_preselect","dropdowntree","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","newValues","removeIndex","newValue","found","newLength","j","old","arraySplice","selectedValue","gantt","dataItems","_isBound","scheduler","elements","grid","badge","arr","addLength","oldLength","shifted","shiftedLength","BindingTarget","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","WidgetBindingTarget","specificBinders","applyBinding","name","binder","Error","keyValueRegExp","whiteSpaceRegExp","parseBindings","token","colonIndex","tokens","match","createBindings","role","childrenCopy","deep","unbindElement","initWidget","bindingTargetForRole","replace","parseOptions","click","kendoBindingTarget","dom","object","node","arguments","nodeType","destroyWidget","bindingTarget","widgetInstance","destroyWidgets","notify","namespace","observableHierarchy","array","create","recursiveRead","_initChildren","_data","jQuery"],"sources":["kendo.binder.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.core.js'), require('kendo.data.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.core', 'kendo.data'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendobinder = global.kendobinder || {}, global.kendobinder.js = factory()));\n})(this, (function () {\n var __meta__ = {\n id: \"binder\",\n name: \"MVVM\",\n category: \"framework\",\n description: \"Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).\",\n depends: [ \"core\", \"data\" ]\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n encode = kendo.htmlEncode,\n Observable = kendo.Observable,\n ObservableObject = kendo.data.ObservableObject,\n ObservableArray = kendo.data.ObservableArray,\n toString = {}.toString,\n binders = {},\n Class = kendo.Class,\n VALUE = \"value\",\n SOURCE = \"source\",\n EVENTS = \"events\",\n CHECKED = \"checked\",\n CSS = \"css\",\n deleteExpando = true,\n FUNCTION = \"function\",\n CHANGE = \"change\";\n\n (function() {\n var a = document.createElement(\"a\");\n\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n })();\n\n var Binding = Observable.extend( {\n init: function(parents, path) {\n var that = this;\n\n Observable.fn.init.call(that);\n\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n\n that._access = function(e) {\n that.dependencies[e.field] = true;\n };\n\n if (that.observable) {\n that._change = function(e) {\n that.change(e);\n };\n\n that.source.bind(CHANGE, that._change);\n }\n },\n\n _parents: function() {\n var parents = this.parents;\n var value = this.get();\n\n if (value && typeof value.parent == \"function\") {\n var parent = value.parent();\n\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n\n return parents;\n },\n\n change: function(e) {\n var dependency,\n ch,\n field = e.field,\n that = this;\n\n if (that.path === \"this\") {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n\n if (!ch || ch === \".\" || ch === \"[\") {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n\n start: function(source) {\n source.bind(\"get\", this._access);\n },\n\n stop: function(source) {\n source.unbind(\"get\", this._access);\n },\n\n get: function() {\n\n var that = this,\n source = that.source,\n index = 0,\n path = that.path,\n result = source;\n\n if (!that.observable) {\n return result;\n }\n\n that.start(that.source);\n\n result = source.get(path);\n\n // Traverse the observable hierarchy if the binding is not resolved at the current level.\n while (result === undefined$1 && source) {\n\n source = that.parents[++index];\n\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n\n // second pass try to get the parent from the object hierarchy\n if (result === undefined$1) {\n source = that.source; //get the initial source\n\n while (result === undefined$1 && source) {\n source = source.parent();\n\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n\n // If the result is a function - invoke it\n if (typeof result === \"function\") {\n index = path.lastIndexOf(\".\");\n\n // If the function is a member of a nested observable object make that nested observable the context (this) of the function\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n\n // Invoke the function\n that.start(source);\n\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n\n that.stop(source);\n }\n\n // If the binding is resolved by a parent object\n if (source && source !== that.source) {\n\n that.currentSource = source; // save parent object\n\n // Listen for changes in the parent object\n source.unbind(CHANGE, that._change)\n .bind(CHANGE, that._change);\n }\n\n that.stop(that.source);\n\n return result;\n },\n\n set: function(value) {\n var source = this.currentSource || this.source;\n\n var field = kendo.getter(this.path)(source);\n\n if (typeof field === \"function\") {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n\n destroy: function() {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n\n this.unbind();\n }\n });\n\n var EventBinding = Binding.extend( {\n get: function() {\n var source = this.source,\n path = this.path,\n index = 0,\n handler;\n\n handler = source.get(path);\n\n while (!handler && source) {\n source = this.parents[++index];\n\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n\n if (!handler) {\n return;\n }\n\n return handler.bind(source);\n }\n });\n\n var TemplateBinding = Binding.extend( {\n init: function(source, path, template) {\n var that = this;\n\n Binding.fn.init.call(that, source, path);\n\n that.template = template;\n },\n\n render: function(value) {\n var html;\n\n this.start(this.source);\n\n html = kendo.render(this.template, value);\n\n this.stop(this.source);\n\n return html;\n }\n });\n\n var Binder = Class.extend({\n init: function(element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n\n bind: function(binding, attribute) {\n var that = this;\n\n binding = attribute ? binding[attribute] : binding;\n\n binding.bind(CHANGE, function(e) {\n that.refresh(attribute || e);\n });\n\n that.refresh(attribute);\n },\n\n destroy: function() {\n }\n });\n\n var TypedBinder = Binder.extend({\n dataType: function() {\n var dataType = this.element.getAttribute(\"data-\" + kendo.ns + \"type\") || this.element.type || \"text\";\n return dataType.toLowerCase();\n },\n\n parsedValue: function() {\n return this._parseValue(this.element.value, this.dataType());\n },\n\n _parseValue: function(value, dataType) {\n if (dataType == \"date\") {\n value = kendo.parseDate(value, \"yyyy-MM-dd\");\n } else if (dataType == \"datetime-local\") {\n value = kendo.parseDate(value, [\"yyyy-MM-ddTHH:mm:ss\", \"yyyy-MM-ddTHH:mm\"] );\n } else if (dataType == \"number\") {\n value = kendo.parseFloat(value);\n } else if (dataType == \"boolean\") {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = (value.toLowerCase() === \"true\");\n }\n }\n return value;\n }\n });\n\n binders.attr = Binder.extend({\n refresh: function(key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n\n binders.css = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function(className) {\n var element = $(this.element),\n binding = this.bindings.css[className],\n hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n\n binders.style = Binder.extend({\n refresh: function(key) {\n this.element.style[key] = this.bindings.style[key].get() || \"\";\n }\n });\n\n binders.enabled = Binder.extend({\n refresh: function() {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute(\"disabled\");\n } else {\n this.element.setAttribute(\"disabled\", \"disabled\");\n }\n }\n });\n\n binders.readonly = Binder.extend({\n refresh: function() {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute(\"readonly\", \"readonly\");\n } else {\n this.element.removeAttribute(\"readonly\");\n }\n }\n });\n\n binders.disabled = Binder.extend({\n refresh: function() {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute(\"disabled\", \"disabled\");\n } else {\n this.element.removeAttribute(\"disabled\");\n }\n }\n });\n\n binders.events = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n\n refresh: function(key) {\n var element = $(this.element),\n binding = this.bindings.events[key],\n handler = this.handlers[key];\n\n if (handler) {\n element.off(key, handler);\n }\n\n handler = this.handlers[key] = binding.get();\n\n element.on(key, binding.source, handler);\n },\n\n destroy: function() {\n var element = $(this.element),\n handler;\n\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n\n binders.text = Binder.extend({\n refresh: function() {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute(\"data-\" + kendo.ns + \"format\") || \"\";\n if (text == null) {\n text = \"\";\n }\n\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n\n binders.visible = Binder.extend({\n refresh: function() {\n if (this.bindings.visible.get()) {\n this.element.style.display = \"\";\n } else {\n this.element.style.display = \"none\";\n }\n }\n });\n\n binders.invisible = Binder.extend({\n refresh: function() {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = \"\";\n } else {\n this.element.style.display = \"none\";\n }\n }\n });\n\n binders.html = Binder.extend({\n refresh: function() {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n\n binders.value = TypedBinder.extend({\n init: function(element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n\n this._change = this.change.bind(this);\n this.eventName = options.valueUpdate || CHANGE;\n\n $(this.element).on(this.eventName, this._change);\n\n this._initChange = false;\n },\n\n change: function() {\n this._initChange = this.eventName != CHANGE;\n\n this.bindings[VALUE].set(this.parsedValue());\n\n this._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n\n if (value == null) {\n value = \"\";\n }\n\n var type = this.dataType();\n\n if (type == \"date\") {\n value = kendo.toString(value, \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(value, \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n this.element.value = value;\n }\n\n this._initChange = false;\n },\n\n destroy: function() {\n $(this.element).off(this.eventName, this._change);\n }\n });\n\n binders.source = Binder.extend({\n init: function(element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n\n var source = this.bindings.source.get();\n\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n\n refresh: function(e) {\n var that = this,\n source = that.bindings.source.get();\n\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n\n if (e.action == \"add\") {\n that.add(e.index, e.items);\n } else if (e.action == \"remove\") {\n that.remove(e.index, e.items);\n } else if (e.action != \"itemchange\") {\n that.render();\n }\n } else {\n that.render();\n }\n },\n\n container: function() {\n var element = this.element;\n\n if (element.nodeName.toLowerCase() == \"table\") {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement(\"tbody\"));\n }\n element = element.tBodies[0];\n }\n\n return element;\n },\n\n template: function() {\n var options = this.options,\n template = options.template,\n nodeName = this.container().nodeName.toLowerCase();\n\n if (!template) {\n if (nodeName == \"select\") {\n if (options.valueField || options.textField) {\n template = function (data) {\n var valueAttr = kendo.getter(options.valueField || options.textField)(data);\n var innerText = kendo.getter(options.textField || options.valueField)(data);\n return (\"\");\n };\n } else {\n template = function (data) { return (\"\"); };\n }\n } else if (nodeName == \"tbody\") {\n template = function (data) { return (\"\" + (encode(data)) + \"\"); };\n } else if (nodeName == \"ul\" || nodeName == \"ol\") {\n template = function (data) { return (\"
  • \" + (encode(data)) + \"
  • \"); };\n } else {\n template = function (data) { return (\"\" + (encode(data))); };\n }\n template = kendo.template(template);\n }\n\n return template;\n },\n\n add: function(index, items) {\n var element = this.container(),\n parents,\n idx,\n length,\n child,\n clone = element.cloneNode(false),\n reference = element.children[index];\n\n $(clone).html(kendo.render(this.template(), items));\n\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n\n remove: function(index, items) {\n var idx, element = this.container();\n\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n\n render: function() {\n var source = this.bindings.source.get(),\n parents,\n idx,\n length,\n element = this.container(),\n template = this.template();\n\n if (source == null) {\n return;\n }\n\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n\n if (!(source instanceof ObservableArray) && toString.call(source) !== \"[object Array]\") {\n source = [source];\n }\n\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n\n $(element).html(this.bindings.template.render(source));\n\n if (element.children.length) {\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n\n binders.input = {\n checked: TypedBinder.extend({\n init: function(element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = this.change.bind(this);\n\n $(this.element).change(this._change);\n },\n\n change: function() {\n var element = this.element;\n var value = this.value();\n\n if (element.type == \"radio\") {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == \"checkbox\") {\n var source = this.bindings[CHECKED].get();\n var index;\n\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n\n refresh: function() {\n var value = this.bindings[CHECKED].get(),\n source = value,\n type = this.dataType(),\n element = this.element;\n\n if (element.type == \"checkbox\") {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = (index >= 0);\n } else {\n element.checked = source;\n }\n } else if (element.type == \"radio\") {\n if (type == \"date\") {\n value = kendo.toString(value, \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(value, \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n if (value !== null && typeof(value) !== \"undefined\" && element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n\n value: function() {\n var element = this.element,\n value = element.value;\n\n if (element.type == \"checkbox\") {\n value = element.checked;\n }\n\n return value;\n },\n destroy: function() {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n\n binders.select = {\n source: binders.source.extend({\n refresh: function(e) {\n var that = this,\n source = that.bindings.source.get();\n\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == \"add\") {\n that.add(e.index, e.items);\n } else if (e.action == \"remove\") {\n that.remove(e.index, e.items);\n } else if (e.action == \"itemchange\" || e.action === undefined$1) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data(\"valueField\"));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function(target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n\n this._change = this.change.bind(this);\n $(this.element).change(this._change);\n },\n\n parsedValue: function() {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n\n if (option.selected) {\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n\n change: function() {\n var values = [],\n element = this.element,\n source,\n field = this.options.valueField || this.options.textField,\n valuePrimitive = this.options.valuePrimitive,\n option,\n valueIndex,\n value,\n idx,\n length;\n\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n\n if (option.selected) {\n value = option.attributes.value;\n\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n\n }\n }\n\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = (String(sourceValue) === values[valueIndex]);\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [0, value.length].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined$1 || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function() {\n var optionIndex,\n element = this.element,\n options = element.options,\n value = this.bindings[VALUE].get(),\n values = value,\n field = this.options.valueField || this.options.textField,\n found = false,\n type = this.dataType(),\n optionValue;\n\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n\n element.selectedIndex = -1;\n\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n\n\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n\n if (type == \"date\") {\n value = kendo.toString(values[valueIndex], \"yyyy-MM-dd\");\n } else if (type == \"datetime-local\") {\n value = kendo.toString(values[valueIndex], \"yyyy-MM-ddTHH:mm:ss\");\n }\n\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n\n if (optionValue === \"\" && value !== \"\") {\n optionValue = options[optionIndex].text;\n }\n\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function() {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function(widget, bindings, options) {\n var that = this;\n\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n\n that.widget = widget;\n that._dataBinding = that.dataBinding.bind(that);\n that._dataBound = that.dataBound.bind(that);\n that._itemChange = that.itemChange.bind(that);\n },\n\n itemChange: function(e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n\n dataBinding: function(e) {\n var idx,\n length,\n widget = this.widget,\n items = e.removedItems || widget.items();\n\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n\n _ns: function(ns) {\n ns = ns || kendo.ui;\n var all = [ kendo.ui, kendo.dataviz.ui, kendo.mobile.ui ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n\n return kendo.rolesFromNamespaces(all);\n },\n\n dataBound: function(e) {\n var idx,\n length,\n widget = this.widget,\n items = e.addedItems || widget.items(),\n dataSource = widget[fieldName],\n view,\n parents,\n hds = kendo.data.HierarchicalDataSource;\n\n if (hds && dataSource instanceof hds) {\n // suppress binding of HDS items, because calling view() on root\n // will return only root items, and widget.items() returns all items\n return;\n }\n\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n\n refresh: function(e) {\n var that = this,\n source,\n widget = that.widget,\n select, multiselect, dropdowntree;\n\n e = e || {};\n\n if (!e.action) {\n that.destroy();\n\n widget.bind(\"dataBinding\", that._dataBinding);\n widget.bind(\"dataBound\", that._dataBound);\n widget.bind(\"itemChange\", that._itemChange);\n\n source = that.bindings[bindingName].get();\n\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\n\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n\n destroy: function() {\n var widget = this.widget;\n\n widget.unbind(\"dataBinding\", this._dataBinding);\n widget.unbind(\"dataBound\", this._dataBound);\n widget.unbind(\"itemChange\", this._itemChange);\n }\n });\n }\n\n binders.widget = {\n events: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n\n refresh: function(key) {\n var binding = this.bindings.events[key],\n handler = this.handlers[key];\n\n if (handler) {\n this.widget.unbind(key, handler);\n }\n\n handler = binding.get();\n\n this.handlers[key] = function(e) {\n e.data = binding.source;\n\n handler(e);\n\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n\n this.widget.bind(key, this.handlers[key]);\n },\n\n destroy: function() {\n var handler;\n\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n\n checked: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function() {\n this.bindings[CHECKED].set(this.value());\n },\n\n refresh: function() {\n var val = this.bindings[CHECKED].get();\n\n if (this.element.type === \"radio\") {\n if (val !== undefined$1) {\n this.widget.check(val.toString() === this.value());\n } else {\n this.widget.check(false);\n }\n } else {\n this.widget.check(val === true);\n }\n },\n\n value: function() {\n var element = this.element,\n value = element.value;\n\n if (value == \"on\" || value == \"off\" || this.element.type == \"checkbox\") {\n value = element.checked;\n }\n\n return value;\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n start: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = this.change.bind(this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n\n change: function() {\n this.bindings.start.set(this.widget.range().start);\n },\n\n refresh: function() {\n var that = this;\n var start = this.bindings.start.get();\n var end = that.widget._range ? that.widget._range.end : null;\n this.widget.range({ start: start, end: end });\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n end: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = this.change.bind(this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n\n change: function() {\n this.bindings.end.set(this.widget.range().end);\n },\n\n refresh: function() {\n var that = this;\n var end = this.bindings.end.get();\n var start = that.widget._range ? that.widget._range.start : null;\n this.widget.range({ start: start, end: end });\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n\n visible: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? \"\" : \"none\";\n }\n }),\n\n invisible: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? \"none\" : \"\";\n }\n }),\n\n floatingLabel: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n if (!widget.floatingLabel) {\n return;\n }\n\n widget.floatingLabel.refresh();\n }\n }),\n\n enabled: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n }\n }),\n\n disabled: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n\n refresh: function() {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\"),\n\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n\n var value = this.bindings.value.get();\n\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n\n _source: function() {\n var source;\n\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n\n return source;\n },\n\n change: function() {\n var value = this.widget.value(),\n field = this.options.dataValueField || this.options.dataTextField,\n isArray = toString.call(value) === \"[object Array]\",\n isObservableObject = this._valueIsObservableObject,\n valueIndex, valueLength, values = [],\n sourceItem, sourceValue,\n idx, length, source;\n\n this._initChange = true;\n\n if (field) {\n\n if (value === \"\" && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n\n this.bindings.value.set(value);\n this._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || \"\";\n var idx = 0, length;\n var values = [];\n\n if (value === undefined$1) {\n value = null;\n }\n\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n\n this._initChange = false;\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n dropdowntree: {\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n\n change: function() {\n var that = this,\n oldValues = that.bindings[VALUE].get(),\n valuePrimitive = that.options.valuePrimitive,\n selectedNode = that.widget.treeview.select(),\n nonPrimitiveValues = that.widget._isMultipleSelection() ? that.widget._getAllChecked() : (that.widget.treeview.dataItem(selectedNode) || that.widget.value()),\n newValues = (valuePrimitive || that.widget.options.autoBind === false) ? that.widget.value() : nonPrimitiveValues;\n\n var field = this.options.dataValueField || this.options.dataTextField;\n\n newValues = newValues.slice ? newValues.slice(0) : newValues;\n\n that._initChange = true;\n\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n\n while (old !== undefined$1) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n\n old = oldValues[i];\n }\n\n arraySplice(oldValues, oldValues.length, 0, newValues);\n\n if (remove.length) {\n oldValues.trigger(\"change\", {\n action: \"remove\",\n items: remove,\n index: removeIndex\n });\n }\n\n if (newValues.length) {\n oldValues.trigger(\"change\", {\n action: \"add\",\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n\n that._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var options = this.options,\n widget = this.widget,\n field = options.dataValueField || options.dataTextField,\n value = this.bindings.value.get(),\n data = value,\n idx = 0, length,\n values = [],\n selectedValue;\n\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n gantt: {\n dependencies: dataSourceBinding(\"dependencies\", \"dependencies\", \"setDependenciesDataSource\")\n },\n\n multiselect: {\n value: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n this._change = this.change.bind(this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n\n change: function() {\n var that = this,\n oldValues = that.bindings[VALUE].get(),\n valuePrimitive = that.options.valuePrimitive,\n newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n\n var field = this.options.dataValueField || this.options.dataTextField;\n\n newValues = newValues.slice(0);\n\n that._initChange = true;\n\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n\n var newLength = newValues.length;\n\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n\n while (old !== undefined$1) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n\n old = oldValues[i];\n }\n\n arraySplice(oldValues, oldValues.length, 0, newValues);\n\n if (remove.length) {\n oldValues.trigger(\"change\", {\n action: \"remove\",\n items: remove,\n index: removeIndex\n });\n }\n\n if (newValues.length) {\n oldValues.trigger(\"change\", {\n action: \"add\",\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n\n that._initChange = false;\n },\n\n refresh: function() {\n if (!this._initChange) {\n var options = this.options,\n widget = this.widget,\n field = options.dataValueField || options.dataTextField,\n value = this.bindings.value.get(),\n data = value,\n idx = 0, length,\n values = [],\n selectedValue;\n\n if (value === undefined$1) {\n value = null;\n }\n\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n\n destroy: function() {\n this.widget.unbind(CHANGE, this._change);\n }\n\n })\n },\n scheduler: {\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\").extend({\n dataBound: function(e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n\n grid: {\n source: dataSourceBinding(\"source\", \"dataSource\", \"setDataSource\").extend({\n dataBound: function(e) {\n var idx,\n length,\n widget = this.widget,\n elements = e.addedItems || widget.items(),\n parents,\n data;\n\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n\n badge: {\n text: Binder.extend({\n init: function(widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n\n this.widget = widget;\n },\n refresh: function() {\n var text = this.bindings.text.get();\n\n if (text == null) {\n text = \"\";\n }\n this.widget.text(text);\n }\n })\n }\n };\n\n var arraySplice = function(arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n\n var addLength = add.length;\n var oldLength = arr.length;\n\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n\n arr.length = shiftedLength;\n }\n\n idx = arr.length;\n\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n\n var BindingTarget = Class.extend( {\n init: function(target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n\n bind: function(bindings) {\n var key,\n hasValue,\n hasSource,\n hasEvents,\n hasChecked,\n hasCss,\n widgetBinding = this instanceof WidgetBindingTarget,\n specificBinders = this.binders();\n\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n\n if (widgetBinding && this.target && this.target.floatingLabel) {\n this.applyBinding(\"floatingLabel\", bindings, specificBinders);\n }\n },\n\n binders: function() {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n\n applyBinding: function(name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name],\n toDestroy = this.toDestroy,\n attribute,\n binding = bindings[name];\n\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n\n toDestroy.push(binder);\n\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== \"template\") {\n throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.nodeName.toLowerCase() + \" element\");\n }\n },\n\n destroy: function() {\n var idx,\n length,\n toDestroy = this.toDestroy;\n\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n\n var WidgetBindingTarget = BindingTarget.extend( {\n binders: function() {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n\n applyBinding: function(name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name],\n toDestroy = this.toDestroy,\n attribute,\n binding = bindings[name];\n\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n\n toDestroy.push(binder);\n\n\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.options.name + \" widget\");\n }\n }\n });\n\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g,\n whiteSpaceRegExp = /\\s/g;\n\n function parseBindings(bind) {\n var result = {},\n idx,\n length,\n token,\n colonIndex,\n key,\n value,\n tokens;\n\n tokens = bind.match(keyValueRegExp);\n\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(\":\");\n\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n\n if (value.charAt(0) == \"{\") {\n value = parseBindings(value);\n }\n\n result[key] = value;\n }\n\n return result;\n }\n\n function createBindings(bindings, source, type) {\n var binding,\n result = {};\n\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n\n return result;\n }\n\n function bindElement(element, source, roles, parents) {\n\n if (!element || element.getAttribute(\"data-\" + kendo.ns + \"stop\")) {\n return;\n }\n\n var role = element.getAttribute(\"data-\" + kendo.ns + \"role\"),\n idx,\n bind = element.getAttribute(\"data-\" + kendo.ns + \"bind\"),\n childrenCopy = [],\n deep = true,\n bindings,\n options = {},\n target;\n\n parents = parents || [source];\n\n if (role || bind) {\n unbindElement(element, false);\n }\n\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, \"\"));\n\n if (!target) {\n options = kendo.parseOptions(element, { textField: \"\", valueField: \"\", template: \"\", valueUpdate: CHANGE, valuePrimitive: false, autoBind: true }, source);\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n\n target.source = source;\n\n bindings = createBindings(bind, parents, Binding);\n\n if (options.template) {\n bindings.template = new TemplateBinding(parents, \"\", options.template);\n }\n\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n\n if (bindings.source) {\n deep = false;\n }\n\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n\n target.bind(bindings);\n }\n\n if (target) {\n element.kendoBindingTarget = target;\n }\n\n var children = element.children;\n if (deep && children && !element.getAttribute(\"data-\" + kendo.ns + \"stop\")) {\n // https://github.com/telerik/kendo/issues/1240 for the weirdness.\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n\n function bind(dom, object) {\n var idx,\n length,\n node,\n roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n\n object = kendo.observable(object);\n dom = $(dom);\n\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n\n if (bindingTarget) {\n bindingTarget.destroy();\n\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute(\"kendoBindingTarget\");\n } else {\n element.kendoBindingTarget = null;\n }\n }\n\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n\n unbindElementChildren(element, destroyWidgets);\n }\n\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n\n function unbind(dom) {\n var idx, length;\n\n dom = $(dom);\n\n for (idx = 0, length = dom.length; idx < length; idx++ ) {\n unbindElementTree(dom[idx], false);\n }\n }\n\n function notify(widget, namespace) {\n var element = widget.element,\n bindingTarget = element[0].kendoBindingTarget;\n\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n\n if (!valueField) {\n return value;\n }\n\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n\n return value;\n }\n\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n\n kendo.observable = function(object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n\n return object;\n };\n\n kendo.observableHierarchy = function(array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n\n function recursiveRead(data) {\n var i, children;\n\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n\n children = data[i].children;\n\n children.fetch();\n\n data[i].items = children.data();\n\n recursiveRead(data[i].items);\n }\n }\n\n dataSource.fetch();\n\n recursiveRead(dataSource.data());\n\n dataSource._data._dataSource = dataSource;\n\n return dataSource._data;\n };\n\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}