MediaWiki:Common.js

Från Wikiversity

OBS: Efter du har publicerat 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 Ctrl-F5 eller Ctrl-R (⌘-R på Mac)
  • Google Chrome: Tryck Ctrl-Skift-R (⌘-Skift-R på Mac)
  • Internet Explorer / Edge: Håll ned Ctrl och klicka på Uppdatera eller tryck Ctrl-F5
  • Opera: Tryck Ctrl-F5.
/**
 * WikiMiniAtlas is a popup click and drag world map.
 * See [[meta:WikiMiniAtlas]] for more information.
 * Maintainers: [[w:User:Dschwen]]
 */
mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript' );

// Ändrar koordinatikonen; default är 18px-Erioll_world.svg.png, men nedanstående gör
// sig lite bättre i liten storlek; dessutom minskad storlek för att bättre passa ihop
// med stjärnikonerna för utvalda artiklar.
var wma_settings = {
  buttonImage: '//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Ambox_globe.svg/15px-Ambox_globe.svg.png'
}

// 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]]
   */
 
if ((mw.config.get('wgNamespaceNumber') == -1) && (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(7, mw.config.get('wgServer').length - 1 )
	  },
	  yahoo: {
	    ShortName: "Yahoo!",
	    Template: "http://se.search.yahoo.com/search?p={searchTerms}&vs=" + mw.config.get('wgServer')
	  },
	  wikiwix: {
	    ShortName: "Wikiwix",
            Template: "http://www.wikiwix.com/index.php?action={searchTerms}&lang="+mw.config.get('wgContentLanguage')
	  },
          live: {
            ShortName: "Bing",
	    Template: "http://search.bing.com/results.aspx?q={searchTerms}&q1=site:" + mw.config.get('wgServer')
          }
	};
	$(externalSearchEngines);
}

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,
        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);
  $('[name="searchengineselect"]').focus(changeSearchEngine(this.value));
  var input = document.createElement("input");
  input.id = "searchengineextraparam";
  input.type = "hidden";
 
  mainNode.insertBefore(input, beforeNode);

  changeSearchEngine(firstEngine);
}

function changeSearchEngine(selectedId) {

  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;
    }
  }
}



//Slut sökfunktion

/**
* Ändrar uppladdningslänken i verktygslådan till att hänvisa till sidan [[Wikipedia:Ladda upp filer]]
*/
function LienUpload() {
  var uploadLink = document.getElementById("t-upload");
  if (!uploadLink) return;
  var a = uploadLink.firstChild;
  a.setAttribute('href', '/wiki/Wikiversity:Ladda_upp_filer');
}
      
$(LienUpload);
 
/** 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 = new Object();
    var Tables = document.getElementsByTagName( "table" );
 
    for ( var 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.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 ( $(NavigationBoxes[i]).hasClass("collapsed" ) || ( tableIndex >= autoCollapse && $(NavigationBoxes[i]).hasClass("autocollapse" ) ) ) {
            collapseTable( i );
        }
    }
}
 
$( 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);
}

 /** Lägger till klassen "FA" för interwikilänkar till utmärkta artiklar på andra språk.
  *  Det ger möjlighet att via css lägga till stjärnor bredvid länkarna. Kopierad från [[:en:MediaWiki:common.js]] */
 /** 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 = "Detta är en utmärkt artikel på ett annat språk.";
       }
     }
   }
 }
 
 $( LinkFA );

 // motsvarande för bra artiklar
 function LinkGA()  {
   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 + "-ga" ) ) {
         InterwikiLinks[i].className += " GA"
         InterwikiLinks[i].title = "Detta är en bra artikel på ett annat språk.";
       }
     }
   }
 }
 
 $( LinkGA );

/**
 * iProject (InterProjectLinks)
 * Written by: Erwin ([[:nl:MediaWiki:IProject.js]]), modified by Kildor
 * Description: Adds links to other WMF projects in the sidebar
 *   ([[:bugzilla:708]]). Works for all skins with a sidebar.
 *
 * Originally written by Magnus Manske. Version forked from 
 *   [[:es:MediaWiki:Common.js]] and [[:de:wikt:Mediawiki:monobook.js]]
 */
 
function iProject() {
    // Find templates with interproject links. These templates should have a div
    // with class 'interProject' that only contains a link to the other project.
    iProjectLinks = document.getElementsByClassName('interProject');
 
    if (iProjectLinks.length > 0) {
        // The element below should always be available. To not break code
        // we do check for it, but don't have a fallback.
        if (document.getElementById('p-tb')) {
            prevNode = document.getElementById('p-tb');
        } else {
            return false;
        }
 
        // Clone previous node including child nodes.
        interProject = prevNode.cloneNode(true);
        interProject.id = 'p-project';
 
        // Set header of new toolbox
        h = interProject.getElementsByTagName('h5');
        if(h[0]) {
            h[0].innerHTML = 'P&aring; andra projekt';
        }
 
        // The links are included in the first and only div of the toolbox
        d = interProject.getElementsByTagName('div');
        if(d[0]) {
            d = d[0];
        } else {
            return false;
        }
 
        // Remove current children, i.e. current ul element.
        while(d.hasChildNodes()) {
            d.removeChild(d.childNodes[0])
        }
 
        // Create new list with links
        ul = document.createElement('ul')
        ul.className += " interProject";
        for (i = 0; i< iProjectLinks.length; i++) {
            li = document.createElement('li');
            li.className += " " + iProjectLinks[i].className;
            li.innerHTML = iProjectLinks[i].innerHTML;
            ul.appendChild(li)
        }
        d.appendChild(ul);
 
        // Insert new node
        prevNode.parentNode.insertBefore(interProject, prevNode.nextSibling);
    }
}
 
$(iProject);

/* 
 * 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:Mypage/vector.js]] i vectorutseendet)
 */
$(function() {
  if( typeof LocalFileLinks != 'undefined' ) { return; }
  for(var f=document.getElementsByTagName('a'),i=(f.length-1),oR;i--;){
    var oR=f[i].href=f[i].href.replace('//sv.wikipedia.org/wiki/Fil:','//commons.wikimedia.org/wiki/File:').replace('/sv/wiki/Fil:','/commons/wiki/File:');
    if(oR.match(/commons(\.wikimedia|\/wiki)/)){f[i].href+='?uselang=sv'}
  }
});

/*
 * För att få bra-, rekomenderad- och utmärktstjränorna på samma rad som
 * huvudrubriken.
 * 
 * Skapad av [[sv:Användare:Sertion]]
 */

var featuredStarToHeader = function(fsID){
  var fs = document.getElementById(fsID);
  if (!fs) return;
  var tl = document.getElementById('firstHeading');
  var fi = fs.getElementsByTagName('img')[0];
 
  fi.setAttribute('width',19);
  fi.setAttribute('height',18);
  fi.src = fi.src.replace('/16px','/19px');
  tl.appendChild(fs);
}

$(function(){featuredStarToHeader('featured-star')})
$(function(){featuredStarToHeader('featured-group')})

/* import additional javascript based features */
// importScript("MediaWiki:LanguageSelection.js");