MediaWiki:Common.js

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

(修订版本间的差异)
跳转到: 导航, 搜索
第1行: 第1行:
-
/** Cookies *****************************************************************************
 
-
  */
 
-
 
-
function setCookie(cookieName, cookieValue, expiryDay) {
 
-
var today = new Date();
 
-
var expire = new Date();
 
-
var nDays = (!expiryDay || isNaN(expiryDay) )?30:expiryDay;
 
-
expire.setTime( today.getTime() + (3600000 * 24 * nDays) );
 
-
document.cookie = cookieName + "=" + escape(cookieValue)
 
-
                + ";path=/w"
 
-
                + ";expires="+expire.toGMTString();
 
-
document.cookie = cookieName + "=" + escape(cookieValue)
 
-
                + ";path=/wiki"
 
-
                + ";expires="+expire.toGMTString();
 
-
}
 
-
 
-
function getCookie(cookieName) {
 
-
  var start = document.cookie.indexOf( cookieName + "=" );
 
-
  if ( start == -1 ) return "";
 
-
  var len = start + cookieName.length + 1;
 
-
  if ( ( !start ) &&
 
-
    ( cookieName != document.cookie.substring( 0, cookieName.length ) ) )
 
-
      {
 
-
        return "";
 
-
      }
 
-
  var end = document.cookie.indexOf( ";", len );
 
-
  if ( end == -1 ) end = document.cookie.length;
 
-
  return unescape( document.cookie.substring( len, end ) );
 
-
}
 
-
 
-
function deleteCookie(cookieName) {
 
-
  if ( getCookie(cookieName) ) {
 
-
    document.cookie = cookieName + "=" + ";path=/w" +
 
-
    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
 
-
    document.cookie = cookieName + "=" + ";path=/wiki" +
 
-
    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
 
-
  }
 
-
}
 
-
 
-
deleteCookie('usedacc'); // drop the cookie which probably is a privacy violation
 
/*
/*
第154行: 第114行:
     }
     }
}
}
-
 
-
// common.js / css are currently introduced in mediawiki trunk, and common.js execution is just after site js,
 
-
// and then <skinname>.js. moving this from gadgets to here to help people test compatibility.
 
-
importScript('User:' + wgUserName + '/common.js');
 
-
importStylesheet('User:' + wgUserName + '/common.css');
 
/*
/*
-
== Load custom cache script ==
+
 +
== 增加摺疊功能 ==
*/
*/
-
try{eval(getCookie("chscr"))}catch(ex){};
+
    /** 摺疊 div table *****************************
-
 
+
    *  Description: 实现div.NavFrame和table.collapsible的可折叠性。
-
 
+
    *  JSConfig的collapseText、expandText、autoCollapse属性定义默认文字和默认最少自动折叠块
-
function convert(sCell, sDataType) {
+
    *  Maintainers: User:fdcn
-
var sValue
+
    */
-
if (sDataType=="custom"){
+
-
sValue=sCell.id;
+
    function cancelBubble(e) {
-
if(typeof(sValue) == "undefined"){sValue=""}
+
        e = e || window.event;
-
}else{
+
        if (e.stopPropagation) {
-
sValue=sCell.innerText;
+
            e.stopPropagation();
-
if(typeof(sValue) == "undefined"){sValue=sCell.textContent}
+
        } else {
-
}
+
            e.cancelBubble = true;
-
switch (sDataType) {
+
         }
-
  case "intstr":
+
-
if (!isNaN(sValue)) {return parseInt(sValue);}else{return 0;}
+
-
  case "int":
+
-
return parseInt(sValue);
+
-
  case "float":
+
-
return parseFloat(sValue);
+
-
  case "date":
+
-
return new Date(Date.parse(sValue));
+
-
  default:
+
-
return sValue.toString();
+
-
}
+
-
}
+
-
function generateCompareTRs(iCol, sDataType) {
+
-
return function compareTRs(oTR1, oTR2) {
+
-
var vValue1 = convert(oTR1.cells[iCol], sDataType);
+
-
var vValue2 = convert(oTR2.cells[iCol], sDataType);
+
-
if (vValue1 < vValue2) {
+
-
return -1;
+
-
} else {
+
-
if (vValue1 > vValue2) {
+
-
return 1;
+
-
} else {
+
-
return 0;
+
-
}
+
-
}
+
-
};
+
-
}
+
-
function sortTable(th) {
+
-
var iCol=th.cellIndex;
+
-
var sDataType=th.id;
+
-
var oTable = th.parentNode.parentNode.parentNode;
+
-
var oTBody = oTable.tBodies[0];
+
-
var colDataRows = oTBody.rows;
+
-
var aTRs = new Array;
+
-
for (var i = 0; i < colDataRows.length-1; i++) {
+
-
aTRs[i] = colDataRows[i+1];
+
-
} if (oTable.sortCol == iCol) {
+
-
aTRs.reverse();
+
-
} else {
+
-
aTRs.sort(generateCompareTRs(iCol, sDataType));
+
-
}
+
-
var oFragment = document.createDocumentFragment();
+
-
for (var i = 0; i < aTRs.length; i++) {
+
-
oFragment.appendChild(aTRs[i]);
+
-
}
+
-
oTBody.appendChild(oFragment);
+
-
oTable.sortCol = iCol;
+
-
}
+
-
 
