MediaWiki:Common.js

Från Svenska rollspel
Hoppa till: navigering, sök

OBS: Efter du sparat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.

  • Firefox / Safari: Håll ned Skift och klicka på Uppdatera sidan eller tryck antingen Ctrl-F5 eller Ctrl-R (⌘-R på Mac)
  • Google Chrome: Tryck Ctrl-Skift-R (⌘-Shift-R på Mac)
  • Internet Explorer: Håll ned Ctrl och klicka på Uppdatera eller tryck Ctrl-F5
  • Opera: Rensa cachen i Verktyg → Inställningar
/* JavaScript som skrivs här körs varje gång en användare laddar en sida. */
/* JavaScript som skrivs här körs ovillkorligen varje gång en användare laddar en sida.
   I stället för att lägga till kod här, överväg att lägga till koden som en finess.
   Det tillåter användare att tacka nej till funktionen i sina inställningar. */

/** Sökfunktion med flera sökmotorer
/*  Change Special:Search to use a radio menu
 *
 *  Description: Change Special:Search to use a radio menu, with the default being
 *               the internal MediaWiki engine
 *  Created and maintained by: [[:fr:User:Pmartin]]
 */
function externalSearchEngines() {
	if ( typeof SpecialSearchEnhanced2Disabled != 'undefined' ) {
		return;
	}

	var mainNode = document.getElementById( "powersearch" );
	if ( !mainNode ) {
		mainNode = document.getElementById( "search" );
	}
	if ( !mainNode ) {
		return;
	}

	var beforeNode = document.getElementById( "mw-search-top-table" );
	if ( !beforeNode ) {
		return;
	}
	beforeNode = beforeNode.nextSibling;
	if ( !beforeNode ) {
		return;
	}

	var firstEngine = "mediawiki";

	var choices = document.createElement( "div" );
	choices.setAttribute( "id", "searchengineChoices" );
	choices.style.textAlign = "center";

	var lsearchbox = document.getElementById( "searchText" );
	var initValue = lsearchbox.value;

	var space = "";

	for ( var id in searchEngines ) {
		var engine = searchEngines[id];
		if ( engine.ShortName ) {
			if ( space ) {
				choices.appendChild( space );
			}
			space = document.createTextNode(" ");
			
			var attr = {
				type: "radio",
				name: "searchengineselect",
				value: id,
				onFocus: "changeSearchEngine(this.value)",
				id: "searchengineRadio-"+id
			};
 
			var html = "<input";
			for ( var a in attr ) {
				html += " " + a + "='" + attr[a] + "'";
			}
			html += " />";
			var span = document.createElement( "span" );
			span.innerHTML = html;

			choices.appendChild( span );
			var label;
			if ( engine.Template.indexOf( 'http' ) === 0 ) {
				label = document.createElement( "a" );
				label.href = engine.Template.replace( "{searchTerms}", initValue ).replace( "{language}", "fr" );
			} else {
				label = document.createElement( "label" );
			}
			label.appendChild( document.createTextNode( engine.ShortName ) );
			choices.appendChild( label );
		}
	}
	mainNode.insertBefore( choices, beforeNode );

	var input = document.createElement( "input" );
	input.id = "searchengineextraparam";
	input.type = "hidden";

	mainNode.insertBefore( input, beforeNode );

	changeSearchEngine( firstEngine, initValue );
}

function changeSearchEngine( selectedId, searchTerms ) {
	var currentId = document.getElementById( "searchengineChoices" ).currentChoice;
	if ( selectedId == currentId ) { return; }

	document.getElementById( "searchengineChoices" ).currentChoice = selectedId;
	var radio = document.getElementById( 'searchengineRadio-'  + selectedId );
	radio.checked = "checked";

	var engine = searchEngines[selectedId];
	var p = engine.Template.indexOf( '?' );
  	var params = engine.Template.substr( p + 1 );

	var form;
	if ( document.forms["search"] ) {
		form = document.forms["search"];
	} else {
		form = document.getElementById( "powersearch" );
	}
	form.setAttribute( "action", engine.Template.substr( 0 , p ) );

	var l = ("" + params).split( "&" );
	for ( var idx = 0; idx < l.length; idx++ ) {
		var p = l[idx].split( "=" );
		var pValue = p[1];
 
		if ( pValue == "{language}" ) {
		} else if ( pValue == "{searchTerms}" ) {
			var input;
			input = document.getElementById( "searchText" );
			input.name = p[0];
		} else {
			var input = document.getElementById( "searchengineextraparam" );
			input.name = p[0];
			input.value = pValue;
		}
	}
}

