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