New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

tablesort

Package Overview
Dependencies
Maintainers
1
Versions
40
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tablesort - npm Package Compare versions

Comparing version 1.2.2 to 1.3.0

7

package.json
{
"name": "tablesort",
"description": "tablesort BRAP tablesort BRAP",
"version": "1.2.2",
"description": "A sorting component for HTML tables",
"version": "1.3.0",
"author": "tristen <@fallsemo>",

@@ -10,3 +10,4 @@ "main": "./tablesort.js",

"contributors": [
"Olivier Vaillancourt <@ovaillancourt>"
"Olivier Vaillancourt <@ovaillancourt>",
"Dmitry Kichenko <@imissmyjuno>"
],

@@ -13,0 +14,0 @@ "licenses": [{

@@ -18,2 +18,3 @@ # tablesort.js

* Sort currency
* Basic date sorting: in `dd/mm/yy` or `dd-mm-yy` format.

@@ -20,0 +21,0 @@ ## Additional options

// tablesort.js
// tristen @fallsemo
(function () {
function Tablesort(el, options) {
el.tagName === 'TABLE' ? this.init(el, options || {}) : console.error('Element must be a table');
}
function Tablesort(el, options) {
el.tagName === 'TABLE' ? this.init(el, options || {}) : console.error('Element must be a table');
}
Tablesort.prototype = {
init: function (el, options) {
var that = this;
var firstRow;
this.thead = false;
this.options = options;
this.options.d = options.descending || false;
Tablesort.prototype = {
init: function(el, options) {
var that = this;
var firstRow;
this.thead = false;
this.options = options;
this.options.d = options.descending || false;
if (el.rows && el.rows.length > 0) {
if (el.tHead && el.tHead.rows.length > 0) {
firstRow = el.tHead.rows[el.tHead.rows.length -1];
that.thead = true;
} else {
firstRow = el.rows[0];
if(el.rows && el.rows.length > 0) {
if(el.tHead && el.tHead.rows.length > 0) {
firstRow = el.tHead.rows[el.tHead.rows.length - 1];
that.thead = true;
} else {
firstRow = el.rows[0];
}
}
}
if (!firstRow) return;
if(!firstRow) return;
// Assume first row is the header and attach a click handler to each.
for (var i = 0; i < firstRow.cells.length; i++) {
var cell = firstRow.cells[i];
if (!that.hasClass(cell, 'no-sort')) {
cell.className += ' sort-header';
this.addEvent(cell, 'click', function(e) {
// Delete any sort classes on table headers that are not the current one.
var siblings = that.getParent(cell, 'tr').getElementsByTagName('th');
for (var i = 0; i < siblings.length; i++) {
if (that.hasClass(siblings[i], 'sort-up') || that.hasClass(siblings[i], 'sort-down')) {
if (siblings[i] !== this) {
siblings[i].className = siblings[i].className
.replace(' sort-down', '')
.replace(' sort-up', '');
// Assume first row is the header and attach a click handler to eech.
for(var i = 0; i < firstRow.cells.length; i++) {
var cell = firstRow.cells[i];
if(!hasClass(cell, 'no-sort')) {
cell.className += ' sort-header';
addEvent(cell, 'click', function (e) {
// Delete any sort classes on table headers that are not the current one.
var siblings = getParent(cell, 'tr').getElementsByTagName('th');
for(var i = 0; i < siblings.length; i++) {
if(hasClass(siblings[i], 'sort-up') || hasClass(siblings[i], 'sort-down')) {
if(siblings[i] !== this) {
siblings[i].className = siblings[i].className.replace(' sort-down', '')
.replace(' sort-up', '');
}
}
}
}
that.sortTable(this);
});
that.sortTable(this);
});
}
}
}
},
sortTable: function(header) {
var that = this;
var column = header.cellIndex;
var t = this.getParent(header, 'table');
var sortCaseInsensitive = function(a, b) {
var aa = that.getInnerText(a.cells[that.col]).toLowerCase();
var bb = that.getInnerText(b.cells[that.col]).toLowerCase();
if (aa === bb) return 0;
if (that.options.d) {
if (aa < bb) return -1;
return 1;
}
if (aa < bb) return 1;
return -1;
};
var sortNumber = function(a, b) {
var aa = that.getInnerText(a.cells[that.col]);
aa = that.cleanNumber(aa);
var bb = that.getInnerText(b.cells[that.col]);
bb = that.cleanNumber(bb);
},
sortTable: function (header) {
var that = this;
var column = header.cellIndex;
var t = getParent(header, 'table');
if (that.options.d) return that.compareNumber(aa, bb);
return that.compareNumber(bb, aa);
};
var sortCaseInsensitive = function (a, b) {
var aa = getInnerText(a.cells[that.col]).toLowerCase();
var bb = getInnerText(b.cells[that.col]).toLowerCase();
if(aa === bb) return 0;
if(aa < bb) return 1;
return -1;
};
var sortNumber = function (a, b) {
var aa = getInnerText(a.cells[that.col]);
aa = cleanNumber(aa);
var bb = getInnerText(b.cells[that.col]);
bb = cleanNumber(bb);
return compareNumber(bb, aa);
};
var sortDate = function(a, b) {
var aa = getInnerText(a.cells[that.col]).toLowerCase(),
bb = getInnerText(b.cells[that.col]).toLowerCase();
return parseDate(bb) - parseDate(aa);
};
// Work out a type for the column
if (t.rows.length <= 1) return;
var item = '';
var i = 0;
while (item === '' && i < t.tBodies[0].rows.length) {
var item = that.getInnerText(t.tBodies[0].rows[i].cells[column]);
item = that.trim(item);
if (item.substr(0,4) === '<!--' || item.length === 0) {
item = '';
// Work out a type for the column
if(t.rows.length <= 1) return;
var item = '';
var i = 0;
while(item === '' && i < t.tBodies[0].rows.length) {
item = getInnerText(t.tBodies[0].rows[i].cells[column]);
item = trim(item);
if(item.substr(0, 4) === '<!--' || item.length === 0) {
item = '';
}
i++;
}
i++;
}
if (item === '') return;
var sortFunction;
// Sort as number if a currency key exists or number
if (item.match(/^-?[£$€Û¢´]\d/) || item.match(/^-?(\d+[,\.]?)+(E[\-+][\d]+)?%?$/)) {
sortFunction = sortNumber;
} else {
sortFunction = sortCaseInsensitive;
}
this.col = column;
var firstRow = [], newRows = [], k, j;
if(item === '') return;
var sortFunction;
for (k = 0; k < t.tBodies.length; k++) {
for (i = 0; i < t.tBodies[k].rows[0].length; i++) {
firstRow[i] = t.tBodies[k].rows[0][i];
// Sort as number if a currency key exists or number
if(item.match(/^-?[£$€Û¢´]\d/) || item.match(/^-?(\d+[,\.]?)+(E[-+][\d]+)?%?$/)) {
sortFunction = sortNumber;
} else if(testDate(item)) {
sortFunction = sortDate;
} else {
console.log('string');
sortFunction = sortCaseInsensitive;
}
}
for (k = 0; k < t.tBodies.length; k++) {
if (!that.thead) {
// skip the first row
for (j = 1; j < t.tBodies[k].rows.length; j++) {
newRows[j-1] = t.tBodies[k].rows[j];
this.col = column;
var firstRow = [],
newRows = [],
k, j;
for(k = 0; k < t.tBodies.length; k++) {
for(i = 0; i < t.tBodies[k].rows[0].length; i++) {
firstRow[i] = t.tBodies[k].rows[0][i];
}
}
for(k = 0; k < t.tBodies.length; k++) {
if(!that.thead) {
// skip the first row
for(j = 1; j < t.tBodies[k].rows.length; j++) {
newRows[j - 1] = t.tBodies[k].rows[j];
}
} else {
// don't skip the first row
for(j = 0; j < t.tBodies[k].rows.length; j++) {
newRows[j] = t.tBodies[k].rows[j];
}
}
}
newRows.sort(sortFunction);
// TODO Optimize.
if(that.options.d) {
if(hasClass(header, 'sort-up')) {
header.className = header.className.replace(/ sort-up/, '');
header.className += ' sort-down';
newRows.reverse();
} else {
header.className = header.className.replace(/ sort-down/, '');
header.className += ' sort-up';
}
} else {
// don't skip the first row
for (j = 0; j < t.tBodies[k].rows.length; j++) {
newRows[j] = t.tBodies[k].rows[j];
if(hasClass(header, 'sort-down')) {
header.className = header.className.replace(/ sort-down/, '');
header.className += ' sort-up';
} else {
header.className = header.className.replace(/ sort-up/, '');
header.className += ' sort-down';
newRows.reverse();
}
}
// append rows that already exist rather than creating new ones
for(i = 0; i < newRows.length; i++) {
if(!newRows[i].className) {
t.tBodies[0].appendChild(newRows[i]);
}
}
}
newRows.sort(sortFunction);
};
var week = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\.?\,?\s*/i,
commonDate = /\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/,
month = /(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/i;
// TODO Optimize.
if (that.options.d) {
if (that.hasClass(header, 'sort-up')) {
header.className = header.className.replace(/ sort-up/, '');
header.className += ' sort-down';
var testDate = function(date) {
return (
date.search(week) !== -1 ||
date.search(commonDate) !== -1 ||
date.search(month !== -1)
) !== -1 ;
},
parseDate = function (date) {
date = date.replace(/\-/g, '/');
date = date.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, '$1/$2/$3'); // format before getTime
return new Date(date).getTime();
},
getParent = function (el, pTagName) {
if(el === null) {
return null;
} else if(el.nodeType === 1 && el.tagName.toLowerCase() === pTagName.toLowerCase()) {
return el;
} else {
header.className = header.className.replace(/ sort-down/, '');
header.className += ' sort-up';
newRows.reverse();
return getParent(el.parentNode, pTagName);
}
} else {
if (that.hasClass(header, 'sort-down')) {
header.className = header.className.replace(/ sort-down/, '');
header.className += ' sort-up';
},
getInnerText = function (el) {
var that = this;
if(typeof el === 'string' || typeof el === 'undefined') return el;
if(el.innerText) return el.innerText;
var str = '';
var cs = el.childNodes;
var l = cs.length;
for(var i = 0; i < l; i++) {
switch(cs[i].nodeType) {
case 1:
// ELEMENT_NODE
str += that.getInnerText(cs[i]);
break;
case 3:
// TEXT_NODE
str += cs[i].nodeValue;
break;
}
}
return str;
},
compareNumber = function (a, b) {
var aa = parseFloat(a);
a = isNaN(aa) ? 0 : aa;
var bb = parseFloat(b);
b = isNaN(bb) ? 0 : bb;
return a - b;
},
trim = function (s) {
return s.replace(/^\s+|\s+$/g, '');
},
cleanNumber = function (i) {
return i.replace(/[^\-?0-9.]/g, '');
},
hasClass = function (el, c) {
return(' ' + el.className + ' ').indexOf(' ' + c + ' ') > -1;
},
// http://ejohn.org/apps/jselect/event.html
addEvent = function (object, event, method) {
if(object.attachEvent) {
object['e' + event + method] = method;
object[event + method] = function () {
object['e' + event + method](window.event);
};
object.attachEvent('on' + event, object[event + method]);
} else {
header.className = header.className.replace(/ sort-up/, '');
header.className += ' sort-down';
newRows.reverse();
object.addEventListener(event, method, false);
}
}
};
// append rows that already exist rather than creating new ones
for (i = 0; i < newRows.length; i++) {
if (!newRows[i].className) {
t.tBodies[0].appendChild(newRows[i]);
}
}
},
getInnerText: function(el) {
var that = this;
if (typeof el === 'string' || typeof el === 'undefined') return el;
if (el.innerText) return el.innerText;
var str = '';
var cs = el.childNodes;
var l = cs.length;
for (var i = 0; i < l; i++) {
switch (cs[i].nodeType) {
case 1: // ELEMENT_NODE
str += that.getInnerText(cs[i]);
break;
case 3: // TEXT_NODE
str += cs[i].nodeValue;
break;
}
}
return str;
},
getParent: function(el, pTagName) {
if (el === null) {
return null;
} else if (el.nodeType === 1 && el.tagName.toLowerCase() === pTagName.toLowerCase()) {
return el;
} else {
return this.getParent(el.parentNode, pTagName);
}
},
compareNumber: function(a, b) {
var aa = parseFloat(a);
a = isNaN(aa) ? 0 : aa;
var bb = parseFloat(b);
b = isNaN(bb) ? 0 : bb;
return a - b;
},
trim: function(s) {
return s.replace(/^\s+|\s+$/g, '');
},
cleanNumber: function(i) {
return i.replace(/[^\-?0-9.]/g, '');
},
hasClass: function(el, c) {
return (' ' + el.className + ' ').indexOf(' ' + c + ' ') > -1;
},
// http://ejohn.org/apps/jselect/event.html
addEvent: function(object, event, method) {
if (object.attachEvent) {
object['e' + event + method] = method;
object[event + method] = function(){object['e' + event + method](window.event);};
object.attachEvent('on' + event, object[event + method]);
} else {
object.addEventListener(event, method, false);
}
}
};
window.Tablesort = Tablesort;
})();
// tablesort.js
// tristen @fallsemo
function Tablesort(a,b){a.tagName==="TABLE"?this.init(a,b||{}):console.error("Element must be a table")}Tablesort.prototype={init:function(a,b){var c=this,d;this.thead=!1,this.options=b,this.options.d=b.descending||!1,a.rows&&a.rows.length>0&&(a.tHead&&a.tHead.rows.length>0?(d=a.tHead.rows[a.tHead.rows.length-1],c.thead=!0):d=a.rows[0]);if(!d)return;for(var e=0;e<d.cells.length;e++){var f=d.cells[e];c.hasClass(f,"no-sort")||(f.className+=" sort-header",this.addEvent(f,"click",function(a){var b=c.getParent(f,"tr").getElementsByTagName("th");for(var d=0;d<b.length;d++)(c.hasClass(b[d],"sort-up")||c.hasClass(b[d],"sort-down"))&&b[d]!==this&&(b[d].className=b[d].className.replace(" sort-down","").replace(" sort-up",""));c.sortTable(this)}))}},sortTable:function(a){var b=this,c=a.cellIndex,d=this.getParent(a,"table"),e=function(a,c){var d=b.getInnerText(a.cells[b.col]).toLowerCase(),e=b.getInnerText(c.cells[b.col]).toLowerCase();return d===e?0:b.options.d?d<e?-1:1:d<e?1:-1},f=function(a,c){var d=b.getInnerText(a.cells[b.col]);d=b.cleanNumber(d);var e=b.getInnerText(c.cells[b.col]);return e=b.cleanNumber(e),b.options.d?b.compareNumber(d,e):b.compareNumber(e,d)};if(d.rows.length<=1)return;var g="",h=0;while(g===""&&h<d.tBodies[0].rows.length){var g=b.getInnerText(d.tBodies[0].rows[h].cells[c]);g=b.trim(g);if(g.substr(0,4)==="<!--"||g.length===0)g="";h++}if(g==="")return;var i;g.match(/^-?[£$€Û¢´]\d/)||g.match(/^-?(\d+[,\.]?)+(E[\-+][\d]+)?%?$/)?i=f:i=e,this.col=c;var j=[],k=[],l,m;for(l=0;l<d.tBodies.length;l++)for(h=0;h<d.tBodies[l].rows[0].length;h++)j[h]=d.tBodies[l].rows[0][h];for(l=0;l<d.tBodies.length;l++)if(!b.thead)for(m=1;m<d.tBodies[l].rows.length;m++)k[m-1]=d.tBodies[l].rows[m];else for(m=0;m<d.tBodies[l].rows.length;m++)k[m]=d.tBodies[l].rows[m];k.sort(i),b.options.d?b.hasClass(a,"sort-up")?(a.className=a.className.replace(/ sort-up/,""),a.className+=" sort-down"):(a.className=a.className.replace(/ sort-down/,""),a.className+=" sort-up",k.reverse()):b.hasClass(a,"sort-down")?(a.className=a.className.replace(/ sort-down/,""),a.className+=" sort-up"):(a.className=a.className.replace(/ sort-up/,""),a.className+=" sort-down",k.reverse());for(h=0;h<k.length;h++)k[h].className||d.tBodies[0].appendChild(k[h])},getInnerText:function(a){var b=this;if(typeof a=="string"||typeof a=="undefined")return a;if(a.innerText)return a.innerText;var c="",d=a.childNodes,e=d.length;for(var f=0;f<e;f++)switch(d[f].nodeType){case 1:c+=b.getInnerText(d[f]);break;case 3:c+=d[f].nodeValue}return c},getParent:function(a,b){return a===null?null:a.nodeType===1&&a.tagName.toLowerCase()===b.toLowerCase()?a:this.getParent(a.parentNode,b)},compareNumber:function(a,b){var c=parseFloat(a);a=isNaN(c)?0:c;var d=parseFloat(b);return b=isNaN(d)?0:d,a-b},trim:function(a){return a.replace(/^\s+|\s+$/g,"")},cleanNumber:function(a){return a.replace(/[^\-?0-9.]/g,"")},hasClass:function(a,b){return(" "+a.className+" ").indexOf(" "+b+" ")>-1},addEvent:function(a,b,c){a.attachEvent?(a["e"+b+c]=c,a[b+c]=function(){a["e"+b+c](window.event)},a.attachEvent("on"+b,a[b+c])):a.addEventListener(b,c,!1)}};
(function(){function a(a,b){a.tagName==="TABLE"?this.init(a,b||{}):console.error("Element must be a table")}a.prototype={init:function(a,b){var c=this,d;this.thead=!1,this.options=b,this.options.d=b.descending||!1,a.rows&&a.rows.length>0&&(a.tHead&&a.tHead.rows.length>0?(d=a.tHead.rows[a.tHead.rows.length-1],c.thead=!0):d=a.rows[0]);if(!d)return;for(var e=0;e<d.cells.length;e++){var f=d.cells[e];l(f,"no-sort")||(f.className+=" sort-header",m(f,"click",function(a){var b=g(f,"tr").getElementsByTagName("th");for(var d=0;d<b.length;d++)(l(b[d],"sort-up")||l(b[d],"sort-down"))&&b[d]!==this&&(b[d].className=b[d].className.replace(" sort-down","").replace(" sort-up",""));c.sortTable(this)}))}},sortTable:function(a){var b=this,c=a.cellIndex,d=g(a,"table"),m=function(a,c){var d=h(a.cells[b.col]).toLowerCase(),e=h(c.cells[b.col]).toLowerCase();return d===e?0:d<e?1:-1},n=function(a,c){var d=h(a.cells[b.col]);d=k(d);var e=h(c.cells[b.col]);return e=k(e),i(e,d)},o=function(a,c){var d=h(a.cells[b.col]).toLowerCase(),e=h(c.cells[b.col]).toLowerCase();return f(e)-f(d)};if(d.rows.length<=1)return;var p="",q=0;while(p===""&&q<d.tBodies[0].rows.length){p=h(d.tBodies[0].rows[q].cells[c]),p=j(p);if(p.substr(0,4)==="<!--"||p.length===0)p="";q++}if(p==="")return;var r;p.match(/^-?[£$€Û¢´]\d/)||p.match(/^-?(\d+[,\.]?)+(E[-+][\d]+)?%?$/)?r=n:e(p)?r=o:(console.log("string"),r=m),this.col=c;var s=[],t=[],u,v;for(u=0;u<d.tBodies.length;u++)for(q=0;q<d.tBodies[u].rows[0].length;q++)s[q]=d.tBodies[u].rows[0][q];for(u=0;u<d.tBodies.length;u++)if(!b.thead)for(v=1;v<d.tBodies[u].rows.length;v++)t[v-1]=d.tBodies[u].rows[v];else for(v=0;v<d.tBodies[u].rows.length;v++)t[v]=d.tBodies[u].rows[v];t.sort(r),b.options.d?l(a,"sort-up")?(a.className=a.className.replace(/ sort-up/,""),a.className+=" sort-down",t.reverse()):(a.className=a.className.replace(/ sort-down/,""),a.className+=" sort-up"):l(a,"sort-down")?(a.className=a.className.replace(/ sort-down/,""),a.className+=" sort-up"):(a.className=a.className.replace(/ sort-up/,""),a.className+=" sort-down",t.reverse());for(q=0;q<t.length;q++)t[q].className||d.tBodies[0].appendChild(t[q])}};var b=/(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\.?\,?\s*/i,c=/\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/,d=/(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/i,e=function(a){return(a.search(b)!==-1||a.search(c)!==-1||a.search(d!==-1))!==-1},f=function(a){return a=a.replace(/\-/g,"/"),a=a.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/,"$1/$2/$3"),(new Date(a)).getTime()},g=function(a,b){return a===null?null:a.nodeType===1&&a.tagName.toLowerCase()===b.toLowerCase()?a:g(a.parentNode,b)},h=function(a){var b=this;if(typeof a=="string"||typeof a=="undefined")return a;if(a.innerText)return a.innerText;var c="",d=a.childNodes,e=d.length;for(var f=0;f<e;f++)switch(d[f].nodeType){case 1:c+=b.getInnerText(d[f]);break;case 3:c+=d[f].nodeValue}return c},i=function(a,b){var c=parseFloat(a);a=isNaN(c)?0:c;var d=parseFloat(b);return b=isNaN(d)?0:d,a-b},j=function(a){return a.replace(/^\s+|\s+$/g,"")},k=function(a){return a.replace(/[^\-?0-9.]/g,"")},l=function(a,b){return(" "+a.className+" ").indexOf(" "+b+" ")>-1},m=function(a,b,c){a.attachEvent?(a["e"+b+c]=c,a[b+c]=function(){a["e"+b+c](window.event)},a.attachEvent("on"+b,a[b+c])):a.addEventListener(b,c,!1)};window.Tablesort=a})();

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc