MediaWiki:Common.js
於 2007年11月20日 (二) 12:27 由 Cyesuta(討論 | 貢獻) 所做的修訂 (新頁面: →所有用戶在加載任何頁面時,這裡的JavaScript都會加載 == 輔助處理 ==: //功能設定 var JSConfig={ //showBarA:(wgUserName == null),//設定JS Anonnotice的匿...)
注意:在您儲存之後您必須清除瀏覽器快取才可看到最新的變更。
- Firefox / Safari:按住 Shift 時點選 重新整理,或按 Ctrl-F5 或 Ctrl-R (Mac 則為 ⌘-R)
- Google Chrome:按 Ctrl-Shift-R (Mac 則為 ⌘-Shift-R)
- Internet Explorer:按住 Ctrl 時點選 重新整理,或按 Ctrl-F5
- Opera:前往 選單 → 設定 (在 Mac 為 Opera → 偏好設定) 然後再到 隱私 & 安全性 → 清除瀏覽資料 → 已快取的圖片與檔案。
/* 所有用戶在加載任何頁面時,這裡的JavaScript都會加載 == 輔助處理 == */ //功能設定 var JSConfig={ //showBarA:(wgUserName == null),//設定JS Anonnotice的匿名出現條件 //showBarU:false,//設定登入用戶使用JS Anonnotice的開關 isEdit0:true, //設置是否顯示編輯首段按鈕 editSectionLink:'right',//設置編輯按鈕是否在右側 collapseText:wgULS('隱藏▲','隱藏▲'),//指示折疊收縮的默認文字 expandText:wgULS('顯示▼','顯示▼'),//指示折疊展開的默認文字 autoCollapse:2, //文章少於 autoCollapse 個折疊塊時,不自動折疊 } // 兼容性修正 if (document.attachEvent && document.compatMode && document.compatMode == "CSS1Compat") { 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); } // 移動元素 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];} for(var i=0;i<children.length;i++){ var child=children[i]; if(typeof child=='string'){child=document.createTextNode(child);} if(child){element.appendChild(child);} } 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; } //JS、CSS導入模塊 function importScript( page ) { var src= /^https?:\/\//.test(page) ? page : getWikiPath(page,{'ctype':'text/javascript'}); var scriptElem = createElement( 'script',null,{'src':src,'type':'text/javascript'} ); document.getElementsByTagName( 'head' )[0].appendChild( scriptElem ); } function importStylesheet( page ) { var sheet= /^https?:\/\//.test(page) ? page : getWikiPath(page,{'ctype':'text/css'}); var styleElem = createElement( 'style', ['@import "'+sheet+'";'], {'type':'text/css'} ); document.getElementsByTagName( 'head' )[0].appendChild( styleElem ); } == 段落編輯連結 == */ //JSConfig.isEdit0 設置是否出現「編輯首段」按鈕 //對不需要編輯首段的頁面,還可在頁面中加 Template:NoEdit 模板來禁用。 //JSConfig.editSectionLink 設置「編輯」按鈕的位置 if (wgIsArticle && wgAction == "view") { //增加編輯首段按鈕 addOnloadHook(function(){ if(!JSConfig.isEdit0||(document.getElementById&&document.getElementById('no-edit-0'))){return;} var caEdit=document.getElementById&&document.getElementById('ca-edit'); if (!caEdit){return;} var linkAttributes={ 'href':caEdit.firstChild.href + '§ion=0', 'title':wgULS('編輯正文所有標題之前的文字(通常稱為首段或導言)','編輯正文所有標題之前的文字(通常稱首段或導言)'), 'accesskey':'0' } //增加0按鈕標籤 var caEdit0 = createElement( 'li', [createElement('A',['0'],linkAttributes)], {id:'ca-edit-0'} ); caEdit.className = 'istalk'; elementMoveto(caEdit0,caEdit,"after"); //增加條目標題下的「編輯首段」按鈕 var editsection0= createElement( 'span', ['[',createElement('A',[wgULS('編輯首段','編輯首段')],linkAttributes),']'], {'class':'editsection'} ); var siteSub=document.getElementById&&document.getElementById('siteSub'); elementMoveto( editsection0 , siteSub.firstChild ); }); //設置編輯按鈕位置是否浮動 addOnloadHook(function(){ if (JSConfig.editSectionLink=='right') { return; } var editLinks=getElementsByClassName(document.getElementById('bodyContent'),"span","editsection"); for(var i = 0; i < editLinks.length; i++) { editLinks[i].style.cssFloat = editLinks[i].style.float = 'none'; editLinks[i].style.textAlign = "left" ; editLinks[i].parentNode.appendChild(editLinks[i]); } }); } /* == 增加折疊功能 == */ /** 折疊 div table ***************************** * Description: 實現div.NavFrame和table.collapsible的可折疊性。 * JSConfig的collapseText、expandText、autoCollapse屬性定義默認文字和默認最少自動折疊塊 * Maintainers: User:fdcn */ addOnloadHook(function(){ function toggleState(item){ var oldState=item.state; item.state=1-oldState; if(item.text[0]){ item.text[oldState].style.display = 'inline'; item.text[item.state].style.display='none'; } item.action(item); } function cancelBubble(e){ e=e||window.event; if(e.stopPropagation){e.stopPropagation();}else{e.cancelBubble=true;} } function createToggleButton(head,frame,toggle){ var textS,textH; var button=getElementsByClassName(head,"span","NavToggle")[0]; if(button){ textS=getElementsByClassName(button,"span","NavToggleShow")[0] textH=getElementsByClassName(button,"span","NavToggleHide")[0]; }else { textS=createElement("span",[JSConfig.expandText]); textH=createElement('span',[JSConfig.collapseText]); button=createElement("span",[textS,textH],{'class':"NavToggle",styles:{'width':"3.8em"}}); } if(textS){textS.style.display='none';} button.style.display='inline'; var item={'state':0, 'text':[textS,textH],'frame':frame,'action':toggle} var links=head.getElementsByTagName("A"); for(var i=0,l;l=links[i];i++){ addClickHandler(l,cancelBubble); } head.insertBefore( button, head.childNodes[0] ); head.style.cursor = "pointer"; addClickHandler( head, function(){toggleState(item);} ); return item; } // 折疊div function toggleNavigationBar(item) { var cls=item.state?'none':'block'; for ( var NavChild = item.frame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ){ if (NavChild.className == 'NavPic' || NavChild.className == 'NavContent') { NavChild.style.display = cls; } } } // 折疊表格 function collapseTable( item ) { var rows = item.frame.getElementsByTagName( "tr" ); var display = item.state? 'none':rows[0].style.display; for (var i=1,row; row=rows[i]; i++) { row.style.display = display; } } //init var item,items=[]; var NavFrames=getElementsByClassName(document,"div","NavFrame"); for(var i=0,NavFrame;NavFrame = NavFrames[i];i++) { var heads=getElementsByClassName(NavFrame,"div","NavHead"); for(var ih=0,head; head = heads[ih]; ih++ ) { if (head.parentNode != NavFrame) {continue;} items.push(createToggleButton(head,NavFrame,toggleNavigationBar)); break; } } var tables = getElementsByClassName(document,"table","collapsible"); for ( var i = 0,table; table= tables[i]; i++ ) { var head = table.getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0]; items.push(createToggleButton(head,table,collapseTable)); } var count=items.length; for ( var i = 0; i<count; i++ ) { item=items[i]; if ( hasClass( item.frame, "collapsed" ) || ( count >= JSConfig.autoCollapse && hasClass( item.frame, "autocollapse" ) ) ) { toggleState(item); } } }); //修正折疊後定位變化 hookEvent("load",function(){if(location.hash){location.href=location.hash;}}); /* ==Anonnotice顯示== */ /** anonnotice for IP user ************************** * * Maintainced by Alexsh@zhwiki, PhiLiP@zhwiki */ addOnloadHook(function(){ document.writeln('<div style="position:absolute; z-index:40; left:155px; top:0px; clear:both; float:left;text-align:left; margin:0 auto;" id="donate">'+ ( wgUserName ? JSConfig.siteNotice : JSConfig.blockMsg )+'</div>'); });