MediaWiki:Common.js: Difference between revisions

From Calidus HUB
No edit summary
No edit summary
Line 236: Line 236:
  */
  */
   
   
/**
* Load withJS and withCSS
*
* @source: www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL#Load_withJS_and_withCSS
* @rev: 1
* @author: Krinkle
*/
/* withJS */
var extraJS = mw.util.getParamValue( 'withJS' );
if ( extraJS ) {
// Disallow some characters in file name
if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
importScript( extraJS );
// Don't use alert but the jsMsg system. Run jsMsg only once the DOM is ready.
} else {
$( document ).ready( function() {
jsMsg( extraJS + ' script not allowed to be loaded.', 'error' );
} );
}
}
/* withCSS */
var extraCSS = mw.util.getParamValue( 'withCSS' );
if ( extraCSS ) {
// Disallow some characters in file name
if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
importStylesheet( extraCSS );
// Don't use alert but the jsMsg system. Run jsMsg only once the DOM is ready.
} else {
$( document ).ready( function() {
jsMsg( extraCSS + ' stylesheet not allowed to be loaded.', 'error' );
} );
}
}





Revision as of 12:35, 1 February 2012

/* Any JavaScript here will be loaded for all users on every page load. */

// Add "mainpage" class to the body element
if ( wgMainPageTitle === wgPageName && wgAction === 'view' ) {
	$( document ).ready( function() {
		document.body.className += ' mainpage';
	});
}
 
// switches for scripts
// TODO: migrate to JSConfig
// var load_extratabs = true;
var load_edittools = true;
 
// extra drop down menu on editing for adding special characters
// importScript( 'MediaWiki:Edittools.js' );
 
// Editpage scripts
if( wgAction == 'edit' || wgAction == 'submit' ) {
	importScript( 'MediaWiki:Editpage.js' );
}
 
/* End of extra pages */
 
/* Test if an element has a certain class **************************************
 *
 * From English Wikipedia, 2008-09-15
 *
 * Description: Uses regular expressions and caching for better performance.
 * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 */
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 *********************************************************
 *
 * From English Wikipedia, 2008-09-15
 * @deprecated: Do not use this in new constructions, use class="mw-collapsible" instead
 *
 *  Description: Allows tables to be collapsed, showing only the header.
 *               See [[Wikipedia:NavFrame]].
 *  Maintainers: [[User:R. Koot]]
 */
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 );
 
			Button.style.styleFloat = 'right';
			Button.style.cssFloat = 'right';
			Button.style.fontWeight = 'normal';
			Button.style.textAlign = 'right';
			Button.style.width = '6em';
 
			ButtonLink.style.color = Header.style.color;
			ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
			ButtonLink.setAttribute( 'href', "javascript:collapseTable(" + tableIndex + ");" );
			ButtonLink.appendChild( ButtonText );
 
			Button.appendChild( document.createTextNode( '[' ) );
			Button.appendChild( ButtonLink );
			Button.appendChild( document.createTextNode( ']' ) );
 
			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 );
 
/** Dynamic Navigation Bars (experimental) *************************************
 *
 * From English Wikipedia, 2008-09-15
 *
 *  Description: See [[Wikipedia:NavFrame]].
 *  Maintainers: UNMAINTAINED
 */
 
// 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 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( var 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( var 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 );
 
/**
 * Hide prefix in category
 *
 * @source: http://www.mediawiki.org/wiki/Snippets/Hide_prefix_in_category
 * @rev: 1
 * @author: Krinkle
var $tplHideCategoryPrefix = $( '#mw-cat-hideprefix' );
if ( $tplHideCategoryPrefix.length ) {
	var prefix = $tplHideCategoryPrefix.text();
	$( '#mw-pages' ).find( 'a' ).text( function( i, val ){
		return val.replace( new RegExp( '^' + $.escapeRE( prefix ) ), '' );
	});
}
 */
 
/**
 * Load the CodeReview 'tooltips' gadget on [[MediaWiki roadmap]] subpages,
 * so it's available for the revision reports where it's particularly useful
 * @author: Happy-melon
if( mw.config.get( 'wgPageName' ).match( /^MediaWiki_roadmap/ ) ) {
	mw.loader.using( ['ext.codereview.tooltips'], function(){} );
}
 */
 


/*
    mwCustomEditButtons.push({
        "imageFile": "http://upload.wikimedia.org/wikipedia/en/c/c9/Button_strike.png",
        "speedTip": "Strike",
        "tagOpen": "<s>",
        "tagClose": "</s>",
        "sampleText": "Strike-through text"
    });
*/

    mwCustomEditButtons.push({
        "imageFile": "images/Button_enter.png",
        "speedTip": "Line break",
        "tagOpen": "<br />",
        "tagClose": "",
        "sampleText": ""
    });
 
    mwCustomEditButtons.push({
        "imageFile": "images/Button_upper_letter.png",
        "speedTip": "Superscript",
        "tagOpen": "<sup>",
        "tagClose": "</sup>",
        "sampleText": "Superscript text"
    });
 
/*
    mwCustomEditButtons.push({
        "imageFile": "images/Button_lower_letter.png",
        "speedTip": "Subscript",
        "tagOpen": "<sub>",
        "tagClose": "</sub>",
        "sampleText": "Subscript text"
    });
*/ 

    mwCustomEditButtons.push({
        "imageFile": "images/Button_small.png",
        "speedTip": "Small",
        "tagOpen": "<small>",
        "tagClose": "</small>",
        "sampleText": "Small Text"
    });

