MediaWiki:Common.js

From Elwiki
Revision as of 10:59, 6 May 2022 by Ritsu (talk | contribs)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/*! maphilight 30-05-2021 */

!function(t,i){"function"==typeof define&&define.amd?define(["jquery"],i):i(t.jQuery)}(this,function(d){var l,c,f,p,u,g,m,e,v,w,y;if(c=!!document.createElement("canvas").getContext,l=function(){var t=document.createElement("div");t.innerHTML='<v:shape id="vml_flag1" adj="1" />';var i=t.firstChild;return i.style.behavior="url(#default#VML)",!i||"object"==typeof i.adj}(),c||l){if(c){e=function(t){return Math.max(0,Math.min(parseInt(t,16),255))},v=function(t,i){return"rgba("+e(t.substr(0,2))+","+e(t.substr(2,2))+","+e(t.substr(4,2))+","+i+")"},f=function(t){var i=d('<canvas style="width:'+d(t).width()+"px;height:"+d(t).height()+'px;"></canvas>').get(0);return i.getContext("2d").clearRect(0,0,d(t).width(),d(t).height()),i};function b(t,e,a,o,r){if(o=o||0,r=r||0,t.beginPath(),"rect"==e)t.rect(a[0]+o,a[1]+r,a[2]-a[0],a[3]-a[1]);else if("poly"==e)for(t.moveTo(a[0]+o,a[1]+r),i=2;i<a.length;i+=2)t.lineTo(a[i]+o,a[i+1]+r);else"circ"==e&&t.arc(a[0]+o,a[1]+r,a[2],0,2*Math.PI,!1);t.closePath()}p=function(t,i,e,a,o){var r=t.getContext("2d");if(a.shadow){r.save(),"inside"==a.shadowPosition&&(b(r,i,e),r.clip());var s=100*t.width,n=100*t.height;b(r,i,e,s,n),r.shadowOffsetX=a.shadowX-s,r.shadowOffsetY=a.shadowY-n,r.shadowBlur=a.shadowRadius,r.shadowColor=v(a.shadowColor,a.shadowOpacity);var h=a.shadowFrom;h||(h="outside"==a.shadowPosition?"fill":"stroke"),"stroke"==h?(r.strokeStyle="rgba(0,0,0,1)",r.stroke()):"fill"==h&&(r.fillStyle="rgba(0,0,0,1)",r.fill()),r.restore(),"outside"==a.shadowPosition&&(r.save(),b(r,i,e),r.globalCompositeOperation="destination-out",r.fillStyle="rgba(0,0,0,1);",r.fill(),r.restore())}r.save(),b(r,i,e),a.fill&&(r.fillStyle=v(a.fillColor,a.fillOpacity),r.fill()),a.stroke&&(r.strokeStyle=v(a.strokeColor,a.strokeOpacity),r.lineWidth=a.strokeWidth,r.stroke()),r.restore(),a.fade&&d(t).css("opacity",0).animate({opacity:1},100)},u=function(t){t.getContext("2d").clearRect(0,0,t.width,t.height)}}else f=function(t){return d('<var style="zoom:1;overflow:hidden;display:block;width:'+t.width+"px;height:"+t.height+'px;"></var>').get(0)},p=function(t,i,e,a,o){var r,s,n,h;for(var l in e)e[l]=parseInt(e[l],10);r='<v:fill color="#'+a.fillColor+'" opacity="'+(a.fill?a.fillOpacity:0)+'" />',s=a.stroke?'strokeweight="'+a.strokeWidth+'" stroked="t" strokecolor="#'+a.strokeColor+'"':'stroked="f"',n='<v:stroke opacity="'+a.strokeOpacity+'"/>',"rect"==i?h=d('<v:rect name="'+o+'" filled="t" '+s+' style="zoom:1;margin:0;padding:0;display:block;position:absolute;left:'+e[0]+"px;top:"+e[1]+"px;width:"+(e[2]-e[0])+"px;height:"+(e[3]-e[1])+'px;"></v:rect>'):"poly"==i?h=d('<v:shape name="'+o+'" filled="t" '+s+' coordorigin="0,0" coordsize="'+t.width+","+t.height+'" path="m '+e[0]+","+e[1]+" l "+e.join(",")+' x e" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:0px;left:0px;width:'+t.width+"px;height:"+t.height+'px;"></v:shape>'):"circ"==i&&(h=d('<v:oval name="'+o+'" filled="t" '+s+' style="zoom:1;margin:0;padding:0;display:block;position:absolute;left:'+(e[0]-e[2])+"px;top:"+(e[1]-e[2])+"px;width:"+2*e[2]+"px;height:"+2*e[2]+'px;"></v:oval>')),h.get(0).innerHTML=r+n,d(t).append(h)},u=function(t){var i=d("<div>"+t.innerHTML+"</div>");i.children("[name=highlighted]").remove(),d(t).html(i.html())};g=function(t){var i,e,a=(t.getAttribute("shape")||"rect").toLowerCase().substr(0,4);if("defa"!==a){for(e=(t.getAttribute("coords")||"").split(","),i=0;i<e.length;i++)e[i]=parseFloat(e[i]);return[a,e]}},y=function(t,i){var e=d(t);return d.extend({},i,!!d.metadata&&e.metadata(),e.data("maphilight"))},w=function(t){return!!t.complete&&(void 0===t.naturalWidth||0!==t.naturalWidth)};var t=!(m={position:"absolute",left:0,top:0,padding:0,border:0});d.fn.maphilight=function(h){return h=d.extend({},d.fn.maphilight.defaults,h),c||t||(d(window).ready(function(){document.namespaces.add("v","urn:schemas-microsoft-com:vml");var t=document.createStyleSheet();d.each(["shape","rect","oval","circ","fill","stroke","imagedata","group","textbox"],function(){t.addRule("v\\:"+this,"behavior: url(#default#VML); antialias:true")})}),t=!0),this.each(function(){var e,t,r,s,n,a,i;if(e=d(this),!w(this))return window.setTimeout(function(){e.maphilight(h)},200);if(r=d.extend({},h,!!d.metadata&&e.metadata(),e.data("maphilight")),(i=e.get(0).getAttribute("usemap"))&&(s=d('map[name="'+i.substr(1)+'"]'),e.is('img,input[type="image"]')&&i&&0<s.length)){if(e.hasClass("maphilighted")){var o=e.parent();e.insertBefore(o),o.remove(),d(s).unbind(".maphilight")}this.src.replace(/[\n\r]/g,""),t=d("<div></div>").css({display:"block",background:'url("'+this.src+'")',"background-size":"contain","background-repeat":"no-repeat",position:"relative",padding:0,width:this.width,height:this.height}),r.wrapClass&&(!0===r.wrapClass?t.addClass(d(this).attr("class")):t.addClass(r.wrapClass)),e.before(t).css("opacity",1e-10).css(m).remove(),l&&e.css("filter","Alpha(opacity=0)"),t.append(e),n=f(this),d(n).css(m),n.height=this.height,n.width=this.width,d(s).bind("alwaysOn.maphilight",function(){a&&u(a),c||d(n).empty(),d(s).find("area[coords]").each(function(){var t,i;if((i=y(this,r)).alwaysOn){if(!a&&c&&(a=f(e[0]),d(a).css(m),a.width=e[0].width,a.height=e[0].height,e.before(a)),i.fade=i.alwaysOnFade,!(t=g(this)))return;p(c?a:n,t[0],t[1],i,"")}})}).trigger("alwaysOn.maphilight").bind("mouseover.maphilight focusin.maphilight",function(t){var i,e,a=t.target;if(!(e=y(a,r)).neverOn&&!e.alwaysOn){if(!(i=g(a)))return;if(p(n,i[0],i[1],e,"highlighted"),e.groupBy){"string"==typeof e.groupBy&&(e.groupBy=[e.groupBy]);var o=d(this);d.each(e.groupBy,function(t,i){var e;e=/^[a-zA-Z][\-a-zA-Z]+$/.test(i)?s.find("area["+i+'="'+o.attr(i)+'"]'):s.find(i);var a=this;e.each(function(){if(this!=a){var t=y(this,r);if(!t.neverOn&&!t.alwaysOn){var i=g(this);p(n,i[0],i[1],t,"highlighted")}}})})}c||d(n).append("<v:rect></v:rect>")}}).bind("mouseout.maphilight focusout.maphilight",function(t){u(n)}),e.before(n),e.addClass("maphilighted")}})},d.fn.maphilight.defaults={fill:!0,fillColor:"000000",fillOpacity:.2,stroke:!0,strokeColor:"ff0000",strokeOpacity:1,strokeWidth:1,fade:!0,alwaysOn:!1,neverOn:!1,groupBy:!1,wrapClass:!0,shadow:!1,shadowX:0,shadowY:0,shadowRadius:6,shadowColor:"000000",shadowOpacity:.8,shadowPosition:"outside",shadowFrom:!1}}else d.fn.maphilight=function(){return this}});

$('img[usemap]').maphilight({

  // fill the shape
  fill: true,

  // fill color
  fillColor: '00adda',

  // fill opacity
  fillOpacity: 0.2,

  // outline the shape
  stroke: false,

  // stroke color
  strokeColor: '000000',

  // stroke opacity
  strokeOpacity: 0,

  // stroke width
  strokeWidth: 0,

  // fade in the shapes on mouseover
  fade: true,

  // always show the hilighted areas
  alwaysOn: false,

  // never show the hilighted areas
  neverOn: false,

  // The name of an attribute to group areas by, or a selector for elements in the map to group. 
  // Or an array of the same
  // If this is present then all areas in the map which have the same attribute value as the hovered area will hilight as well
  groupBy: false,

  // If true, applies the class on the <img> to the wrapper div maphilight created.
  // If a string, that string is used as a class on the wrapper div.
  wrapClass: true,
  
  // apply a shadow to the shape
  shadow: true,
  shadowX: 0,
  shadowY: 0,
  shadowRadius: 12,
  shadowColor: 'ffffff',
  shadowOpacity: 1,
  // Can be 'outside', 'inside', or 'both'.
  shadowPosition: 'outside',
  // Can be 'stroke' or 'fill'
  shadowFrom: 'fill',
  
});

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");
}










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

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();

