diff options
author | Joakim Reinert <mail@jreinert.com> | 2015-05-01 23:50:38 +0200 |
---|---|---|
committer | Florian Pritz <bluewind@xinu.at> | 2015-05-05 12:21:27 +0200 |
commit | a5cde5f11ba4d773bd7b369596f5bb00a0e1666e (patch) | |
tree | 537a57e3b02de9ab74e898f921c3971cd2fe04b6 /data/js/tablesorter.js | |
parent | b76a85e2992000bd6fa21a58050ffcac0f8fba39 (diff) |
Extract tablesorter js and encapsulate
Diffstat (limited to 'data/js/tablesorter.js')
-rw-r--r-- | data/js/tablesorter.js | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/data/js/tablesorter.js b/data/js/tablesorter.js new file mode 100644 index 000000000..d500f2ade --- /dev/null +++ b/data/js/tablesorter.js @@ -0,0 +1,82 @@ +(function () { +'use strict'; +define(['jquery', 'jquery.tablesorter'], function ($) { + var PrivateFunctions = { + setupParser: function () { + // source: https://projects.archlinux.org/archweb.git/tree/sitestatic/archweb.js + $.tablesorter.addParser({ + id: 'filesize', + re: /^(\d+(?:\.\d+)?)(bytes?|[KMGTPEZY]i?B|B)$/, + is: function(s) { + return this.re.test(s); + }, + format: function(s) { + var matches = this.re.exec(s); + if (!matches) { + return 0; + } + var size = parseFloat(matches[1]), + suffix = matches[2]; + + switch(suffix) { + /* intentional fall-through at each level */ + case 'YB': + case 'YiB': + size *= 1024; + case 'ZB': + case 'ZiB': + size *= 1024; + case 'EB': + case 'EiB': + size *= 1024; + case 'PB': + case 'PiB': + size *= 1024; + case 'TB': + case 'TiB': + size *= 1024; + case 'GB': + case 'GiB': + size *= 1024; + case 'MB': + case 'MiB': + size *= 1024; + case 'KB': + case 'KiB': + size *= 1024; + } + return size; + }, + type: 'numeric' + }); + }, + + textExtraction: function (node) { + var attr = $(node).attr('data-sort-value'); + if (!_.isUndefined(attr) && attr !== false) { + var intAttr = parseInt(attr); + if (!_.isNaN(intAttr)) { + return intAttr; + } + return attr; + } + return $(node).text(); + }, + + setupTableSorter: function () { + $(".tablesorter").tablesorter({ + textExtraction: this.textExtraction + }); + } + }; + + var TableSorter = { + initialize: function () { + PrivateFunctions.setupParser(); + PrivateFunctions.setupTableSorter(); + } + }; + + return TableSorter; +}); +})(); |