User:Versageek/modern.js

From Wiktionary, the free dictionary
Jump to navigation Jump to search

Note – after saving, you may have to bypass your browser’s cache to see the changes.

  • Mozilla / Firefox / Safari: hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (Command-R on a Macintosh);
  • Konqueror and Chrome: click Reload or press F5;
  • Opera: clear the cache in Tools → Preferences;
  • Internet Explorer: hold Ctrl while clicking Refresh, or press Ctrl-F5.

This JavaScript is executed for Versageek on every page load, when User:Versageek is using the Modern skin.


/*</pre>
==Dynamic Navigation Bars (experimental)==
<pre>*/

 // ============================================================
 // BEGIN Dynamic Navigation Bars (experimental)
 // FIXME: currently only works for one nav bar on a page at a time
 
 // set up the words in your language
 var NavigationBarHide = 'hide';
 var NavigationBarShow = 'show';
 
 // 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;
 //Honor the User Preferences
 if ( getCookie('WiktionaryPreferencesShowNav') != 'true' ) {
         NavigationBarShowDefault = 0;
    } else {
      if ( wgNamespaceNumber == 0 ) NavigationBarShowDefault = 999 ;
    }
  
/*</pre>
===toggleNavigationBar===
<pre>*/

 // 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.isHidden == false) {
        for (
                var NavChild = NavFrame.firstChild;
                NavChild;
                NavChild = NavChild.nextSibling
            ) {
            if (NavChild.className == 'NavPic') {
                NavChild.style.display = 'none';
            }
            if (NavChild.className == 'NavContent') {
                NavChild.style.display = 'none';
            }
        }
    NavToggle.childNodes[1].firstChild.nodeValue = NavigationBarShow;
    NavToggle.isHidden = true;
 
    // if hidden now
    } else if (NavToggle.isHidden == true) {
        for (
                var NavChild = NavFrame.firstChild;
                NavChild;
                NavChild = NavChild.nextSibling
            ) {
            if (NavChild.className == 'NavPic') {
                NavChild.style.display = 'block';
            }
            if (NavChild.className == 'NavContent') {
                NavChild.style.display = 'block';
            }
        }
    NavToggle.childNodes[1].firstChild.nodeValue = NavigationBarHide;
    NavToggle.isHidden = false;
    }
 }
 
/*</pre>
===createNavigationBarToggleButton===
<pre>*/

 // adds show/hide-button to navigation bars
 function createNavigationBarToggleButton()
 {
    // Are we previewing an translation section?
    var preview = document.getElementById('wikiPreview');

    if (preview != null) {
      var p = preview.getElementsByTagName('p');
      if (p != null && p.length >= 2 && p[1].firstChild.id == 'Translations') {
        NavigationBarShowDefault = 999;
      }
    }

    var indexNavigationBar = 0;
    // iterate over all < div >-elements
    for(
            var i=0; 
            NavFrame = document.getElementsByTagName("div")[i]; 
            i++
        ) {
        // if found a navigation bar
        if (NavFrame.className == "NavFrame") {
 
            indexNavigationBar++;
            var NavToggle = document.createElement("span");
            NavToggle.className = 'NavToggle editsection';
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
            
            NavToggle.appendChild(document.createTextNode('['));
            NavToggle.appendChild(document.createElement("a"));
            var NavToggleText = document.createTextNode(NavigationBarHide);
            NavToggle.childNodes[1].setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
            NavToggle.childNodes[1].appendChild(NavToggleText);
            NavToggle.appendChild(document.createTextNode(']'));
            NavToggle.isHidden = false;
            // 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 (NavFrame.childNodes[j].className == "NavHead") {
                NavFrame.childNodes[j].appendChild(NavToggle);
              }
            }
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
        }
    }
    // if more Navigation Bars found than Default: hide all
    if (NavigationBarShowDefault < indexNavigationBar) {
        for(
                var i=1; 
                i<=indexNavigationBar; 
                i++
        ) {
            toggleNavigationBar(i);
        }
    }
 
 }
 
 addOnloadHook(createNavigationBarToggleButton);
 
 // END Dynamic Navigation Bars
 // ============================================================

/*</pre>
==addCharSubsetMenu==
<pre>*/

