MediaWiki:Common.js: Difference between revisions
From Unreal Wiki, The Unreal Engine Documentation Site
m added support for non-floating toggle button in collapsible table |
No edit summary |
||
Line 173: | Line 173: | ||
*/ | */ | ||
function changeWatchURLs() { | /*function changeWatchURLs() { | ||
wgAjaxWatch.setHref = function( string ) { | wgAjaxWatch.setHref = function( string ) { | ||
for( i = 0; i < wgAjaxWatch.watchLinks.length; i++ ) { | for( i = 0; i < wgAjaxWatch.watchLinks.length; i++ ) { | ||
Line 187: | Line 187: | ||
} | } | ||
addOnloadHook( changeWatchURLs ); | addOnloadHook( changeWatchURLs );*/ | ||
/** Extra toolbar options ****************************************************** | /** Extra toolbar options ****************************************************** | ||
Line 196: | Line 196: | ||
// To disable this script, add <code>mwCustomEditButtons = [];<code> to [[Special:Mypage/monobook.js]] | // To disable this script, add <code>mwCustomEditButtons = [];<code> to [[Special:Mypage/monobook.js]] | ||
if ( | if ( mw.toolbar ) { | ||
mw.toolbar.addButton( { | |||
imageFile: '//upload.wikimedia.org/wikipedia/en/c/c8/Button_redirect.png', | |||
speedTip: 'Redirect', | |||
tagOpen: '#REDIRECT [[', | |||
tagClose: ']]', | |||
sampleText: 'Insert text', | |||
imageId: 'button-redirect' | |||
} ); | |||
mw.toolbar.addButton( { | |||
imageFile: '/w/images/Button_uscript.png', | |||
speedTip: 'UScript code', | |||
tagOpen: '<uscript>', | |||
tagClose: '</uscript>', | |||
sampleText: 'Insert code', | |||
imageId: 'button-uscript' | |||
} ); | |||
} | } | ||
/* </source> */ | /* </source> */ |
Revision as of 10:27, 9 August 2015
/* <!-- Add source highlighting to preview page --> <source lang=javascript> */
/* Test if an element has a certain class **************************************
*
* Description: Uses regular expressions and caching for better performance.
* Copied from: [[wikipedia:MediaWiki:Common.js]]
*/
var hasClass = (function () {
var reCache = {};
return function (element, className) {
return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
};
})();
/** Collapsible tables *********************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
* [[wikipedia:Project:NavFrame]].
* Copied from: [[wikipedia:MediaWiki:Common.js]]
*/
var autoCollapse = 2;
var collapseCaption = "hide";
var expandCaption = "show";
function collapseTable( tableIndex )
{
var Button = document.getElementById( "collapseButton" + tableIndex );
var Table = document.getElementById( "collapsibleTable" + tableIndex );
if ( !Table || !Button ) {
return false;
}
var Rows = Table.rows;
if ( Button.firstChild.data == collapseCaption ) {
for ( var i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = "none";
}
Button.firstChild.data = expandCaption;
} else {
for ( var 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 = new Object();
var Tables = document.getElementsByTagName( "table" );
for ( var i = 0; i < Tables.length; i++ ) {
if ( hasClass( Tables[i], "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 );
if ( !hasClass(Header, "inline-button") ) {
Button.style.styleFloat = "right";
Button.style.cssFloat = "right";
Button.style.textAlign = "right";
Button.style.width = "6em";
}
Button.style.fontWeight = "normal";
ButtonLink.style.color = Header.style.color;
ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
ButtonLink.appendChild( ButtonText );
Button.appendChild( document.createTextNode( hasClass(Header, "inline-button") ? " [" : "[" ) );
Button.appendChild( ButtonLink );
Button.appendChild( document.createTextNode( "]" ) );
if ( hasClass(Header, "inline-button") ) {
Header.appendChild( Button );
} else {
Header.insertBefore( Button, Header.childNodes[0] );
}
tableIndex++;
}
}
for ( var i = 0; i < tableIndex; i++ ) {
if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
collapseTable( i );
}
}
}
addOnloadHook( createCollapseButtons );
/* Hidden blocks ***********************************************************
*
* Description: Similar to collapsible tables, hidden blocks' visibility can
* be toggled on and off.
*/
function toggleHiddenBlock(blockIndex)
{
var Button = document.getElementById("toggleBlockButton" + blockIndex);
var Block = document.getElementById("hiddenBlock" + blockIndex);
if (!Block || !Button) {
return false;
}
if (Button.firstChild.data == collapseCaption) {
Block.style.display = "none";
Button.firstChild.data = expandCaption;
} else {
Block.style.display = "block";
Button.firstChild.data = collapseCaption;
}
}
function createShowBlockButtons()
{
var blockIndex = 0;
var Blocks = document.getElementsByTagName("div");
for (var i = 0; i < Blocks.length; i++) {
if (hasClass(Blocks[i], "hidden-block" ) ) {
var Hint = Blocks[i].getElementsByTagName("span")[0];
if (!Hint) continue;
var HiddenBlock = Blocks[i].getElementsByTagName("div")[0];
if (!HiddenBlock) continue;
HiddenBlock.setAttribute("id", "hiddenBlock" + blockIndex);
var Button = document.createElement("span");
var ButtonLink = document.createElement("a");
var ButtonText = document.createTextNode(collapseCaption);
ButtonLink.style.color = Hint.style.color;
ButtonLink.setAttribute("id", "toggleBlockButton" + blockIndex);
ButtonLink.setAttribute("href", "javascript:toggleHiddenBlock(" + blockIndex + ");");
ButtonLink.appendChild(ButtonText);
Button.appendChild(document.createTextNode("["));
Button.appendChild(ButtonLink);
Button.appendChild(document.createTextNode("]"));
Blocks[i].insertBefore(Button, HiddenBlock);
blockIndex++;
}
}
for (var i = 0; i < blockIndex; i++ ) {
toggleHiddenBlock(i);
}
}
addOnloadHook(createShowBlockButtons);
/* Change Watch URLs ***********************************************************
*
* Description: The format of watch URLs on this wiki is different from the
* standard format. Adjust the Ajax code to accommodate this.
*/
/*function changeWatchURLs() {
wgAjaxWatch.setHref = function( string ) {
for( i = 0; i < wgAjaxWatch.watchLinks.length; i++ ) {
if( string == 'watch' ) {
wgAjaxWatch.watchLinks[i].href = wgAjaxWatch.watchLinks[i].href
.replace( /\/unwatch\//, '/watch/' );
} else if( string == 'unwatch' ) {
wgAjaxWatch.watchLinks[i].href = wgAjaxWatch.watchLinks[i].href
.replace( /\/watch\//, '/unwatch/' );
}
}
}
}
addOnloadHook( changeWatchURLs );*/
/** Extra toolbar options ******************************************************
*
* Description: UNDOCUMENTED
* Copied from: [[wikipedia:MediaWiki:Common.js]]
*/
// To disable this script, add <code>mwCustomEditButtons = [];<code> to [[Special:Mypage/monobook.js]]
if ( mw.toolbar ) {
mw.toolbar.addButton( {
imageFile: '//upload.wikimedia.org/wikipedia/en/c/c8/Button_redirect.png',
speedTip: 'Redirect',
tagOpen: '#REDIRECT [[',
tagClose: ']]',
sampleText: 'Insert text',
imageId: 'button-redirect'
} );
mw.toolbar.addButton( {
imageFile: '/w/images/Button_uscript.png',
speedTip: 'UScript code',
tagOpen: '<uscript>',
tagClose: '</uscript>',
sampleText: 'Insert code',
imageId: 'button-uscript'
} );
}
/* </source> */