{"version":3,"file":"kendo.editable.min.js","sources":["kendo.editable.js"],"sourcesContent":["(function(f, define) {\n define('kendo.editable',[ \"kendo.checkbox\", \"kendo.dropdownlist\", \"kendo.datepicker\", \"kendo.numerictextbox\", \"kendo.validator\", \"kendo.binder\" ], f);\n})(function() {\n\nvar __meta__ = {\n id: \"editable\",\n name: \"Editable\",\n category: \"framework\",\n depends: [ \"checkbox\", \"dropdownlist\", \"datepicker\", \"numerictextbox\", \"validator\", \"binder\" ],\n hidden: true\n};\n\n\n(function($, undefined) {\n var kendo = window.kendo,\n ui = kendo.ui,\n Widget = ui.Widget,\n extend = $.extend,\n isFunction = kendo.isFunction,\n isPlainObject = $.isPlainObject,\n inArray = $.inArray,\n POINT = \".\",\n AUTOCOMPLETEVALUE = \"off\",\n nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g,\n ERRORTEMPLATE = '
' +\n '' +\n '#= message #' +\n '' +\n '
',\n CHANGE = \"change\";\n var EQUAL_SET = \"equalSet\";\n var specialRules = [\"url\", \"email\", \"number\", \"date\", \"boolean\"];\n\n function fieldType(field) {\n field = field != null ? field : \"\";\n return field.type || kendo.type(field) || \"string\";\n }\n\n function convertToValueBinding(container) {\n container.find(\":input:not(:button, .k-combobox .k-input, .k-checkbox-list .k-checkbox, .k-radio-list .k-radio, [\" + kendo.attr(\"role\") + \"=listbox], [\" + kendo.attr(\"role\") + \"=upload], [\" + kendo.attr(\"skip\") + \"], [type=file])\").each(function() {\n var bindAttr = kendo.attr(\"bind\"),\n binding = this.getAttribute(bindAttr) || \"\",\n bindingName = this.type === \"checkbox\" || this.type === \"radio\" ? \"checked:\" : \"value:\",\n isAntiForgeryToken = this.getAttribute(\"name\") === Editable.antiForgeryTokenName,\n fieldName = this.name;\n\n if (binding.indexOf(bindingName) === -1 && fieldName && !isAntiForgeryToken) {\n binding += (binding.length ? \",\" : \"\") + bindingName + fieldName;\n\n $(this).attr(bindAttr, binding);\n }\n });\n }\n\n function createAttributes(options) {\n var field = (options.model.fields || options.model)[options.field],\n type = fieldType(field),\n validation = field ? field.validation : {},\n attributes = field ? field.attributes : {},\n ruleName,\n DATATYPE = kendo.attr(\"type\"),\n BINDING = kendo.attr(\"bind\"),\n rule,\n attr = {\n id: options.id || options.field,\n name: options.field,\n title: options.title ? options.title : options.field\n };\n\n for (ruleName in validation) {\n rule = validation[ruleName];\n\n if (inArray(ruleName, specialRules) >= 0) {\n attr[DATATYPE] = ruleName;\n } else if (!isFunction(rule)) {\n var culture = kendo.getCulture();\n\n if (typeof rule === \"number\" && culture.name.length) {\n var numberFormat = culture.numberFormat;\n var stringRule = rule.toString()\n .replace(POINT, numberFormat[POINT]);\n\n attr[ruleName] = stringRule;\n } else {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n }\n\n attr[kendo.attr(ruleName + \"-msg\")] = rule.message;\n\n attr.autocomplete = AUTOCOMPLETEVALUE;\n }\n\n for (var attributeName in attributes) {\n attr[attributeName] = attributes[attributeName];\n }\n\n if (inArray(type, specialRules) >= 0) {\n attr[DATATYPE] = type;\n }\n\n attr[BINDING] = (type === \"boolean\" ? \"checked:\" : \"value:\") + options.field;\n\n return attr;\n }\n\n function addIdAttribute(container, attr) {\n var id = container.attr(\"id\");\n\n if (id) {\n attr.id = id;\n container.removeAttr(\"id\");\n }\n\n return attr;\n }\n\n function convertItems(items) {\n var idx,\n length,\n item,\n value,\n text,\n result;\n\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text || item.value || item;\n value = item.value == null ? (item.text || item) : item.value;\n\n result[idx] = { text: text, value: value };\n }\n }\n return result;\n }\n\n function getEditorTag(type, options) {\n var tag;\n\n if (!type.length) { return; }\n\n if ((type === \"DropDownTree\" && options && options.checkboxes) || type === \"MultiSelect\") {\n tag = \"