if ( mw.config.get( "wgCanonicalSpecialPageName" ) === "Search" ) {
	var searchEngines = {
		mediawiki: {
			ShortName: "Wikipedia-sök",
			Template: mw.config.get( 'wgScript' ) + "?search={searchTerms}"
		},
		google: {
			ShortName: "Google",
			Template: "http://www.google.se/search?hl=" + mw.config.get( "wgUserLanguage" ) + "&q={searchTerms}&as_sitesearch=" + mw.config.get( "wgServer" ).substr( 2 )
		},
		yahoo: {
			ShortName: "Yahoo!",
			Template: "http://se.search.yahoo.com/search?p={searchTerms}&vs=" + mw.config.get( "wgServer" ).substr( 2 )
		},
		wikiwix: {
			ShortName: "Wikiwix",
			Template: "http://www.wikiwix.com/index.php?action={searchTerms}&lang=sv"
		},
		live: {
			ShortName: "Bing",
			Template: "http://search.bing.com/results.aspx?q={searchTerms}&q1=site:" + mw.config.get( "wgServer" ).substr( 2 )
		}
	};
	jQuery( externalSearchEngines );
}
//Slut sökfunktion


/**
 * Dynamic Navigation Bars (gammal metod för döljbara mallar)
 */
 
// set up max count of Navigation Bars on page,
// if there are more, all will be hidden
// NavigationBarShowDefault = 0; // all bars will be hidden
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
var NavigationBarShowDefault = 1;

mw.loader.using( 'jquery.makeCollapsible', function() {
	var state = jQuery( '.NavFrame' ).length > NavigationBarShowDefault;
	jQuery( '.NavContent' ).addClass( 'mw-collapsible-content' );
	jQuery( '.NavFrame' ).filter( '.Hidden' ).makeCollapsible( { collapsed: true } );
	jQuery( '.NavFrame' ).not( '.Hidden' ).makeCollapsible( { collapsed: state } );
	jQuery( '.NavHead' ).append( function() {
		return $( this ).prev( 'span.mw-collapsible-toggle' );
	});
});

/* Test if an element has a certain class **************************************
 *
 * 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 *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *               [[Wikipedia:NavFrame]].
 *  Maintainers: [[User:R. Koot]]
 */
 
var autoCollapse = 2;
var collapseCaption = "Dölj";
var expandCaption = "Visa";
 
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 = {};
    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 = "3em";
 
            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 );
        }
    }
}
 
jQuery( createCollapseButtons );


/** &withJS= URL parameter *******
 * Allow to try custom scripts from MediaWiki space 
 * without editing [[Special:Mypage/monobook.js]]
 */
var extraJS = mw.util.getParamValue( "withJS" );
if ( extraJS && extraJS.match( "^MediaWiki:[^&<>=%]*\.js$" ) ) {
	importScript( extraJS );
}

/**
 * Ändrar hovertexten för språklänkar till utmärkta och bra artiklar.
 */
$( function() {
	jQuery( 'li.badge-featuredarticle' ).attr( 'title', 'Detta är en utmärkt artikel på ett annat språk.' );
	jQuery( 'li.badge-goodarticle' ).attr( 'title', 'Detta är en bra artikel på ett annat språk.' );
});


/**
 * Lägg interwikilänkar till andra projekt i vänstermenyn.
 */
$( function() { 
	var iwlinks = jQuery( 'div.interProject' );
	if ( iwlinks.length > 0 ) {
		var pproject = jQuery( '#p-tb' ).clone().attr( 'id', 'p-project' ).insertAfter( '#p-tb' );
		pproject.find( 'h3' ).attr( 'id', 'p-project-label' ).text( 'På andra projekt' );
		pproject.find( 'ul' ).addClass( 'interProject' ).empty().append( iwlinks );
		iwlinks.replaceWith( function() {
			return $( '<li></li>' ).addClass( $(this).attr( 'class' ) ).append( $(this).contents() );
		});
	}
});


/* 
 * För att länka bilder direkt till Commons istället för till en lokal filsida.
 * Kan stängas av genom att lägga koden "var LocalFileLinks = true;" i sitt
 * personliga javascript ([[Special:Min Sida/common.js]])
 */