/*
    mwCustomEditButtons.push({
        "imageFile": "http://upload.wikimedia.org/wikipedia/en/3/34/Button_hide_comment.png",
        "speedTip": "Insert hidden Comment",
        "tagOpen": "<!-- ",
        "tagClose": " -->",
        "sampleText": "Comment"
    });
*/ 
 
    mwCustomEditButtons.push({
        "imageFile": "images/Button_gallery.png",
        "speedTip": "Insert a picture gallery",
        "tagOpen": "\n<gallery>\n",
        "tagClose": "\n</gallery>",
        "sampleText": "Image:Example.jpg|Caption1\nImage:Example.jpg|Caption2"
    });
 
    mwCustomEditButtons.push({
        "imageFile": "images/Button_CoverPage.png",
        "speedTip": "Insert an Document Title Page",
        "tagOpen": "{{Doc_Title\n|System=''Calidus'' System\n|Title=Doc Title\n|Reference=Document type and Supimix reference\n|Version=0.1\n|Date=9th May 2011\n}}\n",
        "tagClose": "",
        "sampleText": ""
    });

    mwCustomEditButtons.push({
        "imageFile": "images/Button_blockquote.png",
        "speedTip": "Insert an Estimate template",
        "tagOpen": "{{EstimateCostDetails\n|REQ=Requirements Days\n|EST=Estimation Days\n|FS=Functional Specification Days\n|TS=Technical Specification Days\n|DEV=Development Days\n|ST=Testing and Release Days\n|IMP=Implementation Days\n|Client=Client for charges|Year=Year for charges}}\n",
        "tagClose": "",
        "sampleText": ""
    });

    mwCustomEditButtons.push({
        "imageFile": "images/Button_LastPage.png",
        "speedTip": "Insert an Document Final Page",
        "tagOpen": "{{Doc_Appendix|\nAppendix=The Appendix Section. Defaults to A\n|Glossary=WCS|WMS|CTMS. Omit if no glossary is to be included.\n|Ref1=First reference document title. There can be up to 5 (Ref2, Ref3, etc). Omit those you do not want to use.\n|RefV1=First reference document version\n|RefDate1=First reference document date\n|Rev1=Authorising Name. Up to 3 may be specified (Rev2, Rev3)\n|Rev1Title=Job Title\n",
        "tagClose": "\n}}\n",
        "sampleText": "<!-- The following may also be added -->\n|Estimate=Enter Y if an estimate section is to be included. Use the following fields for the values. If the values are omitted, they default to Zero. Also include Client and Year for the correct rates.\n|REQ=Requirements Time\n|EST=Estimate Time\n|FS=Functional Specification Time\n|TS=Technical Specification Time\n|DEV=Development Time\n|ST=Testing Time\n|IMP=Implementation Time\n|Client=Client for estimate rates\n|Year=Year for estimate rates"
    });

    mwCustomEditButtons.push({
        "imageFile": "images/Button_test_header.png",
        "speedTip": "Insert a test plan template",
        "tagOpen": "{{TestPlan_Header\n|Title=Title of test plan\n|Log=Supimix log reference\n|Description=description of what is to be achieved\n|MenuAccess=Where on the menus the item can be found\n|Prerequisites=The prerequisites of the test\n|Objective=The details of what each group of tests is to achieve\n}}\n{{ #vardefine: Cycle | 0 }}{{ #vardefine: SubCycle | 0 }}\n{{TestPlan_CycleHeader\n|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}\n|Title=Area being tested in this cycle\n|Notes=Any notes or prerequisites for the tests following.\n}}\n",
        "tagClose": "\n{{TestPlan_CycleFooter}}\n",
        "sampleText": "<!--INSERT TESTS HERE -->"
    });

    mwCustomEditButtons.push({
        "imageFile": "images/Button_test_header.png",
        "speedTip": "Insert a test plan cycle",
        "tagOpen": "{{TestPlan_CycleHeader\n|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}\n|Title=Area being tested in this cycle\n|Notes=Any notes or prerequisites for the tests following.\n}}\n",
        "tagClose": "\n{{TestPlan_CycleFooter}}\n",
        "sampleText": "<!--INSERT TESTS HERE -->"
    });

    mwCustomEditButtons.push({
        "imageFile": "images/Button_test_add.png",
        "speedTip": "Insert a new test",
        "tagOpen": "{{TestPlan_Test\n|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.1 }} }}\n|Action=The actions to follow\n|Result=The expected result\n}}\n",
        "tagClose": "",
        "sampleText": ""
    });

    mwCustomEditButtons.push({
        "imageFile": "images/Button_insert_table.png",
        "speedTip": "Insert a table",
        "tagOpen": '{| class="wikitable"\n|',
        "tagClose": "\n|}\n",
        "sampleText": "-\n! header 1\n! header 2\n! header 3\n|-\n| row 1, cell 1\n| row 1, cell 2\n| row 1, cell 3\n|-\n| row 2, cell 1\n| row 2, cell 2\n| row 2, cell 3"
    });

    var today = new Date();
    mwCustomEditButtons.push({
        "imageFile": "images/Button_comment.png",
        "speedTip": "Insert a comment",
        "tagOpen": '{{comment|text=',
        "tagClose": "\n|sign=[[User:"+wgUserName+"]]|date="+today.getDate()+"/"+(today.getMonth()+1)+"/"+today.getFullYear()+" "+today.getHours()+":"+today.getMinutes()+":"+today.getSeconds()+"}}\n",
        "sampleText": "Your Comment Here"
    });

    mwCustomEditButtons.push({
        "imageFile": "images/Button_note.PNG",
        "speedTip": "Insert a note",
        "tagOpen": '{{note}}',
        "tagClose": "",
        "sampleText": "Your Note Here"
    });

    mwCustomEditButtons.push({
        "imageFile": "images/Button_warn.PNG",
        "speedTip": "Insert a warning",
        "tagOpen": '{{warning}}',
        "tagClose": "",
        "sampleText": "Your Warning Here"
    });