UNPKG

@progress/kendo-ui

Version:

This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.

910 lines (785 loc) 35.2 kB
import './kendo.core.js'; import './kendo.buttongroup.js'; import './kendo.icons.js'; import './kendo.toolbar.js'; import './kendo.binder.js'; import './kendo.dropdownlist.js'; import './kendo.datepicker.js'; import './kendo.numerictextbox.js'; import './kendo.licensing.js'; import '@progress/kendo-licensing'; import './kendo.togglebutton.js'; import './kendo.button.js'; import './kendo.badge.js'; import './kendo.html.icon.js'; import './kendo.html.base.js'; import '@progress/kendo-svg-icons'; import './kendo.html.button.js'; import './kendo.splitbutton.js'; import './kendo.button.menu.js'; import './kendo.popup.js'; import './kendo.dropdownbutton.js'; import './kendo.menu.js'; import './kendo.data.js'; import './kendo.data.odata.js'; import './kendo.data.xml.js'; import './kendo.list.js'; import './kendo.label.js'; import './kendo.floatinglabel.js'; import './kendo.actionsheet.js'; import './dropdowns-loader-00xUvouJ.js'; import './kendo.mobile.scroller.js'; import './kendo.fx.js'; import './kendo.draganddrop.js'; import './kendo.userevents.js'; import './kendo.virtuallist.js'; import './valueMapper-CXgI6HWc.js'; import './kendo.calendar.js'; import './kendo.selectable.js'; import './kendo.dateinput.js'; import '@progress/kendo-dateinputs-common'; import './prefix-suffix-containers-B9VRe3lS.js'; const __meta__ = { id: "filter", name: "Filter", category: "web", depends: ["core", "buttongroup", "icons", "toolbar"] }; var defaultValues = { "number": 0, "boolean": false, "string": "", "date": "" }; var mainContainer = (ariaLabel) => `<ul class='k-filter-container' role='tree' aria-label='${ariaLabel}'>` + "<li class='k-filter-group-main' role='treeitem'></li>" + "</ul>"; var mainLogicTemplate = ({ mainFilterLogicLabel, uid }) => "<div class='k-filter-toolbar'>" + `<div class='k-toolbar' aria-label='${mainFilterLogicLabel}' id='${uid}'></div>` + "</div>"; var logicItemTemplate = ({ filterLogicLabel }) => "<li class='k-filter-item' role='treeitem'>" + "<div class='k-filter-toolbar'>" + `<div role='toolbar' aria-label='${filterLogicLabel}' class='k-toolbar'></div>` + "</div>" + "</li>"; var expressionItemTemplate = ({ filterExpressionLabel, uid }) => "<li class='k-filter-item' role='treeitem'>" + "<div class='k-filter-toolbar'>" + `<div role='group' aria-label='${filterExpressionLabel}' class='k-toolbar' id='${uid}'></div>` + "</div>" + "</li>"; (function($) { var kendo = window.kendo, ui = kendo.ui, guid = kendo.guid, ns = kendo.ns, keys = kendo.keys, Widget = ui.Widget, ButtonGroup = ui.ButtonGroup, KENDO_FOCUSABLE = ":kendoFocusable", CHANGE = "change", TABINDEX = "tabindex", NS = ".kendoFilter", EQ = "Is equal to", NEQ = "Is not equal to"; var editors = { "number": function(container, { field }) { $(`<input tabindex='-1' id='${guid()}' type='text' aria-label='${field}' title='${field}' data-${ns}role='numerictextbox' data-${ns}bind='value: value'/>`).appendTo(container); }, "string": function(container, { field }) { $(`<span class='k-textbox k-input k-input-md k-rounded-md k-input-solid'><input tabindex='-1' id='${guid()}' type='text' aria-label='${field}' title='${field}' class='k-input-inner' data-${kendo.ns}bind='value: value'/></span>`).appendTo(container); }, "boolean": function(container, { field }) { $(`<input tabindex='-1' id='${guid()}' class='k-checkbox k-checkbox-md k-rounded-md' aria-label='${field}' data-${ns}role='checkbox' data-${ns}bind='checked: value' type='checkbox'>`).appendTo(container); }, "date": function(container, { field }) { $(`<input tabindex='-1' id='${guid()}' type='text' aria-label='${field}' title='${field}' data-${ns}role='datepicker' data-${ns}bind='value: value'/>`).appendTo(container); } }; var FilterButtonGroup = ButtonGroup.extend({ init: function(element, options) { var that = this; ButtonGroup.fn.init.call(that, element, options); }, options: { name: "FilterButtonGroup" }, value: function(value) { if (value === undefined) { return this._value; } this._value = value; ButtonGroup.fn._select.call(this, this.wrapper.find("[value='" + value + "']")); this.trigger(CHANGE); }, _select: function(button) { if (button !== -1) { this.value($(button).attr("value")); } } }); var Filter = Widget.extend({ init: function(element, options) { var that = this; var html; Widget.fn.init.call(that, element, options); that.element = $(element).addClass("k-filter"); that.dataSource = options.dataSource; that.operators = $.extend(that.options.operators, options.operators); that._getFieldsInfo(); that._modelChangeHandler = that._modelChange.bind(that); that._renderMain(); if (options.expression) { that._addExpressionTree(that.filterModel); } that._renderApplyButton(); if (that.options.expressionPreview) { if (!that._previewContainer) { that._previewContainer = $('<div class="k-filter-preview"></div>').insertAfter(that.element.children().eq(0)); } html = that._createPreview(that.filterModel.toJSON()); that._previewContainer.html(html); } that._attachEvents(); that.hasCustomOperators(); var toolbars = $(that.element).find('.k-filter-toolbar > .k-toolbar'); toolbars.attr(TABINDEX, -1); toolbars.find(KENDO_FOCUSABLE).attr(TABINDEX, -1); toolbars.eq(0).attr(TABINDEX, 0); }, events: [ CHANGE ], options: { name: "Filter", dataSource: null, expression: null, applyButton: false, fields: [], mainLogic: "and", messages: { and: "And", or: "Or", apply: "Apply", close: "Close", addExpression: "Add Expression", fields: "Fields", filterExpressionLabel: "filter expression", filterLogicLabel: "filter logic", filterAriaLabel: "filter component", mainFilterLogicLabel: "main filter logic", operators: "Operators", addGroup: "Add Group" }, operators: { string: { eq: EQ, neq: NEQ, startswith: "Starts with", contains: "Contains", doesnotcontain: "Does not contain", endswith: "Ends with", isnull: "Is null", isnotnull: "Is not null", isempty: "Is empty", isnotempty: "Is not empty", isnullorempty: "Has no value", isnotnullorempty: "Has value" }, number: { eq: EQ, neq: NEQ, gte: "Is greater than or equal to", gt: "Is greater than", lte: "Is less than or equal to", lt: "Is less than", isnull: "Is null", isnotnull: "Is not null" }, date: { eq: EQ, neq: NEQ, gte: "Is after or equal to", gt: "Is after", lte: "Is before or equal to", lt: "Is before", isnull: "Is null", isnotnull: "Is not null" }, "boolean": { eq: EQ, neq: NEQ } } }, applyFilter: function() { var filter = this.filterModel.toJSON(); if (this._hasCustomOperators) { this._mapOperators(filter); } if (this._hasFieldsFilter(filter.filters || [])) { this._removeEmptyGroups(filter.filters); this.dataSource.filter(filter); } else { this.dataSource.filter({}); } }, destroy: function() { this.element.off(NS); kendo.destroy(this.element.find(".k-filter-group-main")); this._previewContainer = null; this._applyButton = null; this._modelChangeHandler = null; Widget.fn.destroy.call(this); }, setOptions: function(options) { kendo.deepExtend(this.options, options); this.destroy(); this.element.empty(); this.init(this.element, this.options); }, getOptions: function() { var result = $.extend(true, {}, this.options); delete result.dataSource; result.expression = this.filterModel.toJSON(); return result; }, _addExpressionTree: function(model) { if (model.filters) { var parent = this.element.find("[id=" + model.uid + "]"); for (var i = 0; i < model.filters.length; i++) { if (model.filters[i].logic) { this._addGroup(parent, model.filters[i]); } else { this._addExpression(parent, model.filters[i]); } if (model.filters[i].filters) { this._addExpressionTree(model.filters[i]); } } } }, _click: function(e) { var that = this; e.preventDefault(); var button = $(e.currentTarget); var command = button.data("command"); if (command == "x") { that._removeExpression(button.closest(".k-toolbar")); } else if (command == "expression") { that._addExpression(button.closest(".k-toolbar")); } else if (command == "group") { that._addGroup(button.closest(".k-toolbar")); } else if (command == "apply") { that.applyFilter(); } }, _keydown: function(ev) { var that = this, target = $(ev.target), key = ev.keyCode; var currentToolbar = target.closest(".k-toolbar"); var isToolbar = target.is(".k-toolbar"); if (key === keys.UP && isToolbar) { ev.preventDefault(); that._focusToolbar(currentToolbar, "prev"); } else if (key == keys.DOWN && isToolbar) { ev.preventDefault(); that._focusToolbar(currentToolbar, "next"); } else if (key == keys.ESC) { ev.stopPropagation(); that._focusToolbar(currentToolbar); } else if (key == keys.ENTER && isToolbar) { let item = currentToolbar.find(".k-toolbar-item").eq(0); item.attr(TABINDEX, 0).trigger("focus"); } }, _attachEvents: function() { var that = this, clickProxy = that._click.bind(that), keydownProxy = that._keydown.bind(that); that.element .on("click" + NS, "button.k-button", clickProxy) .on("keydown" + NS, '.k-filter-toolbar > .k-toolbar, .k-filter-toolbar > .k-toolbar .k-toolbar-item', keydownProxy); }, _focusToolbar: function(toolbarEl, direction, index) { var that = this; var toolbarToFocus = toolbarEl; var toolbars = $(that.element).find('.k-filter-toolbar > .k-toolbar'); toolbars.attr(TABINDEX, -1); toolbars.find(KENDO_FOCUSABLE).attr(TABINDEX, -1); if (direction == "next") { let next = Math.min(toolbars.length - 1, index || (toolbars.index(toolbarEl) + 1)); toolbarToFocus = toolbars.eq(next); } else if (direction == "prev") { let prev = Math.max(0, index || (toolbars.index(toolbarEl) - 1)); toolbarToFocus = toolbars.eq(prev); } toolbarToFocus.attr(TABINDEX, 0).trigger("focus"); }, _addExpression: function(parentContainer, model) { var that = this; var parentUID = parentContainer.attr("id"); var itemsContainer = parentContainer.closest(".k-filter-toolbar").next("ul.k-filter-lines"); var field = model ? that._fields[model.field] : that._defaultField; var expressionModel; var itemHTML = ""; if (model) { expressionModel = model; } else { expressionModel = findModel(that.filterModel, parentUID); if (!expressionModel.filters) { expressionModel.set("filters", []); } expressionModel = that._addNewModel(expressionModel.filters, field); } if (!itemsContainer.length) { itemsContainer = $("<ul class='k-filter-lines' role='group'></ul>").appendTo(parentContainer.closest("li")); } var templateOptions = { fields: that._fields, operators: that.operators[field.type], close: that.options.messages.close, fieldsLabel: that.options.messages.fields, uid: expressionModel.uid, ns: kendo.ns, filterExpressionLabel: that.options.messages.filterExpressionLabel }; itemHTML = $(kendo.template(expressionItemTemplate)(templateOptions)).appendTo(itemsContainer); var toolbarEl = itemHTML.find(".k-toolbar").first(); var templateOperators = field.operators && field.operators[field.type] ? field.operators[field.type] : this.operators[field.type]; toolbarEl.kendoToolBar({ resizable: false, items: [ { type: "component", component: "DropDownList", element: `<select data-${ns}bind="value: field" title='${that.options.messages.fields}' aria-label='${that.options.messages.fields}' data-auto-width='true'></select>`, attributes: { 'class': "k-filter-field" }, componentOptions: { title: that.options.messages.fields, dataTextField: "text", dataValueField: "value", dataSource: Object.keys(that._fields || {}).map(current => ({ value: that._fields[current].name, text: that._fields[current].label })) } },{ type: "component", component: "DropDownList", element: `<select data-${ns}bind="value: operator" aria-label='${that.options.messages.operators}' title='${that.options.messages.operators}'></select>`, attributes: { 'class': "k-filter-operator" }, componentOptions: { title: that.options.messages.operators, dataTextField: "text", dataValueField: "value", dataSource: Object.keys(templateOperators || {}).map(op => ({ value: op, text: (templateOperators[op].text || templateOperators[op]) })) } }, { attributes: { class: "k-filter-value" }, template: " " }, { type: "button", icon: 'x', fillMode: "flat", attributes: { "data-command": "x", title: templateOptions.close, 'aria-label': templateOptions.close } } ] }); that._addExpressionControls(itemHTML.find(".k-toolbar"), field, expressionModel); if (!model) { that._expressionChange(); } }, _addExpressionControls: function(container, field, filterModel) { var operatorsContainer = container.find(".k-toolbar-item.k-filter-operator"); var editorContainer = container.find(".k-toolbar-item.k-filter-value"); editorContainer.attr("ref-toolbar-tool", ""); kendo.destroy(editorContainer); editorContainer.empty(); this._bindOperators(operatorsContainer, field); this._appendEditor(editorContainer, field); this._bindModel(container, filterModel); this._showHideEditor(container, filterModel); container.find(KENDO_FOCUSABLE).attr(TABINDEX, -1); }, _bindOperators: function(container, field) { var templateOperators = field.operators && field.operators[field.type] ? field.operators[field.type] : this.operators[field.type]; var dropDownList = container.find('select[data-role=dropdownlist]').getKendoDropDownList(); if (dropDownList) { dropDownList.setDataSource(Object.keys(templateOperators || {}).map(op => ({ value: op, text: (templateOperators[op].text || templateOperators[op]) }))); } }, _appendEditor: function(container, field) { if (kendo.isFunction(field.editor)) { field.editor(container, $.extend(true, {}, { field: field.name })); } else { $(kendo.template(field.editor)({ ns: kendo.ns, field: field.name, id: kendo.guid() })).appendTo(container); } }, _addNewModel: function(parent, field) { var filterModel; var type = field.type; var operators = field.operators; var operator; if (!operators) { operators = this.options.operators; } operator = Object.keys(operators[type])[0]; parent.push({ field: field.name }); filterModel = parent[parent.length - 1]; filterModel.set("value", field.defaultValue); filterModel.set("operator", operator); return filterModel; }, _addGroup: function(parent, model) { let that = this, filterModel = that.filterModel, parentUID = parent.attr("id"), itemsContainer = parent.closest(".k-filter-toolbar").next("ul.k-filter-lines"), logicHTML; if (model) { filterModel = model; } else { filterModel = findModel(filterModel, parentUID); if (!filterModel.filters) { filterModel.set("filters", []); } filterModel.filters.push({ logic: that.options.mainLogic }); filterModel = filterModel.filters[filterModel.filters.length - 1]; } if (!itemsContainer.length) { itemsContainer = $("<ul class='k-filter-lines' role='group'></ul>").appendTo(parent.closest("li")); } let templateOptions = { operators: { and: that.options.messages.and, or: that.options.messages.or }, addExpression: that.options.messages.addExpression, addGroup: that.options.messages.addGroup, close: that.options.messages.close, ns: kendo.ns, filterLogicLabel: that.options.messages.filterLogicLabel, filterModel: filterModel }; logicHTML = $(kendo.template(logicItemTemplate)(templateOptions)).appendTo(itemsContainer); let toolbarEl = logicHTML.find(".k-toolbar"); that._initGroupToolBar(toolbarEl, templateOptions); that._bindModel(toolbarEl, filterModel); if (!model) { that._expressionChange(); } }, _bindModel: function(container, model) { container.attr("id", model.uid); model.bind("change", this._modelChangeHandler); kendo.bind(container, model); container.parent().attr(kendo.attr("stop"), true); }, _createPreview: function(filter) { var html = ""; var createdField = false; var haveFields = this._hasFieldsFilter(filter.filters || []); var childhtml = ""; var current; var field; if (!filter.filters || !filter.filters.length || !haveFields) { return ""; } html += '<span class="k-filter-preview-bracket">(</span>'; for (var i = 0; i < filter.filters.length; i++) { current = filter.filters[i]; if (current.filters) { childhtml = this._createPreview(current); if (childhtml) { if (createdField) { html += '<span class="k-filter-preview-operator"> ' + filter.logic.toLocaleUpperCase() + ' </span>'; } createdField = true; } html += childhtml; } if (current.field) { field = this._fields[current.field]; if (createdField) { html += '<span class="k-filter-preview-operator"> ' + filter.logic.toLocaleUpperCase() + ' </span>'; } createdField = true; html += '<span class="k-filter-preview-field">' + field.label + '</span>'; html += '<span class="k-filter-preview-criteria"> ' + this._getOperatorText(current.field, current.operator); if (current.operator.indexOf("is") < 0) { html += ' </span>'; html += "<span class='k-filter-preview-value'>'" + kendo.htmlEncode(field.previewFormat ? kendo.toString(current.value, field.previewFormat) : current.value) + "'</span>"; } else { html += '</span>'; } } } html += '<span class="k-filter-preview-bracket">)</span>'; return html; }, _expressionChange: function() { var that = this; var filter = that.filterModel.toJSON(); var html = ""; if (that.options.expressionPreview) { html = that._createPreview(filter); that._previewContainer.html(html); } that.trigger(CHANGE, { expression: filter }); }, _getOperatorText: function(field, operator) { var type = this._fields[field].type; var operators = this._fields[field].operators; if (!operators) { operators = this.options.operators; } return operators[type][operator].text || operators[type][operator]; }, _addField: function(fieldInfo, field) { var that = this; fieldInfo = $.extend(true, {}, { name: fieldInfo.name || field, editor: fieldInfo.editorTemplate || editors[fieldInfo.type || "string"], defaultValue: (fieldInfo.defaultValue || fieldInfo.defaultValue === false || fieldInfo.defaultValue === 0) ? fieldInfo.defaultValue : defaultValues[fieldInfo.type || "string"], type: fieldInfo.type || "string", label: fieldInfo.label || fieldInfo.name || field, operators: fieldInfo.operators, previewFormat: fieldInfo.previewFormat }); that._fields[fieldInfo.name] = fieldInfo; if (!that._defaultField) { that._defaultField = fieldInfo; } }, _getFieldsInfo: function() { var that = this; var fieldsCollection = that.options.fields.length ? that.options.fields : (that.options.dataSource.options.schema.model || {}).fields; var fieldInfo; that._fields = {}; if (Array.isArray(fieldsCollection)) { for (var i = 0; i < fieldsCollection.length; i++) { fieldInfo = fieldsCollection[i]; that._addField(fieldInfo); } } else { for (var field in fieldsCollection) { fieldInfo = fieldsCollection[field]; that._addField(fieldInfo, field); } } }, _hasFieldsFilter: function(filters, haveField) { haveField = !!haveField; for (var i = 0; i < filters.length; i++) { if (filters[i].filters) { haveField = this._hasFieldsFilter(filters[i].filters, haveField); } if (filters[i].field) { return true; } } return haveField; }, _removeEmptyGroups: function(filters) { if (!filters) { return; } for (var i = filters.length - 1; i >= 0; i--) { if ((filters[i].logic && !filters[i].filters) || (filters[i].filters && !this._hasFieldsFilter(filters[i].filters))) { filters.splice(i, 1); continue; } if (filters[i].filters) { this._removeEmptyGroups(filters[i].filters); } } }, _modelChange: function(e) { var that = this; var container = that.element.find("[id=" + e.sender.uid + "]"); that._showHideEditor(container, e.sender); if (e.field !== "field") { if (e.field !== "filters") { that._expressionChange(); } return; } var newField = e.sender.field; var parent = e.sender.parent(); var field = that._fields[newField]; var filterModel = that._addNewModel(parent, field); e.sender.unbind("change", that._modelChangeHandler); parent.remove(e.sender); that._addExpressionControls(container, field, filterModel); that._expressionChange(); }, _renderMain: function() { let that = this; $(mainContainer(that.options.messages.filterAriaLabel)).appendTo(that.element); if (that.options.expression) { that.filterModel = kendo.observable(that.options.expression); } else { that.filterModel = kendo.observable({ logic: that.options.mainLogic }); } let templateOptions = { operators: { and: that.options.messages.and, or: that.options.messages.or }, addExpression: that.options.messages.addExpression, addGroup: that.options.messages.addGroup, close: that.options.messages.close, uid: that.filterModel.uid, ns: kendo.ns, mainFilterLogicLabel: that.options.messages.mainFilterLogicLabel, filterModel: that.filterModel }; let logicEl = $(kendo.template(mainLogicTemplate)(templateOptions)); logicEl.appendTo(that.element.find("li").first()); let toolbarEl = logicEl.find(".k-toolbar").first(); that._initGroupToolBar(toolbarEl, templateOptions); that._bindModel(toolbarEl, that.filterModel); }, _initGroupToolBar: function(element, templateOptions) { let that = this; element.kendoToolBar({ resizable: false, toggle: function(e) { let modelUid = $(e.target).closest(".k-toolbar").attr("id"), model = findModel(that.filterModel, modelUid); if (model) { model.set("logic", $(e.target).data("logic")); } }, items: [ { type: "buttonGroup", selection: "single", buttons: [ { text: that.options.messages.and, group: "mainlogic", togglable: true, selected: templateOptions.filterModel.get("logic") === "and", attributes: { "data-logic": "and" } }, { text: that.options.messages.or, group: "mainlogic", togglable: true, selected: templateOptions.filterModel.get("logic") === "or", attributes: { "data-logic": "or" } } ] }, { type: "button", icon: 'filter-add-expression', attributes: { "data-command": "expression", title: templateOptions.addExpression, 'aria-label': templateOptions.addExpression } }, { type: "button", icon: 'filter-add-group', attributes: { "data-command": "group", title: templateOptions.addGroup, 'aria-label': templateOptions.addGroup } }, { type: "button", icon: 'x', fillMode: "flat", attributes: { "data-command": "x", title: templateOptions.close, 'aria-label': templateOptions.close } } ] }); }, _removeExpression: function(parent) { var that = this; var parentUID = parent.attr("id"); var itemContainer = parent.closest("li"); var isMain = itemContainer.hasClass("k-filter-group-main"); var parentModel; var model; var index = -1; if (isMain) { itemContainer = itemContainer.find(".k-filter-lines"); if (that.filterModel.filters) { that.filterModel.filters.empty(); delete that.filterModel.filters; } } else { let toolbars = $(that.element).find('.k-filter-toolbar > .k-toolbar'); index = toolbars.index(parent); model = findModel(that.filterModel, parentUID); parentModel = model.parent(); model.unbind("change", that._modelChangeHandler); parentModel.remove(model); if (!parentModel.length) { delete parentModel.parent().filters; } if (!itemContainer.siblings().length) { itemContainer = itemContainer.parent(); } } kendo.destroy(itemContainer); itemContainer.remove(); that._expressionChange(); if (index > -1) { that._focusToolbar(parent, "next", index); } }, _renderApplyButton: function() { var that = this; if (!that.options.applyButton) { return; } if (!that._applyButton) { that._applyButton = $(kendo.format('<button type="button" data-command="apply" aria-label="{0}" title="{0}" class="k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-filter-apply"><span class="k-button-text">{0}</span></button>', that.options.messages.apply)).appendTo(that.element); } }, _showHideEditor: function(container, model) { if (model.logic) { return; } var operator = model.operator; var editorContainer = container.find(".k-toolbar-item.k-filter-value"); if (operator == "isnull" || operator == "isnotnull" || operator == "isempty" || operator == "isnotempty" || operator == "isnullorempty" || operator == "isnotnullorempty") { editorContainer.hide(); } else { editorContainer.show(); } }, _mapOperators: function(expression) { var that = this; if (expression.filters) { expression.filters.forEach(function(filter) { if (filter.filters) { that._mapOperators(filter); } else { var operator; var field = that._fields[filter.field]; var type = field.type; if (field.operators && field.operators[type][filter.operator]) { operator = field.operators[type][filter.operator]; } else { operator = that.operators[type][filter.operator]; } if (operator) { filter.operator = operator.handler || filter.operator; } } }); } }, hasCustomOperators: function() { var operators = $.extend(true, {}, this.operators); for (var field in this._fields) { operators = $.extend(true, {}, operators, this._fields[field].operators); } this._hasCustomOperators = findCustomOperators(operators); } }); function findCustomOperators(operators) { for (var field in operators) { var operator = operators[field]; if ((operator.handler && typeof operator.handler === "function") || (typeof operator === 'object' && operator !== null && findCustomOperators(operator))) { return true; } } return false; } function findModel(model, uid) { if (model.uid === uid) { return model; } if (model.filters) { for (var i = 0; i < model.filters.length; i++) { var temp = findModel(model.filters[i], uid); if (temp) { return temp; } } } } ui.plugin(Filter); ui.plugin(FilterButtonGroup); })(window.kendo.jQuery); var kendo$1 = kendo; export { __meta__, kendo$1 as default };