MediaWiki:Common.js: Difference between revisions

From Elwiki
mNo edit summary
mNo edit summary
Line 1: Line 1:
var usesClass = (function () {
var usesClass = (function() {
    var reCache = {};
    var reCache = {};
    return function (element, className) {
    return function(element, className) {
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
    };
    };
})();
})();
/*
/*
addOnloadHook(function(){
addOnloadHook(function(){
Line 20: Line 20:


addOnloadHook(function($) {
addOnloadHook(function($) {
return function() {
    return function() {
$('.tabdiv > div').hide();
        $('.tabdiv > div').hide();
$('.tabdiv').each(function() {
        $('.tabdiv').each(function() {
$(this).find('> ul li').addClass('inactive');
            $(this).find('> ul li').addClass('inactive');
$(this).find('> ul li:first').removeClass('inactive');
            $(this).find('> ul li:first').removeClass('inactive');
$(this).find('> ul li:first').addClass('active');
            $(this).find('> ul li:first').addClass('active');
$(this).find('> div:first').show();
            $(this).find('> div:first').show();
});
        });
$('.tabdiv > ul li').each(function() {
        $('.tabdiv > ul li').each(function() {
var a = $(this).find('a:first');
            var a = $(this).find('a:first');
var target = a.attr('href');
            var target = a.attr('href');
$(a).attr('href', ''); // Opera hates real hrefs
            $(a).attr('href', ''); // Opera hates real hrefs
$(this).click(function() {
            $(this).click(function() {
$(this).parent().find('> li').removeClass('active');
                $(this).parent().find('> li').removeClass('active');
$(this).parent().find('> li').addClass('inactive');
                $(this).parent().find('> li').addClass('inactive');
$(this).addClass('active');
                $(this).addClass('active');
$(this).removeClass('inactive');
                $(this).removeClass('inactive');
$(this).parent().parent().find('> div').hide();
                $(this).parent().parent().find('> div').hide();
                                $(target).show();
                $(target).show();
return false;
                return false;
});
            });
});
        });
}
    }
}(jQuery));
}(jQuery));


Line 52: Line 52:


/* Add a hook to make buttons, where need be, on every pageload */
/* Add a hook to make buttons, where need be, on every pageload */
addOnloadHook( createTableButtons );
addOnloadHook(createTableButtons);


