tablesorter/js/jquery.tablesorter.widgets.min.js

13 lines
17 KiB
JavaScript

/*! tableSorter 2.4+ widgets - updated 11/22/2012 */
;(function(a){
a.tablesorter=a.tablesorter||{};
a.tablesorter.themes={bootstrap:{table:"table table-bordered table-striped",header:"bootstrap-header",icons:"",sortNone:"bootstrap-icon-unsorted",sortAsc:"icon-chevron-up",sortDesc:"icon-chevron-down",active:"",hover:"",filterRow:"",even:"",odd:""},jui:{table:"ui-widget ui-widget-content ui-corner-all",header:"ui-widget-header ui-corner-all ui-state-default",icons:"ui-icon",sortNone:"ui-icon-carat-2-n-s",sortAsc:"ui-icon-carat-1-n",sortDesc:"ui-icon-carat-1-s", active:"ui-state-active",hover:"ui-state-hover",filterRow:"",even:"ui-widget-content",odd:"ui-state-default"}};
a.tablesorter.storage=function(e,c,d){var b,i=!1;b={};var f=e.id||a(".tablesorter").index(a(e)),g=window.location.pathname;try{i=!!localStorage.getItem}catch(n){}a.parseJSON&&(i?b=a.parseJSON(localStorage[c])||{}:(b=document.cookie.split(/[;\s|=]/),e=a.inArray(c,b)+1,b=0!==e?a.parseJSON(b[e])||{}:{}));if(d&&JSON&&JSON.hasOwnProperty("stringify")){if(!b[g]||!b[g][f])b[g]||(b[g]={});b[g][f]= d;i?localStorage[c]=JSON.stringify(b):(e=new Date,e.setTime(e.getTime()+31536E6),document.cookie=c+"="+JSON.stringify(b).replace(/\"/g,'"')+"; expires="+e.toGMTString()+"; path=/")}else return b&&b.hasOwnProperty(g)&&b[g].hasOwnProperty(f)?b[g][f]:{}};
a.tablesorter.addWidget({id:"uitheme",format:function(e){var c,d,b,i,f=a(e),g=e.config,n=g.widgetOptions,m="object"===typeof n.uitheme?"jui":n.uitheme||"jui",h="object"===typeof n.uitheme&&!Object.prototype.toString.call(n.uitheme).test("Array")?n.uitheme: a.tablesorter.themes[a.tablesorter.themes.hasOwnProperty(m)?m:"jui"],l=a(g.headerList),q="tr."+(n.stickyHeaders||"tablesorter-stickyHeader"),p=h.sortNone+" "+h.sortDesc+" "+h.sortAsc;g.debug&&(c=new Date);if(!f.hasClass("tablesorter-"+m)||g.theme===m||!e.hasInitialized)""!==h.even&&(n.zebra[0]+=" "+h.even),""!==h.odd&&(n.zebra[1]+=" "+h.odd),f.removeClass(""===g.theme?"":"tablesorter-"+g.theme).addClass("tablesorter-"+m+" "+h.table),g.theme="",l.addClass(h.header).filter(":not(.sorter-false)").hover(function(){a(this).addClass(h.hover)}, function(){a(this).removeClass(h.hover)}),l.find(".tablesorter-wrapper").length||l.wrapInner('<div class="tablesorter-wrapper" style="position:relative;height:100%;width:100%"></div>'),g.cssIcon&&l.find("."+g.cssIcon).addClass(h.icons),f.hasClass("hasFilters")&&l.find(".tablesorter-filter-row").addClass(h.filterRow);a.each(l,function(c){b=a(this);i=g.cssIcon?b.find("."+g.cssIcon):b;this.sortDisabled?(b.removeClass(p),i.removeClass(p+" tablesorter-icon "+h.icons)):(f.hasClass("hasStickyHeaders")&& f.find(q).find("th").eq(c).add(b),d=b.hasClass(g.cssAsc)?h.sortAsc:b.hasClass(g.cssDesc)?h.sortDesc:b.hasClass(g.cssHeader)?h.sortNone:"",b[d===h.sortNone?"removeClass":"addClass"](h.active),i.removeClass(p).addClass(d))});g.debug&&a.tablesorter.benchmark("Applying "+m+" theme",c)},remove:function(e,c,d){var e=a(e),b="object"===typeof d.uitheme?"jui":d.uitheme||"jui",d="object"===typeof d.uitheme?d.uitheme:a.tablesorter.themes[a.tablesorter.themes.hasOwnProperty(b)?b:"jui"],i=e.children("thead").children(), f=d.sortNone+" "+d.sortDesc+" "+d.sortAsc;e.removeClass("tablesorter-"+b+" "+d.table).find(c.cssHeader).removeClass(d.header);i.unbind("mouseenter mouseleave").removeClass(d.hover+" "+f+" "+d.active).find(".tablesorter-filter-row").removeClass(d.filterRow);i.find(".tablesorter-icon").removeClass(d.icons)}});
a.tablesorter.addWidget({id:"columns",format:function(e){var c,d,b,i,f,g,n,m,h,l=a(e),q=e.config,p=q.widgetOptions,s=l.children("tbody:not(."+q.cssInfoBlock+")"),u=q.sortList,v=u.length,k=["primary", "secondary","tertiary"],k=q.widgetColumns&&q.widgetColumns.hasOwnProperty("css")?q.widgetColumns.css||k:p&&p.hasOwnProperty("columns")?p.columns||k:k;g=k.length-1;n=k.join(" ");q.debug&&(f=new Date);for(h=0;h<s.length;h++)c=a.tablesorter.processTbody(e,a(s[h]),!0),d=c.children("tr"),d.each(function(){i=a(this);if("none"!==this.style.display&&(b=i.children().removeClass(n),u&&u[0]&&(b.eq(u[0][0]).addClass(k[0]),1<v)))for(m=1;m<v;m++)b.eq(u[m][0]).addClass(k[m]||k[g])}),a.tablesorter.processTbody(e, c,!1);d=!1!==p.columns_thead?"thead tr":"";!1!==p.columns_tfoot&&(d+=(""===d?"":",")+"tfoot tr");if(d.length&&(i=l.find(d).children().removeClass(n),u&&u[0]&&(i.filter('[data-column="'+u[0][0]+'"]').addClass(k[0]),1<v)))for(m=1;m<v;m++)i.filter('[data-column="'+u[m][0]+'"]').addClass(k[m]||k[g]);q.debug&&a.tablesorter.benchmark("Applying Columns widget",f)},remove:function(e,c){var d,b,i=a(e).children("tbody:not(."+c.cssInfoBlock+")"),f=(c.widgetOptions.columns||["primary","secondary","tertiary"]).join(" "); for(d=0;d<i.length;d++)b=a.tablesorter.processTbody(e,a(i[d]),!0),b.children("tr").each(function(){a(this).children().removeClass(f)}),a.tablesorter.processTbody(e,b,!1)}});
a.tablesorter.addWidget({id:"filter",format:function(e){if(e.config.parsers&&!a(e).hasClass("hasFilters")){var c,d,b,i,f,g,n,m,h,l,q,p,s,u,v,k,x,F="",z=a.tablesorter,r=e.config,A=a(r.headerList),j=r.widgetOptions,y=j.filter_cssFilter||"tablesorter-filter",t=a(e).addClass("hasFilters"),D=t.children("tbody:not(."+r.cssInfoBlock+ ")"),E=r.parsers.length,B=[/^\/((?:\\\/|[^\/])+)\/([mig]{0,3})?$/,RegExp(r.cssChildRow),/undefined|number/,/(^[\"|\'|=])|([\"|\'|=]$)/,/[\"\'=]/g,/[^\w,. \-()]/g,/[<>=]/g],L=A.map(function(b){return z.getData?"parsed"===z.getData(A.filter('[data-column="'+b+'"]:last'),r.headers[b],"filter"):a(this).hasClass("filter-parsed")}).get(),G,H,C=function(b){var c=a.isArray(b),e=t.find("thead").eq(0).children("tr").find("select."+y+", input."+y),d=c?b:e.map(function(){return a(this).val()||""}).get(),f=(d|| []).join("");c&&e.each(function(c,d){a(d).val(b[c]||"")});!0===j.filter_hideFilters&&t.find(".tablesorter-filter-row").trigger(""===f?"mouseleave":"mouseenter");if(!(F===f&&!1!==b))if(t.trigger("filterStart",[d]),r.showProcessing)setTimeout(function(){I(b,d,f);return!1},30);else return I(b,d,f),!1},I=function(g,i,h){var l,q,s,p,x,w,y;r.debug&&(y=new Date);for(b=0;b<D.length;b++){g=a.tablesorter.processTbody(e,a(D[b]),!0);l=g.children("tr");x=l.length;if(""===h)l.show().removeClass("filtered");else for(d= 0;d<x;d++)if(!B[1].test(l[d].className)){p=!0;s=l.eq(d).nextUntil("tr:not(."+r.cssChildRow+")");k=s.length&&(j&&j.hasOwnProperty("filter_childRows")&&"undefined"!==typeof j.filter_childRows?j.filter_childRows:1)?s.text():"";k=j.filter_ignoreCase?k.toLocaleLowerCase():k;q=l.eq(d).children("td");for(c=0;c<E;c++)if(i[c]){n=j.filter_useParsedData||L[c]?r.cache[b].normalized[d][c]:a.trim(q.eq(c).text());m=!B[2].test(typeof n)&&j.filter_ignoreCase?n.toLocaleLowerCase():n;w=p;f=j.filter_ignoreCase?i[c].toLocaleLowerCase(): i[c];if(j.filter_functions&&j.filter_functions[c])!0===j.filter_functions[c]?w=A.filter('[data-column="'+c+'"]:last').hasClass("filter-match")?0<=m.search(f):i[c]===n:"function"===typeof j.filter_functions[c]?w=j.filter_functions[c](n,r.cache[b].normalized[d][c],i[c],c):"function"===typeof j.filter_functions[c][i[c]]&&(w=j.filter_functions[c][i[c]](n,r.cache[b].normalized[d][c],i[c],c));else if(B[0].test(f)){u=B[0].exec(f);try{w=RegExp(u[1],u[2]).test(m)}catch(C){w=!1}}else B[3].test(f)&&m===f.replace(B[4], "")?w=!0:/^\!/.test(f)?(f=f.replace("!",""),v=m.search(a.trim(f)),w=""===f?!0:!(j.filter_startsWith?0===v:0<=v)):/^[<>]=?/.test(f)?(u=isNaN(m)?a.tablesorter.formatFloat(m.replace(B[5],""),e):a.tablesorter.formatFloat(m,e),v=a.tablesorter.formatFloat(f.replace(B[5],"").replace(B[6],""),e),/>/.test(f)&&(w=/>=/.test(f)?u>=v:u>v),/</.test(f)&&(w=/<=/.test(f)?u<=v:u<v)):/[\?|\*]/.test(f)?w=RegExp(f.replace(/\?/g,"\\S{1}").replace(/\*/g,"\\S*")).test(m):(n=(m+k).indexOf(f),w=!j.filter_startsWith&&0<=n|| j.filter_startsWith&&0===n);p=w?p?!0:!1:!1}l[d].style.display=p?"":"none";l.eq(d)[p?"removeClass":"addClass"]("filtered");if(s.length)s[p?"show":"hide"]()}a.tablesorter.processTbody(e,g,!1)}F=h;r.debug&&z.benchmark("Completed filter widget search",y);t.trigger("applyWidgets");t.trigger("filterEnd")},J=function(c,f){var g,h=[],c=parseInt(c,10);g='<option value="">'+(A.filter('[data-column="'+c+'"]:last').attr("data-placeholder")||"")+"</option>";for(b=0;b<D.length;b++){i=r.cache[b].row.length;for(d= 0;d<i;d++)j.filter_useParsedData?h.push(""+r.cache[b].normalized[d][c]):(k=r.cache[b].row[d][0].cells[c])&&h.push(a.trim(r.supportsTextContent?k.textContent:a(k).text()))}h=a.grep(h,function(c,b){return a.inArray(c,h)===b});h=z.sortText?h.sort(function(a,b){return z.sortText(e,a,b,c)}):h.sort(!0);for(b=0;b<h.length;b++)g+='<option value="'+h[b]+'">'+h[b]+"</option>";t.find("thead").find("select."+y+'[data-column="'+c+'"]')[f?"html":"append"](g)},K=function(a){for(c=0;c<E;c++)k=A.filter('[data-column="'+ c+'"]:last'),k.hasClass("filter-select")&&(!k.hasClass("filter-false")&&!(j.filter_functions&&!0===j.filter_functions[c]))&&(j.filter_functions||(j.filter_functions={}),j.filter_functions[c]=!0,J(c,a))};r.debug&&(G=new Date);j.filter_ignoreCase=!1!==j.filter_ignoreCase;j.filter_useParsedData=!0===j.filter_useParsedData;if(!1!==j.filter_columnFilters&&A.filter(".filter-false").length!==A.length){k='<tr class="tablesorter-filter-row">';for(c=0;c<E;c++)s=!1,s=A.filter('[data-column="'+c+'"]:last'),g= j.filter_functions&&j.filter_functions[c]&&"function"!==typeof j.filter_functions[c]||s.hasClass("filter-select"),k+="<td>",k=g?k+('<select data-column="'+c+'" class="'+y):k+('<input type="search" placeholder="'+(s.attr("data-placeholder")||"")+'" data-column="'+c+'" class="'+y),s=z.getData?"false"===z.getData(s[0],r.headers[c],"filter"):r.headers[c]&&r.headers[c].hasOwnProperty("filter")&&!1===r.headers[c].filter||s.hasClass("filter-false"),k+=s?' disabled" disabled':'"',k+=(g?"></select>":">")+ "</td>";t.find("thead").eq(0).append(k+="</tr>")}t.bind(["addRows","updateCell","update","appendCache","search"].join(".tsfilter "),function(a,b){"search"!==a.type&&K(!0);C("search"===a.type?b:"");return!1}).find("input."+y).bind("keyup search",function(a,b){if(!(32>a.which&&8!==a.which||37<=a.which&&40>=a.which)){if("undefined"!==typeof b)return C(b),!1;clearTimeout(H);H=setTimeout(function(){C()},j.filter_searchDelay||300)}});j.filter_reset&&a(j.filter_reset).length&&a(j.filter_reset).bind("click", function(){t.find("."+y).val("");C();return!1});if(j.filter_functions)for(x in j.filter_functions)if(j.filter_functions.hasOwnProperty(x)&&"string"===typeof x)if(k=A.filter('[data-column="'+x+'"]:last'),g="",!0===j.filter_functions[x]&&!k.hasClass("filter-false"))J(x);else if("string"===typeof x&&!k.hasClass("filter-false")){for(l in j.filter_functions[x])"string"===typeof l&&(g+=""===g?'<option value="">'+(k.attr("data-placeholder")||"")+"</option>":"",g+='<option value="'+l+'">'+l+"</option>"); t.find("thead").find("select."+y+'[data-column="'+x+'"]').append(g)}K();t.find("select."+y).bind("change search",function(){C()});!0===j.filter_hideFilters&&t.find(".tablesorter-filter-row").addClass("hideme").bind("mouseenter mouseleave",function(b){var c;q=a(this);clearTimeout(h);h=setTimeout(function(){/enter|over/.test(b.type)?q.removeClass("hideme"):a(document.activeElement).closest("tr")[0]!==q[0]&&(c=t.find("."+(j.filter_cssFilter||"tablesorter-filter")).map(function(){return a(this).val()|| ""}).get().join(""),""===c&&q.addClass("hideme"))},200)}).find("input, select").bind("focus blur",function(b){p=a(this).closest("tr");clearTimeout(h);h=setTimeout(function(){if(""===t.find("."+(j.filter_cssFilter||"tablesorter-filter")).map(function(){return a(this).val()||""}).get().join(""))p["focus"===b.type?"removeClass":"addClass"]("hideme")},200)});r.showProcessing&&t.bind("filterStart filterEnd",function(b,c){var d=c?t.find("."+r.cssHeader).filter("[data-column]").filter(function(){return""!== c[a(this).data("column")]}):"";z.isProcessing(t[0],"filterStart"===b.type,c?d:"")});r.debug&&z.benchmark("Applying Filter widget",G);t.trigger("filterInit")}},remove:function(e,c,d){var b,i;b=a(e);c=b.children("tbody:not(."+c.cssInfoBlock+")");b.removeClass("hasFilters").unbind(["addRows","updateCell","update","appendCache","search"].join(".tsfilter")).find(".tablesorter-filter-row").remove();for(b=0;b<c.length;b++)i=a.tablesorter.processTbody(e,a(c[b]),!0),i.children().removeClass("filtered").show(), a.tablesorter.processTbody(e,i,!1);d.filterreset&&a(d.filter_reset).unbind("click")}});
a.tablesorter.addWidget({id:"stickyHeaders",format:function(e){if(!a(e).hasClass("hasStickyHeaders")){var c=a(e).addClass("hasStickyHeaders"),d=e.config,b=d.widgetOptions,i=a(window),f=a(e).children("thead:first"),g=f.children("tr:not(.sticky-false)").children(),e=b.stickyHeaders||"tablesorter-stickyHeader",n=g.eq(0).parent(),m=c.find("tfoot"),b=c.clone(),h=b.children("thead:first").addClass(e).css({width:f.outerWidth(!0), position:"fixed",margin:0,top:0,visibility:"hidden",zIndex:1}),l=h.children("tr:not(.sticky-false)").children(),q="",p=0,s=function(){var b=navigator.userAgent;p=0;"collapse"!==c.css("border-collapse")&&!/(webkit|msie)/i.test(b)&&(p=2*parseInt(g.eq(0).css("border-left-width"),10));h.css({left:f.offset().left-i.scrollLeft()-p,width:f.outerWidth()});l.each(function(b){b=g.eq(b);a(this).css({width:b.width()-p,height:b.height()})}).find(".tablesorter-header-inner").each(function(b){b=g.eq(b).find(".tablesorter-header-inner").width(); a(this).width(b)})};b.find("thead:gt(0),tr.sticky-false,tbody,tfoot,caption").remove();b.css({height:0,width:0,padding:0,margin:0,border:0});h.find("tr.sticky-false").remove();l.find(".tablesorter-resizer").remove();c.bind("sortEnd.tsSticky",function(){g.each(function(b){b=l.eq(b);b.attr("class",a(this).attr("class"));d.cssIcon&&b.find("."+d.cssIcon).attr("class",a(this).find("."+d.cssIcon).attr("class"))})}).bind("pagerComplete.tsSticky",function(){s()});g.find("*").andSelf().filter(d.selectorSort).each(function(b){var c= a(this);l.eq(b).bind("mouseup",function(a){c.trigger(a,!0)}).bind("mousedown",function(){this.onselectstart=function(){return!1};return!1})});c.after(b);i.bind("scroll.tsSticky",function(){var a=n.offset(),b=i.scrollTop(),d=c.height()-(h.height()+(m.height()||0)),a=b>a.top&&b<a.top+d?"visible":"hidden";h.css({left:f.offset().left-i.scrollLeft()-p,visibility:a});a!==q&&(s(),q=a)}).bind("resize.tsSticky",function(){s()})}},remove:function(e,c,d){e=a(e);d=d.stickyHeaders||"tablesorter-stickyHeader"; e.removeClass("hasStickyHeaders").unbind("sortEnd.tsSticky pagerComplete.tsSticky").find("."+d).remove();a(window).unbind("scroll.tsSticky resize.tsSticky")}});
a.tablesorter.addWidget({id:"resizable",format:function(e){if(!a(e).hasClass("hasResizable")){a(e).addClass("hasResizable");var c,d,b,i,f,g=a(e),n=e.config,m=n.widgetOptions,h=0,l=null,q=null,p=function(){h=0;l=q=null;a(window).trigger("resize")};if(b=a.tablesorter.storage&&!1!==m.resizable?a.tablesorter.storage(e,"tablesorter-resizable"): {})for(d in b)!isNaN(d)&&d<n.headerList.length&&a(n.headerList[d]).width(b[d]);g.children("thead:first").find("tr").each(function(){i=a(this).children();a(this).find(".tablesorter-wrapper").length||i.wrapInner('<div class="tablesorter-wrapper" style="position:relative;height:100%;width:100%"></div>');i=i.slice(0,-1);f=f?f.add(i):i});f.each(function(){c=a(this);d=parseInt(c.css("padding-right"),10)+8;c.find(".tablesorter-wrapper").append('<div class="tablesorter-resizer" style="cursor:w-resize;position:absolute;height:100%;width:16px;right:-'+ d+'px;top:0;z-index:1;"></div>')}).bind("mousemove.tsresize",function(a){if(0!==h&&l){var b=a.pageX-h;l.width(l.width()+b);q.width(q.width()-b);h=a.pageX}}).bind("mouseup.tsresize",function(){a.tablesorter.storage&&l&&(b[l.index()]=l.width(),b[q.index()]=q.width(),!1!==m.resizable&&a.tablesorter.storage(e,"tablesorter-resizable",b));p()}).find(".tablesorter-resizer").bind("mousedown",function(b){l=a(b.target).parents("th:last");q=l.next();h=b.pageX});g.find("thead:first").bind("mouseup.tsresize mouseleave.tsresize", function(){p()}).bind("contextmenu.tsresize",function(){a.tablesorter.resizableReset(e);var c=a.isEmptyObject?a.isEmptyObject(b):b==={};b={};return c})}},remove:function(e){a(e).removeClass("hasResizable").find("thead").unbind("mouseup.tsresize mouseleave.tsresize contextmenu.tsresize").find("tr").children().unbind("mousemove.tsresize mouseup.tsresize").find(".tablesorter-wrapper").each(function(){a(this).find(".tablesorter-resizer").remove();a(this).replaceWith(a(this).contents())});a.tablesorter.resizableReset(e)}}); a.tablesorter.resizableReset=function(e){a(e.config.headerList).width("auto");a.tablesorter.storage(e,"tablesorter-resizable",{})};
a.tablesorter.addWidget({id:"saveSort",init:function(a,c){c.format(a,!0)},format:function(e,c){var d,b,i=e.config;d=!1!==i.widgetOptions.saveSort;var f={sortList:i.sortList};i.debug&&(b=new Date);a(e).hasClass("hasSaveSort")?d&&(e.hasInitialized&&a.tablesorter.storage)&&(a.tablesorter.storage(e,"tablesorter-savesort",f),i.debug&&a.tablesorter.benchmark("saveSort widget: Saving last sort: "+ i.sortList,b)):(a(e).addClass("hasSaveSort"),f="",a.tablesorter.storage&&(f=(d=a.tablesorter.storage(e,"tablesorter-savesort"))&&d.hasOwnProperty("sortList")&&a.isArray(d.sortList)?d.sortList:"",i.debug&&a.tablesorter.benchmark('saveSort: Last sort loaded: "'+f+'"',b)),c&&f&&0<f.length?i.sortList=f:e.hasInitialized&&(f&&0<f.length)&&a(e).trigger("sorton",[f]))},remove:function(e){a.tablesorter.storage(e,"tablesorter-savesort","")}})
})(jQuery);