From 9a8b294e504e74d71546a59902467d99fe2c0049 Mon Sep 17 00:00:00 2001 From: Ryan Jacobs Date: Fri, 2 Jan 2015 17:01:47 -0800 Subject: [PATCH 1/3] add another sort type: "dot separated numbers" This matches IP addresses, version numbers, etc. 1. Take input string and run split('.'). 2. Loop through returned array: a) Is a == b? Yes, skip to next number. No, goto next comparison. b) Is a < b? Yes, return that b is greater. c) Is a > b? Yes, return that a is greater. Say we run sortDotSep("192.168.1.56", "192.168.1.59"): 192 == 192 # next number 168 == 168 # next number 1 == 1 # next number 56 < 59 # return that number b is bigger Or, say we run sortDotSep("192.168.1.56", "192.128.1.59"): 192 == 192 # next number 168 > 128 # return that number a is bigger --- src/tablesort.js | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/tablesort.js b/src/tablesort.js index c40a4f5..9988758 100644 --- a/src/tablesort.js +++ b/src/tablesort.js @@ -117,11 +117,29 @@ return parseDate(bb) - parseDate(aa); }; + var sortDotSep = function(a, b) { + var aa = getInnerText(a.cells[that.col]).split('.'), + bb = getInnerText(b.cells[that.col]).split('.'); + + for (var i = 0, len = aa.length; i < len; i++) { + var aai = parseInt(aa[i]), + bbi = parseInt(bb[i]); + + if (aai == bbi) continue; + if (aai < bbi) return -1; + if (aai > bbi) return 1; + } + return 0; + }; + + // Sort dot separted numbers, e.g. ip addresses or version numbers + if (/^(\d+\.)+\d+$/.test(item)) { + sortFunction = sortDotSep; // Sort as number if a currency key exists or number - if (item.match(/^-?[£\x24Û¢´€]?\d+\s*([,\.]\d{0,2})/) || // prefixed currency - item.match(/^-?\d+\s*([,\.]\d{0,2})?[£\x24Û¢´€]/) || // suffixed currency - item.match(/^-?(\d)*-?([,\.]){0,1}-?(\d)+([E,e][\-+][\d]+)?%?$/) // number - ) { + } else if (item.match(/^-?[£\x24Û¢´€]?\d+\s*([,\.]\d{0,2})/) || // prefixed currency + item.match(/^-?\d+\s*([,\.]\d{0,2})?[£\x24Û¢´€]/) || // suffixed currency + item.match(/^-?(\d)*-?([,\.]){0,1}-?(\d)+([E,e][\-+][\d]+)?%?$/) // number + ) { sortFunction = sortNumber; } else if (testDate(item)) { sortFunction = sortDate; From c94b69fb6a35eb1a3889060602a45f733d144a1f Mon Sep 17 00:00:00 2001 From: Ryan Jacobs Date: Sat, 3 Jan 2015 18:50:52 -0800 Subject: [PATCH 2/3] remove extra tab spaces --- src/tablesort.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tablesort.js b/src/tablesort.js index 9988758..61a269d 100644 --- a/src/tablesort.js +++ b/src/tablesort.js @@ -137,8 +137,8 @@ sortFunction = sortDotSep; // Sort as number if a currency key exists or number } else if (item.match(/^-?[£\x24Û¢´€]?\d+\s*([,\.]\d{0,2})/) || // prefixed currency - item.match(/^-?\d+\s*([,\.]\d{0,2})?[£\x24Û¢´€]/) || // suffixed currency - item.match(/^-?(\d)*-?([,\.]){0,1}-?(\d)+([E,e][\-+][\d]+)?%?$/) // number + item.match(/^-?\d+\s*([,\.]\d{0,2})?[£\x24Û¢´€]/) || // suffixed currency + item.match(/^-?(\d)*-?([,\.]){0,1}-?(\d)+([E,e][\-+][\d]+)?%?$/) // number ) { sortFunction = sortNumber; } else if (testDate(item)) { From 9e5355291abca5958ffe91799e30d73a332d0094 Mon Sep 17 00:00:00 2001 From: Ryan Jacobs Date: Sat, 3 Jan 2015 18:53:11 -0800 Subject: [PATCH 3/3] add new sort type to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b767da6..32bbcb0 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ A small & simple sorting component for tables written in Javascript. * numbers * currency * Basic dates in `dd/mm/yy` or `dd-mm-yy` format. Years can be 4 digits. Days and Months can be 1 or 2 digits. +* Dot separated values. E.g. IP addresses or version numbers. ### Additional options