mirror of
https://github.com/YunoHost-Apps/yourls_ynh.git
synced 2024-09-03 20:35:59 +02:00
47 lines
23 KiB
JavaScript
47 lines
23 KiB
JavaScript
|
/*!
|
||
|
* TableSorter 2.7.6 min - Client-side table sorting with ease!
|
||
|
* Copyright (c) 2007 Christian Bach
|
||
|
*
|
||
|
* https://github.com/Mottie/tablesorter/
|
||
|
* Dual licensed under the MIT and GPL licenses.
|
||
|
*/
|
||
|
!function(j){j.extend({tablesorter:new function(){function e(d){"undefined"!==typeof console&&"undefined"!==typeof console.log?console.log(d):alert(d)}function v(d,c){e(d+" ("+((new Date).getTime()-c.getTime())+"ms)")}function p(d,c,a){if(!c)return"";var b=d.config,g=b.textExtraction,f="",f="simple"===g?b.supportsTextContent?c.textContent:j(c).text():"function"===typeof g?g(c,d,a):"object"===typeof g&&g.hasOwnProperty(a)?g[a](c,d,a):b.supportsTextContent?c.textContent:j(c).text();return j.trim(f)} function h(d){var c=d.config,a=c.$tbodies=c.$table.children("tbody:not(."+c.cssInfoBlock+")"),b,q,f,l,j,n,k="";if(0===a.length)return c.debug?e("*Empty table!* Not building a parser cache"):"";a=a[0].rows;if(a[0]){b=[];q=a[0].cells.length;for(f=0;f<q;f++){l=c.$headers.filter(":not([colspan])");l=l.add(c.$headers.filter('[colspan="1"]')).filter('[data-column="'+f+'"]:last');j=c.headers[f];n=g.getParserById(g.getData(l,j,"sorter"));c.empties[f]=g.getData(l,j,"empty")||c.emptyTo||(c.emptyToBottom?"bottom": "top");c.strings[f]=g.getData(l,j,"string")||c.stringTo||"max";if(!n)a:{l=d;j=a;n=-1;for(var v=f,x=void 0,t=g.parsers.length,y=!1,m="",x=!0;""===m&&x;)n++,j[n]?(y=j[n].cells[v],m=p(l,y,v),l.config.debug&&e("Checking if value was empty on row "+n+", column: "+v+": "+m)):x=!1;for(x=1;x<t;x++)if(g.parsers[x].is&&g.parsers[x].is(m,l,y)){n=g.parsers[x];break a}n=g.parsers[0]}c.debug&&(k+="column:"+f+"; parser:"+n.id+"; string:"+c.strings[f]+"; empty: "+c.empties[f]+"\n");b.push(n)}}c.debug&&e(k);return b} function s(d){var c=d.tBodies,a=d.config,b,q,f=a.parsers,l,u,n,k,h,x,t,m=[];a.cache={};if(!f)return a.debug?e("*Empty table!* Not building a cache"):"";a.debug&&(t=new Date);a.showProcessing&&g.isProcessing(d,!0);for(k=0;k<c.length;k++)if(a.cache[k]={row:[],normalized:[]},!j(c[k]).hasClass(a.cssInfoBlock)){b=c[k]&&c[k].rows.length||0;q=c[k].rows[0]&&c[k].rows[0].cells.length||0;for(u=0;u<b;++u)if(h=j(c[k].rows[u]),x=[],h.hasClass(a.cssChildRow))a.cache[k].row[a.cache[k].row.length-1]=a.cache[k].row[a.cache[k].row.length- 1].add(h);else{a.cache[k].row.push(h);for(n=0;n<q;++n)if(l=p(d,h[0].cells[n],n),l=f[n].format(l,d,h[0].cells[n],n),x.push(l),"numeric"===(f[n].type||"").toLowerCase())m[n]=Math.max(Math.abs(l),m[n]||0);x.push(a.cache[k].normalized.length);a.cache[k].normalized.push(x)}a.cache[k].colMax=m}a.showProcessing&&g.isProcessing(d);a.debug&&v("Building cache for "+b+" rows",t)}function m(d,c){var a=d.config,b=d.tBodies,q=[],f=a.cache,e,u,n,k,h,p,m,y,s,r,E;if(f[0]){a.debug&&(E=new Date);for(y=0;y<b.length;y++)if(e= j(b[y]),!e.hasClass(a.cssInfoBlock)){h=g.processTbody(d,e,!0);e=f[y].row;u=f[y].normalized;k=(n=u.length)?u[0].length-1:0;for(p=0;p<n;p++)if(r=u[p][k],q.push(e[r]),!a.appender||!a.removeRows){s=e[r].length;for(m=0;m<s;m++)h.append(e[r][m])}g.processTbody(d,h,!1)}a.appender&&a.appender(d,q);a.debug&&v("Rebuilt table",E);c||g.applyWidget(d);j(d).trigger("sortEnd",d)}}function F(d){var c,a,b,g=d.config,f=g.sortList,e=[g.cssAsc,g.cssDesc],h=j(d).find("tfoot tr").children().removeClass(e.join(" "));g.$headers.removeClass(e.join(" ")); b=f.length;for(c=0;c<b;c++)if(2!==f[c][1]&&(d=g.$headers.not(".sorter-false").filter('[data-column="'+f[c][0]+'"]'+(1===b?":last":"")),d.length))for(a=0;a<d.length;a++)d[a].sortDisabled||(d.eq(a).addClass(e[f[c][1]]),h.length&&h.filter('[data-column="'+f[c][0]+'"]').eq(a).addClass(e[f[c][1]]))}function G(d){var c=0,a=d.config,b=a.sortList,g=b.length,f=d.tBodies.length,e,h,n,k,p,m,t,r,s;if(!a.serverSideSorting&&a.cache[0]){a.debug&&(e=new Date);for(n=0;n<f;n++)p=a.cache[n].colMax,s=(m=a.cache[n].normalized)&& m[0]?m[0].length-1:0,m.sort(function(f,e){for(h=0;h<g;h++){k=b[h][0];r=b[h][1];t=/n/i.test(a.parsers&&a.parsers[k]?a.parsers[k].type||"":"")?"Numeric":"Text";t+=0===r?"":"Desc";/Numeric/.test(t)&&a.strings[k]&&(c="boolean"===typeof a.string[a.strings[k]]?(0===r?1:-1)*(a.string[a.strings[k]]?-1:1):a.strings[k]?a.string[a.strings[k]]||0:0);var l=j.tablesorter["sort"+t](d,f[k],e[k],k,p[k],c);if(l)return l}return f[s]-e[s]});a.debug&&v("Sorting on "+b.toString()+" and dir "+r+" time",e)}}
|
||
|
|
||
|
var yourls_defaultsort = 2; // default column to sort on (overwrite this inline in page)
|
||
|
var yourls_defaultorder = 1; // default order ('asc':0, 'desc':1) to sort on (overwrite this inline in page)
|
||
|
|
||
|
// Initialise the table to sort
|
||
|
$(document).ready(function(){
|
||
|
if ($("#main_table").tablesorter && $("#main_table tr#nourl_found").css('display') == 'none') {
|
||
|
var order = {'keyword':0, 'url':1, 'timestamp':2, 'ip':3, 'clicks':4};
|
||
|
var order_by = {'asc':0, 'desc':1};
|
||
|
var sort_by = order[query_string('sort_by')];
|
||
|
var sort_order = order_by[query_string('sort_order')];
|
||
|
if( sort_by == undefined ) {
|
||
|
sort_by = yourls_defaultsort;
|
||
|
sort_order = yourls_defaultorder;
|
||
|
}
|
||
|
|
||
|
$("#main_table").tablesorter({
|
||
|
textExtraction: {
|
||
|
1: function(node, table, cellIndex){return $(node).find("small a").text();} // Sort column "URL" by URL, not by whole cell content
|
||
|
},
|
||
|
sortList:[[ sort_by, sort_order ]],
|
||
|
headers: { 5: {sorter: false} }, // no sorter on column "Actions"
|
||
|
widgets: ['zebra'], // prettify, see tr.normal-row and tr.alt-row in tablesorter.css
|
||
|
widgetOptions : { zebra : [ "normal-row", "alt-row" ] }
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// Get query string
|
||
|
function query_string( key ) {
|
||
|
default_="";
|
||
|
key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
|
||
|
var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
|
||
|
var qs = regex.exec(window.location.href);
|
||
|
if(qs == null)
|
||
|
return yourls_defaultsort;
|
||
|
else
|
||
|
return qs[1];
|
||
|
}
|