{"version":3,"file":"kendo.filtermenu.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendofiltermenu","js","this","$","undefined$1","kendo","window","ui","support","encode","htmlEncode","AUTOCOMPLETEVALUE","browser","chrome","POPUP","INIT","OPEN","REFRESH","CHANGE","NS","COLUMN_HEADER_SELECTOR","EQ","NEQ","roles","number","date","mobileRoles","string","isFunction","Widget","actionsFilterButtonsContainer","ref","actionsCssClass","messages","html","renderButton","filter","type","themeColor","icon","clear","booleanTemplate","field","format","ns","extra","operators","role","values","componentType","info","isTrue","isFalse","modernBooleanTemplate","inputIdForTrue","guid","inputIdForFalse","customBooleanTemplate","defaultTemplate","Object","keys","map","op","stringify","replace","and","or","defaultMobileTemplate","title","filterMenuGuid","inputType","into","val","text","booleanMobileTemplate","removeFiltersForField","expression","filters","grep","length","convertItems","items","idx","item","value","result","FilterMenu","extend","init","element","options","initial","columnHeader","that","fn","call","dataSource","DataSource","create","attr","closest","appendTo","find","link","_createLink","model","reader","_parse","fields","parse","bind","_defaultFilter","operator","_refreshHandler","refresh","appendToElement","_init","setUI","attrRole","pane","_isMobile","_createMobileForm","_createForm","form","on","_submit","_reset","removeClass","each","wrap","trigger","container","cycleForm","template","_getTemplate","append","popup","data","anchor","copyAnchorStyles","open","_open","activate","_activate","close","closeCallback","_keydown","hasCustomTemplate","view","e","submit","preventDefault","_closeForm","_mobileClear","appendTarget","buttonTitle","addClass","_click","logic","defaultFilters","defaultOperator","push","filterModel","observable","children","first","roleAttribute","buttongroup","index","select","eq","set","_logicChangeHandler","_bind","valueAttribute","sender","current","destroy","unbind","off","purge","currentFilter","found","_stripFilters","_merge","_removeFilter","viewElement","booleanRadioButton","booleanRadioButtonValue","prop","i","input","andLogicRadio","expr","nested","stopPropagation","toJSON","containsFilters","_checkForNullOrEmptyFilter","currentExpression","firstNullOrEmpty","secondNullOrEmpty","search","parent","show","navigate","animations","right","left","toggle","not","instance","target","keyCode","ESC","widgetInstance","hasClass","visible","getKendoPopup","events","name","neq","startswith","contains","doesnotcontain","endswith","isnull","isnotnull","isempty","isnotempty","isnullorempty","isnotnullorempty","gte","gt","lte","lt","enums","selectValue","additionalValue","additionalOperator","cancel","done","multiCheckNS","filterValuesForField","flatFilterValues","distinct","getter","seen","hasOwnProperty","multiCheckMobileTemplate","checkAll","selectedItemsFormat","FilterMultiCheck","dataSelector","dataTextField","checkSource","_foreignKeyValues","fetch","forceUnique","pageSize","toLowerCase","parseFloat","_link","serverPaging","_attachProgress","checkChangeHandler","empty","_filter","_progressHandler","progress","_progressHideHandler","_input","_clearTypingTimeout","_typingTimeout","setTimeout","_clearSearch","searchTextBox","clearTimeout","ignoreCase","searchString","labels","style","visibility","parentNode","display","label","labelText","textContent","innerText","indexOf","checkMobileHtml","applyStylesFromKendoAttributes","_mobileCheckAll","kendoPopup","clearSearchButton","createCheckAllItem","itemTemplate","mobile","checkAllContainer","all","prepend","checkBoxAll","checkAllHandler","updateCheckAllState","state","createIsNullItem","valueField","isNullContainer","isNull","getFilterArray","toggleClass","action","autoSync","is","createCheckBoxes","checkValues","templateOptions","boolDataFilter","booleanFilterHandler","_isServerGrouped","_flatData","itemsHtml","render","ele","checkBoxVal","getTime","checkbox","valueFormat","clearAll","plugin","jQuery"],"sources":["kendo.filtermenu.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.datepicker.js'), require('kendo.numerictextbox.js'), require('kendo.dropdownlist.js'), require('kendo.buttongroup.js'), require('kendo.binder.js'), require('kendo.html.button.js'), require('kendo.icons.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.datepicker', 'kendo.numerictextbox', 'kendo.dropdownlist', 'kendo.buttongroup', 'kendo.binder', 'kendo.html.button', 'kendo.icons'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendofiltermenu = global.kendofiltermenu || {}, global.kendofiltermenu.js = factory()));\n})(this, (function () {\n var __meta__ = {\n id: \"filtermenu\",\n name: \"Filtering Menu\",\n category: \"framework\",\n depends: [ \"datepicker\", \"numerictextbox\", \"dropdownlist\", \"buttongroup\", \"binder\", \"html.button\", \"icons\" ],\n advanced: true\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n ui = kendo.ui,\n support = kendo.support,\n encode = kendo.htmlEncode,\n AUTOCOMPLETEVALUE = support.browser.chrome ? \"disabled\" : \"off\",\n POPUP = \"kendoPopup\",\n INIT = \"init\",\n OPEN = \"open\",\n REFRESH = \"refresh\",\n CHANGE = \"change\",\n NS = \".kendoFilterMenu\",\n COLUMN_HEADER_SELECTOR = \".k-table-th\",\n EQ = \"Is equal to\",\n NEQ = \"Is not equal to\",\n roles = {\n \"number\": \"numerictextbox\",\n \"date\": \"datepicker\"\n },\n mobileRoles = {\n \"string\": \"text\",\n \"number\": \"number\",\n \"date\": \"date\"\n },\n isFunction = kendo.isFunction,\n Widget = ui.Widget;\n\n var actionsFilterButtonsContainer = function (ref) {\n var actionsCssClass = ref.actionsCssClass;\n var messages = ref.messages;\n\n return \"
\" +\n kendo.html.renderButton((\"\"), { type: \"submit\", themeColor: \"primary\", icon: \"filter\" }) +\n kendo.html.renderButton((\"\"), { type: \"reset\", icon: \"filter-clear\" }) +\n '
';\n };\n var booleanTemplate = function (ref) {\n var field = ref.field;\n var format = ref.format;\n var ns = ref.ns;\n var messages = ref.messages;\n var extra = ref.extra;\n var operators = ref.operators;\n var type = ref.type;\n var role = ref.role;\n var values = ref.values;\n var componentType = ref.componentType;\n\n return '
' +\n \"
\" + (encode(messages.info)) + \"
\" +\n '' +\n '' +\n actionsFilterButtonsContainer({ messages: messages }) +\n '
';\n };\n\n var modernBooleanTemplate = function (ref) {\n var field = ref.field;\n var format = ref.format;\n var ns = ref.ns;\n var messages = ref.messages;\n var extra = ref.extra;\n var operators = ref.operators;\n var type = ref.type;\n var role = ref.role;\n var values = ref.values;\n var componentType = ref.componentType;\n\n var inputIdForTrue = kendo.guid(), inputIdForFalse = kendo.guid();\n return '
' +\n '
' +\n '' +\n actionsFilterButtonsContainer({ actionsCssClass: \"k-columnmenu-actions\", messages: messages }) +\n '
' +\n '
';\n };\n\n var customBooleanTemplate = function (ref) {\n var field = ref.field;\n var format = ref.format;\n var ns = ref.ns;\n var messages = ref.messages;\n var extra = ref.extra;\n var operators = ref.operators;\n var type = ref.type;\n var role = ref.role;\n var values = ref.values;\n var componentType = ref.componentType;\n\n return '
' +\n \"
\" + (encode(messages.info)) + \"
\" +\n '' +\n actionsFilterButtonsContainer({ messages: messages }) +\n '
';\n };\n\n var defaultTemplate = function (ref) {\n var field = ref.field;\n var format = ref.format;\n var ns = ref.ns;\n var messages = ref.messages;\n var extra = ref.extra;\n var operators = ref.operators;\n var type = ref.type;\n var role = ref.role;\n var values = ref.values;\n var componentType = ref.componentType;\n\n return '
' +\n (componentType === \"classic\" ?\n (\"
\" + (encode(messages.info)) + \"
\")\n : '') +\n \"' +\n (values ?\n \"'\n :\n (\"\")\n ) +\n (extra ?\n (componentType === \"modern\" ?\n \"'\n :\n \"'\n ) +\n \"' +\n (values ?\n \"'\n :\n (\"\")\n )\n : '') +\n actionsFilterButtonsContainer({ messages: messages }) +\n '
';\n };\n\n var defaultMobileTemplate = function (ref) {\n var field = ref.field;\n var title = ref.title;\n var format = ref.format;\n var ns = ref.ns;\n var messages = ref.messages;\n var extra = ref.extra;\n var operators = ref.operators;\n var filterMenuGuid = ref.filterMenuGuid;\n var type = ref.type;\n var role = ref.role;\n var inputType = ref.inputType;\n var values = ref.values;\n\n return \"
\" +\n \"
\" +\n \"\" + (kendo.ui.icon(\"chevron-left\")) + \"\" +\n (encode(messages.filter)) + \" \" + (encode(messages.into)) + \" \" + (encode(title)) +\n \"\" + (kendo.ui.icon(\"check\")) + \"\" +\n '
' +\n \"
\" +\n '' +\n '
' +\n '
';\n };\n\n var booleanMobileTemplate = function (ref) {\n var field = ref.field;\n var title = ref.title;\n var format = ref.format;\n var ns = ref.ns;\n var messages = ref.messages;\n var extra = ref.extra;\n var operators = ref.operators;\n var filterMenuGuid = ref.filterMenuGuid;\n var type = ref.type;\n var role = ref.role;\n var inputType = ref.inputType;\n var values = ref.values;\n\n return \"
\" +\n \"
\" +\n \"\" + (kendo.ui.icon(\"chevron-left\")) + \"\" +\n (encode(messages.filter)) + \" \" + (encode(messages.into)) + \" \" + (encode(title)) +\n \"\" + (kendo.ui.icon(\"check\")) + \"\" +\n '
' +\n \"
\" +\n '' +\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 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.text || item.value || item : item.text;\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\n function clearFilter(filters, field) {\n return $.grep(filters, function(expr) {\n if (expr.filters) {\n expr.filters = $.grep(expr.filters, function(nested) {\n return nested.field != field;\n });\n\n return expr.filters.length;\n }\n return expr.field != field;\n });\n }\n\n var FilterMenu = Widget.extend({\n init: function(element, options) {\n var that = this,\n type = \"string\",\n operators,\n initial,\n field,\n columnHeader;\n\n options = options || {};\n options.componentType = options.componentType || \"classic\";\n Widget.fn.init.call(that, element, options);\n\n operators = that.operators = options.operators || {};\n\n element = that.element;\n options = that.options;\n\n that.dataSource = DataSource.create(options.dataSource);\n\n that.field = options.field || element.attr(kendo.attr(\"field\"));\n\n columnHeader = $(element.closest(COLUMN_HEADER_SELECTOR));\n if (columnHeader.length) {\n that.appendTo = columnHeader.find(options.appendTo);\n } else {\n that.appendTo = $(options.appendTo);\n }\n\n that.link = that._createLink() || $();\n\n that.model = that.dataSource.reader.model;\n\n that._parse = function(value) {\n return value != null ? (value + \"\") : value;\n };\n\n if (that.model && that.model.fields) {\n field = that.model.fields[that.field];\n\n if (field) {\n type = field.type || \"string\";\n if (field.parse) {\n that._parse = field.parse.bind(field);\n }\n }\n }\n\n if (options.values) {\n type = \"enums\";\n }\n\n that.type = type;\n\n operators = operators[type] || options.operators[type];\n\n for (initial in operators) { // get the first operator\n break;\n }\n\n that._defaultFilter = function() {\n return { field: that.field, operator: initial || \"eq\", value: \"\" };\n };\n\n that._refreshHandler = that.refresh.bind(that);\n\n that.dataSource.bind(CHANGE, that._refreshHandler);\n\n if (options.appendToElement) { // force creation if used in column menu\n that._init();\n } else {\n that.refresh(); //refresh if DataSource is fitered before menu is created\n }\n },\n\n _init: function() {\n var that = this,\n ui = that.options.ui,\n setUI = isFunction(ui),\n attrRole = kendo.attr(\"role\"),\n role;\n\n that.pane = that.options.pane;\n if (that.pane) {\n that._isMobile = true;\n }\n\n if (!setUI) {\n role = ui || roles[that.type];\n }\n\n if (that._isMobile) {\n that._createMobileForm(role);\n } else {\n that._createForm(role);\n }\n\n that.form\n .on(\"submit\" + NS, that._submit.bind(that))\n .on(\"reset\" + NS, that._reset.bind(that));\n\n if (setUI) {\n that.form.find(\".k-input-inner\")\n .removeClass(\"k-input-inner\")\n .each(function() {\n ui($(this));\n });\n } else {\n that.form\n .find(\".k-input-inner[\" + attrRole + \"]\")\n .removeClass(\"k-input-inner\");\n\n that.form\n .find(\".k-input-inner:not([data-role]):not(.k-numerictextbox>.k-input-inner)\")\n .wrap(\"\");\n }\n\n that.refresh();\n\n that.trigger(INIT, { field: that.field, container: that.form });\n\n if (that.options.cycleForm) {\n kendo.cycleForm(that.form);\n }\n },\n\n _createForm: function(role) {\n var that = this,\n options = that.options,\n operators = that.operators || {},\n type = that.type;\n\n operators = operators[type] || options.operators[type];\n\n that.form = $('
')\n .html(kendo.template(that._getTemplate())({\n field: that.field,\n format: options.format,\n ns: kendo.ns,\n messages: options.messages,\n extra: options.extra,\n operators: operators,\n type: type,\n role: role,\n values: convertItems(options.values),\n componentType: that.options.componentType\n }));\n\n if (!options.appendToElement) {\n that.popup = that.form[POPUP]({\n anchor: that.link,\n copyAnchorStyles: false,\n open: that._open.bind(that),\n activate: that._activate.bind(that),\n close: function() {\n if (that.options.closeCallback) {\n that.options.closeCallback(that.element);\n }\n }\n }).data(POPUP);\n } else {\n that.element.append(that.form);\n that.popup = that.element.closest(\".k-column-menu.k-popup\").data(POPUP);\n }\n\n that.form\n .on(\"keydown\" + NS, that._keydown.bind(that));\n },\n\n _getTemplate: function() {\n var that = this,\n hasCustomTemplate = isFunction(that.options.ui);\n\n if (that.type === 'boolean') {\n if (hasCustomTemplate) {\n return customBooleanTemplate;\n } else if (that.options.componentType === 'modern') {\n return modernBooleanTemplate;\n } else {\n return booleanTemplate;\n }\n } else {\n return defaultTemplate;\n }\n },\n\n _createMobileForm: function(role) {\n var that = this,\n options = that.options,\n operators = that.operators || {},\n filterMenuGuid = kendo.guid(),\n type = that.type;\n\n operators = operators[type] || options.operators[type];\n\n that.form = $(\"
\")\n .html(kendo.template(type === \"boolean\" ? booleanMobileTemplate : defaultMobileTemplate)({\n field: that.field,\n title: options.title || that.field,\n format: options.format,\n ns: kendo.ns,\n messages: options.messages,\n extra: options.extra,\n operators: operators,\n filterMenuGuid: filterMenuGuid,\n type: type,\n role: role,\n inputType: mobileRoles[type],\n values: convertItems(options.values)\n }));\n\n that.view = that.pane.append(that.form.html());\n that.form = that.view.element.find(\"form\");\n\n that.view.element\n .on(\"click\", \".k-header-done\", function(e) {\n that.form.submit();\n e.preventDefault();\n })\n .on(\"click\", \".k-header-cancel\", function(e) {\n that._closeForm();\n e.preventDefault();\n })\n .on(\"click\", \".k-clear\", function(e) {\n that._mobileClear();\n e.preventDefault();\n });\n\n that.view.bind(\"showStart\", function() {\n that.refresh();\n });\n },\n\n _createLink: function() {\n var that = this,\n element = that.element,\n appendTarget = that.appendTo.length ? element.find(that.appendTo) : element,\n options = that.options,\n title = kendo.format(options.messages.buttonTitle, that.options.title || that.field),\n link;\n\n if (options.appendToElement) {\n return;\n }\n\n link = element.addClass(\"k-filterable\").find(\".k-grid-filter-menu\");\n\n if (!link[0]) {\n link = appendTarget\n .append('' + kendo.ui.icon(\"filter\") + '')\n .find(\".k-grid-filter-menu\");\n }\n\n link.attr(\"tabindex\", -1)\n .on(\"click\" + NS, that._click.bind(that));\n\n return link;\n },\n\n refresh: function() {\n var that = this,\n expression = that.dataSource.filter() || { filters: [], logic: \"and\" };\n\n var defaultFilters = [ that._defaultFilter() ];\n var defaultOperator = that._defaultFilter().operator;\n if (that.options.extra || (defaultOperator !== \"isnull\" && defaultOperator !== \"isnullorempty\" && defaultOperator !== \"isnotnullorempty\" && defaultOperator !== \"isnotnull\" && defaultOperator !== \"isempty\" && defaultOperator !== \"isnotempty\")) {\n defaultFilters.push(that._defaultFilter());\n }\n\n that.filterModel = kendo.observable({\n logic: \"and\",\n filters: defaultFilters\n });\n\n if (that.form) {\n //NOTE: binding the form element directly causes weird error in IE when grid is bound through MVVM and column is sorted\n kendo.bind(that.form.children().first(), that.filterModel);\n\n if (that.options.componentType === \"modern\" && that.options.extra && that.type !== \"boolean\" && !that._isMobile) {\n that.filterModel.bind(\"change\", function() {\n var roleAttribute = kendo.attr(\"role\");\n var buttongroup = that.form.find(\"[\" + roleAttribute + \"='buttongroup']\").data('kendoButtonGroup');\n var index = this.logic === \"and\" ? 0 : 1;\n\n buttongroup.select(buttongroup.element.children().eq(index));\n });\n that.filterModel.set(\"onLogicChange\",that._logicChangeHandler);\n }\n }\n\n if (that._bind(expression)) {\n that.link.addClass(\"k-active\");\n } else {\n that.link.removeClass(\"k-active\");\n }\n },\n\n _logicChangeHandler: function(e) {\n var valueAttribute = kendo.attr('value');\n var logic = e.sender.current().attr(valueAttribute);\n\n this.set('logic', logic);\n },\n\n destroy: function() {\n var that = this;\n\n Widget.fn.destroy.call(that);\n\n if (that.form) {\n kendo.unbind(that.form);\n kendo.destroy(that.form);\n that.form.off(NS);\n if (that.popup) {\n that.popup.destroy();\n that.popup = null;\n }\n that.form = null;\n }\n\n if (that.view) {\n that.view.purge();\n that.view = null;\n }\n\n that.link.off(NS);\n\n if (that._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that.dataSource = null;\n }\n\n that.element = that.link = that._refreshHandler = that.filterModel = null;\n },\n\n _bind: function(expression) {\n var that = this,\n filters = expression.filters,\n idx,\n length,\n found = false,\n current = 0,\n filterModel = that.filterModel,\n currentFilter,\n filter;\n\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n if (filter.field == that.field) {\n filterModel.set(\"logic\", expression.logic);\n\n currentFilter = filterModel.filters[current];\n if (!currentFilter) {\n filterModel.filters.push({ field: that.field });\n currentFilter = filterModel.filters[current];\n }\n currentFilter.set(\"value\", that._parse(filter.value));\n currentFilter.set(\"operator\", filter.operator);\n\n current++;\n found = true;\n } else if (filter.filters) {\n found = found || that._bind(filter);\n }\n }\n\n return found;\n },\n\n _stripFilters: function(filters) {\n return $.grep(filters, function(filter) {\n return (filter.value !== \"\" && filter.value != null) ||\n (filter.operator === \"isnull\" || filter.operator === \"isnotnull\" ||\n filter.operator === \"isempty\" || filter.operator === \"isnotempty\" ||\n filter.operator == \"isnullorempty\" || filter.operator == \"isnotnullorempty\");\n });\n },\n\n _merge: function(expression) {\n var that = this,\n logic = expression.logic || \"and\",\n filters = this._stripFilters(expression.filters),\n filter,\n result = that.dataSource.filter() || { filters: [], logic: \"and\" },\n idx,\n length;\n\n removeFiltersForField(result, that.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 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 filter: function(expression) {\n var filters = this._stripFilters(expression.filters);\n if (filters.length && this.trigger(\"change\", {\n filter: { logic: expression.logic, filters: filters },\n field: this.field\n })) {\n\n return;\n }\n\n expression = this._merge(expression);\n\n if (expression.filters.length) {\n this.dataSource.filter(expression);\n }\n },\n\n clear: function(expression) {\n var that = this;\n expression = expression || $.extend(true, {}, { filters: [] }, that.dataSource.filter()) || { filters: [] };\n\n if (this.trigger(\"change\", { filter: null, field: that.field })) {\n return;\n }\n\n that._removeFilter(expression);\n },\n\n _mobileClear: function() {\n var that = this;\n var viewElement = that.view.element;\n\n if (that.type === \"boolean\") {\n var booleanRadioButton = viewElement.find(\"[type='radio']:checked\");\n var booleanRadioButtonValue = booleanRadioButton.val();\n\n booleanRadioButton.val(\"\");\n booleanRadioButton.trigger(\"change\");\n booleanRadioButton.val(booleanRadioButtonValue);\n booleanRadioButton.prop(\"checked\", false);\n } else {\n var operatorSelects = viewElement.find(\"select\");\n\n operatorSelects.each(function(i, e) {\n var input = $(e);\n\n input.val(input.find(\"option\").first().val());\n input.trigger(\"change\");\n });\n\n if (that.type === \"string\" || that.type === \"date\" || that.type === \"number\") {\n var valueInputs = viewElement.find(\".k-value-input\");\n\n valueInputs.each(function(i, e) {\n var input = $(e);\n\n input.val(\"\");\n input.trigger(\"change\");\n });\n }\n\n if (that.options.extra) {\n var andLogicRadio = viewElement.find(\"[name=logic]\").first();\n\n andLogicRadio.prop(\"checked\", true);\n andLogicRadio.trigger(\"change\");\n }\n }\n },\n\n _removeFilter: function(expression) {\n var that = this;\n expression.filters = $.grep(expression.filters, function(filter) {\n if (filter.filters) {\n filter.filters = clearFilter(filter.filters, that.field);\n\n return filter.filters.length;\n }\n\n return filter.field != that.field;\n });\n\n if (!expression.filters.length) {\n expression = null;\n }\n\n that.dataSource.filter(expression);\n },\n\n _submit: function(e) {\n e.preventDefault();\n e.stopPropagation();\n var expression = this.filterModel.toJSON();\n var containsFilters = $.grep(expression.filters, function(filter) {\n return filter.value !== \"\" && filter.value !== null;\n });\n\n if (this._checkForNullOrEmptyFilter(expression) || (containsFilters && containsFilters.length)) {\n this.filter(expression);\n } else {\n var currentExpression = this.dataSource.filter();\n\n if (currentExpression) {\n currentExpression.filters.push(expression);\n expression = currentExpression;\n }\n this.clear(expression);\n }\n\n this._closeForm();\n },\n\n _checkForNullOrEmptyFilter: function(expression) {\n if (!expression || !expression.filters || !expression.filters.length) {\n return false;\n }\n var firstNullOrEmpty = false;\n var secondNullOrEmpty = false;\n var operator;\n\n if (expression.filters[0]) {\n operator = expression.filters[0].operator;\n firstNullOrEmpty = operator == \"isnull\" || operator == \"isnotnull\" || operator == \"isnotempty\" ||\n operator == \"isempty\" || operator == \"isnullorempty\" || operator == \"isnotnullorempty\";\n }\n if (expression.filters[1]) {\n operator = expression.filters[1].operator;\n secondNullOrEmpty = operator == \"isnull\" || operator == \"isnotnull\" || operator == \"isnotempty\" ||\n operator == \"isempty\" || operator == \"isnullorempty\" || operator == \"isnotnullorempty\";\n }\n\n return (!this.options.extra && firstNullOrEmpty) || (this.options.extra && (firstNullOrEmpty || secondNullOrEmpty));\n },\n\n _reset: function() {\n this.clear();\n\n if (this.options.search && this.container) {\n this.container.find(\"label\").parent().show();\n }\n this._closeForm();\n },\n\n _closeForm: function() {\n if (this._isMobile) {\n this.pane.navigate(\"\", this.options.animations.right);\n } else {\n this.popup.close();\n }\n },\n\n _click: function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n if (!this.popup && !this.pane) {\n this._init();\n }\n\n if (this._isMobile) {\n this.pane.navigate(this.view, this.options.animations.left);\n } else {\n this.popup.toggle();\n }\n },\n\n _open: function() {\n var popup;\n\n $(\".k-filter-menu\").not(this.form).each(function() {\n popup = $(this).data(POPUP);\n if (popup) {\n popup.close();\n }\n });\n },\n\n _activate: function() {\n this.form.find(\":kendoFocusable\").first().trigger(\"focus\");\n\n this.trigger(OPEN, { field: this.field, container: this.form });\n },\n\n _keydown: function(e) {\n var target = $(e.target),\n instance;\n\n if (e.keyCode == kendo.keys.ESC) {\n instance = kendo.widgetInstance(target.find(\"select\"));\n\n if (target.hasClass(\"k-picker\") &&\n instance &&\n instance.popup.visible()) {\n e.stopPropagation();\n return;\n }\n\n target.closest(\".k-popup\").getKendoPopup().close();\n }\n },\n\n events: [ INIT, \"change\", OPEN ],\n\n options: {\n name: \"FilterMenu\",\n extra: true,\n appendToElement: false,\n type: \"string\",\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 messages: {\n info: \"Show items with value that:\",\n title: \"Show items with value that:\",\n isTrue: \"is true\",\n isFalse: \"is false\",\n filter: \"Filter\",\n clear: \"Clear\",\n and: \"And\",\n or: \"Or\",\n selectValue: \"-Select value-\",\n operator: \"Operator\",\n value: \"Value\",\n additionalValue: \"Additional value\",\n additionalOperator: \"Additional operator\",\n logic: \"Filters logic\",\n cancel: \"Cancel\",\n done: \"Done\",\n into: \"in\",\n buttonTitle: \"{0} filter column settings\"\n },\n animations: {\n left: \"slide\",\n right: \"slide:right\"\n },\n componentType: 'classic',\n cycleForm: true,\n appendTo: null\n }\n });\n\n var multiCheckNS = \".kendoFilterMultiCheck\";\n\n function filterValuesForField(expression, field) {\n\n if (expression.filters) {\n expression.filters = $.grep(expression.filters, function(filter) {\n filterValuesForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field == field && filter.operator == \"eq\";\n }\n });\n }\n }\n\n function flatFilterValues(expression) {\n if (expression.logic == \"and\" && expression.filters.length > 1) {\n return [];\n }\n if (expression.filters) {\n return $.map(expression.filters, function(filter) {\n return flatFilterValues(filter);\n });\n } else if (expression.value !== undefined$1) {\n return [expression.value];\n } else {\n return [];\n }\n }\n\n function distinct(items, field) {\n var getter = kendo.getter(field, true),\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 (text !== undefined$1 && !seen.hasOwnProperty(text)) {\n result.push(item);\n seen[text] = true;\n }\n }\n\n return result;\n }\n\n function removeDuplicates(dataSelector, dataTextField) {\n\n return function(e) {\n var items = dataSelector(e);\n\n return distinct(items, dataTextField);\n };\n }\n\n var DataSource = kendo.data.DataSource;\n\n var multiCheckMobileTemplate = function (ref) {\n var field = ref.field;\n var title = ref.title;\n var ns = ref.ns;\n var messages = ref.messages;\n var search = ref.search;\n var checkAll = ref.checkAll;\n\n return \"
\" +\n \"
\" +\n \"\" + (kendo.ui.icon(\"chevron-left\")) + \"\" +\n (messages.filter) + \" \" + (messages.into) + \" \" + title +\n \"\" + (kendo.ui.icon(\"check\")) + \"\" +\n '
' +\n '' +\n '
    ' +\n (search ?\n '
  • ' +\n '' +\n \"\" +\n \"\" + (kendo.ui.icon(\"search\")) +\n '' +\n '
  • '\n : '') +\n '
  • ' +\n \"\" + (messages.checkAll) + \"\" +\n \"\" + (messages.clearAll) + \"\" +\n '
  • ' +\n (messages.selectedItemsFormat ?\n '
  • ' +\n '
    ' +\n '
  • '\n : '') +\n '
  • ' +\n '
      ' +\n '
    • ' +\n '
    ' +\n '' +\n '
    ';\n };\n\n var FilterMultiCheck = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n options = this.options;\n this.element = $(element);\n var columnHeader;\n var field = this.field = this.options.field || this.element.attr(kendo.attr(\"field\"));\n var checkSource = options.checkSource;\n if (this._foreignKeyValues()) {\n this.checkSource = DataSource.create(options.values);\n this.checkSource.fetch();\n } else if (options.forceUnique) {\n checkSource = $.extend(true, {}, options.dataSource.options);\n delete checkSource.pageSize;\n\n this.checkSource = DataSource.create(checkSource);\n this.checkSource.reader.data = removeDuplicates(this.checkSource.reader.data, this.field);\n } else {\n this.checkSource = DataSource.create(checkSource);\n }\n\n this.dataSource = options.dataSource;\n this.model = this.dataSource.reader.model;\n\n this._parse = function(value) {\n return value + \"\";\n };\n\n if (this.model && this.model.fields) {\n field = this.model.fields[this.field];\n\n if (field) {\n if (field.type == \"number\") {\n this._parse = function(value) {\n if (typeof value === \"string\" && (value.toLowerCase() === \"null\" || this._foreignKeyValues() && value === \"\")) {\n return null;\n }\n return parseFloat(value);\n };\n } else if (field.parse) {\n this._parse = field.parse.bind(field);\n }\n this.type = field.type || \"string\";\n }\n }\n\n columnHeader = $(element.closest(COLUMN_HEADER_SELECTOR));\n if (columnHeader.length) {\n this.appendTo = columnHeader.find(options.appendTo);\n } else {\n this.appendTo = $(options.appendTo);\n }\n\n if (!options.appendToElement) {\n this._createLink();\n } else {\n this._init();\n }\n\n this._refreshHandler = this.refresh.bind(this);\n this.dataSource.bind(CHANGE, this._refreshHandler);\n\n },\n _createLink: function() {\n var element = this.element;\n var appendTarget = this.appendTo.length ? element.find(this.appendTo) : element;\n var link = element.addClass(\"k-filterable\").find(\".k-grid-filter-menu\");\n var title = encode(kendo.format(this.options.messages.buttonTitle, this.options.title || this.field));\n\n if (!link[0]) {\n link = appendTarget\n .append('' + kendo.ui.icon(\"filter\") + '')\n .find(\".k-grid-filter-menu\");\n }\n\n this._link = link.attr(\"tabindex\", -1)\n .on(\"click\" + NS, this._click.bind(this));\n },\n _init: function() {\n var that = this;\n var forceUnique = this.options.forceUnique;\n\n var options = this.options;\n this.pane = options.pane;\n\n if (this.pane) {\n this._isMobile = true;\n }\n\n this._createForm();\n\n if (this._foreignKeyValues()) {\n this.refresh();\n } else if (forceUnique && !this.checkSource.options.serverPaging && this.dataSource.data().length) {\n this.checkSource.data(distinct(this.dataSource.data(),this.field));\n this.refresh();\n } else {\n this._attachProgress();\n\n this.checkSource.fetch(function() {\n that.refresh.call(that);\n });\n }\n\n if (!this.options.forceUnique) {\n this.checkChangeHandler = function() {\n that.container.empty();\n that.refresh();\n };\n this.checkSource.bind(CHANGE, this.checkChangeHandler);\n }\n\n this.form.on(\"keydown\" + multiCheckNS, this._keydown.bind(this))\n .on(\"submit\" + multiCheckNS, this._filter.bind(this))\n .on(\"reset\" + multiCheckNS, this._reset.bind(this));\n\n this.trigger(INIT, { field: this.field, container: this.form });\n },\n\n _attachProgress: function() {\n var that = this;\n\n this._progressHandler = function() {\n ui.progress(that.container, true);\n };\n\n this._progressHideHandler = function() {\n ui.progress(that.container, false);\n };\n\n this.checkSource\n .bind(\"progress\", this._progressHandler)\n .bind(\"change\", this._progressHideHandler);\n },\n\n _input: function() {\n var that = this;\n that._clearTypingTimeout();\n that._typingTimeout = setTimeout(function() { that.search(); }, 100);\n },\n\n _clearSearch: function() {\n var that = this;\n that.searchTextBox.val(\"\");\n that.search();\n },\n\n _clearTypingTimeout: function() {\n if (this._typingTimeout) {\n clearTimeout(this._typingTimeout);\n this._typingTimeout = null;\n }\n },\n\n search: function() {\n var ignoreCase = this.options.ignoreCase;\n var searchString = this.searchTextBox[0].value;\n var labels = this.container.find(\"label\");\n\n if (ignoreCase) {\n searchString = searchString.toLowerCase();\n }\n var i = 0;\n if (this.options.checkAll && labels.length)\n {\n if (!this._isMobile) {\n labels[0].parentNode.style.display = searchString ? \"none\" : \"\";\n i++;\n } else {\n this.view.element.find(\".k-select-all\")[0].style.visibility = searchString ? \"hidden\" : \"\";\n }\n }\n\n while (i < labels.length) {\n var label = labels[i];\n var labelText = label.textContent || label.innerText;\n if (ignoreCase) {\n labelText = labelText.toLowerCase();\n }\n label.parentNode.style.display = labelText.indexOf(searchString) >= 0 ? \"\" : \"none\";\n i++;\n }\n },\n _activate: function() {\n this.form.find(\":kendoFocusable\").first().trigger(\"focus\");\n\n this.trigger(OPEN, { field: this.field, container: this.form });\n },\n _createForm: function() {\n var options = this.options;\n var html = \"\";\n var that = this;\n\n if (!this._isMobile) {\n html += \"
    \";\n if (options.search) {\n html += \"\" +\n kendo.ui.icon(\"search\") +\n \"\" +\n \"\" +\n \"\" + kendo.ui.icon(\"x\") + \"\" +\n \"\" +\n \"\";\n }\n html += \"
      \";\n if (options.messages.selectedItemsFormat) {\n html += \"
      \" + kendo.format(options.messages.selectedItemsFormat, 0) + \"
      \";\n }\n html += \"
      \";\n html += \"\";\n html += \"\";\n html += \"
      \";\n html += \"
      \";\n\n this.form = $('
      ').html(html);\n this.container = this.form.find(\".k-multicheck-wrap\");\n }\n if (this._isMobile) {\n var checkMobileHtml = $(kendo.template(multiCheckMobileTemplate)({\n field: that.field,\n title: options.title || that.field,\n ns: kendo.ns,\n messages: options.messages,\n search: options.search,\n checkAll: options.checkAll\n }));\n\n kendo.applyStylesFromKendoAttributes(checkMobileHtml, [\"visibility\"]);\n that.form = $(\"
      \").append(checkMobileHtml);\n\n that.view = that.pane.append(that.form.html());\n that.form = that.view.element.find(\"form\");\n var element = this.view.element;\n this.container = element.find(\".k-multicheck-wrap\");\n\n element\n .on(\"click\", \".k-header-done\", function(e) {\n that.form.submit();\n e.preventDefault();\n })\n .on(\"click\", \".k-header-cancel\", function(e) {\n that._closeForm();\n e.preventDefault();\n })\n .on(\"click\", \".k-clear-all\", function(e) {\n that._mobileCheckAll(false);\n e.preventDefault();\n })\n .on(\"click\", \".k-select-all\", function(e) {\n that._mobileCheckAll(true);\n e.preventDefault();\n });\n\n that.view.bind(\"showStart\", function() {\n that.refresh();\n });\n } else {\n if (!options.appendToElement) {\n that.popup = that.form.kendoPopup({\n anchor: that._link,\n copyAnchorStyles: false,\n open: that._open.bind(that),\n activate: that._activate.bind(that),\n close: function() {\n if (that.options.closeCallback) {\n that.options.closeCallback(that.element);\n }\n }\n }).data(POPUP);\n } else {\n this.popup = this.element.closest(\".k-column-menu.k-popup\").data(POPUP);\n this.element.append(this.form);\n }\n }\n\n if (options.search) {\n this.searchTextBox = this.form.find(\".k-searchbox input\");\n this.searchTextBox.on(\"input\" + multiCheckNS, this._input.bind(this));\n this.clearSearchButton = this.form.find(\".k-searchbox .k-clear-value\");\n this.clearSearchButton.on(\"click\" + multiCheckNS, this._clearSearch.bind(this));\n }\n },\n _open: function() {\n var popup;\n\n $(\".k-filter-menu\").not(this.form).each(function() {\n popup = $(this).data(POPUP);\n if (popup) {\n popup.close();\n }\n });\n },\n createCheckAllItem: function() {\n var options = this.options;\n var template = kendo.template(options.itemTemplate({ field: \"all\", mobile: this._isMobile }));\n var checkAllContainer = $(template({ all: options.messages.checkAll }));\n this.container.prepend(checkAllContainer);\n\n checkAllContainer.addClass(\"k-check-all-wrap\");\n this.checkBoxAll = checkAllContainer.find(\":checkbox\").eq(0).addClass(\"k-check-all\");\n this.checkAllHandler = this.checkAll.bind(this);\n this.checkBoxAll.on(CHANGE + multiCheckNS, this.checkAllHandler);\n },\n updateCheckAllState: function() {\n if (this.options.messages.selectedItemsFormat) {\n this.form.find(\".k-filter-selected-items\").text(kendo.format(this.options.messages.selectedItemsFormat, this.container.find(\":checked:not(.k-check-all)\").length));\n }\n if (this.checkBoxAll) {\n var state = this.container.find(\":checkbox:not(.k-check-all)\").length == this.container.find(\":checked:not(.k-check-all)\").length;\n this.checkBoxAll.prop(\"checked\", state);\n }\n },\n createIsNullItem: function() {\n var options = this.options;\n var template = kendo.template(options.itemTemplate({ field: \"isNull\", mobile: this._isMobile, valueField: \"value\" }));\n var isNullContainer = $(template({ isNull: options.messages.isNull, value: null }));\n this.container.append(isNullContainer);\n },\n refresh: function(e) {\n var forceUnique = this.options.forceUnique;\n var dataSource = this.dataSource;\n var filters = this.getFilterArray();\n\n if (this._link) {\n this._link.toggleClass(\"k-active\", filters.length !== 0);\n }\n\n if (this.form) {\n if (e && forceUnique && e.sender === dataSource && !dataSource.options.serverPaging &&\n (e.action == \"itemchange\" || e.action == \"add\" || e.action == \"remove\" || (dataSource.options.autoSync && e.action === \"sync\")) &&\n !this._foreignKeyValues()) {\n this.checkSource.data(distinct(this.dataSource.data(),this.field));\n this.container.empty();\n }\n\n if (this.container.is(\":empty\")) {\n this.createCheckBoxes();\n }\n this.checkValues(filters);\n this.trigger(REFRESH);\n }\n },\n getFilterArray: function() {\n var expression = $.extend(true, {}, { filters: [], logic: \"and\" }, this.dataSource.filter());\n filterValuesForField(expression, this.field);\n var flatValues = flatFilterValues(expression);\n return flatValues;\n },\n createCheckBoxes: function() {\n var options = this.options;\n var data;\n var templateOptions = {\n field: this.field,\n format: options.format,\n mobile: this._isMobile,\n type: this.type\n };\n var boolDataFilter = booleanFilterHandler.bind(this);\n\n if (!this.options.forceUnique) {\n data = this.checkSource.view();\n } else if (this._foreignKeyValues()) {\n data = this.checkSource.data();\n templateOptions.valueField = \"value\";\n templateOptions.field = \"text\";\n } else if (this.checkSource._isServerGrouped()) {\n data = distinct(this.checkSource._flatData(this.checkSource.data()), this.field);\n } else {\n data = this.checkSource.data();\n }\n\n if (this.type === \"boolean\") {\n this.createIsNullItem();\n data = data.filter(boolDataFilter);\n }\n\n var template = kendo.template(options.itemTemplate(templateOptions));\n var itemsHtml = kendo.render(template, data);\n\n this.container.on(CHANGE + multiCheckNS, \":checkbox\", this.updateCheckAllState.bind(this));\n this.container.prepend(itemsHtml);\n\n if (options.checkAll && !this._isMobile) {\n this.createCheckAllItem();\n }\n },\n checkAll: function() {\n var state = this.checkBoxAll.is(\":checked\");\n this.container.find(\":checkbox\").prop(\"checked\", state);\n },\n checkValues: function(values) {\n var that = this;\n\n $($.grep(this.container.find(\":checkbox\").prop(\"checked\", false), function(ele) {\n var found = false;\n if ($(ele).is(\".k-check-all\")) {\n return;\n }\n var checkBoxVal = that._parse($(ele).val());\n for (var i = 0; i < values.length; i++) {\n if (that.type == \"date\") {\n if (values[i] && checkBoxVal) {\n found = values[i].getTime() == checkBoxVal.getTime();\n } else if (values[i] === null && checkBoxVal === null) {\n found = true;\n } else {\n found = false;\n }\n } else {\n found = values[i] == checkBoxVal;\n }\n if (found) {\n return found;\n }\n }\n })).prop(\"checked\", true);\n this.updateCheckAllState();\n },\n\n _mobileCheckAll: function(state) {\n var that = this;\n var checkboxes = that.container.find(\":checkbox\");\n\n checkboxes.each(function(i, e) {\n var checkbox = $(e);\n\n checkbox.prop(\"checked\", state);\n checkbox.trigger(\"change\");\n });\n },\n\n _filter: function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n var expression = { logic: \"or\" };\n\n var that = this;\n expression.filters = $.map(this.form.find(\":checkbox:checked:not(.k-check-all)\"), function(item) {\n return { value: $(item).val(), operator: \"eq\", field: that.field };\n });\n\n if (this.trigger(\"change\", { filter: expression, field: that.field })) {\n return;\n }\n\n expression = this._merge(expression);\n if (expression.filters.length) {\n this.dataSource.filter(expression);\n } else {\n that._removeFilter(that.dataSource.filter() || { filters: [] });\n }\n\n this._closeForm();\n },\n\n _stripFilters: function(filters) {\n return $.grep(filters, function(filter) {\n return filter.value != null;\n });\n },\n\n _foreignKeyValues: function() {\n var options = this.options;\n return options.values && !options.checkSource;\n },\n\n destroy: function() {\n var that = this;\n\n Widget.fn.destroy.call(that);\n\n if (that.form) {\n kendo.unbind(that.form);\n kendo.destroy(that.form);\n that.form.off(multiCheckNS);\n if (that.popup) {\n that.popup.destroy();\n that.popup = null;\n }\n that.form = null;\n if (that.container) {\n that.container.off(multiCheckNS);\n that.container = null;\n }\n\n if (that.checkBoxAll) {\n that.checkBoxAll.off(multiCheckNS);\n }\n }\n\n if (that.view) {\n that.view.purge();\n that.view = null;\n }\n\n if (that._link) {\n that._link.off(NS);\n }\n\n if (that._refreshHandler) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that.dataSource = null;\n }\n\n if (that.checkChangeHandler) {\n that.checkSource.unbind(CHANGE, that.checkChangeHandler);\n }\n\n if (that._progressHandler) {\n that.checkSource.unbind(\"progress\", that._progressHandler);\n }\n\n if (that._progressHideHandler) {\n that.checkSource.unbind(\"change\", that._progressHideHandler);\n }\n\n this._clearTypingTimeout();\n\n if (this.searchTextBox) {\n this.searchTextBox.off(multiCheckNS);\n this.searchTextBox = null;\n }\n\n if (this.clearSearchButton) {\n this.clearSearchButton.off(multiCheckNS);\n this.clearSearchButton = null;\n }\n\n that.element = that.checkSource = that.container = that.checkBoxAll = that._link = that._refreshHandler = that.checkAllHandler = null;\n },\n options: {\n name: \"FilterMultiCheck\",\n itemTemplate: function (ref) {\n var field = ref.field;\n var mobile = ref.mobile;\n var valueField = ref.valueField;\n var format = ref.format;\n var type = ref.type;\n\n var valueFormat = \"\";\n\n if (valueField === undefined$1) {\n valueField = field;\n }\n\n if (type == \"date\") {\n valueFormat = \":yyyy-MM-ddTHH:mm:sszzz\";\n }\n\n if (mobile) {\n return function (data) { return \"
    • \" +\n \"\" +\n \"
    • \"; };\n }\n\n return function (data) { return \"
    • \" +\n \"\" +\n \"
    • \"; };\n },\n checkAll: true,\n search: false,\n ignoreCase: true,\n appendToElement: false,\n messages: {\n checkAll: \"Select All\",\n isNull: \"is empty\",\n clearAll: \"Clear All\",\n clear: \"Clear\",\n filter: \"Filter\",\n search: \"Search\",\n cancel: \"Cancel\",\n selectedItemsFormat: \"{0} items selected\",\n done: \"Done\",\n into: \"in\",\n buttonTitle: \"{0} filter column settings\"\n },\n forceUnique: true,\n animations: {\n left: \"slide\",\n right: \"slide:right\"\n },\n appendTo: null\n },\n events: [ INIT, REFRESH, \"change\", OPEN ]\n });\n\n function booleanFilterHandler(item) {\n return item[this.field] !== null;\n }\n\n $.extend(FilterMultiCheck.fn, {\n _click: FilterMenu.fn._click,\n _keydown: FilterMenu.fn._keydown,\n _reset: FilterMenu.fn._reset,\n _closeForm: FilterMenu.fn._closeForm,\n _removeFilter: FilterMenu.fn._removeFilter,\n clear: FilterMenu.fn.clear,\n\n _merge: FilterMenu.fn._merge\n });\n\n ui.plugin(FilterMenu);\n ui.plugin(FilterMultiCheck);\n })(window.kendo.jQuery);\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}