"MediaWiki:Common.js" 修訂間的差異
出自 淡水維基館
行 154: | 行 154: | ||
* Dynamic Navigation Bars (experimental) | * Dynamic Navigation Bars (experimental) | ||
* | * | ||
− | * | + | * See [[Wikipedia:NavFrame]]. |
− | |||
*/ | */ | ||
− | + | ||
− | / | + | // set up the words in your language |
− | var NavigationBarHide = | + | var NavigationBarHide = '[' + collapseCaption + ']'; |
− | var NavigationBarShow = | + | var NavigationBarShow = '[' + expandCaption + ']'; |
− | + | ||
− | / | + | // shows and hides content and picture (if available) of navigation bars |
− | + | // Parameters: | |
− | + | // indexNavigationBar: the index of navigation bar to be toggled | |
− | + | function toggleNavigationBar(indexNavigationBar) { | |
− | + | var NavChild; | |
− | + | var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar); | |
− | + | var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar); | |
− | + | ||
− | + | if (!NavFrame || !NavToggle) { | |
− | + | return false; | |
− | + | } | |
− | + | ||
− | + | // if shown now | |
− | + | if (NavToggle.firstChild.data == NavigationBarHide) { | |
− | + | for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { | |
− | + | if ( hasClass( NavChild, 'NavPic' ) ) { | |
− | + | NavChild.style.display = 'none'; | |
− | + | } | |
− | + | if ( hasClass( NavChild, 'NavContent') ) { | |
− | + | NavChild.style.display = 'none'; | |
− | + | } | |
− | + | } | |
− | + | NavToggle.firstChild.data = NavigationBarShow; | |
− | + | ||
− | + | // if hidden now | |
− | + | } else if (NavToggle.firstChild.data == NavigationBarShow) { | |
− | + | for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { | |
− | + | if (hasClass(NavChild, 'NavPic')) { | |
− | + | NavChild.style.display = 'block'; | |
− | + | } | |
− | + | if (hasClass(NavChild, 'NavContent')) { | |
− | + | NavChild.style.display = 'block'; | |
− | + | } | |
− | + | } | |
− | + | NavToggle.firstChild.data = NavigationBarHide; | |
− | + | } | |
− | / | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | ||
− | + | // adds show/hide-button to navigation bars | |
− | / | + | function createNavigationBarToggleButton(){ |
− | + | var indexNavigationBar = 0; | |
− | + | // iterate over all < div >-elements | |
− | + | var divs = document.getElementsByTagName( 'div' ); | |
− | + | for (var i = 0; NavFrame = divs[i]; i++) { | |
− | + | // if found a navigation bar | |
− | + | if ( hasClass(NavFrame, 'NavFrame' )) { | |
− | + | ||
− | + | indexNavigationBar++; | |
− | + | var NavToggle = document.createElement('a'); | |
− | + | NavToggle.className = 'NavToggle'; | |
− | + | NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); | |
− | + | NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); | |
− | + | ||
− | + | var NavToggleText = document.createTextNode(NavigationBarHide); | |
− | + | for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { | |
− | + | if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) { | |
− | + | if (NavChild.style.display == 'none') { | |
− | + | NavToggleText = document.createTextNode(NavigationBarShow); | |
− | + | break; | |
− | + | } | |
− | + | } | |
− | + | } | |
− | + | ||
− | + | NavToggle.appendChild(NavToggleText); | |
− | + | // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) | |
+ | for(var j=0; j < NavFrame.childNodes.length; j++) { | ||
+ | if (hasClass(NavFrame.childNodes[j], 'NavHead')) { | ||
+ | NavFrame.childNodes[j].appendChild(NavToggle); | ||
+ | } | ||
+ | } | ||
+ | NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | addOnloadHook( createNavigationBarToggleButton ); | ||
+ | |||
+ | |||
+ | // Shuffle for election candidates | ||
+ | function dshuf() { | ||
+ | var shufsets = {}; | ||
+ | var rx = new RegExp('dshuf' + '\\s+(dshufset\\d+)', 'i'); | ||
+ | var divs = document.getElementsByTagName('div'); | ||
+ | var i = divs.length; | ||
+ | while (i--) { | ||
+ | if (rx.test(divs[i].className)) { | ||
+ | if (typeof shufsets[RegExp.$1] === 'undefined') { | ||
+ | shufsets[RegExp.$1] = {}; | ||
+ | shufsets[RegExp.$1].inner = []; | ||
+ | shufsets[RegExp.$1].member = []; | ||
+ | } | ||
+ | shufsets[RegExp.$1].inner.push({ | ||
+ | key: Math.random(), | ||
+ | html: divs[i].innerHTML | ||
+ | }); | ||
+ | shufsets[RegExp.$1].member.push(divs[i]); | ||
+ | } | ||
+ | } | ||
+ | for (shufset in shufsets) { | ||
+ | shufsets[shufset].inner.sort(function(a, b) { | ||
+ | return a.key - b.key; | ||
+ | }); | ||
+ | i = shufsets[shufset].member.length; | ||
+ | while (i--) { | ||
+ | shufsets[shufset].member[i].innerHTML = shufsets[shufset].inner[i].html; | ||
+ | shufsets[shufset].member[i].style.display = 'block'; | ||
+ | } | ||
+ | } | ||
} | } | ||
− | + | $(dshuf); | |
− | $( |
於 2013年10月13日 (日) 00:20 的修訂
/* 此處的JavaScript將載入於所有用戶每一個頁面。 */ jQuery(document).ready(function ($) { $('#wpTextbox1').wikiEditor('addToToolbar', { section: 'advanced', group: 'format', tools: { buttonId: { label: 'Comment visible only for editors', type: 'button', icon: '//upload.wikimedia.org/wikipedia/commons/f/f9/Toolbaricon_regular_S_stroke.png', action: { type: 'encapsulate', options: { pre: "<!-- ", peri: "Insert comment here", post: " -->" } } } } }); }); mw.loader.load( 'jquery.ui.button' ); function my_accordion() { jQuery( "#button" ).accordion({ collapsible: true, active: false }); } jQuery( my_button); /*下拉*/ /** * Interwiki links to featured articles *************************************** * * Description: Highlights interwiki links to featured articles (or * equivalents) by changing the bullet before the interwiki link * into a star. * Maintainers: [[User:R. Koot]] */ function LinkFA() { if ( document.getElementById( 'p-lang' ) ) { var InterwikiLinks = document.getElementById( 'p-lang' ).getElementsByTagName( 'li' ); for ( var i = 0; i < InterwikiLinks.length; i++ ) { if ( document.getElementById( InterwikiLinks[i].className + '-fa' ) ) { InterwikiLinks[i].className += ' FA'; InterwikiLinks[i].title = 'This is a featured article in another language.'; } else if ( document.getElementById( InterwikiLinks[i].className + '-ga' ) ) { InterwikiLinks[i].className += ' GA'; InterwikiLinks[i].title = 'This is a good article in another language.'; } } } } $( LinkFA ); /** * Collapsible tables ********************************************************* * * Description: Allows tables to be collapsed, showing only the header. See * [[Wikipedia:NavFrame]]. * Maintainers: [[User:R. Koot]] */ var autoCollapse = 2; var collapseCaption = '▲隱藏'; var expandCaption = '▼顯示'; window.collapseTable = function ( tableIndex ) { var Button = document.getElementById( 'collapseButton' + tableIndex ); var Table = document.getElementById( 'collapsibleTable' + tableIndex ); if ( !Table || !Button ) { return false; } var Rows = Table.rows; var i; if ( Button.firstChild.data === collapseCaption ) { for ( i = 1; i < Rows.length; i++ ) { Rows[i].style.display = 'none'; } Button.firstChild.data = expandCaption; } else { for ( i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; } Button.firstChild.data = collapseCaption; } }; function createCollapseButtons() { var tableIndex = 0; var NavigationBoxes = {}; var Tables = document.getElementsByTagName( 'table' ); var i; function handleButtonLink( index, e ) { window.collapseTable( index ); e.preventDefault(); } for ( i = 0; i < Tables.length; i++ ) { if ( $( Tables[i] ).hasClass( 'collapsible' ) ) { /* only add button and increment count if there is a header row to work with */ var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0]; if ( !HeaderRow ) continue; var Header = HeaderRow.getElementsByTagName( 'th' )[0]; if ( !Header ) continue; NavigationBoxes[ tableIndex ] = Tables[i]; Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex ); var Button = document.createElement( 'span' ); var ButtonLink = document.createElement( 'a' ); var ButtonText = document.createTextNode( collapseCaption ); Button.className = 'collapseButton'; /* Styles are declared in Common.css */ ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex ); ButtonLink.setAttribute( 'href', '#' ); $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) ); ButtonLink.appendChild( ButtonText ); Button.appendChild( document.createTextNode( '[' ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( ']' ) ); Header.insertBefore( Button, Header.firstChild ); tableIndex++; } } for ( i = 0; i < tableIndex; i++ ) { if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) { window.collapseTable( i ); } else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) { var element = NavigationBoxes[i]; while ((element = element.parentNode)) { if ( $( element ).hasClass( 'outercollapse' ) ) { window.collapseTable ( i ); break; } } } } } $( createCollapseButtons ); /** * Dynamic Navigation Bars (experimental) * * See [[Wikipedia:NavFrame]]. */ // set up the words in your language var NavigationBarHide = '[' + collapseCaption + ']'; var NavigationBarShow = '[' + expandCaption + ']'; // shows and hides content and picture (if available) of navigation bars // Parameters: // indexNavigationBar: the index of navigation bar to be toggled function toggleNavigationBar(indexNavigationBar) { var NavChild; var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar); var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar); if (!NavFrame || !NavToggle) { return false; } // if shown now if (NavToggle.firstChild.data == NavigationBarHide) { for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { if ( hasClass( NavChild, 'NavPic' ) ) { NavChild.style.display = 'none'; } if ( hasClass( NavChild, 'NavContent') ) { NavChild.style.display = 'none'; } } NavToggle.firstChild.data = NavigationBarShow; // if hidden now } else if (NavToggle.firstChild.data == NavigationBarShow) { for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { if (hasClass(NavChild, 'NavPic')) { NavChild.style.display = 'block'; } if (hasClass(NavChild, 'NavContent')) { NavChild.style.display = 'block'; } } NavToggle.firstChild.data = NavigationBarHide; } } // adds show/hide-button to navigation bars function createNavigationBarToggleButton(){ var indexNavigationBar = 0; // iterate over all < div >-elements var divs = document.getElementsByTagName( 'div' ); for (var i = 0; NavFrame = divs[i]; i++) { // if found a navigation bar if ( hasClass(NavFrame, 'NavFrame' )) { indexNavigationBar++; var NavToggle = document.createElement('a'); NavToggle.className = 'NavToggle'; NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); var NavToggleText = document.createTextNode(NavigationBarHide); for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) { if (NavChild.style.display == 'none') { NavToggleText = document.createTextNode(NavigationBarShow); break; } } } NavToggle.appendChild(NavToggleText); // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) for(var j=0; j < NavFrame.childNodes.length; j++) { if (hasClass(NavFrame.childNodes[j], 'NavHead')) { NavFrame.childNodes[j].appendChild(NavToggle); } } NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); } } } addOnloadHook( createNavigationBarToggleButton ); // Shuffle for election candidates function dshuf() { var shufsets = {}; var rx = new RegExp('dshuf' + '\\s+(dshufset\\d+)', 'i'); var divs = document.getElementsByTagName('div'); var i = divs.length; while (i--) { if (rx.test(divs[i].className)) { if (typeof shufsets[RegExp.$1] === 'undefined') { shufsets[RegExp.$1] = {}; shufsets[RegExp.$1].inner = []; shufsets[RegExp.$1].member = []; } shufsets[RegExp.$1].inner.push({ key: Math.random(), html: divs[i].innerHTML }); shufsets[RegExp.$1].member.push(divs[i]); } } for (shufset in shufsets) { shufsets[shufset].inner.sort(function(a, b) { return a.key - b.key; }); i = shufsets[shufset].member.length; while (i--) { shufsets[shufset].member[i].innerHTML = shufsets[shufset].inner[i].html; shufsets[shufset].member[i].style.display = 'block'; } } } $(dshuf);