{"version":3,"file":"kendo.filtercell.min.js","names":["factory","define","amd","$","undefined$1","kendo","window","ui","DataSource","data","Widget","CHANGE","BOOL","ENUM","STRING","EQ","NEQ","nonValueOperators","isNonValueFilter","filter","operator","inArray","findFilterForField","field","filters","isPlainObject","hasOwnProperty","Array","isArray","i","length","result","removeFiltersForField","expression","grep","FilterCell","extend","init","element","options","addClass","dataSource","viewModel","first","type","wrapper","this","appendTo","that","passedOptions","operators","input","attr","suggestDataSource","fn","call","model","reader","target","getter","values","_parse","value","fields","parse","bind","defaultOperator","observable","operatorVisible","val","get","_clearInProgress","_prevOperator","updateDsFilter","initSuggestDataSource","inputWidth","width","_getColumnTitle","_setInputType","showOperators","_createOperatorDropDown","css","text","_createClearIcon","template","setAutoCompleteSource","setComboBoxSource","_refreshUI","_refreshHandler","_angularItems","dataTextField","suggestionOperator","delay","minLength","guid","remove","radioInput","inputName","labelTrue","messages","isTrue","append","labelFalse","clone","isFalse","column","title","items","prop","push","dropdown","operatorDropDown","kendoDropDownList","dataValueField","open","popup","valuePrimitive","ariaLabel","find","removeClass","dataSelector","customDataSource","group","create","_pageSize","e","index","seen","item","autoComplete","setDataSource","comboBox","manuallyUpdatingVM","set","isEmptyObject","trigger","_applyFilter","logic","currentFilter","toJSON","prevented","mergeResult","_merge","idx","clear","html","on","clearFilter","action","elements","closest","angular","destroy","filterModel","unbind","events","name","string","eq","neq","startswith","contains","doesnotcontain","endswith","isnull","isnotnull","isempty","isnotempty","isnullorempty","isnotnullorempty","number","gte","gt","lte","lt","date","enums","plugin","jQuery"],"sources":["kendo.filtercell.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.autocomplete', 'kendo.datepicker', 'kendo.numerictextbox', 'kendo.combobox', 'kendo.dropdownlist'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"filtercell\",\n name: \"Row filter\",\n category: \"framework\",\n depends: [ \"autocomplete\" ],\n advanced: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.ui,\n DataSource = kendo.data.DataSource,\n Widget = ui.Widget,\n CHANGE = \"change\",\n BOOL = \"boolean\",\n ENUM = \"enums\",\n STRING = \"string\",\n EQ = \"Is equal to\",\n NEQ = \"Is not equal to\",\n nonValueOperators = [\"isnull\", \"isnotnull\", \"isempty\", \"isnotempty\", \"isnullorempty\", \"isnotnullorempty\"];\n\n function isNonValueFilter(filter) {\n var operator = typeof filter === \"string\" ? filter : filter.operator;\n return $.inArray(operator, nonValueOperators) > -1;\n }\n\n function findFilterForField(filter, field) {\n var filters = [];\n if ($.isPlainObject(filter)) {\n if (filter.hasOwnProperty(\"filters\")) {\n filters = filter.filters;\n } else if (filter.field == field) {\n return filter;\n }\n }\n if ((Array.isArray(filter))) {\n filters = filter;\n }\n\n for (var i = 0; i < filters.length; i++) {\n var result = findFilterForField(filters[i], field);\n if (result) {\n return result;\n }\n }\n }\n\n function removeFiltersForField(expression, field) {\n if (expression.filters) {\n expression.filters = $.grep(expression.filters, function(filter) {\n removeFiltersForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field != field;\n }\n });\n }\n }\n\n function removeDuplicates(dataSelector, dataTextField) {\n var getter = kendo.getter(dataTextField, true);\n\n return function(e) {\n var items = dataSelector(e),\n result = [],\n index = 0,\n seen = {};\n\n while (index < items.length) {\n var item = items[index++],\n text = getter(item);\n\n if (!seen.hasOwnProperty(text)) {\n result.push(item);\n seen[text] = true;\n }\n }\n\n return result;\n };\n }\n\n var FilterCell = Widget.extend( {\n init: function(element, options) {\n element = $(element).addClass(\"k-filtercell\");\n var wrapper = this.wrapper = $(\"\").appendTo(element);\n var that = this,\n dataSource,\n viewModel,\n passedOptions = options,\n first,\n type,\n operators = that.operators = options.operators || {},\n input = that.input = $(\"\")\n .attr(kendo.attr(\"bind\"), \"value: value\")\n .appendTo(wrapper);\n\n var suggestDataSource = options ? options.suggestDataSource : null;\n\n if (suggestDataSource) {\n // avoid deep cloning the suggest data source\n options = $.extend({}, options, { suggestDataSource: {} });\n }\n\n Widget.fn.init.call(that, element[0], options);\n\n if (suggestDataSource) {\n that.options.suggestDataSource = suggestDataSource;\n }\n\n options = that.options;\n\n dataSource = that.dataSource = options.dataSource;\n\n //gets the type from the dataSource or sets default to string\n that.model = dataSource.reader.model;\n type = options.type = STRING;\n var fields = kendo.getter(\"reader.model.fields\", true)(dataSource) || {};\n var target = fields[options.field];\n if (target && target.type) {\n type = options.type = target.type;\n }\n if (options.values) {\n options.type = type = ENUM;\n }\n\n operators = operators[type] || options.operators[type];\n\n if (!passedOptions.operator) {\n for (first in operators) { // get the first operator\n options.operator = first;\n break;\n }\n }\n\n that._parse = function(value) {\n\n return value != null ? (value + \"\") : value;\n };\n\n if (that.model && that.model.fields) {\n var field = that.model.fields[options.field];\n\n if (field) {\n if (field.parse) {\n that._parse = field.parse.bind(field);\n }\n }\n }\n\n that.defaultOperator = options.operator;\n\n that.viewModel = viewModel = kendo.observable({\n operator: options.operator,\n value: null,\n operatorVisible: function() {\n var val = this.get(\"value\");\n return (val !== null && val !== undefined$1 && val != \"undefined\") || (isNonValueFilter(this.get(\"operator\")) && that.dataSource.filter() && !that._clearInProgress);\n }\n });\n that._prevOperator = options.operator;\n viewModel.bind(CHANGE, that.updateDsFilter.bind(that));\n\n if (type == STRING) {\n that.initSuggestDataSource(options);\n }\n\n if (options.inputWidth !== null) {\n input.addClass('k-sized-input');\n input.width(options.inputWidth);\n }\n\n input.attr(\"aria-label\", that._getColumnTitle());\n input.attr(\"title\", that._getColumnTitle());\n\n that._setInputType(options, type);\n\n if (type != BOOL && options.showOperators !== false) {\n that._createOperatorDropDown(operators);\n } else {\n $('
')\n .css(\"display\", \"none\")\n .text(\"eq\")\n .appendTo(wrapper);\n\n wrapper.addClass(\"k-operator-hidden\");\n }\n\n that._createClearIcon();\n\n kendo.bind(this.wrapper, viewModel);\n\n if (type == STRING) {\n if (!options.template) {\n that.setAutoCompleteSource();\n }\n }\n\n if (type == ENUM) {\n that.setComboBoxSource(that.options.values);\n }\n\n that._refreshUI();\n\n that._refreshHandler = that._refreshUI.bind(that);\n\n that.dataSource.bind(CHANGE, that._refreshHandler);\n\n },\n\n _setInputType: function(options, type) {\n var that = this,\n input = that.input;\n\n if (typeof (options.template) == \"function\") {\n options.template.call(that.viewModel, {\n element: that.input,\n dataSource: that.suggestDataSource\n });\n\n that._angularItems(\"compile\");\n\n } else if (type == STRING) {\n input.attr(kendo.attr(\"role\"), \"autocomplete\")\n .attr(kendo.attr(\"text-field\"), options.dataTextField || options.field)\n .attr(kendo.attr(\"filter\"), options.suggestionOperator)\n .attr(kendo.attr(\"delay\"), options.delay)\n .attr(kendo.attr(\"min-length\"), options.minLength)\n .attr(kendo.attr(\"value-primitive\"), true);\n } else if (type == \"date\") {\n input.attr(kendo.attr(\"role\"), \"datepicker\")\n .attr(\"id\", kendo.guid());\n } else if (type == BOOL) {\n input.remove();\n var radioInput = $(\"\");\n var wrapper = that.wrapper;\n var inputName = kendo.guid();\n\n var labelTrue = $(\"\").text(options.messages.isTrue).append(radioInput);\n radioInput.attr(kendo.attr(\"bind\"), \"checked:value\")\n .attr(\"name\", inputName)\n .val(\"true\");\n\n var labelFalse = labelTrue.clone().text(options.messages.isFalse);\n radioInput.clone().val(\"false\").appendTo(labelFalse);\n wrapper.append([labelTrue, labelFalse]);\n\n } else if (type == \"number\") {\n input.attr(kendo.attr(\"role\"), \"numerictextbox\")\n .attr(\"title\", that._getColumnTitle());\n } else if (type == ENUM) {\n input.attr(kendo.attr(\"role\"), \"combobox\")\n .attr(kendo.attr(\"text-field\"), \"text\")\n .attr(kendo.attr(\"suggest\"), true)\n .attr(kendo.attr(\"filter\"), \"contains\")\n .attr(kendo.attr(\"value-field\"), \"value\")\n .attr(kendo.attr(\"value-primitive\"), true);\n }\n },\n\n _getColumnTitle: function() {\n var column = this.options.column;\n return column ? column.title || column.field : \"\";\n },\n\n _createOperatorDropDown: function(operators) {\n var items = [],\n viewModel = this.viewModel;\n for (var prop in operators) {\n items.push({\n text: operators[prop],\n value: prop\n });\n }\n var dropdown = $('').appendTo(this.wrapper);\n dropdown.attr(\"aria-label\", this._getColumnTitle());\n\n this.operatorDropDown = dropdown.kendoDropDownList({\n dataSource: items,\n dataTextField: \"text\",\n dataValueField: \"value\",\n open: function() {\n //TODO calc this\n this.popup.element.width(150);\n },\n valuePrimitive: true\n }).data(\"kendoDropDownList\");\n\n viewModel.bind(\"change\", function() {\n var ariaLabel = operators[viewModel.operator];\n dropdown.attr(\"aria-label\", ariaLabel);\n });\n\n this.operatorDropDown.wrapper\n .attr(\"aria-label\", this._getColumnTitle())\n .find(\".k-i-arrow-s\")\n .removeClass(\"k-i-arrow-s\")\n .addClass(\"k-i-filter\");\n },\n\n initSuggestDataSource: function(options) {\n var suggestDataSource = options.suggestDataSource;\n\n if (!(suggestDataSource instanceof DataSource)) {\n if (!options.customDataSource && suggestDataSource) {\n suggestDataSource.group = undefined$1;\n suggestDataSource.filter = undefined$1;\n }\n suggestDataSource =\n this.suggestDataSource =\n DataSource.create(suggestDataSource);\n\n\n }\n\n if (!options.customDataSource) {\n suggestDataSource._pageSize = undefined$1;\n suggestDataSource.reader.data = removeDuplicates(suggestDataSource.reader.data, this.options.field);\n }\n\n this.suggestDataSource = suggestDataSource;\n },\n\n setAutoCompleteSource: function() {\n var autoComplete = this.input.data(\"kendoAutoComplete\");\n if (autoComplete) {\n autoComplete.setDataSource(this.suggestDataSource);\n }\n },\n\n setComboBoxSource: function(values) {\n var dataSource = DataSource.create({\n data: values\n });\n var comboBox = this.input.data(\"kendoComboBox\");\n if (comboBox && !this.options.template) {\n comboBox.setDataSource(dataSource);\n }\n },\n\n _refreshUI: function() {\n var that = this,\n filter = findFilterForField(that.dataSource.filter(), this.options.field) || {},\n viewModel = that.viewModel;\n\n that.manuallyUpdatingVM = true;\n filter = $.extend(true, {}, filter);\n //MVVM check binding does not update the UI when changing the value to null/undefined\n if (that.options.type == BOOL) {\n if (viewModel.value !== filter.value) {\n that.wrapper.find(\":radio\").prop(\"checked\", false);\n }\n }\n\n if (filter.operator) {\n viewModel.set(\"operator\", filter.operator);\n }\n viewModel.set(\"value\", filter.value);\n if ($.isEmptyObject(filter)) {\n viewModel.trigger(CHANGE, { field: \"operatorVisible\" });\n }\n that.manuallyUpdatingVM = false;\n },\n\n _applyFilter: function(filter) {\n if (filter.filters.length) {\n this.dataSource.filter(filter);\n } else {\n this.dataSource.filter({});\n }\n },\n\n updateDsFilter: function(e) {\n var that = this,\n model = that.viewModel,\n filter;\n\n if (e.field == \"operator\" && model.value === undefined$1 && !isNonValueFilter(model) && isNonValueFilter(that._prevOperator)) {\n filter = that.dataSource.filter() || { filters: [], logic: \"and\" };\n removeFiltersForField(filter, that.options.field);\n that._prevOperator = model.operator;\n that._applyFilter(filter);\n return;\n }\n\n if (that.manuallyUpdatingVM || (e.field == \"operator\" && model.value === undefined$1 && !isNonValueFilter(model)) ||\n (e.field == \"operator\" && that._clearInProgress && model.value !== null)) {\n return;\n }\n\n var currentFilter = $.extend({}, that.viewModel.toJSON(), { field: that.options.field });\n that._prevOperator = currentFilter.operator;\n\n var expression = {\n logic: \"and\",\n filters: []\n };\n\n var prevented = false;\n\n if ((currentFilter.value !== undefined$1 && currentFilter.value !== null) || (isNonValueFilter(currentFilter) && !this._clearInProgress)) {\n expression.filters.push(currentFilter);\n\n prevented = that.trigger(CHANGE, { filter: expression, field: that.options.field });\n }\n\n if (that._clearInProgress || currentFilter.value === null) {\n prevented = that.trigger(CHANGE, { filter: null, field: that.options.field });\n }\n\n if (prevented) {\n return;\n }\n\n var mergeResult = that._merge(expression);\n that._applyFilter(mergeResult);\n },\n\n _merge: function(expression) {\n var that = this,\n logic = expression.logic || \"and\",\n filters = expression.filters,\n filter,\n result = that.dataSource.filter() || { filters: [], logic: \"and\" },\n idx,\n length;\n\n removeFiltersForField(result, that.options.field);\n\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n filter.value = that._parse(filter.value);\n }\n\n filters = $.grep(filters, function(filter) {\n return (filter.value !== \"\" && filter.value !== null) || isNonValueFilter(filter);\n });\n\n if (filters.length) {\n if (result.filters.length) {\n expression.filters = filters;\n\n if (result.logic !== \"and\") {\n result.filters = [ { logic: result.logic, filters: result.filters }];\n result.logic = \"and\";\n }\n\n if (filters.length > 1) {\n result.filters.push(expression);\n } else {\n result.filters.push(filters[0]);\n }\n } else {\n result.filters = filters;\n result.logic = logic;\n }\n }\n\n return result;\n },\n\n _createClearIcon: function() {\n var that = this;\n\n $(\"\")\n .attr(\"aria-label\", that.options.messages.clear)\n .attr(kendo.attr(\"bind\"), \"visible:operatorVisible\")\n .html(\"\")\n .on(\"click\", that.clearFilter.bind(that))\n .appendTo(that.wrapper);\n },\n\n clearFilter: function() {\n this._clearInProgress = true;\n\n if (isNonValueFilter(this.viewModel.operator)) {\n this.viewModel.set(\"operator\", this.defaultOperator);\n }\n\n this.viewModel.set(\"value\", null);\n this._clearInProgress = false;\n },\n\n _angularItems: function(action) {\n var elements = this.wrapper.closest(\"td\").get();\n var column = this.options.column;\n\n this.angular(action, function() {\n return {\n elements: elements,\n data: [{ column: column }]\n };\n });\n },\n\n destroy: function() {\n var that = this;\n\n that.filterModel = null;\n that.operatorDropDown = null;\n\n that._angularItems(\"cleanup\");\n\n if (that._refreshHandler) {\n that.dataSource.bind(CHANGE, that._refreshHandler);\n that._refreshHandler = null;\n }\n\n kendo.unbind(that.element);\n\n Widget.fn.destroy.call(that);\n\n kendo.destroy(that.element);\n },\n\n events: [\n CHANGE\n ],\n\n options: {\n name: \"FilterCell\",\n delay: 200,\n minLength: 1,\n inputWidth: null,\n values: undefined$1,\n customDataSource: false,\n field: \"\",\n dataTextField: \"\",\n type: \"string\",\n suggestDataSource: null,\n suggestionOperator: \"startswith\",\n operator: \"eq\",\n showOperators: true,\n template: null,\n messages: {\n isTrue: \"is true\",\n isFalse: \"is false\",\n filter: \"Filter\",\n clear: \"Clear\",\n operator: \"Operator\"\n },\n operators: {\n string: {\n eq: EQ,\n neq: NEQ,\n startswith: \"Starts with\",\n contains: \"Contains\",\n doesnotcontain: \"Does not contain\",\n endswith: \"Ends with\",\n isnull: \"Is null\",\n isnotnull: \"Is not null\",\n isempty: \"Is empty\",\n isnotempty: \"Is not empty\",\n isnullorempty: \"Has no value\",\n isnotnullorempty: \"Has value\"\n },\n number: {\n eq: EQ,\n neq: NEQ,\n gte: \"Is greater than or equal to\",\n gt: \"Is greater than\",\n lte: \"Is less than or equal to\",\n lt: \"Is less than\",\n isnull: \"Is null\",\n isnotnull: \"Is not null\"\n },\n date: {\n eq: EQ,\n neq: NEQ,\n gte: \"Is after or equal to\",\n gt: \"Is after\",\n lte: \"Is before or equal to\",\n lt: \"Is before\",\n isnull: \"Is null\",\n isnotnull: \"Is not null\"\n },\n enums: {\n eq: EQ,\n neq: NEQ,\n isnull: \"Is null\",\n isnotnull: \"Is not null\"\n }\n }\n }\n });\n\n ui.plugin(FilterCell);\n })(window.kendo.jQuery);\n\n}));\n"]}