Advertisement
gsavix

javascript ascending or descending columns

Nov 7th, 2014
438
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* www.weberp.org/weberp/javascripts/MiscFunctions.js */
  2. /* for columns html */
  3. /* sample for use demonstration ascending / descending order class */
  4. /* see funcion sortselect() */
  5. /* gsavix 08.november.2014 */
  6.  
  7.  
  8.  
  9. function defaultControl(c){
  10. c.select();
  11. c.focus();
  12. }
  13. function ReloadForm(fB){
  14. fB.click();
  15. }
  16. function rTN(event){
  17.     if (window.event) k=window.event.keyCode;
  18.     else if (event) k=event.which;
  19.     else return true;
  20.     kC=String.fromCharCode(k);
  21.     if ((k==null) || (k==0) || (k==8) || (k==9) || (k==13) || (k==27)) return true;
  22.     else if ((("0123456789.,- ").indexOf(kC)>-1)) return true;
  23.     else return false;
  24. }
  25. function rTI(event){
  26.     if (window.event) k=window.event.keyCode;
  27.     else if (event) k=event.which;
  28.     else return true;
  29.     kC=String.fromCharCode(k);
  30.     if ((k==null) || (k==0) || (k==8) || (k==9) || (k==13) || (k==27)) return true;
  31.     else if ((("0123456789-").indexOf(kC)>-1)) return true;
  32.     else return false;
  33. }
  34. function rLocaleNumber(){
  35.     var Lang = document.getElementById('Lang').value;
  36.     switch(Lang){
  37.         case 'US':
  38.             var patt = /(?:^(-)?([1-9]{1}\d{0,2}(?:,?\d{3})*(?:\.\d{1,})?)$)|(?:^(-)?(0?\.\d{1,})$)|(?:^0$)/;
  39.             break;
  40.         case 'IN':
  41.             var patt = /(?:^(-)?([1-9]{1}\d{0,1},)?(\d{2},)*(\d{3})(\.\d+)?$)|(?:^(-)?[1-9]{1}\d{0,2}(\.\d+)?$)|(?:^(-)?(0?\.\d{1,})$)|(?:^0$)/;
  42.             break;
  43.         case 'EE':
  44.             var patt = /(?:^(-)?[1-9]{1}\d{0,2}(?:\s?\d{3})*(?:\.\d{1,})?$)|(?:^(-)?(0?\.\d{1,})$)|(?:^0$)/;
  45.             break;
  46.         case 'FR':
  47.             var patt = /(?:^(-)?[1-9]{1}\d{0,2}(?:\s?\d{3})*(?:,\d{1,})?$)|(?:^(-)?(0?,\d{1,})$)|(?:^0$)/;
  48.             break;
  49.         case 'GM':
  50.             var patt = /(?:^(-)?[1-9]{1}\d{0,2}(?:\.?\d{3})*(?:,\d{1,})?$)|(?:^(-)?(0?,\d{1,})$)|(?:^0$)/;
  51.             break;
  52.         default:
  53.             alert('something is wrong with your language setting');
  54.            
  55.  
  56.     }
  57.     if(patt.test(this.value)){
  58.         this.setCustomValidity('');
  59.         return true;
  60.        
  61.     }else{
  62.         this.setCustomValidity('The number format is wrong');
  63.         return false;
  64.     };
  65. }
  66. function assignComboToInput(c,i){
  67.     i.value=c.value;
  68. }
  69. function inArray(v,tA,m){
  70.     for (i=0;i<tA.length;i++) {
  71.         if (v==tA[i].value) {
  72.             return true;
  73.         }
  74.     }
  75.     alert(m);
  76.     return false;
  77. }
  78. function isDate(dS,dF){
  79.     switch (dF) {
  80.         case "d/m/Y":
  81.         case "d.m.Y":
  82.         case "m/d/Y":
  83.         var mA=dS.match(/^(\d{1,2})(\/|-|.)(\d{1,2})(\/|-|.)(\d{4})$/);
  84.         break;
  85.         case "Y/m/d":
  86.         case "Y-m-d":
  87.         var mA=dS.match(/^(\d{4})(\/|-|.)(\d{1,2})(\/|-|.)(\d{1,2})$/);
  88.         break;
  89.     }
  90.  
  91.     if (mA==null){
  92.         alert("Please enter the date in the format "+dF);
  93.         return false;
  94.     }
  95.     if (dF=="d/m/Y"||dF=="d.m.Y"){
  96.         d=mA[1];
  97.         m=mA[3];
  98.         y=mA[5];
  99.     }else if(dF=='m/d/Y'){
  100.         m=mA[1];
  101.         d=mA[3];
  102.         y=mA[5];
  103.     }else{
  104.         d=mA[5];
  105.         m=mA[3];
  106.         y=mA[1];
  107.     }
  108.    
  109.     if (m<1 || m>12){
  110.         alert("Month must be between 1 and 12");
  111.         return false;
  112.     }
  113.     if (d<1 || d>31){
  114.         alert("Day must be between 1 and 31");
  115.         return false;
  116.     }
  117.     if ((m==4 || m==6 || m==9 || m==11) && d==31){
  118.         alert("Month "+m+" doesn`t have 31 days");
  119.         return false;
  120.     }
  121.     if (m==2){
  122.         var isleap=(y%4==0);
  123.         if (d>29 || (d==29 && !isleap)){
  124.             alert("February "+y+" doesn`t have "+d+" days");
  125.             return false;
  126.         }
  127.     }
  128.     return true;
  129. }
  130. function eitherOr(o,t){
  131.     if (o.value!='') t.value='';
  132.     else if (o.value=='NaN') o.value='';
  133. }
  134. /*Renier & Louis (info@tillcor.com) 25.02.2007
  135. Copyright 2004-2007 Tillcor International
  136. */
  137. days=new Array('Su','Mo','Tu','We','Th','Fr','Sa');
  138. months=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
  139. dateDivID="calendar";
  140. function Calendar(md,dF){
  141.     iF=document.getElementsByName(md).item(0);
  142.     pB=iF;
  143.     x=pB.offsetLeft;
  144.     y=pB.offsetTop+pB.offsetHeight;
  145.     var p=pB;
  146.     while (p.offsetParent){
  147.         p=p.offsetParent;
  148.         x+=p.offsetLeft;
  149.         y+=p.offsetTop;
  150.     }
  151.     dt=convertDate(iF.value,dF);
  152.     nN=document.createElement("div");
  153.     nN.setAttribute("id",dateDivID);
  154.     nN.setAttribute("style","visibility:hidden;");
  155.     document.body.appendChild(nN);
  156.     cD=document.getElementById(dateDivID);
  157.     cD.style.position="absolute";
  158.     cD.style.left=x+"px";
  159.     cD.style.top=y+"px";
  160.     cD.style.visibility=(cD.style.visibility=="visible" ? "hidden" : "visible");
  161.     cD.style.display=(cD.style.display=="block" ? "none" : "block");
  162.     cD.style.zIndex=10000;
  163.     drawCalendar(md,dt.getFullYear(),dt.getMonth(),dt.getDate(),dF);
  164. }
  165. function drawCalendar(md,y,m,d,dF){
  166.     var tD=new Date();
  167.     if ((m>=0) && (y>0)) tD=new Date(y,m,1);
  168.     else{
  169.         d=tD.getDate();
  170.         tD.setDate(1);
  171.     }
  172.     TR="<tr>";
  173.     xTR="</tr>";
  174.     TD="<td class='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver='this.className=\"dpTDHover\";'";
  175.     xTD="</td>";
  176.     html="<table class='dpTbl'>"+TR+"<th colspan=\"3\">"+months[tD.getMonth()]+" "+tD.getFullYear()+"</th>"+"<td colspan=\"2\">"+
  177.     getButtonCode(md,tD,-1,"&lt;",dF)+xTD+"<td colspan=\"2\">"+getButtonCode(md,tD,1,"&gt;",dF)+xTD+xTR+TR;
  178.     for(i=0;i<days.length;i++) html+="<th>"+days[i]+"</th>";
  179.         html+=xTR+TR;
  180.     for (i=0;i<tD.getDay();i++) html+=TD+"&nbsp;"+xTD;
  181.     do{
  182.         dN=tD.getDate();
  183.         TD_onclick=" onclick=\"postDate('"+md+"','"+formatDate(tD,dF)+"');\">";
  184.         if (dN==d) html+="<td"+TD_onclick+"<div class='dpDayHighlight'>"+dN+"</div>"+xTD;
  185.         else html+=TD+TD_onclick+dN+xTD;
  186.         if (tD.getDay()==6) html+=xTR+TR;
  187.         tD.setDate(tD.getDate()+1);
  188.     } while (tD.getDate()>1)
  189.     if (tD.getDay()>0) for (i=6;i>tD.getDay();i--) html+=TD+"&nbsp;"+xTD;
  190.         html+="</table>";
  191.     document.getElementById(dateDivID).innerHTML=html;
  192. }
  193. function getButtonCode(mD,dV,a,lb,dF){
  194.     nM=(dV.getMonth()+a)%12;
  195.     nY=dV.getFullYear()+parseInt((dV.getMonth()+a)/12,10);
  196. if (nM<0){
  197.     nM+=12;
  198.     nY+=-1;
  199. }
  200. return "<button onClick='drawCalendar(\""+mD+"\","+nY+","+nM+","+1+",\""+dF+"\");'>"+lb+"</button>";
  201. }
  202. function formatDate(dV,dF){
  203.     ds=String(dV.getDate());
  204.     ms=String(dV.getMonth()+1);
  205.     d=("0"+dV.getDate()).substring(ds.length-1,ds.length+1);
  206.     m=("0"+(dV.getMonth()+1)).substring(ms.length-1,ms.length+1);
  207.     y=dV.getFullYear();
  208.     switch (dF) {
  209.         case "d/m/Y":
  210.             return d+"/"+m+"/"+y;
  211.         case "d.m.Y":
  212.             return d+"."+m+"."+y;
  213.         case "Y/m/d":
  214.             return y+"/"+m+"/"+d;
  215.         case "Y-m-d":
  216.             return y+"-"+m+"-"+d;
  217.         default :
  218.             return m+"/"+d+"/"+y;
  219.     }
  220. }
  221. function convertDate(dS,dF){
  222.     var d,m,y;
  223.     if (dF=="d.m.Y")
  224.         dA=dS.split(".");
  225.     else
  226.         dA=dS.split("/");
  227.     switch (dF){
  228.         case "d/m/Y":
  229.             d=parseInt(dA[0],10);
  230.             m=parseInt(dA[1],10)-1;
  231.             y=parseInt(dA[2],10);
  232.             break;
  233.     case "d.m.Y":
  234.         d=parseInt(dA[0],10);
  235.         m=parseInt(dA[1],10)-1;
  236.         y=parseInt(dA[2],10);
  237.         break;
  238.     case "Y-m-d":
  239.     case "Y/m/d":
  240.         d=parseInt(dA[2],10);
  241.         m=parseInt(dA[1],10)-1;
  242.         y=parseInt(dA[0],10);
  243.         break;
  244.     default :
  245.         d=parseInt(dA[1],10);
  246.         m=parseInt(dA[0],10)-1;
  247.         y=parseInt(dA[2],10);
  248.         break;
  249. }
  250. return new Date(y,m,d);
  251. }
  252. function postDate(mydate,dS){
  253. var iF=document.getElementsByName(mydate).item(0);
  254. iF.value=dS;
  255. var cD=document.getElementById(dateDivID);
  256. cD.style.visibility="hidden";
  257. cD.style.display="none";
  258. iF.focus();
  259. }
  260. function clickDate(){
  261.     Calendar(this.name,this.alt);
  262. }
  263. function changeDate(){
  264.     isDate(this.value,this.alt);
  265. }
  266. function SortSelect() {
  267.     selElem=this;
  268.     var tmpArray = new Array();
  269.     columnText=selElem.innerHTML;
  270.     parentElem=selElem.parentNode;
  271.     table=parentElem.parentNode;
  272.     row = table.rows[0];
  273.     for (var j = 0, col; col = row.cells[j]; j++) {
  274.         if (row.cells[j].innerHTML==columnText) {
  275.             columnNumber=j;
  276.             if (selElem.className=="ascending") {
  277.                 selElem.className='descending';
  278.                 direction="a";
  279.             } else {
  280.                 selElem.className='ascending';
  281.                 direction="d";
  282.             }
  283.         }
  284.     }
  285.     for (var i = 1, row; row = table.rows[i]; i++) {
  286.         var rowArray = new Array();
  287.         for (var j = 0, col; col = row.cells[j]; j++) {
  288.             if (row.cells[j].tagName == 'TD' ) {
  289.                 rowArray[j]=row.cells[j].innerHTML;
  290.                 columnClass=row.cells[columnNumber].className;
  291.             }
  292.         }
  293.         tmpArray[i]=rowArray;
  294.     }
  295.     tmpArray.sort(
  296.         function(a,b) {
  297.             if (direction=="a") {
  298.                 if (columnClass=="number") {
  299.                     return parseFloat(a[columnNumber])-parseFloat(b[columnNumber]);
  300.                 } else if (columnClass=="date") {
  301.                     da=new Date(a[columnNumber]);
  302.                     db=new Date(b[columnNumber]);
  303.                     return da>db;
  304.                 } else {
  305.                     return a[columnNumber].localeCompare(b[columnNumber])
  306.                 }
  307.             } else {
  308.                 if (columnClass=="number") {
  309.                     return parseFloat(b[columnNumber])-parseFloat(a[columnNumber]);
  310.                 } else if (columnClass=="date") {
  311.                     da=new Date(a[columnNumber]);
  312.                     db=new Date(b[columnNumber]);
  313.                     return da<=db;
  314.                 } else {
  315.                     return b[columnNumber].localeCompare(a[columnNumber])
  316.                 }
  317.             }
  318.         }
  319.     );
  320.     for (var i = 0, row; row = table.rows[i+1]; i++) {
  321.         var rowArray = new Array();
  322.         rowArray=tmpArray[i];
  323.         for (var j = 0, col; col = row.cells[j]; j++) {
  324.             if (row.cells[j].tagName == 'TD' ) {
  325.                 row.cells[j].innerHTML=rowArray[j];
  326.             }
  327.         }
  328.     }
  329.     return;
  330. }
  331. function initial(){
  332.     if (document.getElementsByTagName){
  333.         var as=document.getElementsByTagName("a");
  334.         for (i=0;i<as.length;i++){
  335.             var a=as[i];
  336.             if (a.getAttribute("href") &&
  337.                 a.getAttribute("rel")=="external")
  338.                 a.target="_blank";
  339.         }
  340.     }
  341.     var ds=document.getElementsByTagName("input");
  342.     for (i=0;i<ds.length;i++){
  343.         if (ds[i].className=="date"){
  344.             ds[i].onclick=clickDate;
  345.             ds[i].onchange=changeDate;
  346.         }
  347.         if(ds[i].getAttribute("data-type") == 'no-illegal-chars') ds[i].pattern="(?!^ +$)[^?\'\u0022+.&\\\\><]*";
  348.         if (ds[i].className=="number") ds[i].onkeypress=rTN;
  349.         if (ds[i].className=="integer") ds[i].onkeypress=rTI;
  350.         if (ds[i].className=="number"){
  351.        
  352.                 ds[i].origonchange=ds[i].onchange;
  353.                 ds[i].newonchange=rLocaleNumber;
  354.                 ds[i].onchange=function(){
  355.                     if(this.origonchange)
  356.                         this.origonchange();
  357.                     this.newonchange();
  358.                 };
  359.        
  360.         }
  361.     }
  362.     var ds=document.getElementsByTagName("th");
  363.     for (i=0;i<ds.length;i++){
  364.         if (ds[i].className=="ascending") ds[i].onclick=SortSelect;
  365.     }
  366. }
  367. window.onload=initial;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement