MediaWiki:Common.js

出自【暗黑百科】DiabloWiki_凯恩之角

在2011年5月16日 (一) 09:04由Spx (讨论 | 贡献)所做的修订版本
跳转到: 导航, 搜索

注意:在保存以后,您必须清除浏览器的缓存才能看到所作出的改变。 Mozilla / Firefox / Safari:按住Shift再点击刷新,或按下Ctrl-F5Ctrl-R(在Macintosh上按下Command-R); Konqueror:只需点击刷新或按下F5Opera:在工具→首选项中完整清除它们的缓存,或按下Alt-F5Internet Explorer:按住Ctrl再点击刷新,或按下Ctrl-F5

/* 辅助处理 */
    /* 1. 功能設定 */
    window.JSConfig = window.JSconfig || {};
    window.JSConfig.collapseText = wgULS('隐藏▲', '隱藏▲'); //指示折叠收缩的默认文字
    window.JSConfig.expandText = wgULS('显示▼', '顯示▼'); //指示折叠展开的默认文字
    window.JSConfig.autoCollapse = 2; //文章少于 autoCollapse 个折叠块时,不自动折叠
    // window.JSConfig.SpecialSearchEnhancedDisabled=false; //是否禁止增加其它搜索引擎
    /* 2. 用jQuery实现的getElementsByClassName(需不需要返回DOM对象?) */
    window.getElementsByClassName = function (elm, tag, className) {
        return $(tag + '.' + className, elm);
    };
 
    /* 3. 遍历 */
    window.applyEach = function (callback, array) {
        var i = 0,
            j = array.length;
        while (i < j) {
            callback(array[i++]);
        }
    };
 
    /* 4. 移動元素 */
    window.elementMoveto = function (node, refNode, pos) { //默认位置为refNode前
        if (node && refNode) {
            if (pos && pos == 'after') {
                $(refNode).after(node);
            } else {
                $(refNode).before(node);
            }
        }
    };
 
    /* 5. 创建元素 */
    window.createElement = function (tag, children, props) {
        var element = document.createElement(tag);
        if (!(children instanceof Array)) {
            children = [children];
        }
        applyEach(function (child) {
            if (typeof child == 'string') {
                child = document.createTextNode(child);
            }
            if (child) {
                element.appendChild(child);
            }
        }, children);
        if (typeof props == 'object') {
            for (var k in props) {
                switch (k) {
                case 'styles':
                    var styles = props.styles;
                    for (var s in styles) {
                        element.style[s] = styles[s];
                    }
                    break;
                case 'events':
                    var events = props.events;
                    for (var e in events) {
                        addHandler(element, e, events[e]);
                    }
                    break;
                case 'class':
                    element.className = props[k];
                    break;
                default:
                    element.setAttribute(k, props[k]);
                }
            }
        }
        return element;
    };

/*
==定期強制用戶更新cache==

*/

var today=new Date();

if( (""+wgUserGroups).indexOf("user")!=-1 && (wgAction=="view") ){

 if(!getCookie("lastload") || isNaN(getCookie("lastload")) ){
  setCookie("lastload", today.getTime());
 }else{

  if( today.getTime()-getCookie("lastload") >= 7*24*60*60*1000 ){
   setCookie("lastload", today.getTime());
   if( getCookie("lastload")==today.getTime() ) window.location.reload(true);
  }else if( today.getTime()-getCookie("lastload") < 0 ){
   setCookie("lastload", today.getTime());
  }

 }

}


