forked from Siveran/siveran.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSortTable.min.js
12 lines (10 loc) · 8.08 KB
/
SortTable.min.js
1
2
3
4
5
6
7
8
9
10
11
12
/*
SortTable
version 2
7th April 2007
Stuart Langridge, http://www.kryogenix.org/code/browser/SortTable/
Thanks to many, many people for contributions and suggestions.
Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
This basically means: do what you want with it.
*/
function dean_addEvent(e,t,n){if(e.addEventListener){e.addEventListener(t,n,false)}else{if(!n.$$guid)n.$$guid=dean_addEvent.guid++;if(!e.events)e.events={};var r=e.events[t];if(!r){r=e.events[t]={};if(e["on"+t]){r[0]=e["on"+t]}}r[n.$$guid]=n;e["on"+t]=handleEvent}}function removeEvent(e,t,n){if(e.removeEventListener){e.removeEventListener(t,n,false)}else{if(e.events&&e.events[t]){delete e.events[t][n.$$guid]}}}function handleEvent(e){var t=true;e=e||fixEvent(((this.ownerDocument||this.document||this).parentWindow||window).event);var n=this.events[e.type];for(var r in n){this.$$handleEvent=n[r];if(this.$$handleEvent(e)===false){t=false}}return t}function fixEvent(e){e.preventDefault=fixEvent.preventDefault;e.stopPropagation=fixEvent.stopPropagation;return e}var stIsIE=false;SortTable={init:function(){if(arguments.callee.done)return;arguments.callee.done=true;if(_timer)clearInterval(_timer);if(!document.createElement||!document.getElementsByTagName)return;SortTable.DATE_RE=/^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;forEach(document.getElementsByTagName("table"),function(e){if(e.className.search(/\bsortable\b/)!=-1){SortTable.makeSortable(e)}})},makeSortable:function(e){if(e.getElementsByTagName("thead").length==0){the=document.createElement("thead");the.appendChild(e.rows[0]);e.insertBefore(the,e.firstChild)}if(e.tHead==null)e.tHead=e.getElementsByTagName("thead")[0];if(e.tHead.rows.length!=1)return;sortbottomrows=[];for(var t=0;t<e.rows.length;t++){if(e.rows[t].className.search(/\bsortbottom\b/)!=-1){sortbottomrows[sortbottomrows.length]=e.rows[t]}}if(sortbottomrows){if(e.tFoot==null){tfo=document.createElement("tfoot");e.appendChild(tfo)}for(var t=0;t<sortbottomrows.length;t++){tfo.appendChild(sortbottomrows[t])}delete sortbottomrows}headrow=e.tHead.rows[0].cells;for(var t=0;t<headrow.length;t++){if(!headrow[t].className.match(/\bSortTable_nosort\b/)){mtch=headrow[t].className.match(/\bSortTable_([a-z0-9]+)\b/);if(mtch){override=mtch[1]}if(mtch&&typeof SortTable["sort_"+override]=="function"){headrow[t].SortTable_sortfunction=SortTable["sort_"+override]}else{headrow[t].SortTable_sortfunction=SortTable.guessType(e,t)}headrow[t].SortTable_columnindex=t;headrow[t].SortTable_tbody=e.tBodies[0];dean_addEvent(headrow[t],"click",SortTable.innerSortFunction=function(e){if(this.className.search(/\bSortTable_sorted\b/)!=-1){SortTable.reverse(this.SortTable_tbody);this.className=this.className.replace("SortTable_sorted","SortTable_sorted_reverse");this.removeChild(document.getElementById("SortTable_sortfwdind"));sortrevind=document.createElement("span");sortrevind.id="SortTable_sortrevind";sortrevind.innerHTML=stIsIE?' <font face="webdings">5</font>':" ▴";this.appendChild(sortrevind);Main.flipTableStripes();return}if(this.className.search(/\bSortTable_sorted_reverse\b/)!=-1){SortTable.reverse(this.SortTable_tbody);this.className=this.className.replace("SortTable_sorted_reverse","SortTable_sorted");this.removeChild(document.getElementById("SortTable_sortrevind"));sortfwdind=document.createElement("span");sortfwdind.id="SortTable_sortfwdind";sortfwdind.innerHTML=stIsIE?' <font face="webdings">6</font>':" ▾";this.appendChild(sortfwdind);Main.flipTableStripes();return}theadrow=this.parentNode;forEach(theadrow.childNodes,function(e){if(e.nodeType==1){e.className=e.className.replace("SortTable_sorted_reverse","");e.className=e.className.replace("SortTable_sorted","")}});sortfwdind=document.getElementById("SortTable_sortfwdind");if(sortfwdind){sortfwdind.parentNode.removeChild(sortfwdind)}sortrevind=document.getElementById("SortTable_sortrevind");if(sortrevind){sortrevind.parentNode.removeChild(sortrevind)}this.className+=" SortTable_sorted";sortfwdind=document.createElement("span");sortfwdind.id="SortTable_sortfwdind";sortfwdind.innerHTML=stIsIE?' <font face="webdings">6</font>':" ▾";this.appendChild(sortfwdind);row_array=[];col=this.SortTable_columnindex;rows=this.SortTable_tbody.rows;for(var t=0;t<rows.length;t++){row_array[row_array.length]=[SortTable.getInnerText(rows[t].cells[col]),rows[t]]}row_array.sort(this.SortTable_sortfunction);tb=this.SortTable_tbody;for(var t=0;t<row_array.length;t++){tb.appendChild(row_array[t][1])}delete row_array})}}},guessType:function(e,t){sortfn=SortTable.sort_alpha;for(var n=0;n<e.tBodies[0].rows.length;n++){text=SortTable.getInnerText(e.tBodies[0].rows[n].cells[t]);if(text!=""){if(text.match(/^-?[£$¤]?[\d,.]+%?$/)){return SortTable.sort_numeric}possdate=text.match(SortTable.DATE_RE);if(possdate){first=parseInt(possdate[1]);second=parseInt(possdate[2]);if(first>12){return SortTable.sort_ddmm}else if(second>12){return SortTable.sort_mmdd}else{sortfn=SortTable.sort_ddmm}}}}return sortfn},getInnerText:function(e){if(!e)return"";hasInputs=typeof e.getElementsByTagName=="function"&&e.getElementsByTagName("input").length;if(e.getAttribute("SortTable_customkey")!=null){return e.getAttribute("SortTable_customkey")}else if(typeof e.textContent!="undefined"&&!hasInputs){return e.textContent.replace(/^\s+|\s+$/g,"")}else if(typeof e.innerText!="undefined"&&!hasInputs){return e.innerText.replace(/^\s+|\s+$/g,"")}else if(typeof e.text!="undefined"&&!hasInputs){return e.text.replace(/^\s+|\s+$/g,"")}else{switch(e.nodeType){case 3:if(e.nodeName.toLowerCase()=="input"){return e.value.replace(/^\s+|\s+$/g,"")};case 4:return e.nodeValue.replace(/^\s+|\s+$/g,"");break;case 1:case 11:var t="";for(var n=0;n<e.childNodes.length;n++){t+=SortTable.getInnerText(e.childNodes[n])}return t.replace(/^\s+|\s+$/g,"");break;default:return""}}},reverse:function(e){newrows=[];for(var t=0;t<e.rows.length;t++){newrows[newrows.length]=e.rows[t]}for(var t=newrows.length-1;t>=0;t--){e.appendChild(newrows[t])}delete newrows},sort_numeric:function(e,t){if(e[0]=="")return 1;else if(t[0]=="")return-1;if(e[0]=="-")return 1;else if(t[0]=="-")return-1;aa=parseFloat(e[0].replace(/[^0-9.-]/g,""));if(isNaN(aa))aa=0;bb=parseFloat(t[0].replace(/[^0-9.-]/g,""));if(isNaN(bb))bb=0;return aa-bb},sort_alpha:function(e,t){if(e[0]==t[0])return 0;if(e[0]<t[0])return-1;return 1},sort_ddmm:function(e,t){mtch=e[0].match(SortTable.DATE_RE);y=mtch[3];m=mtch[2];d=mtch[1];if(m.length==1)m="0"+m;if(d.length==1)d="0"+d;dt1=y+m+d;mtch=t[0].match(SortTable.DATE_RE);y=mtch[3];m=mtch[2];d=mtch[1];if(m.length==1)m="0"+m;if(d.length==1)d="0"+d;dt2=y+m+d;if(dt1==dt2)return 0;if(dt1<dt2)return-1;return 1},sort_mmdd:function(e,t){mtch=e[0].match(SortTable.DATE_RE);y=mtch[3];d=mtch[2];m=mtch[1];if(m.length==1)m="0"+m;if(d.length==1)d="0"+d;dt1=y+m+d;mtch=t[0].match(SortTable.DATE_RE);y=mtch[3];d=mtch[2];m=mtch[1];if(m.length==1)m="0"+m;if(d.length==1)d="0"+d;dt2=y+m+d;if(dt1==dt2)return 0;if(dt1<dt2)return-1;return 1},shaker_sort:function(e,t){var n=0;var r=e.length-1;var i=true;while(i){i=false;for(var s=n;s<r;++s){if(t(e[s],e[s+1])>0){var o=e[s];e[s]=e[s+1];e[s+1]=o;i=true}}r--;if(!i)break;for(var s=r;s>n;--s){if(t(e[s],e[s-1])<0){var o=e[s];e[s]=e[s-1];e[s-1]=o;i=true}}n++}}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",SortTable.init,false)}if(/WebKit/i.test(navigator.userAgent)){var _timer=setInterval(function(){if(/loaded|complete/.test(document.readyState)){SortTable.init()}},10)}window.onload=SortTable.init;dean_addEvent.guid=1;fixEvent.preventDefault=function(){this.returnValue=false};fixEvent.stopPropagation=function(){this.cancelBubble=true};if(!Array.forEach){Array.forEach=function(e,t,n){for(var r=0;r<e.length;r++){t.call(n,e[r],r,e)}}}Function.prototype.forEach=function(e,t,n){for(var r in e){if(typeof this.prototype[r]=="undefined"){t.call(n,e[r],r,e)}}};String.forEach=function(e,t,n){Array.forEach(e.split(""),function(r,i){t.call(n,r,i,e)})};var forEach=function(e,t,n){if(e){var r=Object;if(e instanceof Function){r=Function}else if(e.forEach instanceof Function){e.forEach(t,n);return}else if(typeof e=="string"){r=String}else if(typeof e.length=="number"){r=Array}r.forEach(e,t,n)}}