/* Define global variables:
/* Define global variables:
Line 64: Line 64:


/* Define functions that do-the-work */
/* Define functions that do-the-work */
/* Function toggleTableView() toggles a specified table's view from minimized to maximized, or vice versa */  
/* Function toggleTableView() toggles a specified table's view from minimized to maximized, or vice versa */
function toggleTableView( tableIndex, tableShrink )
function toggleTableView(tableIndex, tableShrink) {
{
     var Table = document.getElementById("collapsibleTable" + tableIndex);
     var Table = document.getElementById( "collapsibleTable" + tableIndex );
     /* If there is no collapsible tables on the page, no need to do any shrinking */
     /* If there is no collapsible tables on the page, no need to do any shrinking */
     if (!Table) {
     if (!Table) {
      return false;
        return false;
     }
     }


     var Button = document.getElementById( "collapseButton" + tableIndex );
     var Button = document.getElementById("collapseButton" + tableIndex);
     /* If no collapsible buttons, no need to do any shrinking */
     /* If no collapsible buttons, no need to do any shrinking */
     if (!Button ) {
     if (!Button) {
         return false;
         return false;
     }
     }


     /* Grab the rows of the specified table */
     /* Grab the rows of the specified table */
     var Rows = Table.getElementsByTagName( "tr" );  
     var Rows = Table.getElementsByTagName("tr");


     /* Do the hiding/unhiding */
     /* Do the hiding/unhiding */
     if ( Button.firstChild.data == minimizeSymbol || tableShrink == 1 ) {
     if (Button.firstChild.data == minimizeSymbol || tableShrink == 1) {
         /* if the button is set to minimize its contents,  
         /* if the button is set to minimize its contents,  
         * then loop through the rows and mark them hidden */
         * then loop through the rows and mark them hidden */
         var count = 1;
         var count = 1;
         while (Rows.length > count) {
         while (Rows.length > count) {
          if (Rows[count].parentNode.parentNode.id == ("collapsibleTable" + tableIndex))
            if (Rows[count].parentNode.parentNode.id == ("collapsibleTable" + tableIndex)) {
          {
                Rows[count].style.display = "none";
            Rows[count].style.display = "none";
            }
          }
            count++;
          count++;
         }
         }
         /* After marking, change the table to show the maximize symbol */
         /* After marking, change the table to show the maximize symbol */
Line 98: Line 96:
     } else {
     } else {
         /* if the button is set to maximize its contents,  
         /* if the button is set to maximize its contents,  
         * then loop through the rows and mark them visible */    
         * then loop through the rows and mark them visible */
         var count = 1;
         var count = 1;
         while (Rows.length > count) {
         while (Rows.length > count) {
          if(Rows[count].parentNode.parentNode.id == ("collapsibleTable" + tableIndex))
            if (Rows[count].parentNode.parentNode.id == ("collapsibleTable" + tableIndex)) {
          {
                Rows[count].style.display = Rows[0].style.display;
              Rows[count].style.display = Rows[0].style.display;
            }
          }
            count++;
          count++;
         }
         }
         /* After marking, change the table to show the minimize symbol */
         /* After marking, change the table to show the minimize symbol */
Line 114: Line 111:
/* Funtion createTableButtons() creates the plus or minus symbol and alignment text
/* Funtion createTableButtons() creates the plus or minus symbol and alignment text
  * to be applied on collapsible tables */
  * to be applied on collapsible tables */
function createTableButtons()
function createTableButtons() {
{
     /* Define local variables */
     /* Define local variables */
     var tableIndex = 0;
     var tableIndex = 0;
     var NavBoxes = new Object();
     var NavBoxes = new Object();
     var Tables = document.getElementsByTagName( "table" );
     var Tables = document.getElementsByTagName("table");


     /* Use two count variables to handle cases where continue is used */
     /* Use two count variables to handle cases where continue is used */
     var loopcount = 0;
     var loopcount = 0;
     var count = 0;  
     var count = 0;
     while (Tables.length > loopcount) {
     while (Tables.length > loopcount) {
         /* For all collapsible table on the page, this code goes through
         /* For all collapsible table on the page, this code goes through
Line 129: Line 125:
         count = loopcount;
         count = loopcount;
         loopcount++;
         loopcount++;
         if ( usesClass( Tables[count], "collapsible" ) ) {
         if (usesClass(Tables[count], "collapsible")) {


             /* Proceed only if a header row and header exist */
             /* Proceed only if a header row and header exist */
             var HeaderRow = Tables[count].getElementsByTagName( "tr" )[0];
             var HeaderRow = Tables[count].getElementsByTagName("tr")[0];
             if (!HeaderRow) continue;
             if (!HeaderRow) continue;
             var Header = HeaderRow.getElementsByTagName( "th" )[0];
             var Header = HeaderRow.getElementsByTagName("th")[0];
             if (!Header) continue;
             if (!Header) continue;


             /* Log where you are in the looping */
             /* Log where you are in the looping */
             NavBoxes[ tableIndex ] = Tables[count];
             NavBoxes[tableIndex] = Tables[count];


             /* Set the identifier of the table being edited in this iteration */
             /* Set the identifier of the table being edited in this iteration */
             Tables[count].setAttribute( "id", "collapsibleTable" + tableIndex );
             Tables[count].setAttribute("id", "collapsibleTable" + tableIndex);


             /* Create the button assuming it is a minimized table
             /* Create the button assuming it is a minimized table
             * to do the initial creation. */
             * to do the initial creation. */
             var Button = document.createElement( "span" );
             var Button = document.createElement("span");
             var ButtonLink = document.createElement( "a" );
             var ButtonLink = document.createElement("a");
             var ButtonText = document.createTextNode( maximizeSymbol );
             var ButtonText = document.createTextNode(maximizeSymbol);


             /* Define where the button floats and its font and size.
             /* Define where the button floats and its font and size.
Line 158: Line 154:
             Button.style.textAlign = "right";
             Button.style.textAlign = "right";
             Button.style.width = "5em";
             Button.style.width = "5em";
Button.style.color = "white";
            Button.style.color = "white";




             /* Set the link color and identifier */
             /* Set the link color and identifier */
             ButtonLink.style.color = Header.style.color;
             ButtonLink.style.color = Header.style.color;
ButtonLink.style.color = "white";
            ButtonLink.style.color = "white";
             ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
             ButtonLink.setAttribute("id", "collapseButton" + tableIndex);


             /* Set the destination of the button */
             /* Set the destination of the button */
             ButtonLink.setAttribute( "href", "javascript:toggleTableView(" + tableIndex + ");" );
             ButtonLink.setAttribute("href", "javascript:toggleTableView(" + tableIndex + ");");
             ButtonLink.appendChild( ButtonText );
             ButtonLink.appendChild(ButtonText);
             Button.appendChild( document.createTextNode( "[" ) );
             Button.appendChild(document.createTextNode("["));
             Button.appendChild( ButtonLink );
             Button.appendChild(ButtonLink);
             Button.appendChild( document.createTextNode( "]" ) );
             Button.appendChild(document.createTextNode("]"));




             /* Load the next header and table for the next iteration */
             /* Load the next header and table for the next iteration */
             Header.insertBefore( Button, Header.childNodes[0] );
             Header.insertBefore(Button, Header.childNodes[0]);
             tableIndex++;
             tableIndex++;
         }
         }
Line 186: Line 182:
     while (tableIndex > loopcount) {
     while (tableIndex > loopcount) {
         /* If autocollapse or collapse is not invalid, maximize; otherwise, minimize */
         /* If autocollapse or collapse is not invalid, maximize; otherwise, minimize */
         if (((autoShrink > tableIndex) && usesClass( NavBoxes[loopcount], "autocollapse" )) || !usesClass( NavBoxes[loopcount], "collapsed" ) ) {
         if (((autoShrink > tableIndex) && usesClass(NavBoxes[loopcount], "autocollapse")) || !usesClass(NavBoxes[loopcount], "collapsed")) {
          toggleTableView( loopcount, 0 );
            toggleTableView(loopcount, 0);
         }
         } else {
        else {
            toggleTableView(loopcount, 1);
          toggleTableView( loopcount, 1 );
         }
         }
         loopcount++;
         loopcount++;
Line 199: Line 194:
   Source: http://webdesign.html.it/articoli/leggi/528/more-nifty-corners */
   Source: http://webdesign.html.it/articoli/leggi/528/more-nifty-corners */


function NiftyCheck(){
function NiftyCheck() {
if(!document.getElementById || !document.createElement)
    if (!document.getElementById || !document.createElement)
    return(false);
        return (false);
isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
    isXHTML = /html\:/.test(document.getElementsByTagName('body')[0].nodeName);
if(Array.prototype.push==null){Array.prototype.push=function(){
    if (Array.prototype.push == null) {
      this[this.length]=arguments[0]; return(this.length);}}
        Array.prototype.push = function() {
return(true);
            this[this.length] = arguments[0];
            return (this.length);
        }
    }
    return (true);
}
}


function Rounded(selector,wich,bk,color,opt){
function Rounded(selector, wich, bk, color, opt) {
var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
    var i, prefixt, prefixb, cn = "r",
        ecolor = "",
        edges = false,
        eclass = "",
        b = false,
        t = false;


if(color=="transparent"){
    if (color == "transparent") {
    cn=cn+"x";
        cn = cn + "x";
    ecolor=bk;
        ecolor = bk;
    bk="transparent";
        bk = "transparent";
     }
     } else if (opt && opt.indexOf("border") >= 0) {
else if(opt && opt.indexOf("border")>=0){
        var optar = opt.split(" ");
    var optar=opt.split(" ");
        for (i = 0; i < optar.length; i++)
    for(i=0;i<optar.length;i++)
            if (optar[i].indexOf("#") >= 0) ecolor = optar[i];
        if(optar[i].indexOf("#")>=0) ecolor=optar[i];
        if (ecolor == "") ecolor = "#666";
    if(ecolor=="") ecolor="#666";
        cn += "e";
    cn+="e";
        edges = true;
    edges=true;
     } else if (opt && opt.indexOf("smooth") >= 0) {
     }
        cn += "a";
else if(opt && opt.indexOf("smooth")>=0){
        ecolor = Mix(bk, color);
    cn+="a";
    ecolor=Mix(bk,color);
    }
if(opt && opt.indexOf("small")>=0) cn+="s";
prefixt=cn;
prefixb=cn;
if(wich.indexOf("all")>=0){t=true;b=true}
else if(wich.indexOf("top")>=0) t="true";
else if(wich.indexOf("tl")>=0){
    t="true";
    if(wich.indexOf("tr")<0) prefixt+="l";
     }
     }
else if(wich.indexOf("tr")>=0){
    if (opt && opt.indexOf("small") >= 0) cn += "s";
    t="true";
    prefixt = cn;
    prefixt+="r";
    prefixb = cn;
    if (wich.indexOf("all") >= 0) {
        t = true;
        b = true
    } else if (wich.indexOf("top") >= 0) t = "true";
    else if (wich.indexOf("tl") >= 0) {
        t = "true";
        if (wich.indexOf("tr") < 0) prefixt += "l";
    } else if (wich.indexOf("tr") >= 0) {
        t = "true";
        prefixt += "r";
     }
     }
if(wich.indexOf("bottom")>=0) b=true;
    if (wich.indexOf("bottom") >= 0) b = true;
else if(wich.indexOf("bl")>=0){
    else if (wich.indexOf("bl") >= 0) {
    b="true";
        b = "true";
    if(wich.indexOf("br")<0) prefixb+="l";
        if (wich.indexOf("br") < 0) prefixb += "l";
    } else if (wich.indexOf("br") >= 0) {
        b = "true";
        prefixb += "r";
     }
     }
else if(wich.indexOf("br")>=0){
     var v = getElementsBySelector(selector);
     b="true";
    var l = v.length;
    prefixb+="r";
    for (i = 0; i < l; i++) {
    }
        if (edges) AddBorder(v[i], ecolor);
var v=getElementsBySelector(selector);
        if (t) AddTop(v[i], bk, color, ecolor, prefixt);
var l=v.length;
        if (b) AddBottom(v[i], bk, color, ecolor, prefixb);
for(i=0;i<l;i++){
    if(edges) AddBorder(v[i],ecolor);
    if(t) AddTop(v[i],bk,color,ecolor,prefixt);
    if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
     }
     }
}
}


function AddBorder(el,bc){
function AddBorder(el, bc) {
var i;
    var i;
if(!el.passed){
    if (!el.passed) {
    if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
        if (el.childNodes.length == 1 && el.childNodes[0].nodeType == 3) {
        var t=el.firstChild.nodeValue;
            var t = el.firstChild.nodeValue;
        el.removeChild(el.lastChild);
            el.removeChild(el.lastChild);
        var d=CreateEl("span");
            var d = CreateEl("span");
        d.style.display="block";
            d.style.display = "block";
        d.appendChild(document.createTextNode(t));
            d.appendChild(document.createTextNode(t));
        el.appendChild(d);
            el.appendChild(d);
         }
         }
    for(i=0;i<el.childNodes.length;i++){
        for (i = 0; i < el.childNodes.length; i++) {
        if(el.childNodes[i].nodeType==1){
            if (el.childNodes[i].nodeType == 1) {
            el.childNodes[i].style.borderLeft="1px solid "+bc;
                el.childNodes[i].style.borderLeft = "1px solid " + bc;
            el.childNodes[i].style.borderRight="1px solid "+bc;
                el.childNodes[i].style.borderRight = "1px solid " + bc;
             }
             }
         }
         }
     }
     }
el.passed=true;
    el.passed = true;
}
}
   
function AddTop(el,bk,color,bc,cn){
var i,lim=4,d=CreateEl("b");


if(cn.indexOf("s")>=0) lim=2;
function AddTop(el, bk, color, bc, cn) {
if(bc) d.className="artop";
    var i, lim = 4,
else d.className="rtop";
        d = CreateEl("b");
d.style.backgroundColor=bk;
 
for(i=1;i<=lim;i++){
    if (cn.indexOf("s") >= 0) lim = 2;
    var x=CreateEl("b");
    if (bc) d.className = "artop";
    x.className=cn + i;
    else d.className = "rtop";
    x.style.backgroundColor=color;
    d.style.backgroundColor = bk;
    if(bc) x.style.borderColor=bc;
    for (i = 1; i <= lim; i++) {
    d.appendChild(x);
        var x = CreateEl("b");
        x.className = cn + i;
        x.style.backgroundColor = color;
        if (bc) x.style.borderColor = bc;
        d.appendChild(x);
     }
     }
el.style.paddingTop=0;
    el.style.paddingTop = 0;
el.insertBefore(d,el.firstChild);
    el.insertBefore(d, el.firstChild);
}
}


function AddBottom(el,bk,color,bc,cn){
function AddBottom(el, bk, color, bc, cn) {
var i,lim=4,d=CreateEl("b");
    var i, lim = 4,
        d = CreateEl("b");


if(cn.indexOf("s")>=0) lim=2;
    if (cn.indexOf("s") >= 0) lim = 2;
if(bc) d.className="artop";
    if (bc) d.className = "artop";
else d.className="rtop";
    else d.className = "rtop";
d.style.backgroundColor=bk;
    d.style.backgroundColor = bk;
for(i=lim;i>0;i--){
    for (i = lim; i > 0; i--) {
    var x=CreateEl("b");
        var x = CreateEl("b");
    x.className=cn + i;
        x.className = cn + i;
    x.style.backgroundColor=color;
        x.style.backgroundColor = color;
    if(bc) x.style.borderColor=bc;
        if (bc) x.style.borderColor = bc;
    d.appendChild(x);
        d.appendChild(x);
     }
     }
el.style.paddingBottom=0;
    el.style.paddingBottom = 0;
el.appendChild(d);
    el.appendChild(d);
}
}


function CreateEl(x){
function CreateEl(x) {
if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
    if (isXHTML) return (document.createElementNS('http://www.w3.org/1999/xhtml', x));
else return(document.createElement(x));
    else return (document.createElement(x));
}
}


function getElementsBySelector(selector){
function getElementsBySelector(selector) {
var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
    var i, selid = "",
        selclass = "",
        tag = selector,
        f, s = [],
        objlist = [];


if(selector.indexOf(" ")>0){ //descendant selector like "tag#id tag"
    if (selector.indexOf(" ") > 0) { //descendant selector like "tag#id tag"
    s=selector.split(" ");
        s = selector.split(" ");
    var fs=s[0].split("#");
        var fs = s[0].split("#");
    if(fs.length==1) return(objlist);
        if (fs.length == 1) return (objlist);
    f=document.getElementById(fs[1]);
        f = document.getElementById(fs[1]);
    if(f) return(f.getElementsByTagName(s[1]));
        if (f) return (f.getElementsByTagName(s[1]));
    return(objlist);
        return (objlist);
     }
     }
if(selector.indexOf("#")>0){ //id selector like "tag#id"
    if (selector.indexOf("#") > 0) { //id selector like "tag#id"
    s=selector.split("#");
        s = selector.split("#");
    tag=s[0];
        tag = s[0];
    selid=s[1];
        selid = s[1];
     }
     }
if(selid!=""){
    if (selid != "") {
    f=document.getElementById(selid);
        f = document.getElementById(selid);
    if(f) objlist.push(f);
        if (f) objlist.push(f);
    return(objlist);
        return (objlist);
     }
     }
if(selector.indexOf(".")>0){ //class selector like "tag.class"
    if (selector.indexOf(".") > 0) { //class selector like "tag.class"
    s=selector.split(".");
        s = selector.split(".");
    tag=s[0];
        tag = s[0];
    selclass=s[1];
        selclass = s[1];
     }
     }
var v=document.getElementsByTagName(tag); // tag selector like "tag"
    var v = document.getElementsByTagName(tag); // tag selector like "tag"
if(selclass=="")
    if (selclass == "")
    return(v);
        return (v);
for(i=0;i<v.length;i++){
    for (i = 0; i < v.length; i++) {
    if(v[i].className.indexOf(selclass)>=0){
        if (v[i].className.indexOf(selclass) >= 0) {
        objlist.push(v[i]);
            objlist.push(v[i]);
         }
         }
     }
     }
return(objlist);
    return (objlist);
}
}


function Mix(c1,c2){
function Mix(c1, c2) {
var i,step1,step2,x,y,r=new Array(3);
    var i, step1, step2, x, y, r = new Array(3);
if(c1.length==4)step1=1;
    if (c1.length == 4) step1 = 1;
else step1=2;
    else step1 = 2;
if(c2.length==4) step2=1;
    if (c2.length == 4) step2 = 1;
else step2=2;
    else step2 = 2;
for(i=0;i<3;i++){
    for (i = 0; i < 3; i++) {
    x=parseInt(c1.substr(1+step1*i,step1),16);
        x = parseInt(c1.substr(1 + step1 * i, step1), 16);
    if(step1==1) x=16*x+x;
        if (step1 == 1) x = 16 * x + x;
    y=parseInt(c2.substr(1+step2*i,step2),16);
        y = parseInt(c2.substr(1 + step2 * i, step2), 16);
    if(step2==1) y=16*y+y;
        if (step2 == 1) y = 16 * y + y;
    r[i]=Math.floor((x*50+y*50)/100);
        r[i] = Math.floor((x * 50 + y * 50) / 100);
     }
     }
return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
    return ("#" + r[0].toString(16) + r[1].toString(16) + r[2].toString(16));
}
}


function doRoundEdges(){
function doRoundEdges() {
  if(!NiftyCheck())
    if (!NiftyCheck())
    return;
        return;
  Rounded("div#nifty","all","#FFF","#D4DDFF","smooth");
    Rounded("div#nifty", "all", "#FFF", "#D4DDFF", "smooth");
}
}


addOnloadHook( doRoundEdges );
addOnloadHook(doRoundEdges);




Line 408: Line 416:
//
//
function setStyleById(i, p, v) {
function setStyleById(i, p, v) {
var n = document.getElementById(i);
    var n = document.getElementById(i);
n.style[p] = v;
    n.style[p] = v;
}
}


/* Add a hook to perform code on every pageload */
/* Add a hook to perform code on every pageload */
addOnloadHook( performIE );
addOnloadHook(performIE);
function performIE()
 
{  
function performIE() {
     if ( -1 != navigator.userAgent.indexOf ("MSIE") ) {
     if (-1 != navigator.userAgent.indexOf("MSIE")) {
         /* perform Microsoft Internet Explorer-specific subs */
         /* perform Microsoft Internet Explorer-specific subs */
         var Divs = document.getElementsByTagName( "div" );
         var Divs = document.getElementsByTagName("div");
         var divCnt = 0;
         var divCnt = 0;
         var divID = "";
         var divID = "";
Line 424: Line 432:
             var CurrDiv = Divs[0];
             var CurrDiv = Divs[0];
             var s = "";
             var s = "";
             while (Divs.length > divCnt) {  
             while (Divs.length > divCnt) {
                 s = eval("CurrDiv.style.ietop");
                 s = eval("CurrDiv.style.ietop");
                 if ((s != "") && (s != null)) {
                 if ((s != "") && (s != null)) {
                     divID = "mapDiv" + divCnt;
                     divID = "mapDiv" + divCnt;
                     CurrDiv.setAttribute( "id", divID );
                     CurrDiv.setAttribute("id", divID);
                     setStyleById(divID, "top", CurrDiv.style.ietop);
                     setStyleById(divID, "top", CurrDiv.style.ietop);
                 }
                 }
Line 436: Line 444:
         }
         }
     }
     }
}  
}


//Get Ad Dart Number
//Get Ad Dart Number
var randDARTNumber=0;
var randDARTNumber = 0;
function genSetRandDARTNumber()
 
{
function genSetRandDARTNumber() {
randDARTNumber = Math.round(Math.random()*1000000000000);
    randDARTNumber = Math.round(Math.random() * 1000000000000);
}
}
genSetRandDARTNumber();
genSetRandDARTNumber();
Line 460: Line 468:


/****************************** Common Gradient ******************************/
/****************************** Common Gradient ******************************/
$(function(){
$(function() {
     var rainbowList = $('table > tbody > tr[style*=rainbow]');
     var rainbowList = $('table > tbody > tr[style*=rainbow]');
     var headerList = $('table > tbody > tr').has('> th').filter(function(){
     var headerList = $('table > tbody > tr').has('> th').filter(function() {
         return $(this).children('td').length == 0;
         return $(this).children('td').length == 0;
     }).filter(function(){
     }).filter(function() {
         return $.inArray(this, rainbowList) == -1;
         return $.inArray(this, rainbowList) == -1;
     }).children('th');
     }).children('th');
     headerList.each(function(){
     headerList.each(function() {
         var bgc = $(this).css('background-color');
         var bgc = $(this).css('background-color');
         if(bgc != 'rgba(0, 0, 0, 0)' && bgc != 'transparent'){ /* Chrome & FF transparent hack */
         if (bgc != 'rgba(0, 0, 0, 0)' && bgc != 'transparent') { /* Chrome & FF transparent hack */
             $(this).css('background-image', 'linear-gradient(to bottom, #eee, ' + bgc + ')');
             $(this).css('background-image', 'linear-gradient(to bottom, #eee, ' + bgc + ')');
         }
         }
Line 476: Line 484:
         'backgroundColor': 'orange'
         'backgroundColor': 'orange'
     });
     });
/*
    /*
    $('table.odd-stripe > tbody > tr:has(td):').css('background-color', function(){
        $('table.odd-stripe > tbody > tr:has(td):').css('background-color', function(){
        return $(this).parent().parent().css('background-color');
            return $(this).parent().parent().css('background-color');
    });
        });
    $('table.odd-strip').css('background-color', 'transparent');
        $('table.odd-strip').css('background-color', 'transparent');
*/
    */
});
});


/**** Persist Header H2 ****/
/**** Persist Header H2 ****/

Revision as of 20:11, 7 May 2015

var usesClass = (function() {
    var reCache = {};
    return function(element, className) {
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
    };
})();
/*
addOnloadHook(function(){
    $('div.tabdiv > ul > li').click(function(){
        $(this).parent().parent().children('div').hide();
        $((this).children('a:first').attr('href')).show();
        $(this).parent().children('li').removeClass('active').addClass('inactive');
        $(this).removeClass('inactive').addClass('active');
    });
    $('div.tabdiv > ul > li > a:first').each(function(){
        $(this).attr('href', '');
    });
});
*/

addOnloadHook(function($) {
    return function() {
        $('.tabdiv > div').hide();
        $('.tabdiv').each(function() {
            $(this).find('> ul li').addClass('inactive');
            $(this).find('> ul li:first').removeClass('inactive');
            $(this).find('> ul li:first').addClass('active');
            $(this).find('> div:first').show();
        });
        $('.tabdiv > ul li').each(function() {
            var a = $(this).find('a:first');
            var target = a.attr('href');
            $(a).attr('href', ''); // Opera hates real hrefs
            $(this).click(function() {
                $(this).parent().find('> li').removeClass('active');
                $(this).parent().find('> li').addClass('inactive');
                $(this).addClass('active');
                $(this).removeClass('inactive');
                $(this).parent().parent().find('> div').hide();
                $(target).show();
                return false;
            });
        });
    }
}(jQuery));

/** Collapsible tables code *****************************************************
 *  Description: Allows tables to be collapsed, showing only the header
 *  Author: User:Bigfoot Lover @ BionicWiki.com
 *  Added: 24 September 2007
 */

/* Add a hook to make buttons, where need be, on every pageload */
addOnloadHook(createTableButtons);

/* Define global variables:
 * autoShrink is the number of tables that must exist on the page for usage of "class=collapsible autocollapse"
 * minimizeSymbol can be either a symbol such as a minus sign or a word such as hide or disappear
 * maximizeSymbol can be either a symbol such as a plus sign or a word such as show or appear */

var autoShrink = 2;
var minimizeSymbol = "hide";
var maximizeSymbol = "show";

/* Define functions that do-the-work */
/* Function toggleTableView() toggles a specified table's view from minimized to maximized, or vice versa */
function toggleTableView(tableIndex, tableShrink) {
    var Table = document.getElementById("collapsibleTable" + tableIndex);
    /* If there is no collapsible tables on the page, no need to do any shrinking */
    if (!Table) {
        return false;
    }

    var Button = document.getElementById("collapseButton" + tableIndex);
    /* If no collapsible buttons, no need to do any shrinking */
    if (!Button) {
        return false;
    }

    /* Grab the rows of the specified table */
    var Rows = Table.getElementsByTagName("tr");

    /* Do the hiding/unhiding */
    if (Button.firstChild.data == minimizeSymbol || tableShrink == 1) {
        /* if the button is set to minimize its contents, 
         * then loop through the rows and mark them hidden */
        var count = 1;
        while (Rows.length > count) {
            if (Rows[count].parentNode.parentNode.id == ("collapsibleTable" + tableIndex)) {
                Rows[count].style.display = "none";
            }
            count++;
        }
        /* After marking, change the table to show the maximize symbol */
        Button.firstChild.data = maximizeSymbol;
    } else {
        /* if the button is set to maximize its contents, 
         * then loop through the rows and mark them visible */
        var count = 1;
        while (Rows.length > count) {
            if (Rows[count].parentNode.parentNode.id == ("collapsibleTable" + tableIndex)) {
                Rows[count].style.display = Rows[0].style.display;
            }
            count++;
        }
        /* After marking, change the table to show the minimize symbol */
        Button.firstChild.data = minimizeSymbol;
    }
}

/* Funtion createTableButtons() creates the plus or minus symbol and alignment text
 * to be applied on collapsible tables */
function createTableButtons() {
    /* Define local variables */
    var tableIndex = 0;
    var NavBoxes = new Object();
    var Tables = document.getElementsByTagName("table");

    /* Use two count variables to handle cases where continue is used */
    var loopcount = 0;
    var count = 0;
    while (Tables.length > loopcount) {
        /* For all collapsible table on the page, this code goes through
         * them and makes a button for each one individually */
        count = loopcount;
        loopcount++;
        if (usesClass(Tables[count], "collapsible")) {

            /* Proceed only if a header row and header exist */
            var HeaderRow = Tables[count].getElementsByTagName("tr")[0];
            if (!HeaderRow) continue;
            var Header = HeaderRow.getElementsByTagName("th")[0];
            if (!Header) continue;

            /* Log where you are in the looping */
            NavBoxes[tableIndex] = Tables[count];

            /* Set the identifier of the table being edited in this iteration */
            Tables[count].setAttribute("id", "collapsibleTable" + tableIndex);

            /* Create the button assuming it is a minimized table
             * to do the initial creation. */
            var Button = document.createElement("span");
            var ButtonLink = document.createElement("a");
            var ButtonText = document.createTextNode(maximizeSymbol);

            /* Define where the button floats and its font and size.
             * The width should be set to the max character count of
             * the mininizeSymbol and maximizeSymbol + 2. ie. min and max
             * are 3 letters each + 2 = 5em */
            Button.style.styleFloat = "right";
            Button.style.cssFloat = "right";
            Button.style.fontWeight = "normal";
            Button.style.textAlign = "right";
            Button.style.width = "5em";
            Button.style.color = "white";


            /* Set the link color and identifier */
            ButtonLink.style.color = Header.style.color;
            ButtonLink.style.color = "white";
            ButtonLink.setAttribute("id", "collapseButton" + tableIndex);

            /* Set the destination of the button */
            ButtonLink.setAttribute("href", "javascript:toggleTableView(" + tableIndex + ");");
            ButtonLink.appendChild(ButtonText);
            Button.appendChild(document.createTextNode("["));
            Button.appendChild(ButtonLink);
            Button.appendChild(document.createTextNode("]"));


            /* Load the next header and table for the next iteration */
            Header.insertBefore(Button, Header.childNodes[0]);
            tableIndex++;
        }
    }

    /* Earlier in this function, assumed all tables are minimized to do the initial creation.
     * Now, loop again through the tables and set those to maximized that need setting,
     * and set the rows of those that don't as hidden */
    loopcount = 0;
    while (tableIndex > loopcount) {
        /* If autocollapse or collapse is not invalid, maximize; otherwise, minimize */
        if (((autoShrink > tableIndex) && usesClass(NavBoxes[loopcount], "autocollapse")) || !usesClass(NavBoxes[loopcount], "collapsed")) {
            toggleTableView(loopcount, 0);
        } else {
            toggleTableView(loopcount, 1);
        }
        loopcount++;
    }
}

/* JavaScript for rounding borders
   Source: http://webdesign.html.it/articoli/leggi/528/more-nifty-corners */

function NiftyCheck() {
    if (!document.getElementById || !document.createElement)
        return (false);
    isXHTML = /html\:/.test(document.getElementsByTagName('body')[0].nodeName);
    if (Array.prototype.push == null) {
        Array.prototype.push = function() {
            this[this.length] = arguments[0];
            return (this.length);
        }
    }
    return (true);
}

function Rounded(selector, wich, bk, color, opt) {
    var i, prefixt, prefixb, cn = "r",
        ecolor = "",
        edges = false,
        eclass = "",
        b = false,
        t = false;

    if (color == "transparent") {
        cn = cn + "x";
        ecolor = bk;
        bk = "transparent";
    } else if (opt && opt.indexOf("border") >= 0) {
        var optar = opt.split(" ");
        for (i = 0; i < optar.length; i++)
            if (optar[i].indexOf("#") >= 0) ecolor = optar[i];
        if (ecolor == "") ecolor = "#666";
        cn += "e";
        edges = true;
    } else if (opt && opt.indexOf("smooth") >= 0) {
        cn += "a";
        ecolor = Mix(bk, color);
    }
    if (opt && opt.indexOf("small") >= 0) cn += "s";
    prefixt = cn;
    prefixb = cn;
    if (wich.indexOf("all") >= 0) {
        t = true;
        b = true
    } else if (wich.indexOf("top") >= 0) t = "true";
    else if (wich.indexOf("tl") >= 0) {
        t = "true";
        if (wich.indexOf("tr") < 0) prefixt += "l";
    } else if (wich.indexOf("tr") >= 0) {
        t = "true";
        prefixt += "r";
    }
    if (wich.indexOf("bottom") >= 0) b = true;
    else if (wich.indexOf("bl") >= 0) {
        b = "true";
        if (wich.indexOf("br") < 0) prefixb += "l";
    } else if (wich.indexOf("br") >= 0) {
        b = "true";
        prefixb += "r";
    }
    var v = getElementsBySelector(selector);
    var l = v.length;
    for (i = 0; i < l; i++) {
        if (edges) AddBorder(v[i], ecolor);
        if (t) AddTop(v[i], bk, color, ecolor, prefixt);
        if (b) AddBottom(v[i], bk, color, ecolor, prefixb);
    }
}

function AddBorder(el, bc) {
    var i;
    if (!el.passed) {
        if (el.childNodes.length == 1 && el.childNodes[0].nodeType == 3) {
            var t = el.firstChild.nodeValue;
            el.removeChild(el.lastChild);
            var d = CreateEl("span");
            d.style.display = "block";
            d.appendChild(document.createTextNode(t));
            el.appendChild(d);
        }
        for (i = 0; i < el.childNodes.length; i++) {
            if (el.childNodes[i].nodeType == 1) {
                el.childNodes[i].style.borderLeft = "1px solid " + bc;
                el.childNodes[i].style.borderRight = "1px solid " + bc;
            }
        }
    }
    el.passed = true;
}

function AddTop(el, bk, color, bc, cn) {
    var i, lim = 4,
        d = CreateEl("b");

    if (cn.indexOf("s") >= 0) lim = 2;
    if (bc) d.className = "artop";
    else d.className = "rtop";
    d.style.backgroundColor = bk;
    for (i = 1; i <= lim; i++) {
        var x = CreateEl("b");
        x.className = cn + i;
        x.style.backgroundColor = color;
        if (bc) x.style.borderColor = bc;
        d.appendChild(x);
    }
    el.style.paddingTop = 0;
    el.insertBefore(d, el.firstChild);
}

function AddBottom(el, bk, color, bc, cn) {
    var i, lim = 4,
        d = CreateEl("b");

    if (cn.indexOf("s") >= 0) lim = 2;
    if (bc) d.className = "artop";
    else d.className = "rtop";
    d.style.backgroundColor = bk;
    for (i = lim; i > 0; i--) {
        var x = CreateEl("b");
        x.className = cn + i;
        x.style.backgroundColor = color;
        if (bc) x.style.borderColor = bc;
        d.appendChild(x);
    }
    el.style.paddingBottom = 0;
    el.appendChild(d);
}

function CreateEl(x) {
    if (isXHTML) return (document.createElementNS('http://www.w3.org/1999/xhtml', x));
    else return (document.createElement(x));
}

function getElementsBySelector(selector) {
    var i, selid = "",
        selclass = "",
        tag = selector,
        f, s = [],
        objlist = [];

    if (selector.indexOf(" ") > 0) { //descendant selector like "tag#id tag"
        s = selector.split(" ");
        var fs = s[0].split("#");
        if (fs.length == 1) return (objlist);
        f = document.getElementById(fs[1]);
        if (f) return (f.getElementsByTagName(s[1]));
        return (objlist);
    }
    if (selector.indexOf("#") > 0) { //id selector like "tag#id"
        s = selector.split("#");
        tag = s[0];
        selid = s[1];
    }
    if (selid != "") {
        f = document.getElementById(selid);
        if (f) objlist.push(f);
        return (objlist);
    }
    if (selector.indexOf(".") > 0) { //class selector like "tag.class"
        s = selector.split(".");
        tag = s[0];
        selclass = s[1];
    }
    var v = document.getElementsByTagName(tag); // tag selector like "tag"
    if (selclass == "")
        return (v);
    for (i = 0; i < v.length; i++) {
        if (v[i].className.indexOf(selclass) >= 0) {
            objlist.push(v[i]);
        }
    }
    return (objlist);
}

function Mix(c1, c2) {
    var i, step1, step2, x, y, r = new Array(3);
    if (c1.length == 4) step1 = 1;
    else step1 = 2;
    if (c2.length == 4) step2 = 1;
    else step2 = 2;
    for (i = 0; i < 3; i++) {
        x = parseInt(c1.substr(1 + step1 * i, step1), 16);
        if (step1 == 1) x = 16 * x + x;
        y = parseInt(c2.substr(1 + step2 * i, step2), 16);
        if (step2 == 1) y = 16 * y + y;
        r[i] = Math.floor((x * 50 + y * 50) / 100);
    }
    return ("#" + r[0].toString(16) + r[1].toString(16) + r[2].toString(16));
}

function doRoundEdges() {
    if (!NiftyCheck())
        return;
    Rounded("div#nifty", "all", "#FFF", "#D4DDFF", "smooth");
}

addOnloadHook(doRoundEdges);











/* IE Correction Code **********************************************
 * Description: This is code to fix known bugs in IE
 * Detects if an IE browser and applies browser-specific code
 * Author: User:Bigfoot Lover @ Bionic Wiki
 * Added: 8 October 2007
 * Modified 18 October 2007 to fix ie imagemap bug
 */

// setStyleById: given an element id, style property and 
// value, apply the style.
// args:
//  i - element id
//  p - property
//  v - value
//
function setStyleById(i, p, v) {
    var n = document.getElementById(i);
    n.style[p] = v;
}

/* Add a hook to perform code on every pageload */
addOnloadHook(performIE);

function performIE() {
    if (-1 != navigator.userAgent.indexOf("MSIE")) {
        /* perform Microsoft Internet Explorer-specific subs */
        var Divs = document.getElementsByTagName("div");
        var divCnt = 0;
        var divID = "";
        if (Divs.length > 0) {
            var CurrDiv = Divs[0];
            var s = "";
            while (Divs.length > divCnt) {
                s = eval("CurrDiv.style.ietop");
                if ((s != "") && (s != null)) {
                    divID = "mapDiv" + divCnt;
                    CurrDiv.setAttribute("id", divID);
                    setStyleById(divID, "top", CurrDiv.style.ietop);
                }
                divCnt++;
                CurrDiv = Divs[divCnt];
            }
        }
    }
}

//Get Ad Dart Number
var randDARTNumber = 0;

function genSetRandDARTNumber() {
    randDARTNumber = Math.round(Math.random() * 1000000000000);
}
genSetRandDARTNumber();

/* </pre> */


/****
     China Area has GFW abandon foreign sites (include Google).
     As a result, the Google Adsense will not been displayed when China visitor browse it.
     However, keeping trying to connect Google server takes lots of time, which result in EXTREME much time in loading the Ads.
     So I use this hack hope to improve speed for Chinese visitors.
****/
/* if(navigator && navigator.language.search("zh") !== -1)
    $(".adsbygoogle").css({"display": "none"});
*/

/****************************** Common Gradient ******************************/
$(function() {
    var rainbowList = $('table > tbody > tr[style*=rainbow]');
    var headerList = $('table > tbody > tr').has('> th').filter(function() {
        return $(this).children('td').length == 0;
    }).filter(function() {
        return $.inArray(this, rainbowList) == -1;
    }).children('th');
    headerList.each(function() {
        var bgc = $(this).css('background-color');
        if (bgc != 'rgba(0, 0, 0, 0)' && bgc != 'transparent') { /* Chrome & FF transparent hack */
            $(this).css('background-image', 'linear-gradient(to bottom, #eee, ' + bgc + ')');
        }
    });
    rainbowList.css({
        'backgroundColor': 'orange'
    });
    /*
        $('table.odd-stripe > tbody > tr:has(td):').css('background-color', function(){
            return $(this).parent().parent().css('background-color');
        });
        $('table.odd-strip').css('background-color', 'transparent');
    */
});

/**** Persist Header H2 ****/