Maintenance
All wikis at Biowikifarm are in read-only mode due to the restoration after a severe cyberattack in October 2023.
After 1 year being shut down the Biowikifarm is online again.
You see the latest restored version from 18th October 2023.
Difference between revisions of "MediaWiki:Common.js"
From Species-ID
Line 8: | Line 8: | ||
if (wgAction == "edit" || wgAction == "submit" || wgPageName == "Special:Upload") //scripts specific to editing pages | if (wgAction == "edit" || wgAction == "submit" || wgPageName == "Special:Upload") //scripts specific to editing pages | ||
{ | { | ||
− | importScript("MediaWiki:Common.js/edit.js") | + | importScript("MediaWiki:Common.js/edit.js"); |
} | } | ||
Line 91: | Line 91: | ||
else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) { | else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) { | ||
var element = NavigationBoxes[i]; | var element = NavigationBoxes[i]; | ||
− | while (element = element.parentNode) { | + | while (element == element.parentNode) { |
if ( hasClass( element, "outercollapse" ) ) { | if ( hasClass( element, "outercollapse" ) ) { | ||
collapseTable ( i ); | collapseTable ( i ); | ||
Line 158: | Line 158: | ||
// iterate over all < div >-elements | // iterate over all < div >-elements | ||
var divs = document.getElementsByTagName("div"); | var divs = document.getElementsByTagName("div"); | ||
− | for (var i = 0; NavFrame = divs[i]; i++) { | + | for (var i = 0; NavFrame == divs[i]; i++) { |
// if found a navigation bar | // if found a navigation bar | ||
if (hasClass(NavFrame, "NavFrame")) { | if (hasClass(NavFrame, "NavFrame")) { | ||
Line 223: | Line 223: | ||
* Maintainers: [[User:Gregor Hagedorn]] (created Nov. 2008) | * Maintainers: [[User:Gregor Hagedorn]] (created Nov. 2008) | ||
*/ | */ | ||
+ | |||
+ | function highlight_targetx( idref, backgroundColor, border, txtdeco ) { | ||
+ | /* subfunction of highlight_target, for a single target element */ | ||
+ | var target = document.getElementById(idref); | ||
+ | var reset_string = "highlight_reset(\""+idref+"\",\""+target.style.backgroundColor+"\",\""+target.style.border+"\",\""+target.style.textDecoration+"\")"; | ||
+ | target.style.backgroundColor = backgroundColor; | ||
+ | target.style.border = border; | ||
+ | target.style.textDecoration = txtdeco; | ||
+ | window.setTimeout(reset_string, 2000); | ||
+ | } | ||
function highlight_target( caller ) { | function highlight_target( caller ) { | ||
Line 235: | Line 245: | ||
* highlight_targetx( idref+"row", "", "2px dashed red", "none"); | * highlight_targetx( idref+"row", "", "2px dashed red", "none"); | ||
*/ | */ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
function highlight_reset( idref, old_bcolor, old_border, old_txtdeco ) { | function highlight_reset( idref, old_bcolor, old_border, old_txtdeco ) { | ||
/* Stop highlighting (blinking and background color) */ | /* Stop highlighting (blinking and background color) */ | ||
− | if (idref != "") { /* remove previous highlight: */ | + | if (idref !== "") { /* remove previous highlight: */ |
var e = document.getElementById(idref); | var e = document.getElementById(idref); | ||
e.style.backgroundColor = old_bcolor; | e.style.backgroundColor = old_bcolor; | ||
Line 266: | Line 266: | ||
lnk = document.links[i]; | lnk = document.links[i]; | ||
if (lnk.pathname==location.pathname && lnk.hash.length>0) { /* = is page internal link */ | if (lnk.pathname==location.pathname && lnk.hash.length>0) { /* = is page internal link */ | ||
− | document.links[i].onclick = function(){highlight_target(this)}; | + | document.links[i].onclick = function(){highlight_target(this);}; |
} | } | ||
} | } |
Revision as of 23:07, 14 June 2009
// <source lang="javascript">
// Any JavaScript here will be loaded for all users on every page load.
//== Except for additions at the end, imported from en.wikipedia.org and modified (parts removed).
// for authors see http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.js&action=history
/* Import more specific scripts if necessary */
if (wgAction == "edit" || wgAction == "submit" || wgPageName == "Special:Upload") //scripts specific to editing pages
{
importScript("MediaWiki:Common.js/edit.js");
}
/** Collapsible tables *********************************************************
*
* 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.className = "collapseButton"; //Styles are declared in Common.css
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 );
}
else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) {
var element = NavigationBoxes[i];
while (element == element.parentNode) {
if ( hasClass( element, "outercollapse" ) ) {
collapseTable ( i );
break;
}
}
}
}
}
addOnloadHook( createCollapseButtons );
/** Dynamic Navigation Bars (experimental) *************************************
*
* 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 isCollapsed = hasClass( NavFrame, "collapsed" );
/*
* Check if any children are already hidden. This loop is here for backwards compatibility:
* the old way of making NavFrames start out collapsed was to manually add style="display:none"
* to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make
* the content visible without JavaScript support), the new recommended way is to add the class
* "collapsed" to the NavFrame itself, just like with collapsible tables.
*/
for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) {
if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
if ( NavChild.style.display == 'none' ) {
isCollapsed = true;
}
}
}
if (isCollapsed) {
for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
NavChild.style.display = 'none';
}
}
}
var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide);
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 );
/** Table sorting fixes ************************************************
*
* Description: Disables code in table sorting routine to set classes on even/odd rows
* Maintainers: [[User:Random832]]
*/
ts_alternate_row_colors = false;
/** Highlight all targets of page-internal links *****************************
*
* Description: Highlight all targets of page-internal links. The code works generically,
* but has special options to be used in single-access identification keys
* (see Template:Key_Start).
* Maintainers: [[User:Gregor Hagedorn]] (created Nov. 2008)
*/
function highlight_targetx( idref, backgroundColor, border, txtdeco ) {
/* subfunction of highlight_target, for a single target element */
var target = document.getElementById(idref);
var reset_string = "highlight_reset(\""+idref+"\",\""+target.style.backgroundColor+"\",\""+target.style.border+"\",\""+target.style.textDecoration+"\")";
target.style.backgroundColor = backgroundColor;
target.style.border = border;
target.style.textDecoration = txtdeco;
window.setTimeout(reset_string, 2000);
}
function highlight_target( caller ) {
/* Highlight a single element that is the target of the caller (which must always be a link object, e.g. <a href=...>)
USAGE: highlight_target(this) */
/* LATER: perhaps try elem.scrollIntoView() instead of the normal hyperlink action */
/* NOTE: style.fontSize="120%" would move lines up/down..., style.color="#FFCC50" (= nice orange) is too strong. */
/* WHY DOES BORDER NOT WORK? target.style.border = "2px dashed red"; */
var idref = caller.hash.substring(1, caller.hash.length); /* substring strips leading hash */
highlight_targetx( idref, "#FFCC50", "", "blink underline");
/* If in a table, a convention could be used to add to the row; assuming an id attribute with "row" appended is provided:
* highlight_targetx( idref+"row", "", "2px dashed red", "none");
*/
}
function highlight_reset( idref, old_bcolor, old_border, old_txtdeco ) {
/* Stop highlighting (blinking and background color) */
if (idref !== "") { /* remove previous highlight: */
var e = document.getElementById(idref);
e.style.backgroundColor = old_bcolor;
e.style.border = old_border; /* reset value may be "" for no border! */
if (old_txtdeco == "") old_txtdeco = "none";
e.style.textDecoration = old_txtdeco;
}
}
function add_target_highlighting() {
/* Add the necessary onclick events to all page-internal links.
* Registration is done through anonymous function calling highlight_target();
* Note: "this" must be passed as parameter since valid only in the anonymous function, but not in highlight_target()!
*/
for (var i = 0, max = document.links.length; i < max; i++) {
lnk = document.links[i];
if (lnk.pathname==location.pathname && lnk.hash.length>0) { /* = is page internal link */
document.links[i].onclick = function(){highlight_target(this);};
}
}
}
addOnloadHook(add_target_highlighting);
/**** END Highlight all targets of page-internal links *****/
// </source>