@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
3 lines • 16.6 kB
JavaScript
/* @license */
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`kendo.core.min.js`),require(`kendo.buttongroup.min.js`),require(`kendo.icons.min.js`),require(`kendo.toolbar.min.js`),require(`kendo.binder.min.js`),require(`kendo.dropdownlist.min.js`),require(`kendo.datepicker.min.js`),require(`kendo.numerictextbox.min.js`)):typeof define==`function`&&define.amd?define([`exports`,`kendo.core.min`,`kendo.buttongroup.min`,`kendo.icons.min`,`kendo.toolbar.min`,`kendo.binder.min`,`kendo.dropdownlist.min`,`kendo.datepicker.min`,`kendo.numerictextbox.min`],t):(e=typeof globalThis<`u`?globalThis:e||self,t((e.kendo=e.kendo||{},e.kendo._globals=e.kendo._globals||{},e.kendo._globals.Filter={}),e.kendo._globals.Core,e.kendo._globals.Buttongroup,e.kendo._globals.Icons,e.kendo._globals.Toolbar,e.kendo._globals.Binder,e.kendo._globals.Dropdownlist,e.kendo._globals.Datepicker,e.kendo._globals.Numerictextbox))})(this,function(e,t,n,r,i,a,o,s,c){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let l={id:`filter`,name:`Filter`,category:`web`,depends:[`core`,`buttongroup`,`icons`,`toolbar`]};var u={number:0,boolean:!1,string:``,date:null},d=e=>`<ul class='k-filter-container' role='tree' aria-label='${e}'><li class='k-filter-group-main' role='treeitem'></li></ul>`,f=({mainFilterLogicLabel:e,uid:t})=>`<div class='k-filter-toolbar'><div class='k-toolbar' aria-label='${e}' id='${t}'></div></div>`,p=({filterLogicLabel:e})=>`<li class='k-filter-item' role='treeitem'><div class='k-filter-toolbar'><div role='toolbar' aria-label='${e}' class='k-toolbar'></div></div></li>`,m=({filterExpressionLabel:e,uid:t})=>`<li class='k-filter-item' role='treeitem'><div class='k-filter-toolbar'><div role='group' aria-label='${e}' class='k-toolbar' id='${t}'></div></div></li>`;(function(e){var t=window.kendo,n=t.ui,r=t.guid,i=t.ns,a=t.keys,o=n.Widget,s=n.ButtonGroup,c=`:kendoFocusable`,l=`change`,h=`tabindex`,g=`.kendoFilter`,_=`Is equal to`,v=`Is not equal to`,y={number:function(t,{field:n}){e(`<input tabindex='-1' id='${r()}' type='text' aria-label='${n}' title='${n}' data-${i}role='numerictextbox' data-${i}bind='value: value'/>`).appendTo(t)},string:function(n,{field:i}){e(`<span class='k-textbox k-input'><input tabindex='-1' id='${r()}' type='text' aria-label='${i}' title='${i}' class='k-input-inner' data-${t.ns}bind='value: value'/></span>`).appendTo(n)},boolean:function(t,{field:n}){e(`<input tabindex='-1' id='${r()}' class='k-checkbox' aria-label='${n}' data-${i}role='checkbox' data-${i}bind='checked: value' type='checkbox'>`).appendTo(t)},date:function(t,{field:n}){e(`<input tabindex='-1' id='${r()}' type='text' aria-label='${n}' title='${n}' data-${i}role='datepicker' data-${i}bind='value: value'/>`).appendTo(t)}},b=s.extend({init:function(e,t){var n=this;s.fn.init.call(n,e,t)},options:{name:`FilterButtonGroup`},value:function(e){if(e===void 0)return this._value;this._value=e,s.fn._select.call(this,this.wrapper.find(`[value='`+e+`']`)),this.trigger(l)},_select:function(t){t!==-1&&this.value(e(t).attr(`value`))}}),x=o.extend({init:function(t,n){var r=this,i;o.fn.init.call(r,t,n),r.element=e(t).addClass(`k-filter`),r.dataSource=n.dataSource,r.operators=e.extend(r.options.operators,n.operators),r._getFieldsInfo(),r._modelChangeHandler=r._modelChange.bind(r),r._renderMain(),n.expression&&r._addExpressionTree(r.filterModel),r._renderApplyButton(),r.options.expressionPreview&&(r._previewContainer||=e(`<div class="k-filter-preview"></div>`).insertAfter(r.element.children().eq(0)),i=r._createPreview(r.filterModel.toJSON()),r._previewContainer.html(i)),r._attachEvents(),r.hasCustomOperators();var a=e(r.element).find(`.k-filter-toolbar > .k-toolbar`);a.attr(h,-1),a.find(c).attr(h,-1),a.eq(0).attr(h,0)},events:[l],options:{name:`Filter`,dataSource:null,expression:null,applyButton:!1,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:_,neq:v,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:_,neq:v,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:_,neq:v,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:_,neq:v}}},applyFilter:function(){var e=this.filterModel.toJSON();this._hasCustomOperators&&this._mapOperators(e),this.dataSource&&(this._hasFieldsFilter(e.filters||[])?(this._removeEmptyGroups(e.filters),this.dataSource.filter(e)):this.dataSource.filter({}))},destroy:function(){this.element.off(g),t.destroy(this.element.find(`.k-filter-group-main`)),this._previewContainer=null,this._applyButton=null,this._modelChangeHandler=null,o.fn.destroy.call(this)},setOptions:function(e){t.deepExtend(this.options,e),this.destroy(),this.element.empty(),this.init(this.element,this.options)},getOptions:function(){var t=e.extend(!0,{},this.options);return delete t.dataSource,t.expression=this.filterModel.toJSON(),t},_addExpressionTree:function(e){if(e.filters)for(var t=this.element.find(`[id=`+e.uid+`]`),n=0;n<e.filters.length;n++)e.filters[n].logic?this._addGroup(t,e.filters[n]):this._addExpression(t,e.filters[n]),e.filters[n].filters&&this._addExpressionTree(e.filters[n])},_click:function(t){var n=this;t.preventDefault();var r=e(t.currentTarget),i=r.data(`command`);i==`x`?n._removeExpression(r.closest(`.k-toolbar`)):i==`expression`?n._addExpression(r.closest(`.k-toolbar`)):i==`group`?n._addGroup(r.closest(`.k-toolbar`)):i==`apply`&&n.applyFilter()},_keydown:function(t){var n=this,r=e(t.target),i=t.keyCode,o=r.closest(`.k-toolbar`),s=r.is(`.k-toolbar`);i===a.UP&&s?(t.preventDefault(),n._focusToolbar(o,`prev`)):i==a.DOWN&&s?(t.preventDefault(),n._focusToolbar(o,`next`)):i==a.ESC?(t.stopPropagation(),n._focusToolbar(o)):i==a.ENTER&&s&&o.find(`.k-toolbar-item`).eq(0).attr(h,0).trigger(`focus`)},_attachEvents:function(){var e=this,t=e._click.bind(e),n=e._keydown.bind(e);e.element.on(`click`+g,`button.k-button`,t).on(`keydown`+g,`.k-filter-toolbar > .k-toolbar, .k-filter-toolbar > .k-toolbar .k-toolbar-item`,n)},_focusToolbar:function(t,n,r){var i=this,a=t,o=e(i.element).find(`.k-filter-toolbar > .k-toolbar`);if(o.attr(h,-1),o.find(c).attr(h,-1),n==`next`){let e=Math.min(o.length-1,r||o.index(t)+1);a=o.eq(e)}else if(n==`prev`){let e=Math.max(0,r||o.index(t)-1);a=o.eq(e)}a.attr(h,0).trigger(`focus`)},_addExpression:function(n,r){var a=this,o=n.attr(`id`),s=n.closest(`.k-filter-toolbar`).next(`ul.k-filter-lines`),c=r?a._fields[r.field]:a._defaultField,l,u=``;r?l=r:(l=C(a.filterModel,o),l.filters||l.set(`filters`,[]),l=a._addNewModel(l.filters,c)),s.length||(s=e(`<ul class='k-filter-lines' role='group'></ul>`).appendTo(n.closest(`li`)));var d={fields:a._fields,operators:a.operators[c.type],close:a.options.messages.close,fieldsLabel:a.options.messages.fields,uid:l.uid,ns:t.ns,filterExpressionLabel:a.options.messages.filterExpressionLabel};u=e(t.template(m)(d)).appendTo(s);var f=u.find(`.k-toolbar`).first(),p=c.operators&&c.operators[c.type]?c.operators[c.type]:this.operators[c.type];f.kendoToolBar({resizable:!1,items:[{type:`component`,component:`DropDownList`,element:`<select data-${i}bind="value: field" title='${a.options.messages.fields}' aria-label='${a.options.messages.fields}' data-auto-width='true'></select>`,attributes:{class:`k-filter-field`},componentOptions:{title:a.options.messages.fields,dataTextField:`text`,dataValueField:`value`,dataSource:Object.keys(a._fields||{}).map(e=>({value:a._fields[e].name,text:a._fields[e].label}))}},{type:`component`,component:`DropDownList`,element:`<select data-${i}bind="value: operator" aria-label='${a.options.messages.operators}' title='${a.options.messages.operators}'></select>`,attributes:{class:`k-filter-operator`},componentOptions:{title:a.options.messages.operators,dataTextField:`text`,dataValueField:`value`,dataSource:Object.keys(p||{}).map(e=>({value:e,text:p[e].text||p[e]}))}},{attributes:{class:`k-filter-value`},template:` `},{type:`button`,icon:`x`,fillMode:`flat`,attributes:{"data-command":`x`,title:d.close,"aria-label":d.close}}]}),a._addExpressionControls(u.find(`.k-toolbar`),c,l),r||a._expressionChange()},_addExpressionControls:function(e,n,r){var i=e.find(`.k-toolbar-item.k-filter-operator`),a=e.find(`.k-toolbar-item.k-filter-value`);a.attr(`ref-toolbar-tool`,``),t.destroy(a),a.empty(),this._bindOperators(i,n),this._appendEditor(a,n),this._bindModel(e,r),this._showHideEditor(e,r),e.find(c).attr(h,-1)},_bindOperators:function(e,t){var n=t.operators&&t.operators[t.type]?t.operators[t.type]:this.operators[t.type],r=e.find(`select[data-role=dropdownlist]`).getKendoDropDownList();r&&r.setDataSource(Object.keys(n||{}).map(e=>({value:e,text:n[e].text||n[e]})))},_appendEditor:function(n,r){t.isFunction(r.editor)?r.editor(n,e.extend(!0,{},{field:r.name})):e(t.template(r.editor)({ns:t.ns,field:r.name,id:t.guid()})).appendTo(n)},_addNewModel:function(e,t){var n,r=t.type,i=t.operators,a;return i||=this.options.operators,a=Object.keys(i[r])[0],e.push({field:t.name}),n=e[e.length-1],n.set(`value`,t.defaultValue),n.set(`operator`,a),n},_addGroup:function(n,r){let i=this,a=i.filterModel,o=n.attr(`id`),s=n.closest(`.k-filter-toolbar`).next(`ul.k-filter-lines`),c;r?a=r:(a=C(a,o),a.filters||a.set(`filters`,[]),a.filters.push({logic:i.options.mainLogic}),a=a.filters[a.filters.length-1]),s.length||(s=e(`<ul class='k-filter-lines' role='group'></ul>`).appendTo(n.closest(`li`)));let l={operators:{and:i.options.messages.and,or:i.options.messages.or},addExpression:i.options.messages.addExpression,addGroup:i.options.messages.addGroup,close:i.options.messages.close,ns:t.ns,filterLogicLabel:i.options.messages.filterLogicLabel,filterModel:a};c=e(t.template(p)(l)).appendTo(s);let u=c.find(`.k-toolbar`);i._initGroupToolBar(u,l),i._bindModel(u,a),r||i._expressionChange()},_bindModel:function(e,n){e.attr(`id`,n.uid),n.bind(`change`,this._modelChangeHandler),t.bind(e,n),e.parent().attr(t.attr(`stop`),!0)},_createPreview:function(e){var n=``,r=!1,i=this._hasFieldsFilter(e.filters||[]),a=``,o,s;if(!e.filters||!e.filters.length||!i)return``;n+=`<span class="k-filter-preview-bracket">(</span>`;for(var c=0;c<e.filters.length;c++)o=e.filters[c],o.filters&&(a=this._createPreview(o),a&&(r&&(n+=`<span class="k-filter-preview-operator"> `+e.logic.toLocaleUpperCase()+` </span>`),r=!0),n+=a),o.field&&(s=this._fields[o.field],r&&(n+=`<span class="k-filter-preview-operator"> `+e.logic.toLocaleUpperCase()+` </span>`),r=!0,n+=`<span class="k-filter-preview-field">`+s.label+`</span>`,n+=`<span class="k-filter-preview-criteria"> `+this._getOperatorText(o.field,o.operator),o.operator.indexOf(`is`)<0?(n+=` </span>`,n+=`<span class='k-filter-preview-value'>'`+t.htmlEncode(s.previewFormat?t.toString(o.value,s.previewFormat):o.value)+`'</span>`):n+=`</span>`);return n+=`<span class="k-filter-preview-bracket">)</span>`,n},_expressionChange:function(){var e=this,t=e.filterModel.toJSON(),n=``;e.options.expressionPreview&&(n=e._createPreview(t),e._previewContainer.html(n)),e.trigger(l,{expression:t})},_getOperatorText:function(e,t){var n=this._fields[e].type,r=this._fields[e].operators;return r||=this.options.operators,r[n][t].text||r[n][t]},_addField:function(t,n){var r=this;t=e.extend(!0,{},{name:t.name||n,editor:t.editorTemplate||y[t.type||`string`],defaultValue:t.defaultValue||t.defaultValue===!1||t.defaultValue===0||t.defaultValue===null?t.defaultValue:u[t.type||`string`],type:t.type||`string`,label:t.label||t.name||n,operators:t.operators,previewFormat:t.previewFormat}),r._fields[t.name]=t,r._defaultField||=t},_getFieldsInfo:function(){var e=this,t=e.options.fields.length?e.options.fields:(e.options.dataSource.options.schema.model||{}).fields,n;if(e._fields={},Array.isArray(t))for(var r=0;r<t.length;r++)n=t[r],e._addField(n);else for(var i in t)n=t[i],e._addField(n,i)},_hasFieldsFilter:function(e,t){t=!!t;for(var n=0;n<e.length;n++)if(e[n].filters&&(t=this._hasFieldsFilter(e[n].filters,t)),e[n].field)return!0;return t},_removeEmptyGroups:function(e){if(e)for(var t=e.length-1;t>=0;t--){if(e[t].logic&&!e[t].filters||e[t].filters&&!this._hasFieldsFilter(e[t].filters)){e.splice(t,1);continue}e[t].filters&&this._removeEmptyGroups(e[t].filters)}},_modelChange:function(e){var t=this,n=t.element.find(`[id=`+e.sender.uid+`]`);if(t._showHideEditor(n,e.sender),e.field!==`field`){e.field!==`filters`&&t._expressionChange();return}var r=e.sender.field,i=e.sender.parent(),a=t._fields[r],o=t._addNewModel(i,a);e.sender.unbind(`change`,t._modelChangeHandler),i.remove(e.sender),t._addExpressionControls(n,a,o),t._expressionChange()},_renderMain:function(){let n=this;e(d(n.options.messages.filterAriaLabel)).appendTo(n.element),n.options.expression?n.filterModel=t.observable(n.options.expression):n.filterModel=t.observable({logic:n.options.mainLogic});let r={operators:{and:n.options.messages.and,or:n.options.messages.or},addExpression:n.options.messages.addExpression,addGroup:n.options.messages.addGroup,close:n.options.messages.close,uid:n.filterModel.uid,ns:t.ns,mainFilterLogicLabel:n.options.messages.mainFilterLogicLabel,filterModel:n.filterModel},i=e(t.template(f)(r));i.appendTo(n.element.find(`li`).first());let a=i.find(`.k-toolbar`).first();n._initGroupToolBar(a,r),n._bindModel(a,n.filterModel)},_initGroupToolBar:function(t,n){let r=this;t.kendoToolBar({resizable:!1,toggle:function(t){let n=e(t.target).closest(`.k-toolbar`).attr(`id`),i=C(r.filterModel,n);i&&i.set(`logic`,e(t.target).data(`logic`))},items:[{type:`buttonGroup`,selection:`single`,buttons:[{text:r.options.messages.and,group:`mainlogic`,togglable:!0,selected:n.filterModel.get(`logic`)===`and`,attributes:{"data-logic":`and`}},{text:r.options.messages.or,group:`mainlogic`,togglable:!0,selected:n.filterModel.get(`logic`)===`or`,attributes:{"data-logic":`or`}}]},{type:`button`,icon:`filter-add-expression`,attributes:{"data-command":`expression`,title:n.addExpression,"aria-label":n.addExpression}},{type:`button`,icon:`filter-add-group`,attributes:{"data-command":`group`,title:n.addGroup,"aria-label":n.addGroup}},{type:`button`,icon:`x`,fillMode:`flat`,attributes:{"data-command":`x`,title:n.close,"aria-label":n.close}}]})},_removeExpression:function(n){var r=this,i=n.attr(`id`),a=n.closest(`li`),o=a.hasClass(`k-filter-group-main`),s,c,l=-1;o?(a=a.find(`.k-filter-lines`),r.filterModel.filters&&(r.filterModel.filters.empty(),delete r.filterModel.filters)):(l=e(r.element).find(`.k-filter-toolbar > .k-toolbar`).index(n),c=C(r.filterModel,i),s=c.parent(),c.unbind(`change`,r._modelChangeHandler),s.remove(c),s.length||delete s.parent().filters,a.siblings().length||(a=a.parent())),t.destroy(a),a.remove(),r._expressionChange(),l>-1&&r._focusToolbar(n,`next`,l)},_renderApplyButton:function(){var n=this;n.options.applyButton&&(n._applyButton||=e(t.format(`<button type="button" data-command="apply" aria-label="{0}" title="{0}" class="k-button k-filter-apply"><span class="k-button-text">{0}</span></button>`,n.options.messages.apply)).appendTo(n.element))},_showHideEditor:function(e,t){if(!t.logic){var n=t.operator,r=e.find(`.k-toolbar-item.k-filter-value`);n==`isnull`||n==`isnotnull`||n==`isempty`||n==`isnotempty`||n==`isnullorempty`||n==`isnotnullorempty`?r.hide():r.show()}},_mapOperators:function(e){var t=this;e.filters&&e.filters.forEach(function(e){if(e.filters)t._mapOperators(e);else{var n,r=t._fields[e.field],i=r.type;n=r.operators&&r.operators[i][e.operator]?r.operators[i][e.operator]:t.operators[i][e.operator],n&&(e.operator=n.handler||e.operator)}})},hasCustomOperators:function(){var t=e.extend(!0,{},this.operators);for(var n in this._fields)t=e.extend(!0,{},t,this._fields[n].operators);this._hasCustomOperators=S(t)}});function S(e){for(var t in e){var n=e[t];if(n.handler&&typeof n.handler==`function`||typeof n==`object`&&n&&S(n))return!0}return!1}function C(e,t){if(e.uid===t)return e;if(e.filters)for(var n=0;n<e.filters.length;n++){var r=C(e.filters[n],t);if(r)return r}}n.plugin(x),n.plugin(b)})(window.kendo.jQuery);var h=kendo;e.__meta__=l,e.default=h});
//# sourceMappingURL=kendo.filter.min.js.map