UNPKG

@progress/kendo-ui

Version:

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

3 lines (2 loc) 15.8 kB
!function(e){"function"==typeof define&&define.amd?define(["kendo.core.min","kendo.buttongroup.min","kendo.icons.min"],e):e()}((function(){var e={number:0,boolean:!1,string:"",date:""},t=function(e){var t=e.ns,o=e.operatorsLabel,i=e.operators;return"<select data-"+t+"bind='value: operator' title='"+o+"' data-"+t+"role='dropdownlist'>"+Object.keys(i).map((function(e){return"<option value='"+e+"'>"+(i[e].text||i[e])+"</option>"})).join("")+"</select>"},o=function(e){var t=e.ns,o=e.operators;return"<div data-"+t+"bind='value: logic' data-"+t+"role='filterbuttongroup'>"+Object.keys(o).map((function(e){return"<span value='"+e+"'>"+o[e]+"</span>"})).join("")+"</div>"},i=function(e){var t=e.mainFilterLogicLabel,i=e.uid,n=e.addExpression,s=e.addGroup,a=e.close,r=e.ns,l=e.operators;return"<div class='k-filter-toolbar'><div role='toolbar' aria-label='"+t+"' class='k-toolbar k-toolbar-md' id='"+i+"'><div class='k-filter-toolbar-item'>"+o({ns:r,operators:l})+"</div><div class='k-filter-toolbar-item'><button data-role='button' data-command='expression' class='k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-icon-button' role='button' aria-disabled='false' title='"+n+"' aria-label='"+n+"' tabindex='0'>"+kendo.ui.icon({icon:"filter-add-expression",iconClass:"k-button-icon"})+"</span></button></div><div class='k-filter-toolbar-item'><button data-role='button' data-command='group' class='k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-icon-button' role='button' aria-disabled='false' title='"+s+"' aria-label='"+s+"' tabindex='0'>"+kendo.ui.icon({icon:"filter-add-group",iconClass:"k-button-icon"})+"</span></button></div><div class='k-filter-toolbar-item'><button data-role='button' data-command='x' class='k-button k-button-md k-rounded-md k-button-flat k-button-flat-base k-icon-button' role='button' title='"+a+"' aria-label='"+a+"' aria-disabled='false' tabindex='0'>"+kendo.ui.icon({icon:"x",iconClass:"k-button-icon"})+"</button></div></div></div>"},n=function(e){var t=e.filterLogicLabel,i=e.addExpression,n=e.addGroup,s=e.close,a=e.ns,r=e.operators;return"<li class='k-filter-item'><div class='k-filter-toolbar'><div role='toolbar' aria-label='"+t+"' class='k-toolbar k-toolbar-md'><div class='k-filter-toolbar-item'>"+o({ns:a,operators:r})+"</div><div class='k-filter-toolbar-item'><button data-role='button' data-command='expression' class='k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-icon-button' role='button' title='"+i+"' aria-label='"+i+"' aria-disabled='false' tabindex='0'>"+kendo.ui.icon({icon:"filter-add-expression",iconClass:"k-button-icon"})+"</button></div><div class='k-filter-toolbar-item'><button data-role='button' data-command='group' class='k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-icon-button' role='button' title='"+n+"' aria-label='"+n+"' aria-disabled='false' tabindex='0'>"+kendo.ui.icon({icon:"filter-add-group",iconClass:"k-button-icon"})+"</button></div><div class='k-filter-toolbar-item'><button data-role='button' data-command='x' class='k-button k-button-md k-rounded-md k-button-flat k-button-flat-base k-icon-button' role='button' title='"+s+"' aria-label='"+s+"' aria-disabled='false' tabindex='0'>"+kendo.ui.icon({icon:"x",iconClass:"k-button-icon"})+"</button></div></div></div></li>"},s=function(e){var t=e.filterExpressionLabel,o=e.ns,i=e.uid,n=e.fieldsLabel,s=e.fields,a=e.close;return"<li class='k-filter-item'><div class='k-filter-toolbar'><div role='group' aria-label='"+t+"' class='k-toolbar k-toolbar-md' id='"+i+"'><div class='k-filter-toolbar-item k-filter-field'><select data-"+o+"bind='value: field' title='"+n+"' class='k-filter-dropdown' data-auto-width='true' data-"+o+"role='dropdownlist'>"+Object.keys(s).map((function(e){return"<option value='"+s[e].name+"'>"+s[e].label+"</option>"})).join("")+"</select></div><div class='k-filter-toolbar-item k-filter-operator'></div><div class='k-filter-toolbar-item k-filter-value'></div><div class='k-filter-toolbar-item'><button data-role='button' data-command='x' class='k-button k-button-md k-rounded-md k-button-flat k-button-flat-base k-icon-button' role='button' title='"+a+"' aria-label='"+a+"' aria-disabled='false' tabindex='0'>"+kendo.ui.icon({icon:"x",iconClass:"k-button-icon"})+"</button></div></div></div></li>"};!function(o){var a=window.kendo,r=a.ui,l=a.guid,d=a.ns,p=r.Widget,u=r.ButtonGroup,f="change",c=".kendoFilter",b="Is equal to",m="Is not equal to",v={number:function(e,t){var i=t.field;o("<input id='"+l()+"' type='text' aria-label='"+i+"' title='"+i+"' data-"+d+"role='numerictextbox' data-"+d+"bind='value: value'/>").appendTo(e)},string:function(e,t){var i=t.field;o("<span class='k-textbox k-input k-input-md k-rounded-md k-input-solid'><input id='"+l()+"' type='text' aria-label='"+i+"' title='"+i+"' class='k-input-inner' data-"+a.ns+"bind='value: value'/></span>").appendTo(e)},boolean:function(e,t){var i=t.field;o("<input id='"+l()+"' class='k-checkbox k-checkbox-md k-rounded-md' aria-label='"+i+"' data-"+d+"role='checkbox' data-"+d+"bind='checked: value' type='checkbox'>").appendTo(e)},date:function(e,t){var i=t.field;o("<input id='"+l()+"' type='text' aria-label='"+i+"' title='"+i+"' data-"+d+"role='datepicker' data-"+d+"bind='value: value'/>").appendTo(e)}},k=u.extend({init:function(e,t){u.fn.init.call(this,e,t)},options:{name:"FilterButtonGroup"},value:function(e){if(void 0===e)return this._value;this._value=e,u.fn._select.call(this,this.wrapper.find("[value='"+e+"']")),this.trigger(f)},_select:function(e){-1!==e&&this.value(o(e).attr("value"))}}),h=p.extend({init:function(e,t){var i,n=this;p.fn.init.call(n,e,t),n.element=o(e).addClass("k-widget k-filter"),n.dataSource=t.dataSource,n.operators=o.extend(n.options.operators,t.operators),n._getFieldsInfo(),n._modelChangeHandler=n._modelChange.bind(n),n._renderMain(),t.expression&&n._addExpressionTree(n.filterModel),n._renderApplyButton(),n.options.expressionPreview&&(n._previewContainer||(n._previewContainer=o('<div class="k-filter-preview"></div>').insertAfter(n.element.children().eq(0))),i=n._createPreview(n.filterModel.toJSON()),n._previewContainer.html(i)),n._attachEvents(),n.hasCustomOperators()},events:[f],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",mainFilterLogicLabel:"main filter logic",operators:"Operators",addGroup:"Add Group"},operators:{string:{eq:b,neq:m,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:b,neq:m,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:b,neq:m,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:b,neq:m}}},applyFilter:function(){var e=this.filterModel.toJSON();this._hasCustomOperators&&this._mapOperators(e),this._hasFieldsFilter(e.filters||[])?(this._removeEmptyGroups(e.filters),this.dataSource.filter(e)):this.dataSource.filter({})},destroy:function(){this.element.off(c),a.destroy(this.element.find(".k-filter-group-main")),this._previewContainer=null,this._applyButton=null,this._modelChangeHandler=null,p.fn.destroy.call(this)},setOptions:function(e){a.deepExtend(this.options,e),this.destroy(),this.element.empty(),this.init(this.element,this.options)},getOptions:function(){var e=o.extend(!0,{},this.options);return delete e.dataSource,e.expression=this.filterModel.toJSON(),e},_addExpressionTree:function(e){if(e.filters)for(var t=this.element.find("[id="+e.uid+"]"),o=0;o<e.filters.length;o++)e.filters[o].logic?this._addGroup(t,e.filters[o]):this._addExpression(t,e.filters[o]),e.filters[o].filters&&this._addExpressionTree(e.filters[o])},_attachEvents:function(){var e=this;e.element.on("click"+c,"button.k-button",(function(t){t.preventDefault();var i=o(t.currentTarget),n=i.data("command");"x"==n?e._removeExpression(i.closest(".k-toolbar")):"expression"==n?e._addExpression(i.closest(".k-toolbar")):"group"==n?e._addGroup(i.closest(".k-toolbar")):"apply"==n&&e.applyFilter()}))},_addExpression:function(e,t){var i,n=this,r=e.attr("id"),l=e.closest(".k-filter-toolbar").next("ul.k-filter-lines"),d=t?n._fields[t.field]:n._defaultField,p="";t?i=t:((i=_(n.filterModel,r)).filters||i.set("filters",[]),i=n._addNewModel(i.filters,d)),l.length||(l=o("<ul class='k-filter-lines'></ul>").appendTo(e.closest("li"))),p=o(a.template(s)({fields:n._fields,operators:n.operators[d.type],close:n.options.messages.close,fieldsLabel:n.options.messages.fields,uid:i.uid,ns:a.ns,filterExpressionLabel:n.options.messages.filterExpressionLabel})).appendTo(l),n._addExpressionControls(p.find(".k-toolbar"),d,i),t||n._expressionChange()},_addExpressionControls:function(e,t,o){var i=e.find(".k-filter-toolbar-item"),n=i.eq(1),s=i.eq(2);a.destroy(n),a.destroy(s),n.empty(),s.empty(),this._appendOperators(n,t),this._appendEditor(s,t),this._bindModel(e,o),this._showHideEditor(e,o)},_appendOperators:function(e,i){o(a.template(t)({operators:i.operators&&i.operators[i.type]?i.operators[i.type]:this.operators[i.type],operatorsLabel:this.options.messages.operators,ns:a.ns})).appendTo(e)},_appendEditor:function(e,t){a.isFunction(t.editor)?t.editor(e,o.extend(!0,{},{field:t.name})):o(a.template(t.editor)({ns:a.ns,field:t.name,id:a.guid()})).appendTo(e)},_addNewModel:function(e,t){var o,i,n=t.type,s=t.operators;return s||(s=this.options.operators),i=Object.keys(s[n])[0],e.push({field:t.name}),(o=e[e.length-1]).set("value",t.defaultValue),o.set("operator",i),o},_addGroup:function(e,t){var i,s=this,r=s.filterModel,l=e.attr("id"),d=e.closest(".k-filter-toolbar").next("ul.k-filter-lines");t?r=t:((r=_(r,l)).filters||r.set("filters",[]),r.filters.push({logic:s.options.mainLogic}),r=r.filters[r.filters.length-1]),d.length||(d=o("<ul class='k-filter-lines'></ul>").appendTo(e.closest("li"))),i=o(a.template(n)({operators:{and:s.options.messages.and,or:s.options.messages.or},addExpression:s.options.messages.addExpression,addGroup:s.options.messages.addGroup,close:s.options.messages.close,ns:a.ns,filterLogicLabel:s.options.messages.filterLogicLabel})).appendTo(d),s._bindModel(i.find(".k-toolbar"),r),t||s._expressionChange()},_bindModel:function(e,t){e.attr("id",t.uid),t.bind("change",this._modelChangeHandler),a.bind(e,t),e.parent().attr(a.attr("stop"),!0)},_createPreview:function(e){var t,o,i="",n=!1,s=this._hasFieldsFilter(e.filters||[]),r="";if(!e.filters||!e.filters.length||!s)return"";i+='<span class="k-filter-preview-bracket">(</span>';for(var l=0;l<e.filters.length;l++)(t=e.filters[l]).filters&&((r=this._createPreview(t))&&(n&&(i+='<span class="k-filter-preview-operator"> '+e.logic.toLocaleUpperCase()+" </span>"),n=!0),i+=r),t.field&&(o=this._fields[t.field],n&&(i+='<span class="k-filter-preview-operator"> '+e.logic.toLocaleUpperCase()+" </span>"),n=!0,i+='<span class="k-filter-preview-field">'+o.label+"</span>",i+='<span class="k-filter-preview-criteria"> '+this._getOperatorText(t.field,t.operator),t.operator.indexOf("is")<0?(i+=" </span>",i+="<span class='k-filter-preview-value'>'"+a.htmlEncode(o.previewFormat?a.toString(t.value,o.previewFormat):t.value)+"'</span>"):i+="</span>");return i+='<span class="k-filter-preview-bracket">)</span>'},_expressionChange:function(){var e=this,t=e.filterModel.toJSON(),o="";e.options.expressionPreview&&(o=e._createPreview(t),e._previewContainer.html(o)),e.trigger(f,{expression:t})},_getOperatorText:function(e,t){var o=this._fields[e].type,i=this._fields[e].operators;return i||(i=this.options.operators),i[o][t].text||i[o][t]},_addField:function(t,i){var n=this;t=o.extend(!0,{},{name:t.name||i,editor:t.editorTemplate||v[t.type||"string"],defaultValue:t.defaultValue||!1===t.defaultValue||0===t.defaultValue?t.defaultValue:e[t.type||"string"],type:t.type||"string",label:t.label||t.name||i,operators:t.operators,previewFormat:t.previewFormat}),n._fields[t.name]=t,n._defaultField||(n._defaultField=t)},_getFieldsInfo:function(){var e,t=this,o=t.options.fields.length?t.options.fields:(t.options.dataSource.options.schema.model||{}).fields;if(t._fields={},Array.isArray(o))for(var i=0;i<o.length;i++)e=o[i],t._addField(e);else for(var n in o)e=o[n],t._addField(e,n)},_hasFieldsFilter:function(e,t){t=!!t;for(var o=0;o<e.length;o++)if(e[o].filters&&(t=this._hasFieldsFilter(e[o].filters,t)),e[o].field)return!0;return t},_removeEmptyGroups:function(e){if(e)for(var t=e.length-1;t>=0;t--)e[t].logic&&!e[t].filters||e[t].filters&&!this._hasFieldsFilter(e[t].filters)?e.splice(t,1):e[t].filters&&this._removeEmptyGroups(e[t].filters)},_modelChange:function(e){var t=this,o=t.element.find("[id="+e.sender.uid+"]");if(t._showHideEditor(o,e.sender),"field"===e.field){var i=e.sender.field,n=e.sender.parent(),s=t._fields[i],a=t._addNewModel(n,s);e.sender.unbind("change",t._modelChangeHandler),n.remove(e.sender),t._addExpressionControls(o,s,a),t._expressionChange()}else"filters"!==e.field&&t._expressionChange()},_renderMain:function(){var e=this;o("<ul class='k-filter-container'><li class='k-filter-group-main'></li></ul>").appendTo(e.element),e.options.expression?e.filterModel=a.observable(e.options.expression):e.filterModel=a.observable({logic:e.options.mainLogic}),o(a.template(i)({operators:{and:e.options.messages.and,or:e.options.messages.or},addExpression:e.options.messages.addExpression,addGroup:e.options.messages.addGroup,close:e.options.messages.close,uid:e.filterModel.uid,ns:a.ns,mainFilterLogicLabel:e.options.messages.mainFilterLogicLabel})).appendTo(e.element.find("li").first()),e._bindModel(e.element.find(".k-toolbar").first(),e.filterModel)},_removeExpression:function(e){var t,o,i=this,n=e.attr("id"),s=e.closest("li");s.hasClass("k-filter-group-main")?(s=s.find(".k-filter-lines"),i.filterModel.filters&&(i.filterModel.filters.empty(),delete i.filterModel.filters)):(t=(o=_(i.filterModel,n)).parent(),o.unbind("change",i._modelChangeHandler),t.remove(o),t.length||delete t.parent().filters,s.siblings().length||(s=s.parent())),a.destroy(s),s.remove(),i._expressionChange()},_renderApplyButton:function(){var e=this;e.options.applyButton&&(e._applyButton||(e._applyButton=o(a.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">{0}</button>',e.options.messages.apply)).appendTo(e.element)))},_showHideEditor:function(e,t){if(!t.logic){var o=t.operator,i=e.find(".k-filter-toolbar-item").eq(2);"isnull"==o||"isnotnull"==o||"isempty"==o||"isnotempty"==o||"isnullorempty"==o||"isnotnullorempty"==o?i.hide():i.show()}},_mapOperators:function(e){var t=this;e.filters&&e.filters.forEach((function(e){if(e.filters)t._mapOperators(e);else{var o,i=t._fields[e.field],n=i.type;(o=i.operators&&i.operators[n][e.operator]?i.operators[n][e.operator]:t.operators[n][e.operator])&&(e.operator=o.handler||e.operator)}}))},hasCustomOperators:function(){var e=o.extend(!0,{},this.operators);for(var t in this._fields)e=o.extend(!0,{},e,this._fields[t].operators);this._hasCustomOperators=g(e)}});function g(e){for(var t in e){var o=e[t];if(o.handler&&"function"==typeof o.handler||"object"==typeof o&&null!==o&&g(o))return!0}return!1}function _(e,t){if(e.uid===t)return e;if(e.filters)for(var o=0;o<e.filters.length;o++){var i=_(e.filters[o],t);if(i)return i}}r.plugin(h),r.plugin(k)}(window.kendo.jQuery)})); //# sourceMappingURL=kendo.filter.min.js.map