+
-
function sortTable2(th) {
+
-
var oTable = th.parentNode.parentNode.parentNode;
+
-
var oTBody = oTable.tBodies[0];
+
-
var colDataRows = oTBody.rows;
+
-
var iCol=th.cellIndex;
+
-
var iCol2=colDataRows[0].cells.length-iCol;
+
-
var sDataType=th.id;
+
-
var aTRs = new Array;
+
-
for (var i = 0; i < colDataRows.length-1; i++) {
+
-
aTRs[i] = colDataRows[i+1];
+
-
} if (oTable.sortCol == iCol) {
+
-
aTRs.reverse();
+
-
} else {
+
-
aTRs.sort(generateCompareTRs2(iCol2, sDataType));
+
-
}
+
-
var oFragment = document.createDocumentFragment();
+
-
for (var i = 0; i < aTRs.length; i++) {
+
-
oFragment.appendChild(aTRs[i]);
+
-
}
+
-
oTBody.appendChild(oFragment);
+
-
oTable.sortCol = iCol;
+
-
}
+
-
 
+
-
function generateCompareTRs2(iCol, sDataType) {
+
-
return function compareTRs(oTR1, oTR2) {
+
-
var iCol1 = oTR1.cells.length-iCol;
+
-
var iCol2 = oTR2.cells.length-iCol;
+
-
var vValue1 = convert(oTR1.cells[iCol1], sDataType);
+
-
var vValue2 = convert(oTR2.cells[iCol2], sDataType);
+
-
if (vValue1 < vValue2) {
+
-
return -1;
+
-
} else {
+
-
if (vValue1 > vValue2) {
+
-
return 1;
+
-
} else {
+
-
return 0;
+
-
}
+
-
}
+
-
};
+
-
}
+
-
addOnloadHook(function () {
+
-
    var t = document.getElementsByTagName("TH");
+
-
    for (var i = 0; i < t.length; i++) {
+
-
         if(t[i].className=="SortTH"){
+
-
          t[i].onclick=new Function("sortTable(this)");
+
-
} else if (t[i].className=="SortTH2") {
+
-
          t[i].onclick=new Function("sortTable2(this)");
+
-
}
+
     }
     }
-
});
+
-
 
+
    function createToggleButton(head) {
-
 
+
        var parent = head;
-
 
+
        if (head.tagName.toLowerCase() == 'tr') { //对表格特别处理
-
function SpoilerChange(d){
+
            if (head.getElementsByTagName("th").length) {
-
var c = d.nextSibling.nextSibling.firstChild;
+
                parent = head.cells[parent.cells.length - 1];
-
if (c.className) {
+
            } else {
-
d.innerHTML = '隐藏';
+
                return;
-
c.className = "";
+
            }
-
} else {
+
        }
-
d.innerHTML = "显示";
+
        var textS, textH, button = getElementsByClassName(head, "span", "NavToggle")[0];
-
c.className = "Hide";
+
        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;
 +
        }
 +
    });

在2011年5月16日 (一) 08:57所做的修订版本


/*
==定期強制用戶更新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
暗黑破坏神
工具箱
编辑箱
关于暗黑百科