/* add menu for selecting subsets of secial characters */
/***** must match MediaWiki:Edittools *****/
function addCharSubsetMenu() {
  var edittools = document.getElementById('editpage-specialchars');

  if (edittools) {
    var menu = "<select id=\"charSubsetControl\" style=\"display:inline\" onChange=\"chooseCharSubset(selectedIndex)\">";
    menu += "<option>Templates</option>";
    menu += "<option>Latin/Roman</option>";
    menu += "<option>IPA</option>";
    menu += "<option>enPR</option>";
    menu += "<option>Misc.</option>";
    menu += "<option>Arabic</option>";
    menu += "<option>Armenian</option>";
    menu += "<option>Catalan</option>";
    menu += "<option>Cherokee</option>";
    menu += "<option>Cyrillic</option>";
    menu += "<option>Devanāgarī</option>";
    menu += "<option>Esperanto</option>";
    menu += "<option>Estonian</option>";
    menu += "<option>French</option>";
    menu += "<option>Georgian</option>";
    menu += "<option>German</option>";
    menu += "<option>Gothic</option>";
    menu += "<option>Greek (Modern)</option>";
    menu += "<option>Greek (Ancient)</option>";
    menu += "<option>Hawaiian</option>";
    menu += "<option>Hebrew</option>";
    menu += "<option>Icelandic</option>";
    menu += "<option>Indo-European</option>";
    menu += "<option>Italian</option>";
    menu += "<option>Latvian/Lithuanian</option>";
    menu += "<option>Maltese</option>";
    menu += "<option>Old English</option>";
    menu += "<option>Pinyin</option>";
    menu += "<option>Portuguese</option>";
    menu += "<option>Romaji</option>";
    menu += "<option>Romanian</option>";
    menu += "<option>Scandinavian</option>";
    menu += "<option>Slavic Roman</option>";
    menu += "<option>Sorani Kurdish</option>";
    menu += "<option>Spanish</option>";
    menu += "<option>Turkish</option>";
    menu += "<option>Vietnamese</option>";
    menu += "<option>Welsh</option>";
    menu += "<option>Yoruba</option>";
    menu += "</select>";
    edittools.innerHTML = menu + edittools.innerHTML;

    /* default subset from cookie */
    var s = parseInt( getCookie('edittoolscharsubset') );
    if ( isNaN(s) ) s = 0;

    /* update dropdown control to value of cookie */
    document.getElementById('charSubsetControl').selectedIndex = s; 

    /* display the subset indicated by the cookie */
    chooseCharSubset( s );
  }
}


/*</pre>
===chooseCharSubsetMenu===
<pre>*/

/* select subsection of special characters */
function chooseCharSubset(s) {
  var l = document.getElementById('editpage-specialchars').getElementsByTagName('p');
  for (var i = 0; i < l.length ; i++) {
    l[i].style.display = i == s ? 'inline' : 'none';
    l[i].style.visibility = i == s ? 'visible' : 'hidden';
  }
  setCookie('edittoolscharsubset', s);
}

/*</pre>

==Statistics==
<pre>*/

 // Hook to use LeonWP's toolserver statistics generator

 // ============================================================
 // BEGIN pageview counter
 // 	Please talk to de:User:LeonWeber before changing anything or 
 // 	if there are any issues with that.
 
 // this should be adjusted to a good value.
 // BE CAREFULL, you will break zedler if it's too low!
 // And then DaB. will kill Leon :-(
 var disable_counter = 0; // 0 = collect stats from anons, 1 = turn off entirely
 var counter_factor = 40; //Wikipedias are ~600.  Use Alexa for a WAG
 
 function pgcounter_setup()
 {
 	if( (disable_counter == 0) && (wgUserName == null) )
 	{
 		var url = window.location.href;
 		if(Math.floor(Math.random()*counter_factor)==4)  // the probability thing
  		{
  			if(wgIsArticle==true) // do not count history pages etc.
 			{
 				var pgcountNs = wgCanonicalNamespace;
 				if(wgCanonicalNamespace=="")
 				{
 					pgcountNs = "0";
 				}
  				var cnt_url = "http://pgcount.wikimedia.de/index.png?ns=" + pgcountNs + "&title=" + encodeURI(wgTitle) + "&factor=" + counter_factor + "&wiki=enwiktionary";
 				var img = new Image(); 
 				img.src = cnt_url;
 			}
 		}
 	}
 }
 // Do not use aOnloadFunctions[aOnloadFunctions.length] = pgcounter_setup;, some browsers don't like that.
 pgcounter_setup();
 
 // END pageview counter 
 // ============================================================



