{"version":3,"file":"kendo.binder.min.js","names":["factory","define","amd","$","undefined$1","kendo","window","Observable","ObservableObject","data","ObservableArray","toString","binders","Class","VALUE","SOURCE","EVENTS","CHECKED","deleteExpando","CHANGE","a","document","createElement","test","e","Binding","extend","init","parents","path","that","this","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","format","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 (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.core', 'kendo.data'], factory) :\n factory();\n})((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 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 = kendo.format('',\n options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = \"\";\n }\n } else if (nodeName == \"tbody\") {\n template = \"#:data#\";\n } else if (nodeName == \"ul\" || nodeName == \"ol\") {\n template = \"
  • #:data#
  • \";\n } else {\n template = \"#: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 if (this.element.type === \"radio\") {\n this.widget.check(this.bindings[CHECKED].get().toString() === this.value());\n } else {\n this.widget.check(this.bindings[CHECKED].get() === 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\n}));\n"]}