commit 365d0d733eae2b2677c75fde560c1db447971194 Author: Iain R. Learmonth irl@fsfe.org Date: Fri Jan 5 14:31:29 2018 +0000
Adds IPv6 support to datatables IP address sort --- js/libs/datatables/dataTables.Sorting.js | 138 ++++++++++++++++++++----------- 1 file changed, 89 insertions(+), 49 deletions(-)
diff --git a/js/libs/datatables/dataTables.Sorting.js b/js/libs/datatables/dataTables.Sorting.js index ba77fdd..eeea7a0 100644 --- a/js/libs/datatables/dataTables.Sorting.js +++ b/js/libs/datatables/dataTables.Sorting.js @@ -56,67 +56,107 @@ var loadSortingExtensions = function(){ return ((x < y) ? 1 : ((x > y) ? -1 : 0)); } } ); - /** - * Sorts a column containing IP addresses in typical dot notation. This can - * be most useful when using DataTables for a networking application, and - * reporting information containing IP address. Also has a matching type - * detection plug-in for automatic type detection. - * @name IP addresses + * Sorts a column containing IP addresses (IPv4 and IPv6) in typical dot + * notation / colon. This can be most useful when using DataTables for a + * networking application, and reporting information containing IP address. + * + * @name IP addresses + * @summary Sort IP addresses numerically + * @author Dominique Fournier * @author Brad Wasson + * + * @example + * $('#example').dataTable( { + * columnDefs: [ + * { type: 'ip-address', targets: 0 } + * ] + * } ); */
jQuery.extend( jQuery.fn.dataTableExt.oSort, { - "ip-address-asc": function ( a, b ) { - var m = a.split("."), x = ""; - var n = b.split("."), y = ""; - for(var i = 0; i < m.length; i++) { - var item = m[i]; - if(item.length == 1) { - x += "00" + item; - } else if(item.length == 2) { - x += "0" + item; - } else { - x += item; + "ip-address-pre": function ( a ) { + var i, item; + var m = a.split("."), + n = a.split(":"), + x = "", + xa = ""; + + if (m.length == 4) { + // IPV4 + for(i = 0; i < m.length; i++) { + item = m[i]; + + if(item.length == 1) { + x += "00" + item; + } + else if(item.length == 2) { + x += "0" + item; + } + else { + x += item; + } } } - for(var i = 0; i < n.length; i++) { - var item = n[i]; - if(item.length == 1) { - y += "00" + item; - } else if(item.length == 2) { - y += "0" + item; - } else { - y += item; + else if (n.length > 0) { + // IPV6 + var count = 0; + for(i = 0; i < n.length; i++) { + item = n[i]; + + if (i > 0) { + xa += ":"; + } + + if(item.length === 0) { + count += 0; + } + else if(item.length == 1) { + xa += "000" + item; + count += 4; + } + else if(item.length == 2) { + xa += "00" + item; + count += 4; + } + else if(item.length == 3) { + xa += "0" + item; + count += 4; + } + else { + xa += item; + count += 4; + } + } + + // Padding the :: + n = xa.split(":"); + var paddDone = 0; + + for (i = 0; i < n.length; i++) { + item = n[i]; + + if (item.length === 0 && paddDone === 0) { + for (var padding = 0 ; padding < (32-count) ; padding++) { + x += "0"; + paddDone = 1; + } + } + else { + x += item; + } } } - return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + + return x; + }, + + "ip-address-asc": function ( a, b ) { + return ((a < b) ? -1 : ((a > b) ? 1 : 0)); },
"ip-address-desc": function ( a, b ) { - var m = a.split("."), x = ""; - var n = b.split("."), y = ""; - for(var i = 0; i < m.length; i++) { - var item = m[i]; - if(item.length == 1) { - x += "00" + item; - } else if (item.length == 2) { - x += "0" + item; - } else { - x += item; - } - } - for(var i = 0; i < n.length; i++) { - var item = n[i]; - if(item.length == 1) { - y += "00" + item; - } else if (item.length == 2) { - y += "0" + item; - } else { - y += item; - } - } - return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + return ((a < b) ? 1 : ((a > b) ? -1 : 0)); } } ); } \ No newline at end of file
tor-commits@lists.torproject.org