if( (""+wgUserGroups).indexOf("user")!=-1 && (wgAction=="edit") ){

 if(!getCookie("editlastload") || isNaN(getCookie("editlastload")) ){
  setCookie("editlastload", today.getTime());
 }else{

  if( today.getTime()-getCookie("editlastload") >= 7*24*60*60*1000 ){
   setCookie("editlastload", today.getTime());
   if( getCookie("editlastload")==today.getTime() ) window.location.reload(true);
  }else if( today.getTime()-getCookie("editlastload") < 0 ){
   setCookie("editlastload", today.getTime());
  }

 }

}
/*  
 * ImportScriptHttp.模块
 * 版本: r1
 */
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(7(){3(c.2!=S)8;2=k W();c.2=2;2.d={};2.C=7(9,6){3(2.d[9]){8(a)}2.d[9]=z;7 y(){f A;q{A=k 17()}o(e){q{A=k Q("15.P")}o(e){q{A=k Q("11.P")}o(14){A=a}}}3(!A)E("13 16 19 10 18.");8 A}f x=y();x.j=7(){3(5.N==4){3(5.n==1a||5.n==X){3((5.B!=a)){f s=l.u("v");s.U="i";s.G="h/i";s.T=p;s.h=5.B;l.J(\'L\')[0].M(s);3(6)6()}}I{E(\'Y Z V: \'+5.12+\' (\'+5.n+\')\');8(p)}5.j=a}};x.1g(\'1s\',9,p);x.1r(a);8(x)};c.t=2.C;7 m(b){f w=1q+\'?1u=\'+1t(b.r(/ /g,\'1w\')).r(\'%1v\',\'/\').r(\'%1p\',\':\')+\'&1n=1o&1b=h/i\';8(w)}2.F=7(b,6){8(t(m(b,6)))};c.1f=2.F;2.O=7(9,6){3(2.d[9])8 a;2.d[9]=z;f s=l.u(\'v\');s.1e=\'1c\';s.K(\'1d\',9);s.K(\'G\',\'h/i\');3(6){3(1h.1i.1m("1l")!=-1)s.j=(7(){3(5.N==\'1k\'){5.j=a;6()}});I s.H=(7(){5.H=a;6})}l.J(\'L\')[0].M(s);8 s};c.R=2.O;2.D=7(b,6){8(R(m(b),6))};c.1j=2.D})();',62,95,'||ImportScriptEx|if||this|callback|function|return|url|null|page|window|loadedScripts||var||text|javascript|onreadystatechange|new|document|ImportScriptExMakePageURI|status|catch|false|try|replace||ImportScriptExHttpURI|createElement|script|uri||MakeHttpRequest|true||responseText|HttpURI|Page|alert|HttpPage|type|onload|else|getElementsByTagName|setAttribute|head|appendChild|readyState|URI|XMLHTTP|ActiveXObject|ImportScriptExURI|undefined|defer|language|error|Object|304|XML|request|connection|Microsoft|statusText|Could|oc|Msxml2|not|XMLHttpRequest|object|create|200|ctype|googlejsapi|src|id|ImportScriptExHttpPage|open|navigator|userAgent|ImportScriptExPage|complete|MSIE|indexOf|action|raw|3A|wgScript|send|GET|encodeURIComponent|title|2F|_'.split('|'),0,{}))
/*  ImportScriptHttp.模块,结束  */
//var googlejsapiurl='http://www.google.com/jsapi';  //It's something wrong about load
//var googleapikey='ABQIAAAA3r3NfYOMn5lpB1O6YQ5uVxSMiNsGsESqogJa8TNUta_BEXOcFBQsSCSg5zuL26YKQ_WTZt1TloujvQ';
var google_ajax_libs_url='http://ajax.googleapis.com/ajax/libs/';
var jQueryVer='1.4.2';
var jQueryUrl=google_ajax_libs_url+'jquery/'+jQueryVer+'/jquery.min.js';

ImportScriptExURI('http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js',(function(){//load jQuery start
if (window.jQuery === undefined)
	ImportScriptExHttpPage('MediaWiki:JQuery.1.5.2.min.js');
if (window.jQuery === undefined)
	console.log('Failed to load jQuery!');
//load jQuery end;
//begining to use jQuery function

// addHandler in wikibits.js has some problems? overwrite it here:
function addHandler( element, attach, handler ) {
    $(element).bind(attach, handler);
}
}));//end jquery

/* 测试元素中是否含有指定的样式 **************************************
* Description: 使用正则式与缓存来提高性能
* Maintainers: User:fdcn @zh.wikipedia
*              [[en:User:Mike Dillon]], [[en:User:R. Koot]], [[en:User:SG]] @en.wikipedia
*/
var hasClass = (function () {
    var reCache = {};
    return function (element, className) {
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
    };
})();

/*

== IE兼容性修正 ==
*/
function fixIE(){
}
if (navigator.appName == "Microsoft Internet Explorer"){
    /** Internet Explorer bug fix **************************************************
     *
     *  Description: Fixes IE horizontal scrollbar bug
     *  Maintainers: [[User:fdcn]]
     */
    var oldWidth;
    var docEl = document.documentElement;
    function fixIEScroll(){
        if (!oldWidth || docEl.clientWidth > oldWidth){
            doFixIEScroll();
        }else{
            setTimeout(doFixIEScroll, 1);
        }
        oldWidth = docEl.clientWidth;
    }

    function doFixIEScroll() {
        docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : "";
    }

    document.attachEvent("onreadystatechange", fixIEScroll);
    attachEvent("onresize", fixIEScroll);

    //Import scripts specific to Internet Explorer 6
    if (navigator.appVersion.substr(22, 1) == "6"){
        importScript("MediaWiki:Common.js/IE60Fixes.js")
    }
}

/*
 
== 增加摺疊功能 ==
*/
    /** 摺疊 div table *****************************
     *  Description: 实现div.NavFrame和table.collapsible的可折叠性。
     *  JSConfig的collapseText、expandText、autoCollapse属性定义默认文字和默认最少自动折叠块
     *  Maintainers: User:fdcn
     */
 
    function cancelBubble(e) {
        e = e || window.event;
        if (e.stopPropagation) {
            e.stopPropagation();
        } else {
            e.cancelBubble = true;
        }
    }
 
    function createToggleButton(head) {
        var parent = head;
        if (head.tagName.toLowerCase() == 'tr') { //对表格特别处理
            if (head.getElementsByTagName("th").length) {
                parent = head.cells[parent.cells.length - 1];
            } else {
                return;
            }
        }
        var textS, textH, button = getElementsByClassName(head, "span", "NavToggle")[0];
        if (button) {
            parent = button.parentNode;
        } else {
            textS = createElement("span", [JSConfig.expandText], {
                'class': 'toggleShow'
            });
            textH = createElement("span", [JSConfig.collapseText], {
                'class': 'toggleHide'
            });
            button = createElement("span", [textS, textH], {
                'class': 'NavToggle',
                styles: {
                    'width': "6em"
                }
            });
        }
        button.style.display = "inline";
        head.className += " uncollapse toggleHotspot";
        parent.insertBefore(button, parent.childNodes[0]);
    }
    window.wgCollapse = function (head, container, defaultCollapse) {
        if (head) {
            createToggleButton(head);
        }
        var self = this;
        this.state = 0;
        this.container = container;
        applyEach(function (h) {
            if (h.nodeType == 1 && !hasClass(h, "uncollapse") && !hasClass(h, "toggleShow") && !hasClass(h, "toggleHide")) {
                h.className += " toggleHide";
            }
        }, defaultCollapse); //预设的隐藏元素
 
 
        function getArray(clsname) {
            var r = [],
                i = 0,
                e, ea = getElementsByClassName(container, "*", clsname);
            while (e = ea[i++]) {
                var parent = e.parentNode;
                while (!hasClass(parent, 'NavFrame') && !hasClass(parent, 'collapsible')) {
                    parent = parent.parentNode;
                }
                if (parent == container) {
                    r.push(e);
                }
            }
            return r;
        }
        var toggleA = getArray("toggleShow");
        var toggleB = getArray("toggleHide");
        var hotspots = getArray("toggleHotspot");
 
        function _toggle(list, state) {
            var i = 0,
                e;
            while (e = list[i++]) {
                e.style.display = state ? e.showStyle || '' : 'none';
            }
        }
        this.toggle = function (state) {
            self.state = (typeof state == 'undefined') ? 1 - self.state : state;
            _toggle(toggleA, self.state);
            _toggle(toggleB, 1 - self.state);
        }
        var i = 0,
            h;
        while (h = hotspots[i++]) {
            applyEach(function (link) {
                addClickHandler(link, cancelBubble);
            }, h.getElementsByTagName("A"));
            h.style.cursor = "pointer";
            $(h).attr('tabindex', '0').keydown(function (event) {
                if (event.which == 13) { // Enter
                    self.toggle();
                }
            });
            addClickHandler(h, function () {
                self.toggle();
            });
        }
    };
 
    $(function () {
        if (!window.disableCollapse) {
            //init
            var items = [];
            applyEach(function (NavFrame) {
                var i = 0,
                    child = NavFrame.childNodes,
                    head;
                while (head = child[i++]) {
                    if (head.className && hasClass(head, "NavHead")) {
                        break;
                    }
                }
                items.push(new wgCollapse(head, NavFrame, NavFrame.childNodes));
            }, getElementsByClassName(document, "div", "NavFrame"));
            applyEach(function (table) {
                var rows = table.rows;
                items.push(new wgCollapse(rows[0], table, rows));
            }, getElementsByClassName(document, "table", "collapsible"));
            var item, i = 0,
                count = items.length;
            while (item = items[i++]) {
                item.toggle(
                hasClass(item.container, "collapsed") || (count >= JSConfig.autoCollapse && hasClass(item.container, "autocollapse")));
            }
        }
    });
    //修正摺疊後定位變化
    hookEvent("load", function () {
        if (location.hash) {
            location.href = location.hash;
        }
    });
个人工具
分享到: 更多
名字空间
变换
动作
网站地图
暗黑破坏神 III
暗黑破坏神 II
暗黑破坏神
工具箱
编辑箱
关于暗黑百科