bootstrap-table-filter-control.min.js 12 KB

12345678910
  1. /**
  2. * bootstrap-table - An extended Bootstrap table with radio, checkbox, sort, pagination, and other added features. (supports twitter bootstrap v2 and v3).
  3. *
  4. * @version v1.13.0
  5. * @homepage http://bootstrap-table.wenzhixin.net.cn
  6. * @author wenzhixin <wenzhixin2010@gmail.com> (http://wenzhixin.net.cn/)
  7. * @license MIT
  8. */
  9. (function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.bootstrapTableFilterControl={exports:{}}.exports}})(this,function(){"use strict";(function(c){var a=c.fn.bootstrapTable.utils.sprintf,b=c.fn.bootstrapTable.utils.objectKeys,d=function(a){return a.get(a.length-1).options},e=function(b,c){for(var e=d(b),f=0;f<e.length;f++)""!==e[f].value&&(c.hasOwnProperty(e[f].value)?b.find(a("option[value='%s']",e[f].value)).show():b.find(a("option[value='%s']",e[f].value)).hide())},f=function(a,b,d){b=c.trim(b),a=c(a.get(a.length-1)),h(a,b)||a.append(c("<option></option>").attr("value",b).text(c("<div />").html(d).text()))},g=function(a){a=c(a.get(a.length-1));var b=a.find("option:gt(0)");b.sort(function(d,a){return d=c(d).text().toLowerCase(),a=c(a).text().toLowerCase(),c.isNumeric(d)&&c.isNumeric(a)&&(d=parseFloat(d),a=parseFloat(a)),d>a?1:d<a?-1:0}),a.find("option:gt(0)").remove(),a.append(b)},h=function(a,b){for(var c=d(a),e=0;e<c.length;e++)if(c[e].value===b.toString())return!0;return!1},i=function(a){a.$tableHeader.css("height","77px")},j=function(a){var b=a.$header;return a.options.height&&(b=a.$tableHeader),b},k=function(a){var b="select, input";return a.options.height&&(b="table select, table input"),b},l=function(a){if(c.fn.bootstrapTable.utils.isIEBrowser()){if(c(a).is("input[type=text]")){var b=0;if("selectionStart"in a)b=a.selectionStart;else if("selection"in document){a.focus();var d=document.selection.createRange(),e=document.selection.createRange().text.length;d.moveStart("character",-a.value.length),b=d.text.length-e}return b}return-1}return-1},m=function(a){c(a).val(a.value)},n=function(a){var b=j(a),d=k(a);a.options.valuesFilterControl=[],b.find(d).each(function(){a.options.valuesFilterControl.push({field:c(this).closest("[data-field]").data("field"),value:c(this).val(),position:l(c(this).get(0)),hasFocus:c(this).is(":focus")})})},o=function(a){var b=null,d=[],e=j(a),f=k(a);if(0<a.options.valuesFilterControl.length){var g=null;e.find(f).each(function(){b=c(this).closest("[data-field]").data("field"),d=c.grep(a.options.valuesFilterControl,function(a){return a.field===b}),0<d.length&&(c(this).val(d[0].value),d[0].hasFocus&&(g=function(a,b){return function closedCallback(){a.focus(),m(a,b)}}(c(this).get(0),d[0].position)))}),null!=g&&g()}},p=function(){var a=[],b=document.cookie.match(/(?:bs.table.)(\w*)/g);if(b)return c.each(b,function(b,d){/./.test(d)&&(d=d.split(".").pop()),-1===c.inArray(d,a)&&a.push(d)}),a},q=function(a){var b=a.data,d=a.pageTo<a.options.data.length?a.options.data.length:a.pageTo,h=function(a){return a.filterControl&&"select"===a.filterControl.toLowerCase()&&a.searchable},k=function(a){return a.filterData===void 0||"column"===a.filterData.toLowerCase()},l=function(a){return a&&0<a.length},m=a.options.pagination?"server"===a.options.sidePagination?a.pageTo:a.options.totalRows:a.pageTo;c.each(a.header.fields,function(d,j){var n=a.columns[a.fieldsColumnsIndex[j]],o=c(".bootstrap-table-filter-control-"+r(n.field));if(h(n)&&k(n)&&l(o)){0===o.get(o.length-1).options.length&&f(o,"","");for(var p={},q=0;q<m;q++){var i=b[q][j],s=c.fn.bootstrapTable.utils.calculateObjectValue(a.header,a.header.formatters[d],[i,b[q],q],i);p[s]=i}for(var t in p)f(o,p[t],t);g(o),a.options.hideUnusedSelectOptions&&e(o,p)}}),a.trigger("created-controls")},r=function(a){return(a+"").replace(/(:|\.|\[|\]|,)/g,"\\$1")},s=function(b,d){var e,h,j=!1;c.each(b.columns,function(a,k){if(e="hidden",h=[],!!k.visible){if(!k.filterControl)h.push("<div class=\"no-filter-control\"></div>");else{h.push("<div class=\"filter-control\">");var i=k.filterControl.toLowerCase();k.searchable&&b.options.filterTemplate[i]&&(j=!0,e="visible",h.push(b.options.filterTemplate[i](b,k.field,e,k.filterControlPlaceholder?k.filterControlPlaceholder:"","filter-control-"+a)))}if(c.each(d.children().children(),function(a,b){if(b=c(b),b.data("field")===k.field)return b.find(".fht-cell").append(h.join("")),!1}),void 0!==k.filterData&&"column"!==k.filterData.toLowerCase()){var l,m,n=v(u,k.filterData.substring(0,k.filterData.indexOf(":")));if(null!==n)l=k.filterData.substring(k.filterData.indexOf(":")+1,k.filterData.length),m=c(".bootstrap-table-filter-control-"+r(k.field)),f(m,"",""),n(l,m);else throw new SyntaxError("Error. You should use any of these allowed filter data methods: var, json, url. Use like this: var: {key: \"value\"}");var o,p;switch(n){case"url":c.ajax({url:l,dataType:"json",success:function(a){for(var b in a)f(m,b,a[b]);g(m)}});break;case"var":for(p in o=window[l],o)f(m,p,o[p]);g(m);break;case"jso":for(p in o=JSON.parse(l),o)f(m,p,o[p]);g(m);}}}}),j?(d.off("keyup","input").on("keyup","input",function(a){b.options.searchOnEnterKey&&13!==a.keyCode||-1<c.inArray(a.keyCode,[37,38,39,40])||(clearTimeout(a.currentTarget.timeoutId||0),a.currentTarget.timeoutId=setTimeout(function(){b.onColumnSearch(a)},b.options.searchTimeOut))}),d.off("change","select").on("change","select",function(a){b.options.searchOnEnterKey&&13!==a.keyCode||-1<c.inArray(a.keyCode,[37,38,39,40])||(clearTimeout(a.currentTarget.timeoutId||0),a.currentTarget.timeoutId=setTimeout(function(){b.onColumnSearch(a)},b.options.searchTimeOut))}),d.off("mouseup","input").on("mouseup","input",function(a){var d=c(this),e=d.val();""===e||setTimeout(function(){var c=d.val();""===c&&(clearTimeout(a.currentTarget.timeoutId||0),a.currentTarget.timeoutId=setTimeout(function(){b.onColumnSearch(a)},b.options.searchTimeOut))},1)}),0<d.find(".date-filter-control").length&&c.each(b.columns,function(b,e){e.filterControl!==void 0&&"datepicker"===e.filterControl.toLowerCase()&&d.find(".date-filter-control.bootstrap-table-filter-control-"+e.field).datepicker(e.filterDatepickerOptions).on("changeDate",function(b){c(a("#%s",b.currentTarget.id)).val(b.currentTarget.value),c(b.currentTarget).keyup()})})):d.find(".filterControl").hide()},t=function(a){return a=void 0===a?"left":a.toLowerCase(),"left"===a?"ltr":"right"===a?"rtl":"auto"===a?"auto":"ltr"},u={var:function(a,b){var c=window[a];for(var d in c)f(b,d,c[d]);g(b)},url:function(a,b){c.ajax({url:a,dataType:"json",success:function(a){for(var c in a)f(b,c,a[c]);g(b)}})},json:function(a,b){var c=JSON.parse(a);for(var d in c)f(b,d,c[d]);g(b)}},v=function(a,b){for(var c=Object.keys(a),d=0;d<c.length;d++)if(c[d]===b)return a[b];return null};c.extend(c.fn.bootstrapTable.defaults,{filterControl:!1,onColumnSearch:function(){return!1},onCreatedControls:function(){return!0},filterShowClear:!1,alignmentSelectControlOptions:void 0,filterTemplate:{input:function(b,c,d,e){return a("<input type=\"text\" class=\"form-control bootstrap-table-filter-control-%s\" style=\"width: 100%; visibility: %s\" placeholder=\"%s\">",c,d,e)},select:function(b,c,d){return a("<select class=\"form-control bootstrap-table-filter-control-%s\" style=\"width: 100%; visibility: %s\" dir=\"%s\"></select>",c,d,t(b.options.alignmentSelectControlOptions))},datepicker:function(b,c,d){return a("<input type=\"text\" class=\"form-control date-filter-control bootstrap-table-filter-control-%s\" style=\"width: 100%; visibility: %s\">",c,d)}},disableControlWhenSearch:!1,searchOnEnterKey:!1,valuesFilterControl:[]}),c.extend(c.fn.bootstrapTable.columnDefaults,{filterControl:void 0,filterData:void 0,filterDatepickerOptions:void 0,filterStrictSearch:!1,filterStartsWithSearch:!1,filterControlPlaceholder:""}),c.extend(c.fn.bootstrapTable.Constructor.EVENTS,{"column-search.bs.table":"onColumnSearch","created-controls.bs.table":"onCreatedControls"}),c.extend(c.fn.bootstrapTable.defaults.icons,{clear:"glyphicon-trash icon-clear"}),c.extend(c.fn.bootstrapTable.locales,{formatClearFilters:function(){return"Clear Filters"}}),c.extend(c.fn.bootstrapTable.defaults,c.fn.bootstrapTable.locales),c.fn.bootstrapTable.methods.push("triggerSearch");var w=c.fn.bootstrapTable.Constructor,x=w.prototype.init,y=w.prototype.initToolbar,z=w.prototype.initHeader,A=w.prototype.initBody,B=w.prototype.initSearch;w.prototype.init=function(){if(this.options.filterControl){var a=this;Object.keys||b(),this.options.valuesFilterControl=[],this.$el.on("reset-view.bs.table",function(){!a.options.height||0<a.$tableHeader.find("select").length||0<a.$tableHeader.find("input").length||s(a,a.$tableHeader)}).on("post-header.bs.table",function(){o(a)}).on("post-body.bs.table",function(){a.options.height&&i(a)}).on("column-switch.bs.table",function(){o(a)}).on("load-success.bs.table",function(){a.EnableControls(!0)}).on("load-error.bs.table",function(){a.EnableControls(!0)})}x.apply(this,Array.prototype.slice.apply(arguments))},w.prototype.initToolbar=function(){if(this.showToolbar=this.showToolbar||this.options.filterControl&&this.options.filterShowClear,y.apply(this,Array.prototype.slice.apply(arguments)),this.options.filterControl&&this.options.filterShowClear){var b=this.$toolbar.find(">.btn-group"),d=b.find(".filter-show-clear");d.length||(d=c([a("<button class=\"btn btn-%s filter-show-clear\" ",this.options.buttonsClass),a("type=\"button\" title=\"%s\">",this.options.formatClearFilters()),a("<i class=\"%s %s\"></i> ",this.options.iconsPrefix,this.options.icons.clear),"</button>"].join("")).appendTo(b),d.off("click").on("click",c.proxy(this.clearFilterControl,this)))}},w.prototype.initHeader=function(){z.apply(this,Array.prototype.slice.apply(arguments));this.options.filterControl&&s(this,this.$header)},w.prototype.initBody=function(){A.apply(this,Array.prototype.slice.apply(arguments)),q(this)},w.prototype.initSearch=function(){if(B.apply(this,Array.prototype.slice.apply(arguments)),"server"!==this.options.sidePagination){var a=this,b=c.isEmptyObject(a.filterColumnsPartial)?null:a.filterColumnsPartial;a.data=b?c.grep(a.data,function(d,e){for(var f in b){var g=a.columns[a.fieldsColumnsIndex[f]],h=b[f].toLowerCase(),i=d[f];if(g&&g.searchFormatter&&(i=c.fn.bootstrapTable.utils.calculateObjectValue(a.header,a.header.formatters[c.inArray(f,a.header.fields)],[i,d,e],i)),-1!==c.inArray(f,a.header.fields)&&("string"==typeof i||"number"==typeof i))if(g.filterStrictSearch){if(i.toString().toLowerCase()===h.toString().toLowerCase())return!0;}else if(g.filterStartsWithSearch){if(0===(i+"").toLowerCase().indexOf(h))return!0;}else if(-1!==(i+"").toLowerCase().indexOf(h))return!0}return!1}):a.data}},w.prototype.initColumnSearch=function(a){if(n(this),a)for(var b in this.filterColumnsPartial=a,this.updatePagination(),a)this.trigger("column-search",b,a[b])},w.prototype.onColumnSearch=function(a){if(!(-1<c.inArray(a.keyCode,[37,38,39,40]))){n(this);var b=c.trim(c(a.currentTarget).val()),d=c(a.currentTarget).closest("[data-field]").data("field");c.isEmptyObject(this.filterColumnsPartial)&&(this.filterColumnsPartial={}),b?this.filterColumnsPartial[d]=b:delete this.filterColumnsPartial[d],this.searchText+="randomText",this.options.pageNumber=1,this.EnableControls(!1),this.onSearch(a),this.trigger("column-search",d,b)}},w.prototype.clearFilterControl=function(){if(this.options.filterControl&&this.options.filterShowClear){var b=this,d=p(),e=j(b),f=e.closest("table"),g=e.find(k(b)),h=b.$toolbar.find(".search input"),l=!1,i=0;if(c.each(b.options.valuesFilterControl,function(a,b){l=!!l||""!==b.value,b.value=""}),o(b),clearTimeout(i),i=setTimeout(function(){d&&0<d.length&&c.each(d,function(a,c){void 0!==b.deleteCookie&&b.deleteCookie(c)})},b.options.searchTimeOut),!l)return;if(0<g.length)this.filterColumnsPartial={},c(g[0]).trigger("INPUT"===g[0].tagName?"keyup":"change");else return;if(0<h.length&&b.resetSearch(),b.options.sortName!==f.data("sortName")||b.options.sortOrder!==f.data("sortOrder")){var m=e.find(a("[data-field=\"%s\"]",c(g[0]).closest("table").data("sortName")));0<m.length&&(b.onSort({type:"keypress",currentTarget:m}),c(m).find(".sortable").trigger("click"))}}},w.prototype.triggerSearch=function(){var a=j(this),b=k(this);a.find(b).each(function(){var a=c(this);a.is("select")?a.change():a.keyup()})},w.prototype.EnableControls=function(a){if(this.options.disableControlWhenSearch&&"server"===this.options.sidePagination){var b=j(this),c=k(this);a?b.find(c).removeProp("disabled"):b.find(c).prop("disabled","disabled")}}})(jQuery)});