User:Versageek/modern.js
Appearance
Note: You may have to bypass your browser’s cache to see the changes. In addition, after saving a sitewide CSS file such as MediaWiki:Common.css, it will take 5-10 minutes before the changes take effect, even if you clear your cache.
- 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 user script lacks a documentation subpage. You may create it.
- Useful links: root page • root page’s subpages • links • redirects • your own
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]]
*/