jQuery( function() {
	if( typeof( LocalFileLinks ) !== 'undefined' ) { return; }
	jQuery( 'a' ).attr( 'href', function() {
		return this.href
			.replace( '//sv.wikipedia.org/wiki/Fil:', '//commons.wikimedia.org/wiki/File:' )
			.replace( '//sv.wikipedia.org/w/index.php?title=Fil:', '//commons.wikimedia.org/w/index.php?title=File:' );
	});
});

/* Sortera Å och Ä i rätt ordning i sorterbara tabeller 
 * Unicodes ordning är Ä, Å, Æ, så det blir bättre om Ä sorteras som Æ */
mw.config.set( 'tableSorterCollation', {'Ä':'Æ', 'ä':'æ', 'Á':'A', 'á':'a', 'À':'A', 'à':'a', 'Ã':'A', 'ã':'a', 'É':'E', 'é':'e', 'È':'E', 'è':'e' } );


/*
 * CGI:IRC login form
 * See [[Mediawiki:Gadget-irc.js]]. If this does something stupid, blame [[user:Bawolff]]
 */
$( function() {
	if ( document.getElementById( 'cgiircbox') ) {
		importScript( 'MediaWiki:Gadget-irc.js' );
	}
});

/* Geobox_Init och Geobox_Toggle kopierade från frwp. Behövs för mallen Geobox locator multi */

function GeoBox_Init(Element){
	if(!Element) Element = document.body;
	var cont = $( Element ).find( 'div.img_toogle' ).get();
	for (var i = 0,m=cont.length; i < m; i++) {
		cont[i].id = 'img_toogle_' + i;
		var Boxes = $( cont[i] ).find( '.geobox' ).get();
		var ToggleLinksDiv = document.createElement('ul');
		ToggleLinksDiv.id = 'geoboxToggleLinks_' + i;
		for(var a=0,l=Boxes.length;a<l;a++){
			var ThisBox = Boxes[a];
			ThisBox.id = 'geobox_' + i + "_" + a;
			ThisBox.style.borderTop='0';
			var ThisAlt = ThisBox.getElementsByTagName('img')[0].alt;
			var toggle = document.createElement('a');
			toggle.id = 'geoboxToggle_' + i + "_" + a;
			toggle.appendChild(document.createTextNode(ThisAlt));
			toggle.href='javascript:;';
			toggle.onclick = function(){
				GeoBox_Toggle(this);
				return false;
			};
			var Li = document.createElement('li');
			Li.appendChild(toggle);
			ToggleLinksDiv.appendChild(Li);
//			if(a==(l-1)){
//				Li.style.display = "none";      
			if (a==0){							// starta med första bilden synlig, inte sista
			}else{
				ThisBox.style.display = "none";
			}
		}
		cont[i].appendChild(ToggleLinksDiv);
	}
}

function GeoBox_Toggle(link){
	var ImgToggleIndex = link.id.split('geoboxToggle_').join('').replace(/_.*/g, "");
	var GeoBoxIndex = link.id.replace(/.*_/g, "");
	var ImageToggle = document.getElementById('img_toogle_' + ImgToggleIndex);
	var Links = document.getElementById('geoboxToggleLinks_' + ImgToggleIndex);
	var Geobox = document.getElementById('geobox_' + ImgToggleIndex + "_" + GeoBoxIndex);
	var Link = document.getElementById('geoboxToggle_' + ImgToggleIndex + "_" + GeoBoxIndex);
	if( (!ImageToggle) || (!Links) || (!Geobox) || (!Link) ) return;
	var AllGeoboxes = $( ImageToggle ).find( '.geobox' ).get();
	for(var a=0,l=AllGeoboxes.length;a<l;a++){
		var ThisgeoBox = AllGeoboxes[a];
		if(ThisgeoBox.id === Geobox.id){
			ThisgeoBox.style.display = "";
		}else{
			ThisgeoBox.style.display = "none";
		}
	}
/*  bortkommenterat avsnitt - alla länkar synliga hela tiden
	var AllToggleLinks = Links.getElementsByTagName('a');
	for(var a=0,l=AllToggleLinks.length;a<l;a++){
		var thisToggleLink = AllToggleLinks[a];
		if(thisToggleLink.id === Link.id){
//			thisToggleLink.parentNode.style.display = "none";
		}else{
			thisToggleLink.parentNode.style.display = "";
		}
	}
*/
}
 
if ( ( mw.config.get( 'wgAction' ) === 'view' ||
	mw.config.get( 'wgAction' ) === 'purge' ||
	mw.config.get( 'wgAction' ) === 'submit' )
) {
	$( function() {
		GeoBox_Init();
	} );
}