“MediaWiki:Common.js”的版本间的差异
来自死神中文网
Flyingtime(讨论 | 贡献) (新页面: →此处的JavaScript将加载于所有用户每一个页面。: //<source lang="javascript"> →== 中文處理 ==: //设置中文语言页 var htmlE=document.documentElement; htm...) |
Flyingtime(讨论 | 贡献) |
||
第690行: | 第690行: | ||
/* | /* | ||
==繁简logo显示== | ==繁简logo显示== | ||
− | + | ||
addOnloadHook(function() { | addOnloadHook(function() { | ||
第699行: | 第699行: | ||
+ wgULS("zh/6/62/Wiki_zh-hans.png", "zh/b/bc/Wiki.png")+ ")"; | + wgULS("zh/6/62/Wiki_zh-hans.png", "zh/b/bc/Wiki.png")+ ")"; | ||
}); | }); | ||
− | + | */ | |
//</source> | //</source> |
2008年12月28日 (日) 03:41的最新版本
/* 此处的JavaScript将加载于所有用户每一个页面。 */ //<source lang="javascript"> /* == 中文處理 == */ //设置中文语言页 var htmlE=document.documentElement; htmlE.setAttribute("lang",wgUserLanguage); htmlE.setAttribute("xml:lang",wgUserLanguage); //返回繁簡字串 function wgULS(hans,hant,cn,tw,hk,sg,zh){ return {//保證每一語言有值 'zh-hans':hans||cn||sg, 'zh-hant':hant||tw||hk, 'zh-cn':cn||hans||sg, 'zh-sg':sg||hans||cn, 'zh-tw':tw||hant||hk, 'zh-hk':hk||hant||tw, 'zh':zh||hant||hans||cn||tw||hk||sg }[wgUserLanguage]; } /* 當需要時載入對應的 scripts */ if (wgAction == "edit" || wgAction == "submit") //scripts specific to editing pages { importScript("MediaWiki:Common.js/edit.js") } else if (wgPageName == "Special:Search") //scripts specific to Special:Search { importScript("MediaWiki:Common.js/search.js") } /* 所有用戶在加載任何頁面時,這裡的JavaScript都會加載 == 辅助处理 == */ //功能設定 if(!window.JSConfig){var JSConfig={};} JSConfig.collapseText=wgULS('隐藏▲','隱藏▲');//指示折叠收缩的默认文字 JSConfig.expandText=wgULS('显示▼','顯示▼');//指示折叠展开的默认文字 JSConfig.autoCollapse=2; //文章少于 autoCollapse 个折叠块时,不自动折叠 JSConfig.SpecialSearchEnhancedDisabled=false; //是否禁止增加其它搜索引擎 function forEach(callback,array){ var i=0,j=array.length; while(i<j){callback(array[i++]);} } // 移動元素 function elementMoveto(node, refNode, pos){//默认位置为refNode前 if(node && refNode){ var parent=refNode.parentNode; if (pos && pos=='after') {refNode=refNode.nextSibling;} try { if(refNode){ parent.insertBefore(node, refNode); }else{ parent.appendChild(node); } } catch (DOMException) {}; } } //创建元素 function createElement(tag,children,props){ var element = document.createElement(tag); if(!(children instanceof Array)){children=[children];} forEach(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; } //wiki URL var wgProjectURL={ en:'http://en.wikipedia.org',de:'http://de.wikipedia.org',fr:'http://fr.wikipedia.org', pl:'http://pl.wikipedia.org',ja:'http://ja.wikipedia.org',it:'http://it.wikipedia.org', nl:'http://nl.wikipedia.org',pt:'http://pt.wikipedia.org',es:'http://es.wikipedia.org', sv:'http://sv.wikipedia.org',//僅列前十名其它語言百科 m:'http://meta.wikimedia.org',b:'http://zh.wikibooks.org',q:'http://zh.wikiquote.org', n:'http://zh.wikinews.org',wikt:'http://zh.wiktionary.org',mw:'http://www.mediawiki.org', commons:'http://commons.wikimedia.org' } /** * 将页面名称转换为URL * * @param page 页面名称 * @param paras 附加后缀对象,用空对象{}做参数可以取得源码 */ function getWikiPath(page,paras){ var reg=/^[a-z]+:/; var pre=page.match(reg); pre = pre && wgProjectURL[pre[0].replace(/:$/,'').toLowerCase()]; if (pre) {page=page.replace(reg,'');} else {pre=wgServer;} //保障没有相对路径,以照顾在线代理。 var url = pre + wgScript + '?title=' + encodeURI( page.replace( ' ', '_' ) ); if(typeof paras=='object'){ paras.ctype=paras.ctype||'text'; paras.dontcountme=paras.dontcountme||'s'; paras.action=paras.action||'raw'; for(var k in paras){url += '&' + k + '=' + paras[k]; } } return url; } //引入[[Special:Gadgets]]要求的腳本和樣式 if(window.requireScripts instanceof Array){ forEach(importScript,requireScripts); } if(window.requireStylesheets instanceof Array){ forEach(importStylesheet,requireStylesheets); } /* 测试元素中是否含有指定的样式 ************************************** * 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(){ 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); } if (navigator.appName == "Microsoft Internet Explorer" && document.compatMode == "CSS1Compat"){ fixIE(); document.getElementsByClassName = function(theName){ var j = 0; var array = []; for(var i = 0;(e = document.getElementsByTagName("*")[i]); i ++) { if(e.className == theName) { array[j] = e; j ++; } } return array; } } /* == 工具提示與快捷鍵 == */ ta = { 'ca-article' : ['a',wgULS('浏览条目正文','瀏覽條目正文')], 'ca-nomove' : ['',wgULS('你不能移动这个页面','你不能移動這個頁面')], 'n-Featured_content' : ['',wgULS('查看中文维基百科的特色内容','查看中文維基百科的特色內容')], 'n-indexpage' : ['',wgULS('以分类索引搜寻中文维基百科','以分類索引搜尋中文維基百科')], 'n-commonsupload' : ['',wgULS('把自由版权图片上传到维基共享资源','把自由版權圖片上傳到維基共享資源')], 'n-contact' : ['',wgULS('如何联络维基百科','如何聯絡維基百科')], 'n-villagepump' : ['',wgULS('参与维基百科社群的讨论','參與維基百科社群的討論')], 'n-Information_desk' : ['',wgULS('解答任何与维基百科无关的问题的地方','解答任何與維基百科無關的問題的地方')], 'n-conversion' : ['',wgULS('提出字词转换请求','提出字詞轉換請求')], 'n-allpages' : ['',wgULS('浏览所有页面的清单','瀏覽所有頁面的清單')], 'ca-nstab-project' : ['a',wgULS('查看维基计划页面','查看維基計畫頁面','查看維基計劃頁面')], 'n-policy' : ['',wgULS('查看维基百科的方针和指引','查看維基百科的方針和指引')], 'n-about' : ['',wgULS('查看维基百科的简介','查看維基百科的簡介')] } /* == 特色條目優良與條目鏈接顯示== */ addOnloadHook( function(){ var InterwikiLinks = document.getElementById( "p-lang" ); if ( !InterwikiLinks ) { return; } forEach( function(link){ if ( document.getElementById( link.className + "-fa" ) ) { link.className += " FA" link.title = wgULS("此条目为特色条目。","此條目為特色條目。"); } if ( document.getElementById( link.className + "-ga" ) ) { link.className += " GA" link.title = wgULS("此条目为优良条目。","此條目為優良條目。"); } },InterwikiLinks.getElementsByTagName("li") ); }); /* == 增加摺疊功能 == */ /** 摺疊 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':"3.8em"}}); } button.style.display="inline"; head.className+=" uncollapse toggleHotspot"; parent.insertBefore( button, parent.childNodes[0] ); } function wgCollapse(head,container,defaultCollapse){ if(head){ createToggleButton(head); } var self=this; this.state=0; this.container=container; forEach( 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++]){ forEach(function(link){ addClickHandler(link,cancelBubble); },h.getElementsByTagName("A")); h.style.cursor = "pointer"; addClickHandler(h,function(){self.toggle();}); } } addOnloadHook(function(){ //init var items=[]; forEach( 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") ); forEach ( 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;}}); /* == 首頁輸出修正 == */ /** 首页输出修正 ******************************************************* 描述: 维护者: [[User:Fdcn]] */ // "首頁" == wgTitle 代表重定向頁 if ( wgTitle == '首页' && ( wgNamespaceNumber == 0 || wgNamespaceNumber == 1 ) ) { addOnloadHook( function () { try { var Node = document.getElementById( 'ca-nstab-main' ).firstChild; var label = wgULS('首页','首頁'); if ( Node.textContent ) { // Per DOM Level 3 Node.textContent = label; } else if ( Node.innerText ) { // IE doesn't handle .textContent Node.innerText = label; } else { // Fallback Node.replaceChild( Node.firstChild, document.createTextNode( label ) ); } } catch(e) {}// bailing out! } ); if(wgNamespaceNumber == 0){ addOnloadHook( function () { addPortletLink('p-lang', getWikiPath('Wikipedia:维基百科语言列表'), wgULS('维基百科语言列表','維基百科語言列表'), 'interwiki-completelist',wgULS('维基百科的完整各语言列表', '維基百科的完整各語言列表')); }); } } /* == 取消討論頁的[+]按鈕 == */ addOnloadHook(function () { if(document.getElementById('no-newsection') && document.getElementById('ca-addsection')) { document.getElementById('ca-addsection').style.display="none"; } }); /* ==WikiMiniAtlas世界地圖== */ /** WikiMiniAtlas ******************************************************* * * 描述:WikiMiniAtlas是一個popup而可點選與拖曳的世界地圖。 * 這個腳本將會讓所有的經緯度標示中顯示WikiMiniAtlas的popup開啟按鈕。 * 由於被許多計畫使用,因此腳本放置在元維基中。 * 更多資訊請詳見[[Meta:WikiMiniAtlas]]。 * 創建者:[[:en:User:Dschwen]] */ if (wgServer == "https://secure.wikimedia.org") { var metaBase = "https://secure.wikimedia.org/wikipedia/meta"; } else { var metaBase = "http://meta.wikimedia.org"; } importScriptURI(metaBase+"/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400") /* ==反frame== */ try { if (top.location != self.location) { top.location.replace(self.location); } }catch(ex){ top.location.replace(self.location); } /** 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"; } } /* ==定期強制用戶更新cache== */ if( (""+wgUserGroups).indexOf("user")!=-1 && (wgAction=="view") ){ var today=new Date(); 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(wgAction=="protect") { addOnloadHook( function(){ var pform=document.getElementById("mw-Protect-Form"); var timeoptions; timeoptions=pform["wpProtectExpirySelection-edit"].options; if(timeoptions[0].value!="existing"){ timeoptions[timeoptions.length-1].selected=true; ProtectionForm.updateExpiryList(pform["wpProtectExpirySelection-edit"]); } timeoptions=pform["wpProtectExpirySelection-move"].options; if(timeoptions[0].value!="existing"){ timeoptions[timeoptions.length-1].selected=true; ProtectionForm.updateExpiryList(pform["wpProtectExpirySelection-move"]); } }); } /* ==站内搜索统计== see http://wikistics.falsikon.de/ */ // This script is needed for anonymously logging search terms by the Squids; see [[wikt:de:MediaWiki:If-search.js]] // The search URL will contain the search term // Please modify retroactively // You may have to adapt this? function $(ID) {return document.getElementById(ID);} function tfSearch(s,t) { if ($(s)) { $(s).setAttribute("onsubmit", "SubSearch("+t+")"); $(s).parentNode.innerHTML = $(s).parentNode.innerHTML; // f***ing IE } } function LogSearch() { tfSearch('searchform',1); tfSearch('search',3); tfSearch('powersearch',2); tfSearch('bodySearch',4); oSEAp = $("searchform").action.replace(/^.*\/wiki\//, ""); } addOnloadHook(LogSearch); function SubSearch(s) { var x="/"; if (s<2) { if ($("searchInput").value == "") {x="";} $("searchform").action = "/wiki/"+oSEAp+x+$("searchInput").value; } else if (s<3) { if ($("powerSearchText").value == "") {x="";} $("powersearch").getElementsByTagName("input")[0].value = oSEAp+x+$("powerSearchText").value; } else if (s<4) { if ($("searchText").value == "") {x="";} $("search").firstChild.value = oSEAp+x+$("searchText").value; } else if (s<5) { if ($("bodySearchIput").value == "") {x="";} $("bodySearch").action = "/wiki/"+oSEAp+x+$("bodySearchIput").value; } } /* ==加载ToolTips== 移植自Commons */ importScript( "MediaWiki:Tooltips.js" ); var dynamicTooltip = { toggle : false, doTip : function (evt) { x = evt.pageX || evt.clientX + ((document.documentElement ? document.documentElement.scrollLeft : 0) || document.body.scrollLeft || 0); y = evt.pageY || evt.clientY + ((document.documentElement ? document.documentElement.scrollTop : 0) || document.body.scrollTop || 0); var tip = document.createElement ('div'); var text = document.createTextNode ('Initial mouse coordinates: x = ' + x + ', y = ' + y); if (this.tt_toggle) { // Make the whole stuff a dummy link every second time. var lk = document.createElement ('a'); lk.appendChild (text); lk.setAttribute ('href', '#'); tip.appendChild (lk); } else { tip.appendChild (text); } this.tt_toggle = !this.tt_toggle; return tip; } } function setTooltips () { var close_imgs = new Array(3); close_imgs[0] = document.createElement('img'); close_imgs[0].src = "http://upload.wikimedia.org/wikipedia/commons/f/f8/Tooltip-CloseButton.png"; close_imgs[1] = document.createElement('img'); close_imgs[1].src = "http://upload.wikimedia.org/wikipedia/commons/5/5a/Tooltip-CloseButton-Hover.png"; close_imgs[2] = document.createElement('img'); close_imgs[2].src = "http://upload.wikimedia.org/wikipedia/commons/d/df/Tooltip-CloseButton-Active.png"; close_imgs[0].width = close_imgs[1].width = close_imgs[2].width = "16"; var tip_track_with_button_elements = document.getElementsByClassName('TipTrackButton'); var tip_track_tip_with_button_elements = document.getElementsByClassName('TipTrackButton_tip'); for (i = 0; i < tip_track_with_button_elements.length; i ++) { var tip_track_with_button = new Tooltip ( tip_track_with_button_elements[i] , tip_track_tip_with_button_elements[i] , { mode : Tooltip.TRACK ,close_button : close_imgs } ); } var tip_mouse_with_button_elements = document.getElementsByClassName('TipMouseButton'); var tip_mouse_tip_with_button_elements = document.getElementsByClassName('TipMouseButton_tip'); for (i = 0; i < tip_mouse_with_button_elements.length; i ++) { var tip_mouse_with_button = new Tooltip ( tip_mouse_with_button_elements[i] , tip_mouse_tip_with_button_elements[i] , { mode : Tooltip.MOUSE ,close_button : close_imgs } ); } var tip_click_with_button_elements = document.getElementsByClassName('TipClickButton'); var tip_click_tip_with_button_elements = document.getElementsByClassName('TipClickButton_tip'); for (i = 0; i < tip_click_with_button_elements.length; i ++) { var tip_click_with_button = new Tooltip ( tip_click_with_button_elements[i].firstChild , tip_click_tip_with_button_elements[i] , { mode : Tooltip.MOUSE ,close_button : close_imgs ,activate: Tooltip.CLICK ,deactivate : Tooltip.CLICK_ELEM } ); } var tip_track_elements = document.getElementsByClassName('TipTrack'); var tip_track_tip_elements = document.getElementsByClassName('TipTrack_tip'); for (i = 0; i < tip_track_elements.length; i ++) { var tip_track = new Tooltip ( tip_track_elements[i] , tip_track_tip_elements[i] , { mode : Tooltip.TRACK } ); } var tip_mouse_elements = document.getElementsByClassName('TipMouse'); var tip_mouse_tip_elements = document.getElementsByClassName('TipMouse_tip'); for (i = 0; i < tip_mouse_elements.length; i ++) { var tip_mouse = new Tooltip ( tip_mouse_elements[i] , tip_mouse_tip_elements[i] , { mode : Tooltip.MOUSE } ); } var tip_click_elements = document.getElementsByClassName('TipClick'); var tip_click_tip_elements = document.getElementsByClassName('TipClick_tip'); for (i = 0; i < tip_click_elements.length; i ++) { var tip_click = new Tooltip ( tip_click_elements[i].firstChild , tip_click_tip_elements[i] , { mode : Tooltip.MOUSE ,activate: Tooltip.CLICK ,deactivate : Tooltip.CLICK_ELEM } ); } } hookEvent ('load', setTooltips); /* ==擷取選單文字按鈕== */ function addGetMenuTextButton(id, srcMenu, targetText, tiptext, afterSelIdx) { var btnAdd=createElement("a", ((!tiptext)?"(+)":tiptext), { 'id': id , 'href' : '#' }); btnAdd.srcMenu=srcMenu; btnAdd.targetText=targetText; btnAdd.afterSelIdx=(!afterSelIdx || isNaN(afterSelIdx))?0:afterSelIdx; btnAdd.onclick=function(){ this.targetText.value+=this.srcMenu.options[srcMenu.selectedIndex].value; srcMenu.selectedIndex=this.afterSelIdx; return false; } srcMenu.parentNode.appendChild(btnAdd); } hookEvent("load", function(){ var useForm; if(wgAction=="protect" || wgAction=="unprotect"){ //保護理由 useForm=document.getElementById("mw-Protect-Form"); addGetMenuTextButton("wpProtectReasonSelectionAdd", useForm.wpProtectReasonSelection, useForm["mwProtect-reason"], "", 0); }else if(wgPageName.toLowerCase()=="special:blockip"){ //封禁理由 useForm=document.getElementById("blockip"); addGetMenuTextButton("wpBlockReasonListAdd", useForm.wpBlockReasonList, useForm.wpBlockReason, "", 0); } } ); /* ==修正登入後即登出問題== */ if(wgPageName.toLowerCase()=="special:userlogin" && (""+window.location).toLowerCase().indexOf("returnto=special:userlogout")!=-1) { window.location.replace(wgServer+wgScript+"?title=Special:UserLogin"); } /* ==繁简logo显示== addOnloadHook(function() { var plogo = document.getElementById("p-logo"); if ( navigator.appName == "Microsoft Internet Explorer" ) var a = plogo.firstChild; else var a = plogo.getElementsByTagName("A")[0]; a.style.backgroundImage = "url(http://upload.wikimedia.org/wikipedia/" + wgULS("zh/6/62/Wiki_zh-hans.png", "zh/b/bc/Wiki.png")+ ")"; }); */ //</source>