summaryrefslogtreecommitdiffstats
path: root/web/_static/tablesorter/js/parsers
diff options
context:
space:
mode:
Diffstat (limited to 'web/_static/tablesorter/js/parsers')
-rw-r--r--web/_static/tablesorter/js/parsers/parser-date-extract.min.js11
-rw-r--r--web/_static/tablesorter/js/parsers/parser-date-iso8601.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-date-month.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-date-range.min.js11
-rw-r--r--web/_static/tablesorter/js/parsers/parser-date-two-digit-year.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-date-weekday.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-date.min.js7
-rw-r--r--web/_static/tablesorter/js/parsers/parser-duration.min.js6
-rw-r--r--web/_static/tablesorter/js/parsers/parser-feet-inch-fraction.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-file-type.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-globalize.min.js7
-rw-r--r--web/_static/tablesorter/js/parsers/parser-huge-numbers.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-ignore-articles.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-image.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-input-select.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-leading-zeros.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-metric.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-named-numbers.min.js4
-rw-r--r--web/_static/tablesorter/js/parsers/parser-network.min.js9
-rw-r--r--web/_static/tablesorter/js/parsers/parser-roman.min.js4
20 files changed, 107 insertions, 0 deletions
diff --git a/web/_static/tablesorter/js/parsers/parser-date-extract.min.js b/web/_static/tablesorter/js/parsers/parser-date-extract.min.js
new file mode 100644
index 0000000..b2d85bb
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-date-extract.min.js
@@ -0,0 +1,11 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: Extract out date - updated 10/26/2014 (v2.18.0) */
+!function(e){"use strict";var a=/[A-Z]{3,10}\.?\s+\d{1,2},?\s+(?:\d{4})(?:\s+\d{1,2}:\d{2}(?::\d{2})?(?:\s+[AP]M)?)?/i,n=/(\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/i,i=/(\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/i,s=/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,d=/(\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/i,c=/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/;
+/*! extract US Long Date */e.tablesorter.addParser({id:"extractUSLongDate",is:function(){return!1},format:function(e){var t,r=e?e.match(a):e;return r&&(t=new Date(r[0]))instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"}),
+/*! extract MMDDYYYY */
+e.tablesorter.addParser({id:"extractMMDDYYYY",is:function(){return!1},format:function(e){var t,r=e?e.replace(/\s+/g," ").replace(/[\-.,]/g,"/").match(n):e;return r&&(t=new Date(r[0]))instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"}),
+/*! extract DDMMYYYY */
+e.tablesorter.addParser({id:"extractDDMMYYYY",is:function(){return!1},format:function(e){var t,r=e?e.replace(/\s+/g," ").replace(/[\-.,]/g,"/").match(i):e;return r&&(t=new Date(r[0].replace(s,"$2/$1/$3")))instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"}),
+/*! extract YYYYMMDD */
+e.tablesorter.addParser({id:"extractYYYYMMDD",is:function(){return!1},format:function(e){var t,r=e?e.replace(/\s+/g," ").replace(/[\-.,]/g,"/").match(d):e;return r&&(t=new Date(r[0].replace(c,"$2/$3/$1")))instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-date-iso8601.min.js b/web/_static/tablesorter/js/parsers/parser-date-iso8601.min.js
new file mode 100644
index 0000000..fe116cb
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-date-iso8601.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: ISO-8601 date - updated 10/26/2014 (v2.18.0) */
+!function(e){"use strict";var s=/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?$/;e.tablesorter.addParser({id:"iso8601date",is:function(e){return!!e&&e.match(s)},format:function(e){var t=e?e.match(s):e;if(t){var r=new Date(t[1],0,1);return t[3]&&r.setMonth(t[3]-1),t[5]&&r.setDate(t[5]),t[7]&&r.setHours(t[7]),t[8]&&r.setMinutes(t[8]),t[10]&&r.setSeconds(t[10]),t[12]&&r.setMilliseconds(1e3*Number("0."+t[12])),r.getTime()}return e},type:"numeric"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-date-month.min.js b/web/_static/tablesorter/js/parsers/parser-date-month.min.js
new file mode 100644
index 0000000..14c465d
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-date-month.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: Month - updated 11/22/2015 (v2.24.6) */
+!function(){"use strict";var c=jQuery.tablesorter;c.dates||(c.dates={}),c.dates.months||(c.dates.months={}),c.dates.months.en={1:"Jan",2:"Feb",3:"Mar",4:"Apr",5:"May",6:"Jun",7:"Jul",8:"Aug",9:"Sep",10:"Oct",11:"Nov",12:"Dec"},c.addParser({id:"month",is:function(){return!1},format:function(e,t,n,a){if(e){var r,o,s=t.config,i=s.globalize&&(s.globalize[a]||s.globalize)||{},u=c.dates.months[i.lang||"en"];for(o in s.ignoreCase&&(e=e.toLowerCase()),u)if("string"==typeof o&&(r=u[o],s.ignoreCase&&(r=r.toLowerCase()),e.match(r)))return parseInt(o,10)}return e},type:"numeric"})}();return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-date-range.min.js b/web/_static/tablesorter/js/parsers/parser-date-range.min.js
new file mode 100644
index 0000000..4cd6f11
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-date-range.min.js
@@ -0,0 +1,11 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: date ranges -updated 11/22/2015 (v2.24.6) */
+!function(e){"use strict";var u,f=e.tablesorter,i=/(\d{1,2}[-\s]\d{1,2}[-\s]\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/gi,d=/(\d{1,2}[-\s]\d{1,2}[-\s]\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/gi,o=/(\d{1,2})[-\s](\d{1,2})[-\s](\d{4})/,c=/(\d{4}[-\s]\d{1,2}[-\s]\d{1,2}(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?)/gi,g=/(\d{4})[-\s](\d{1,2})[-\s](\d{1,2})/,l=/(\d{1,2}\s+\w+\s+\d{4}(\s+\d{1,2}:\d{2}(:\d{2})?(\s\w+)?)?)/g,p=/(\d{1,2})\s+(\w+)\s+(\d{4})/;
+/*! date-range MMDDYYYY */e.tablesorter.addParser({id:"date-range-mdy",is:function(){return!1},format:function(e){var t,r,a,n,s=[];if(n=(r=e.replace(/\s+/g," ").replace(/[\/\-.,]/g,"-").match(i))&&r.length){for(a=0;a<n;a++)t=new Date(r[a]),s.push(t instanceof Date&&isFinite(t)?t.getTime():r[a]);return s.sort().join(" - ")}return e},type:"text"}),
+/*! date-range DDMMYYYY */
+e.tablesorter.addParser({id:"date-range-dmy",is:function(){return!1},format:function(e){var t,r,a,n,s=[];if(n=(r=e.replace(/\s+/g," ").replace(/[\/\-.,]/g,"-").match(d))&&r.length){for(a=0;a<n;a++)t=new Date((""+r[a]).replace(o,"$2/$1/$3")),s.push(t instanceof Date&&isFinite(t)?t.getTime():r[a]);return s.sort().join(" - ")}return e},type:"text"}),
+/*! date-range DDMMYYYY */
+e.tablesorter.addParser({id:"date-range-ymd",is:function(){return!1},format:function(e){var t,r,a,n,s=[];if(n=(r=e.replace(/\s+/g," ").replace(/[\/\-.,]/g,"-").match(c))&&r.length){for(a=0;a<n;a++)t=new Date((""+r[a]).replace(g,"$2/$3/$1")),s.push(t instanceof Date&&isFinite(t)?t.getTime():r[a]);return s.sort().join(" - ")}return e},type:"text"}),f.dates||(f.dates={}),f.dates.months||(f.dates.months={}),f.dates.months.en={1:"Jan",2:"Feb",3:"Mar",4:"Apr",5:"May",6:"Jun",7:"Jul",8:"Aug",9:"Sep",10:"Oct",11:"Nov",12:"Dec"},u=function(e,t,r){var a,n,s=t.globalize&&(t.globalize[r]||t.globalize)||{},i=f.dates.months[s.lang||"en"];for(n in t.ignoreCase&&(e=e.toLowerCase()),i)if("string"==typeof n&&(a=i[n],t.ignoreCase&&(a=a.toLowerCase()),e.match(a)))return parseInt(n,10);return e},
+/*! date-range "dd MMM yyyy - dd MMM yyyy" */
+f.addParser({id:"date-range-dMMMyyyy",is:function(){return!1},format:function(e,t,r,a){var n,s,i,d,o=[],c=e.replace(/\s+/g," ").match(l),g=c&&c.length;if(g){for(d=0;d<g;d++)n="",(i=c[d].match(p))&&4<=i.length&&(i.shift(),s=u(i[1],t.config,a),isNaN(s)||(c[d]=c[d].replace(i[1],s)),n=new Date((""+c[d]).replace(f.regex.shortDateXXY,"$3/$2/$1"))),o.push(n instanceof Date&&isFinite(n)?n.getTime():c[d]);return o.sort().join(" - ")}return e},type:"text"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-date-two-digit-year.min.js b/web/_static/tablesorter/js/parsers/parser-date-two-digit-year.min.js
new file mode 100644
index 0000000..73bf007
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-date-two-digit-year.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: two digit year - updated 11/26/2016 (v2.28.0) */
+!function(e){"use strict";var r=e.tablesorter,u=(new Date).getFullYear();r.defaults.dataRange="",r.dates||(r.dates={}),r.dates.regxxxxyy=/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{2})/,r.dates.regyyxxxx=/(\d{2})[\/\s](\d{1,2})[\/\s](\d{1,2})/,r.formatDate=function(e,t,r,a){if(e){var n,d,s=e.replace(/\s+/g," ").replace(/[-.,]/g,"/").replace(t,r),i=new Date(s);if(i instanceof Date&&isFinite(i)){for(n=i.getFullYear(),d=a&&a.config.dateRange||50;d<u-n;)n+=100;return i.setFullYear(n)}}return e},e.tablesorter.addParser({id:"ddmmyy",is:function(){return!1},format:function(e,t){return r.formatDate(e,r.dates.regxxxxyy,"$2/$1/19$3",t)},type:"numeric"}),e.tablesorter.addParser({id:"mmddyy",is:function(){return!1},format:function(e,t){return r.formatDate(e,r.dates.regxxxxyy,"$1/$2/19$3",t)},type:"numeric"}),e.tablesorter.addParser({id:"yymmdd",is:function(){return!1},format:function(e,t){return r.formatDate(e,r.dates.regyyxxxx,"$2/$3/19$1",t)},type:"numeric"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-date-weekday.min.js b/web/_static/tablesorter/js/parsers/parser-date-weekday.min.js
new file mode 100644
index 0000000..d66fa75
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-date-weekday.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: weekday - updated 11/22/2015 (v2.24.6) */
+!function(w){"use strict";var y=w.tablesorter;y.dates||(y.dates={}),y.dates.weekdays||(y.dates.weekdays={}),y.dates.weekdays.en={sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},y.dates.weekStartList={sun:"1995",mon:"1996",fri:"1999",sat:"2000"},y.dates.weekdaysXref=["sun","mon","tue","wed","thu","fri","sat"],y.addParser({id:"weekday",is:function(){return!1},format:function(e,t,a,r){if(e){var n,s,i,d=t.config,o=d.globalize&&(d.globalize[r]||d.globalize)||{},u=y.dates.weekdays[o.lang||"en"],f=y.dates.weekdaysXref;for(s in d.ignoreCase&&(e=e.toLowerCase()),u)if("string"==typeof s&&(n=u[s],d.ignoreCase&&(n=n.toLowerCase()),e.match(n)))return-1<(i=w.inArray(s,f))?i:e}return e},type:"numeric"}),y.addParser({id:"weekday-index",is:function(){return!1},format:function(e,t){if(e){var a=t.config,r=new Date(e);if(r instanceof Date&&isFinite(r))return new Date("1/"+(r.getDay()+1)+"/"+y.dates.weekStartList[a.weekStarts||"sun"])}return e},type:"numeric"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-date.min.js b/web/_static/tablesorter/js/parsers/parser-date.min.js
new file mode 100644
index 0000000..e61936f
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-date.min.js
@@ -0,0 +1,7 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: dates - updated 5/24/2017 (v2.28.11) */
+!function(e){"use strict";
+/*! Sugar (https://sugarjs.com/docs/#/DateParsing) */e.tablesorter.addParser({id:"sugar",is:function(){return!1},format:function(e){var t=Date.create||Sugar.Date.create,r=t?t(e):e?new Date(e):e;return r instanceof Date&&isFinite(r)?r.getTime():e},type:"numeric"}),
+/*! Datejs (http://www.datejs.com/) */
+e.tablesorter.addParser({id:"datejs",is:function(){return!1},format:function(e){var t=Date.parse?Date.parse(e):e?new Date(e):e;return t instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-duration.min.js b/web/_static/tablesorter/js/parsers/parser-duration.min.js
new file mode 100644
index 0000000..7afe723
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-duration.min.js
@@ -0,0 +1,6 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: duration & countdown - updated 2/7/2015 (v2.19.0) */
+!function(e){"use strict";e.tablesorter.addParser({id:"duration",is:function(){return!1},format:function(e,r){var t,n,s=r.config,i="",o="",a=s.durationLength||4,u=new Array(a+1).join("0"),d=(s.durationLabels||"(?:years|year|y),(?:days|day|d),(?:hours|hour|h),(?:minutes|minute|min|m),(?:seconds|second|sec|s)").split(/\s*,\s*/),c=d.length;if(!s.durationRegex){for(t=0;t<c;t++)i+="(?:(\\d+)\\s*"+d[t]+"\\s*)?";s.durationRegex=new RegExp(i,"i")}for(n=(s.usNumberFormat?e.replace(/,/g,""):e.replace(/(\d)(?:\.|\s*)(\d)/g,"$1$2")).match(s.durationRegex),t=1;t<c+1;t++)o+=(u+(n[t]||0)).slice(-a);return o},type:"text"}),
+/*! Countdown parser ( hh:mm:ss ) */
+e.tablesorter.addParser({id:"countdown",is:function(){return!1},format:function(e,r){for(var t=r.config.durationLength||4,n=new Array(t+1).join("0"),s=e.split(/\s*:\s*/),i=s.length,o=[];i;)o.push((n+(s[--i]||0)).slice(-t));return o.length?o.reverse().join(""):e},type:"text"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-feet-inch-fraction.min.js b/web/_static/tablesorter/js/parsers/parser-feet-inch-fraction.min.js
new file mode 100644
index 0000000..accc777
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-feet-inch-fraction.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: distance */
+!function(a){"use strict";var n=a.tablesorter;n.symbolRegex=/[\u215b\u215c\u215d\u215e\u00bc\u00bd\u00be]/g,n.processFractions=function(t,e){if(t){var r,s=0;t=a.trim(t.replace(/\"/,"")),/\s/.test(t)&&(s=n.formatFloat(t.split(" ")[0],e),t=a.trim(t.substring(t.indexOf(" "),t.length))),/\//g.test(t)?(r=t.split("/"),t=s+parseInt(r[0],10)/parseInt(r[1]||1,10)):n.symbolRegex.test(t)&&(t=s+t.replace(n.symbolRegex,function(t){return{"⅛":".125","⅜":".375","⅝":".625","⅞":".875","¼":".25","½":".5","¾":".75"}[t]}))}return t||0},a.tablesorter.addParser({id:"distance",is:function(){return!1},format:function(t,e){if(""===t)return"";var r=/^\s*\S*(\s+\S+)?\s*\'/.test(t)?t.split(/\'/):[0,t],s=n.processFractions(r[0],e),a=n.processFractions(r[1],e);return/[\'\"]/.test(t)?parseFloat(s)+(parseFloat(a)/12||0):parseFloat(s)+parseFloat(a)},type:"numeric"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-file-type.min.js b/web/_static/tablesorter/js/parsers/parser-file-type.min.js
new file mode 100644
index 0000000..5314f83
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-file-type.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: filetype - updated 11/10/2015 (v2.24.4) */
+!function(c){"use strict";c.tablesorter.fileTypes={separator:"|",equivalents:{"3D Image":"3dm|3ds|dwg|max|obj",Audio:"aif|aac|ape|flac|la|m4a|mid|midi|mp2|mp3|ogg|ra|raw|rm|wav|wma",Compressed:"7z|bin|cab|cbr|gz|gzip|iso|lha|lz|rar|tar|tgz|zip|zipx|zoo",Database:"csv|dat|db|dbf|json|ldb|mdb|myd|pdb|sql|tsv|wdb|wmdb|xlr|xls|xlsx|xml",Development:"asm|c|class|cls|cpp|cc|cs|cxx|cbp|cs|dba|fla|h|java|lua|pl|py|pyc|pyo|sh|sln|r|rb|vb",Document:"doc|docx|odt|ott|pages|pdf|rtf|tex|wpd|wps|wrd|wri",Executable:"apk|app|com|exe|gadget|lnk|msi",Fonts:"eot|fnt|fon|otf|ttf|woff",Icons:"ani|cur|icns|ico",Images:"bmp|gif|jpg|jpeg|jpe|jp2|pic|png|psd|tga|tif|tiff|wmf|webp",Presentation:"pps|ppt",Published:"chp|epub|lit|pub|ppp|fm|mobi",Script:"as|bat|cgi|cmd|jar|js|lua|scpt|scptd|sh|vbs|vb|wsf",Styles:"css|less|sass",Text:"info|log|md|markdown|nfo|tex|text|txt",Vectors:"awg|ai|eps|cdr|ps|svg",Video:"asf|avi|flv|m4v|mkv|mov|mp4|mpe|mpeg|mpg|ogg|rm|rv|swf|vob|wmv",Web:"asp|aspx|cer|cfm|htm|html|php|url|xhtml"}},c.tablesorter.addParser({id:"filetype",is:function(){return!1},format:function(t,e){var s,a=e.config.widgetOptions,p=a.group_separator||"-",r=t.lastIndexOf("."),i=c.tablesorter.fileTypes.separator,o=c.tablesorter.fileTypes.matching,n=c.tablesorter.fileTypes.equivalents;if(o||(s=[],c.each(n,function(t,e){s.push(e)}),o=c.tablesorter.fileTypes.matching=i+s.join(i)+i),0<=r&&(s=i+t.substring(r+1,t.length)+i,0<=o.indexOf(s)))for(r in n)if(0<=(i+n[r]+i).indexOf(s))return r+("/"!==p.toString().charAt(0)?a.group_separator:"-")+t;return t},type:"text"}),c.tablesorter.addParser({id:"file-extension",is:function(){return!1},format:function(t){var e,s=t.split(".");return s.length?(e=s.pop(),s.unshift(e),s.join(".")):t},type:"text"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-globalize.min.js b/web/_static/tablesorter/js/parsers/parser-globalize.min.js
new file mode 100644
index 0000000..cfe9c67
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-globalize.min.js
@@ -0,0 +1,7 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: jQuery Globalize - updated 11/2/2015 (v2.24.1) */
+!function(b){"use strict";
+/*! jQuery Globalize date parser (https://github.com/jquery/globalize#date-module) */b.tablesorter.addParser({id:"globalize-date",is:function(){return!1},format:function(e,l,a,o){var r,i,t=l.config,n=t.globalize&&(t.globalize[o]||t.globalize)||{};return Globalize&&(r="object"==typeof n.Globalize?n.Globalize:Globalize(n.lang||"en"),n.Globalize||(n.Globalize=r)),(i=r&&r.dateParser?r.dateParser(n)(e):e?new Date(e):e)instanceof Date&&isFinite(i)?i.getTime():e},type:"numeric"}),
+/*! jQuery Globalize number parser (https://github.com/jquery/globalize#number-module) */
+b.tablesorter.addParser({id:"globalize-number",is:function(){return!1},format:function(e,l,a,o){var r,i,t=l.config,n=t.globalize&&(t.globalize[o]||t.globalize)||{};return Globalize&&(r="object"==typeof n.Globalize?n.Globalize:Globalize(n.lang||"en"),n.Globalize||(n.Globalize=r)),i=r&&r.numberParser?r.numberParser(n)(e):e?b.tablesorter.formatFloat((e||"").replace(/[^\w,. \-()]/g,""),l):e,e&&"number"==typeof i?i:e},type:"numeric"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-huge-numbers.min.js b/web/_static/tablesorter/js/parsers/parser-huge-numbers.min.js
new file mode 100644
index 0000000..038110e
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-huge-numbers.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: hugeNumbers - updated 3/1/2016 (v2.25.5) */
+!function(){"use strict";jQuery.tablesorter.addParser({id:"hugeNumbers",is:function(){return!1},format:function(e){return e.replace(/\B(?=(\d{12})+(?!\d))/g,",")},type:"text"})}();return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-ignore-articles.min.js b/web/_static/tablesorter/js/parsers/parser-ignore-articles.min.js
new file mode 100644
index 0000000..8c0a1a0
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-ignore-articles.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: ignoreArticles - updated 9/15/2014 (v2.17.8) */
+!function(o){"use strict";var g=o.tablesorter;g.ignoreArticles={en:"the, a, an",de:"der, die, das, des, dem, den, ein, eine, einer, eines, einem, einen",nl:"de, het, de, een",es:"el, la, lo, los, las, un, una, unos, unas",pt:"o, a, os, as, um, uma, uns, umas",fr:"le, la, l'_, les, un, une, des",it:"il, lo, la, l'_, i, gli, le, un', uno, una, un",hu:"a, az, egy"},g.addParser({id:"ignoreArticles",is:function(){return!1},format:function(e,r,s,a){var n,i,t,l=r.config,d=e||"";return l.headers&&l.headers[a]&&l.headers[a].ignoreArticlesRegex||(l.headers||(l.headers={}),l.headers[a]||(l.headers[a]={}),t=g.getData(l.$headers.eq(a),g.getColumnData(r,l.headers,a),"ignoreArticles"),n=(g.ignoreArticles[t]||"the, a, an")+"",l.headers[a].ignoreArticlesRegex=new RegExp("^("+o.trim(n.split(/\s*\,\s*/).join("\\s|")+"\\s").replace("_\\s","")+")","i"),i=g.getData(l.$headers.eq(a),g.getColumnData(r,l.headers,a),"ignoreArticlesExcept"),l.headers[a].ignoreArticlesRegex2=""!==i?new RegExp("^("+i.replace(/\s/g,"\\s")+")","i"):""),!(n=l.headers[a].ignoreArticlesRegex).test(d)||(i=l.headers[a].ignoreArticlesRegex2)&&i.test(d)?d:d.replace(n,"")},type:"text"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-image.min.js b/web/_static/tablesorter/js/parsers/parser-image.min.js
new file mode 100644
index 0000000..fe05a1a
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-image.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: image - new 7/17/2014 (v2.17.5) */
+!function(i){"use strict";i.tablesorter.addParser({id:"image",is:function(){return!1},format:function(t,r,e){return i(e).find("img").attr(r.config.imgAttr||"alt")||t},parsed:!0,type:"text"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-input-select.min.js b/web/_static/tablesorter/js/parsers/parser-input-select.min.js
new file mode 100644
index 0000000..3176747
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-input-select.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: input & select - updated 2018-07-10 (v2.30.7) */
+!function(p){"use strict";p.tablesorter.addParser({id:"inputs",is:function(){return!1},format:function(e,t,a){var r=p(a).find("input");return r.length?r.val():e},parsed:!0,type:"text"}),p.tablesorter.addParser({id:"inputs-numeric",is:function(){return!1},format:function(e,t,a){var r=p(a).find("input"),n=r.length?r.val():e,i=p.tablesorter.formatFloat((n||"").replace(/[^\w,. \-()]/g,""),t);return e&&"number"==typeof i?i:e?p.trim(e&&t.config.ignoreCase?e.toLocaleLowerCase():e):e},parsed:!0,type:"numeric"}),p.tablesorter.addParser({id:"checkbox",is:function(){return!1},format:function(e,t,a){var r=p(a),n=t.config.widgetOptions,i=n.group_checkbox?n.group_checkbox:["checked","unchecked"],s=r.find('input[type="checkbox"]'),o=s.length?s[0].checked:"";return s.length?i[o?0:1]:e},parsed:!0,type:"text"}),p.tablesorter.addParser({id:"radio",is:function(){return!1},format:function(e,t,a){var r=p(a).find("input:checked");return r.length?r.val():e},parsed:!0,type:"text"}),p.tablesorter.addParser({id:"select",is:function(){return!1},format:function(e,t,a){var r=p(a).find("select");return r.length?r.val():e},parsed:!0,type:"text"}),p.tablesorter.addParser({id:"select-text",is:function(){return!1},format:function(e,t,a){var r=p(a).find("select");return r.length?r.find("option:selected").text()||"":e},parsed:!0,type:"text"}),p.tablesorter.addParser({id:"textarea",is:function(){return!1},format:function(e,t,a){var r=p(a).find("textarea");return r.length?r.val():e},parsed:!0,type:"text"}),p.tablesorter.defaults.checkboxClass="",p.tablesorter.defaults.checkboxVisible="",p(function(){if(p.fn.on){var h=function(e,t,a,r){e.toggleClass(t+"-"+a,r),(e[0].className||"").match(t+"-")?e.addClass(t):e.removeClass(t)},u=function(e,t){if(e.length&&"INPUT"!==e[0].nodeName&&(e=e.find('input[type="checkbox"]')),e.length){var a=window.navigator.userAgent;"indeterminate"===t?(e.prop("checked",!(-1<a.indexOf("Trident/")||-1<a.indexOf("Edge/"))),e.prop("indeterminate",!0)):(e.prop("checked",t),e.prop("indeterminate",!1))}},f=function(e,r){var n,i=e.children("tbody").children(":visible"),s=i.length,t=e[0].config,a=t&&t.widgetOptions,o=t&&t.$headers.add(p(t.namespace+"_extra_headers"))||e.children("thead"),c=a&&a.$sticky;o.find('input[type="checkbox"]').each(function(){c&&(n=c.find('[data-column="'+e+'"]'));var e=p(this).closest("td, th").attr("data-column"),t=i.filter("."+r+"-"+e).length,a=t===s&&0<s;0===t||a?(u(p(this),a),n&&u(n,a)):(u(p(this),"indeterminate"),n&&u(n,"indeterminate"))})};p("table").on("tablesorter-initialized updateComplete",function(){this.tablesorterBusy=!1;var e=".parser-forms";p(this).addClass(this.config.namespace.slice(1)).children("tbody").off(e).on("mouseleave"+e,function(e){"TBODY"===e.target.nodeName&&p(":focus").blur()}).on("focus"+e,"select, input:not([type=checkbox]), textarea",function(e){var t=p(e.target).closest("tr"),a=t.closest("table")[0].config;!a||a&&a.ignoreChildRow&&t.hasClass(a.cssChildRow)||p(this).data("ts-original-value",this.value)}).on("blur"+e,"input:not([type=checkbox]), textarea",function(e){var t=p(e.target).closest("tr"),a=t.closest("table")[0].config;!a||a&&a.ignoreChildRow&&t.hasClass(a.cssChildRow)||(this.value=p(this).data("ts-original-value"))}).on("change keyup ".split(" ").join(e+" "),"select, input, textarea",function(e){var t=p(this).closest("tr"),a=t.closest("table")[0].config;if(a&&!(a&&a.ignoreChildRow&&t.hasClass(a.cssChildRow)))if(27!==e.which||"INPUT"===this.nodeName&&"checkbox"===this.type){if("change"===e.type||"keyup"===e.type&&13===e.which&&("INPUT"===e.target.nodeName||"TEXTAREA"===e.target.nodeName&&e.altKey)){var r,n=p(e.target),i="checkbox"===e.target.type,s=n.closest("td"),o=s[0].cellIndex,c=a.table.tablesorterBusy,l=a.$headerIndexed&&a.$headerIndexed[o]||[],d=i?e.target.checked:n.val();if(p.isEmptyObject(a)||!1!==c)return;if(i&&(r=a.checkboxClass||"checked",h(s.closest("tr"),r,o,d),f(a.$table,r)),l.length&&(l.hasClass("parser-false")||l.hasClass("sorter-false")&&l.hasClass("filter-false"))||"change"===e.type&&a.table.isUpdating)return;(a&&d!==n.data("ts-original-value")||i)&&(n.data("ts-original-value",d),a.table.tablesorterBusy=!0,p.tablesorter.updateCell(a,s,void 0,function(){a.$table,a.table.tablesorterBusy=!1}))}}else this.value=p(this).data("ts-original-value")}),p(this).children("thead").find('input[type="checkbox"]')&&p(this).off(e).on("tablesorter-ready"+e,function(){var e,t=p(this),a=t.length&&t[0].config;p.isEmptyObject(a)||(this.tablesorterBusy=!0,e=a&&a.checkboxClass||"checked",f(t,e),this.tablesorterBusy=!1)}).children("thead").add(this.config.widgetOptions.$sticky).off(e).on("click"+e+" change"+e,'input[type="checkbox"]',function(e){var t,a,r,n,i,s,o=p(this),c=this.checked,l=o.closest("table"),d=l.length&&l[0].className.match(/(tablesorter\w+)_extra_table/);return d&&(d=d[1],l=p("."+d+":not(."+d+"_extra_table)")),t=l.length&&l[0].config,!(!l.length||!t||l[0].tablesorterBusy)&&(r=parseInt(o.closest("td, th").attr("data-column"),10),i="checkbox"===t.parsers[r].id,a=t.checkboxVisible,l[0].tablesorterBusy=!0,u(n=l.children("tbody").children("tr"+(void 0===a||!0===a?":visible":"")).children(":nth-child("+(r+1)+")"),c),s=t.checkboxClass||"checked",n.each(function(){h(p(this).closest("tr"),s,r,c)}),d?u(l.children("thead").find('[data-column="'+r+'"]'),c):t.widgetOptions.$sticky&&u(t.widgetOptions.$sticky.find("thead").find('[data-column="'+r+'"]'),c),f(l,s),i?p.tablesorter.update(t,void 0,function(){l[0].tablesorterBusy=!1}):l[0].tablesorterBusy=!1,!0)})})}})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-leading-zeros.min.js b/web/_static/tablesorter/js/parsers/parser-leading-zeros.min.js
new file mode 100644
index 0000000..e69f342
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-leading-zeros.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: leading zeros - updated 4/2/2017 (v2.28.6) */
+!function(){"use strict";var i=jQuery.tablesorter;i.addParser({id:"leadingZeros",is:function(){return!1},format:function(e,t){var r=(e||"").replace(i.regex.nondigit,""),n=i.formatFloat(r,t),a=n.toString();return isNaN(n)||n!=r||r.length===a.length||(n-=1e-10*(e.length-a.length)),n},type:"number"})}();return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-metric.min.js b/web/_static/tablesorter/js/parsers/parser-metric.min.js
new file mode 100644
index 0000000..37d70b5
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-metric.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: metric */
+!function(h){"use strict";var f={"Y|Yotta|yotta":[1e24,Math.pow(1024,8)],"Z|Zetta|zetta":[1e21,Math.pow(1024,7)],"E|Exa|exa":[1e18,Math.pow(1024,6)],"P|Peta|peta":[1e15,Math.pow(1024,5)],"T|Tera|tera":[1e12,Math.pow(1024,4)],"G|Giga|giga":[1e9,Math.pow(1024,3)],"M|Mega|mega":[1e6,Math.pow(1024,2)],"k|Kilo|kilo":[1e3,1024],"h|hecto":[100,100],"da|deka":[10,10],"d|deci":[.1,.1],"c|centi":[.01,.01],"m|milli":[.001,.001],"µ|micro":[1e-6,1e-6],"n|nano":[1e-9,1e-9],"p|pico":[1e-12,1e-12],"f|femto":[1e-15,1e-15],"a|atto":[1e-18,1e-18],"z|zepto":[1e-21,1e-21],"y|yocto":[1e-24,1e-24]},l=/^[b|bit|byte|o|octet]/i;h.tablesorter.addParser({id:"metric",is:function(){return!1},format:function(e,t,a,o){var r,i,c,n,m="m|meter",p=h.tablesorter.formatFloat(e.replace(/[^\w,. \-()]/g,""),t),d=t.config.$headerIndexed[o],s=d.data("metric");if(s||(r=(d.attr("data-metric-name")||m).split("|"),c=d.attr("data-metric-name-full")||"",n=d.attr("data-metric-name-abbr")||"",s=[c||r[1]||r[0].substring(1),n||r[0]],i=l.test(s.join("")),s[2]=new RegExp("(\\d+)(\\s+)?([Zz]etta|[Ee]xa|[Pp]eta|[Tt]era|[Gg]iga|[Mm]ega|kilo|hecto|deka|deci|centi|milli|micro|nano|pico|femto|atto|zepto|yocto)("+((""===c?"":c+"|"+n)||(i?s[0].toLowerCase()+"|"+s[0].toUpperCase():s[0])+"|"+(i?s[1].toLowerCase()+"|"+s[1].toUpperCase():s[1]))+")"),s[3]=new RegExp("(\\d+)(\\s+)?(Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)("+(n||(i?s[1].toLowerCase()+"|"+s[1].toUpperCase():s[1]))+")"),d.data("metric",s)),r=e.match(s[2])||e.match(s[3]))for(m in f)if(r[3].match(m))return i=l.test(r[4])?1:0,p*f[m][i];return p},type:"numeric"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-named-numbers.min.js b/web/_static/tablesorter/js/parsers/parser-named-numbers.min.js
new file mode 100644
index 0000000..e474b82
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-named-numbers.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: namedNumbers - updated 10/26/2014 (v2.18.0) */
+!function(d){"use strict";var g,v,c={negative:["negative","minus"],numbers:{zero:0,one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10,eleven:11,twelve:12,thirteen:13,fourteen:14,fifteen:15,sixteen:16,seventeen:17,eighteen:18,nineteen:19,twenty:20,thirty:30,forty:40,fourty:40,fifty:50,sixty:60,seventy:70,eighty:80,ninety:90},hundred:"hundred",powers:{thousand:1e3,million:1e6,billion:1e9,trillion:1e12,quadrillion:1e15,quintillion:1e18,sextillion:1e21,septillion:1e24,octillion:1e27,nonillion:1e30,decillion:1e33,undecillion:1e36,duodecillion:1e39,tredecillion:1e42,quattuordecillion:1e45,quindecillion:1e48,sexdecillion:1e51,septendecillion:1e54,octodecillion:1e57,novemdecillion:1e60,vigintillion:1e63,unvigintillion:1e66,duovigintillion:1e69,trevigintillion:1e72,quattuorvigintillion:1e75,quinvigintillion:1e78,sexvigintillion:1e81,septenvigintillion:1e84,octovigintillion:1e87,novemvigintillion:1e90,trigintillion:1e93,untrigintillion:1e96,duotrigintillion:1e99,googl:1e100}},f=new RegExp("("+c.negative.join("|")+")");d.tablesorter.addParser({id:"namedNumbers",is:function(){return!1},format:function(e,i){v=g=0;var n,t,l,o,r,u,s=(e||"").split(/[\s-]+/),a=s.length;for(n=0;n<a;n++)t=s[n].toLowerCase(),l=i,r=void 0,o=t.replace(/[,."']/g,""),r=d.tablesorter.formatFloat(t||"",l),u=c.powers.hasOwnProperty(o)?c.powers[o]:null,null!==(r="number"==typeof r?r:c.numbers.hasOwnProperty(o)?c.numbers[o]:null)?v+=r:o===c.hundred?v*=100:null!==u&&(g+=v*u,v=0);return(g=(g+v)*(e.match(f)?-1:1))||c.numbers.hasOwnProperty(e)?g:d.tablesorter.formatFloat(e||"",i)},type:"numeric"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-network.min.js b/web/_static/tablesorter/js/parsers/parser-network.min.js
new file mode 100644
index 0000000..763539a
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-network.min.js
@@ -0,0 +1,9 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: network - updated 2018-01-10 (v2.29.3) */
+!function(d){"use strict";var e,t,o=d.tablesorter;
+/*! IPv6 Address parser (WIP) */d.extend(o.regex,{},{ipv4Validate:/((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})/,ipv4Extract:/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/,ipv6Validate:/^\s*((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/i}),o.defaults.ipv6HexFormat=!1,o.addParser({id:"ipv6Address",is:function(d){return o.regex.ipv6Validate.test(d)},format:function(d,e){var t,a,r,i,f,s=!!e&&("boolean"==typeof e?e:e&&e.config.ipv6HexFormat||!1),n="",p="";if(d=d.replace(/\s*/g,""),o.regex.ipv4Validate.test(d)){for(i=d.match(o.regex.ipv4Extract),a="",t=1;t<i.length;t++)a+=("00"+parseInt(i[t],10).toString(16)).slice(-2)+(2===t?":":"");d=d.replace(o.regex.ipv4Extract,a)}if(-1===d.indexOf("::"))n=d;else{for(r=d.split("::"),t=f=0;t<r.length;t++)f+=r[t].split(":").length;for(n+=r[0]+":",t=0;t<8-f;t++)n+="0000:";n+=r[1]}for(i=n.split(":"),t=0;t<8;t++)i[t]=s?("0000"+i[t]).slice(-4):("00000"+(parseInt(i[t],16)||0)).slice(-5),p+=7!==t?i[t]+":":i[t];return p},type:"text"}),t=function(d){return/^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/.test(d)},e=function(d){var e,t=d?d.split("."):"",a=[],r=t.length;for(e=0;e<r;e++)a.push(("000"+t[e]).slice(-3));return d?a.join("."):d},
+/*! Parser: ipv4Address (a.k.a. ipAddress) */
+o.addParser({id:"ipAddress",is:t,format:e,type:"text"}),o.addParser({id:"ipv4Address",is:t,format:e,type:"text"}),
+/*! Parser: MAC address */
+o.addParser({id:"MAC",is:function(){return!1},format:function(d){var e,t,a=[],r=(d||"").replace(/[:.-]/g,"").match(/\w{2}/g);if(r){for(t=r.length,e=0;e<t;e++)a.push(("000"+parseInt(r[e],16)).slice(-3));return a.join(".")}return d},type:"text"})}(jQuery);return jQuery;}));
diff --git a/web/_static/tablesorter/js/parsers/parser-roman.min.js b/web/_static/tablesorter/js/parsers/parser-roman.min.js
new file mode 100644
index 0000000..e4b5222
--- /dev/null
+++ b/web/_static/tablesorter/js/parsers/parser-roman.min.js
@@ -0,0 +1,4 @@
+(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
+
+/*! Parser: roman - updated 6/28/MMXIV (v2.17.3) */
+!function(c){"use strict";var p=/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/i,m=/\b([MCDLXVI]+\b)/gi,l={I:1,V:5,X:10,L:50,C:100,D:500,M:1e3};c.tablesorter.addParser({id:"roman",is:function(){return!1},format:function(r){var t,e=r.toUpperCase().split(""),n=0;if(!r||!p.test(r))return r;for(;e.length;)n+=(t=l[e.shift()])*(t<l[e[0]]?-1:1);return n},type:"numeric"}),c.tablesorter.addParser({id:"roman-ignore",is:function(){return!1},format:function(r,t,e,n){var i,a,o=t.config,s=c.isArray(o.roman_ignore)?o.roman_ignore[n]:0,u=(isNaN(s)?c.trim(r.replace(s,"")):c.trim(r.substring(0,r.length-s))).match(m),f=0;if(!p.test(u))return r;for(u=(a=u[0]).toUpperCase().split("");u.length;)(i=l[u.shift()])&&(f+=i*(i<l[u[0]]?-1:1));return f?r.replace(a,f):r},type:"text"}),c.tablesorter.addParser({id:"roman-extract",is:function(){return!1},format:function(r){var t,e=c.grep(r.split(/\b/),function(r){return p.test(r)?r:""}).join("").match(m),n=0;if(!(e?p.test(e):0))return r;for(e=e[0].toUpperCase().split("");e.length;)(t=l[e.shift()])&&(n+=t*(t<l[e[0]]?-1:1));return n||r},type:"numeric"})}(jQuery);return jQuery;}));