-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.filtersearch.min.js
1 lines (1 loc) · 5.23 KB
/
jquery.filtersearch.min.js
1
!function(e){e.fn.filtersearch=function(r){r.resultContainer=this;for(var t in r.filterList)r.filterList[t].logic=r.filterList[t].logic||"any",r.filterList[t].labelMapping=r.filterList[t].labelMapping||{},r.filterList[t].selectedValues=[];for(var i=0;i<r.sorterList.length;i++)r.sorterList[i].active=!1,r.sorterList[i].direction="asc";var a=e.extend({},e.fn.filtersearch.defaults,r);a.filteredData=a.data,e.fn.filtersearch.renderFilterWrapper(a),e.fn.filtersearch.renderResults(a.data,1,a);var n=function(t){a.data=t,a.filteredData=t,e.fn.filtersearch.renderResults(a.data,1,a);for(var i in a.filterList)a.filterList[i].logic=r.filterList[i].logic||"any",a.filterList[i].labelMapping=r.filterList[i].labelMapping||{},a.filterList[i].selectedValues=[];a.renderFilterWrapper(a)};e.fn.updateFilterSearchData=n},e.fn.filtersearch.applyFilters=function(e,r,t){if(Array!==e.constructor&&(e=[e]),0===e.length)return r;var i=[];for(var a in r){var n=r[a],l=0;for(var s in e)n="function"==typeof e[s].applyFilter?e[s].applyFilter(n,e[s]):t.applyFilter(n,e[s]),l=n===!1?-1:1;1===l&&i.push(n)}return i},e.fn.filtersearch.applyFilter=function(e,r){var t=!1;return r.compareFunction(e,r.selectedValues)&&(t=e),t},e.fn.filtersearch.renderResults=function(r,t,i){i.preRender(i),e.fn.filtersearch.renderPagination(r,t,i),e.fn.filtersearch.renderSortList(i.sorterList,i);for(var a in i.sorterList)if(i.sorterList[a].active){r=r.sort(i.sorterList[a].compareFunction),"desc"===i.sorterList[a].direction&&(r=r.reverse());break}var n="";if(i.pagination>0)for(var l=(t-1)*i.pagination;l<=Math.min(t*i.pagination-1,r.length-1);l++)n+=i.renderItem(r[l],i);else for(var l=0;l<r.length;l++)n+=i.renderItem(r[l],i);e(i.resultContainer).html(n),i.postRender(i)},e.fn.filtersearch.renderFilterWrapper=function(r){var t=[],i=e("<ul>");for(var a in r.filterList){t=[];var n=r.data;for(var l in r.filterList)r.filterList[l].title!==r.filterList[a].title&&(n=e.fn.filtersearch.applyFilters(r.filterList[l],n,r));var s=r.filterList[a];for(var o in n){var f=!1,c=s.getValueFunction(n[o]);if(c!==!1)if("string"==typeof c){for(var d in t)t[d].label==c&&(t[d].count++,f=!0);f||t.push({label:c,count:1,order:1,value:c})}else for(var p in c)if("string"==typeof c[p]){for(var d in t)t[d].label==c[p]&&(t[d].count++,f=!0);f||t.push({label:c[p],count:1,order:1,value:c[p]})}else{for(var d in t)t[d].label==c[p].label&&(t[d].count++,f=!0);f||(c[p].count=1,t.push(c[p]))}}t.sort(function(e,r){return e.order<r.order?1:-1}),t.length>0&&("function"==typeof r.filterList[a].renderFilter?i.append(r.filterList[a].renderFilter(r.filterList[a],t,r)):i.append(r.renderFilter(r.filterList[a],t,r)))}e(r.filterContainer).html(i)},e.fn.filtersearch.renderFilter=function(r,t,i){var a=e("<li>").data("filtername",r.title);a.append("<strong>"+r.title+"</strong>");var n=e("<ul>");for(var l in t){var s=t[l].label||t[l].value,o=e("<li>").data("value",t[l].value);r.selectedValues.indexOf(t[l].value)>-1&&o.addClass("active"),e("<a>").text(s+" ("+t[l].count+")").appendTo(o),o.click(function(){r.selectedValues.indexOf(e(this).data("value"))>-1?r.selectedValues.splice(r.selectedValues.indexOf(e(this).data("value")),1):("exclusive"===r.logic&&(r.selectedValues=[]),r.selectedValues.push(e(this).data("value"))),i.renderFilterWrapper(i),i.filteredData=e.fn.filtersearch.applyFilters(i.filterList,i.data,i),e.fn.filtersearch.renderResults(i.filteredData,1,i)}),o.appendTo(n)}return n.appendTo(a),a},e.fn.filtersearch.renderSortList=function(r,t){var i=e("<ul>");for(var a in r){var n=r[a],l=e("<li>").text(n.title);n.active?(l.addClass("active"),l.addClass(n.direction),"asc"===n.direction?l.append(e("<span>").addClass("glyphicon glyphicon-chevron-up")):l.append(e("<span>").addClass("glyphicon glyphicon-chevron-down"))):l.append(e("<span>").addClass("glyphicon glyphicon-sort")),l.click(function(r){for(var i in t.sorterList)t.sorterList[i].active=!1,t.sorterList[i].title===e(this).text()&&(n=t.sorterList[i],n.active=!0);e(this).parent().children().removeClass("active"),n.active&&("asc"===n.direction?n.direction="desc":n.direction="asc"),n.active=!0,e(this).addClass("active"),"asc"===n.direction?(e(this).removeClass("desc"),e(this).addClass("asc")):(e(this).removeClass("asc"),e(this).addClass("desc")),e.fn.filtersearch.renderResults(t.filteredData,t.curPage,t)}),i.append(l)}e(t.sortContainer).html(""),i.appendTo(e(t.sortContainer))},e.fn.filtersearch.renderPagination=function(r,t,i){var a=i.pagination;if(a>0){for(var n=Math.ceil(parseFloat(r.length)/a),l='<ul class="pagination">',s=1;n>=s;s++)l+=t===s?'<li data-page="'+s+'" class="active">'+s+"</li>":'<li data-page="'+s+'">'+s+"</li>";l+="</ul>",e(i.paginationContainer).html(l),e("ul.pagination>li[data-page]").click(function(){i.curPage=e(this).data("page"),e.fn.filtersearch.renderResults(r,i.curPage,i)})}},e.fn.filtersearch.defaults={source:"json",url:"",data:[],filteredData:[],resultContainer:null,renderItem:e.fn.filtersearch.renderItem,sorterList:[],sortContainer:"#jqfs-sort-columns",sortMethod:e.fn.filtersearch.sortMethod,filterList:[],applyFilter:e.fn.filtersearch.applyFilter,filterContainer:"#jqfs-filter-columns",renderFilterWrapper:e.fn.filtersearch.renderFilterWrapper,renderFilter:e.fn.filtersearch.renderFilter,pagination:0,paginationContainer:"#jqfs-pagination",curPage:1,preRender:function(e){},postRender:function(e){}}}(jQuery);