"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);