$(function () {
    doRoundEdges();
    performIE();
    $('.infobox .tabs-tabbox').before('<div class="tabs-background"></div>');
    $('dfn').parents('p').remove();
    $('.sidebar-chunk #nav > ul > li:has(".mw-selflink")').find('> a').addClass('mw-has-selflink');
    if (window.location.pathname == '/w/Special:RecentChanges') $('#mw-site-navigation .sidebar-chunk a[href="/w/Special:RecentChanges"]').addClass('mw-has-selflink');
    $('#p-banner').html("<span><span class='main-accent'>El</span>wiki</span>");
    $('table[cellpadding="5"][border="1"][style] tr, .segment-header:not(.job-change-collapsible .segment-header), .segment .mw-collapsible-text').each(function () {
        if ($(this).hasClass('mw-collapsible-text')) {
            var rgb = $(this).parent().parent().find('.segment-header:eq(0)').css('backgroundColor');
        } else {
            var rgb = $(this).css('backgroundColor');
        }
        var colors = rgb.match(/\d+/g);
        var o = Math.round(((parseInt(colors[0]) * 299) + (parseInt(colors[1]) * 587) + (parseInt(colors[2]) * 114)) / 1000);
        if (o < 150 && rgb != 'rgba(0, 0, 0, 0)') {
            $(this).css('color', 'white').css('text-shadow', '1px 1px 1px #000');
        }
    });
});