/*</pre>
==customizeWiktionary==
<pre>*/

/* do any Wiktionary-specific customizations */

function customizeWiktionary() {
  addCharSubsetMenu();
}

$(customizeWiktionary);

/*</pre>
== Interproject links ==
<pre>*/

/*
#########
### ProjectLinks
###  by [[user:Pathoschild]] (idea from an older, uncredited script)
###    * generates a sidebar list of links to other projects from {{projectlinks}}
#########
*/
function Projectlinks() {
        var elements = new Array();
        var spans = document.getElementsByTagName('span');
        
        // filter for projectlinks
        for (var i=0, j=0; i<spans.length; i++) {
                if (spans[i].className == 'interProject') {
                        elements[j] = spans[i].getElementsByTagName('a')[0];
                        j++;
                }
        }
        
        // sort alphabetically
        function sortbylabel(a,b) {
                // get labels
                a = a.innerHTML.replace(/^.*<a[^>]*>(.*)<\/a>.*$/i,'$1');
                b = b.innerHTML.replace(/^.*<a[^>]*>(.*)<\/a>.*$/i,'$1');

                // return sort order
                if (a < b) return -1;
                if (a > b) return 1;
                return 0;
        }
        elements.sort(sortbylabel);
        
        if (j) {
                // create navbox
                var plheader = document.createElement('h5');
                plheader.appendChild(document.createTextNode('In other projects'));
                var plbox = document.createElement('div');
                plbox.setAttribute('class','pBody');
                plbox.setAttribute('style','margin-top:0.7em;');
                var pllist = document.createElement('ul');

                // append
                for (var i=0; i<elements.length; i++) {
                        var plitem = document.createElement('li');
                        plitem.appendChild(elements[i]);
                        pllist.appendChild(plitem);
                }
                plbox.appendChild(plheader);
                plbox.appendChild(pllist);
                document.getElementById("p-tb").appendChild(plbox);
        }
}

$(Projectlinks);

/* </pre>
==Alt shortcuts for namespaces==
<pre>*/

//Added back in until they are otherwise resolved
var ta={};
ta['ca-nstab-project'] = new Array('c','View the project page');
ta['ca-nstab-main'] = new Array('c','View the content page');
ta['ca-nstab-user'] = new Array('c','View the user page');
ta['ca-nstab-media'] = new Array('c','View the media page');
ta['ca-nstab-special'] = new Array('','This is a special page, you can\'t edit the page itself.');
ta['ca-nstab-wp'] = new Array('a','View the project page');
ta['ca-nstab-image'] = new Array('c','View the image page');
ta['ca-nstab-mediawiki'] = new Array('c','View the system message');
ta['ca-nstab-template'] = new Array('c','View the template');
ta['ca-nstab-help'] = new Array('c','View the help page');
ta['ca-nstab-category'] = new Array('c','View the category page');
ta['ca-nstab-appendix'] = new Array('c','View the appendix page');
ta['ca-nstab-concordance'] = new Array('c','View the concordance page');
ta['ca-nstab-index'] = new Array('c','View the index page');
ta['ca-nstab-rhymes'] = new Array('c','View the rhymes page');
ta['ca-nstab-transwiki'] = new Array('c','View the imported page');
ta['ca-nstab-wikisaurus'] = new Array('c','View the thesaurus page');
ta['ca-nstab-wt'] = new Array('c','View the shortcut target page');
ta['ca-nstab-citations'] = new Array('c','View the citations page');
ta['ca-nstab-quotations'] = new Array('c','View the quotations page');
/*
[[bs:MediaWiki:Monobook.js]]
[[he:MediaWiki:Monobook.js]]
[[fr:MediaWiki:Monobook.js]]
[[de:MediaWiki:Monobook.js]]
[[ja:MediaWiki:Monobook.js]]
[[vi:MediaWiki:Monobook.js]]
[[zh:MediaWiki:Monobook.js]]
*/