MediaWiki:Common.js: Difference between revisions

From Elwiki
mNo edit summary
mNo edit summary
Line 270: Line 270:


/* </pre> */
/* </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 ******************************/
/****************************** Common Gradient ******************************/

Revision as of 08:04, 23 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);
    };
})();

/* 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> */

/****************************** 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 ****/