MediaWiki:Common.js

Napomena: Nakon objave možda ćete trebati očistiti međuspremnik svog preglednika kako biste vidjeli promjene.

  • Firefox / Safari: držite Shift i pritisnite Reload, ili pritisnite bilo Ctrl-F5 ili Ctrl-R (⌘-R na Macu)
  • Google Chrome: pritisnite Ctrl-Shift-R (⌘-Shift-R na Macu)
  • Internet Explorer / Edge: držite Ctrl i kliknite Refresh, ili pritisnite Ctrl-F5
  • Opera: pritisnite Ctrl-F5.
/**
 * Dynamic Navigation Bars (experimental)==
 */
 // ============================================================
 // 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 = '[Sakrij]';
 var NavigationBarShow = '[Prikaži]';

 // 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 ( $.cookie('WiktionaryPreferencesShowNav') != 'true' ) {
    NavigationBarShowDefault = 0;
} else {
    if ( mw.config.get('wgNamespaceNumber') === 0 ) {
        NavigationBarShowDefault = 999;
    }
}

/**
 * Toggle navigation bar
 *
 * 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;
                NavChild = NavChild.nextSibling
        ) {
            if (NavChild.className == 'NavPic') {
                NavChild.style.display = 'none';
            }
            if (NavChild.className == 'NavContent') {
                NavChild.style.display = 'none';
            }
        }
        NavToggle.firstChild.data = NavigationBarShow;

    // if hidden now
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
        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.firstChild.data = NavigationBarHide;
    }
 }

/**
 * Add show/hide-button to navigation bar
 */
 function createNavigationBarToggleButton() {
    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("a");
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');

            var NavToggleText = document.createTextNode(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 (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);
        }
    }

 }

$(createNavigationBarToggleButton);

 // END Dynamic Navigation Bars
 // ============================================================

/**
 * 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>Predlošci</option>";
    menu += "<option>Latinski</option>";
    menu += "<option>IPA</option>";
    menu += "<option>enPR</option>";
    menu += "<option>Misc.</option>";
    menu += "<option>Arapski</option>";
    menu += "<option>Armenski</option>";
    menu += "<option>Katalonski</option>";
    menu += "<option>Ćirilični</option>";
    menu += "<option>Devanāgarī</option>";
    menu += "<option>Esperanto</option>";
    menu += "<option>Estonski</option>";
    menu += "<option>Francuski</option>";
    menu += "<option>Njemački</option>";
    menu += "<option>Gotski</option>";
    menu += "<option>Grčki (moderni)</option>";
    menu += "<option>Grčki (antički)</option>";
    menu += "<option>Havajski</option>";
    menu += "<option>Hebrejski</option>";
    menu += "<option>Islandski</option>";
    menu += "<option>Talijanski</option>";
    menu += "<option>Latvijski/Litavski</option>";
    menu += "<option>Malteški</option>";
    menu += "<option>Staroengleski</option>";
    menu += "<option>Pinjin</option>";
    menu += "<option>Portugalski</option>";
    menu += "<option>Romaji</option>";
    menu += "<option>Rumunjski</option>";
    menu += "<option>Skandinavski</option>";
    menu += "<option>Slavic Roman</option>";
    menu += "<option>Sorani Kurdish</option>";
    menu += "<option>Španjolski</option>";
    menu += "<option>Turski</option>";
    menu += "<option>Vijetnamski</option>";
    menu += "<option>Velški</option>";
    menu += "<option>Yoruba</option>";
    menu += "</select>";
    edittools.innerHTML = menu + edittools.innerHTML;

    /* default subset from cookie */
    var s = parseInt( $.cookie('edittoolscharsubset'), 10 );
    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 );
  }
}


/**
 * 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';
  }
  $.cookie('edittoolscharsubset', s);
}


/**
 * Resole did-you-mean redirect
 **/
// Redirect if a case-insensitive search on an external link is found
function doRedirect() {
  dym = document.getElementById('did-you-mean');
  if ( dym ) {
    if ( $.cookie('WiktionaryDisableAutoRedirect') != 'true' ) {
      var dymtarget = dym.firstChild.title ;
      var target = dymtarget ;
      pagetitle = document.getElementsByTagName('h1').item(0).firstChild.nodeValue;
      if (pagetitle == target) {
        alert('No looping allowed.');
        return;
      }
      if ( pagetitle.toLowerCase().replace(/[^a-z]/g, "") != target.toLowerCase().replace(/[^a-z]/g, "") ) {
        alert(target + " does not match " + pagetitle);
        return;
      }
      if ( pagetitle.search(/Editing /g) != -1 ) return;
      pagenamee = pagetitle.replace(/\ /g, "_");
      document.location.replace( '//en.wiktionary.org/wiki/Special:Search/' + pagenamee ) ;
    }
  }
}

/**
 * Fix editsection [wikified] links
 */
// edit-section still doesn't return to correct spot if link contains a [[wikified]] term.
function fixEditSectionWikifiedLinks() {
  var url;
  if (/\.5B/.test(window.location.href)) {
    url = window.location.href.replace(/.5B.5B:/g,"").replace(/.5B/g, "").replace(/.5D/g, "");
    window.location = url;
  }
  //#capiche_and_.7B.7Btemp.7Calternative_spelling_of.7D.7D
  if (/\.7B\.7Btemp\.7C(.*?)\.7D\.7D/.test(window.location.href)) {
    url = window.location.href.replace(/\.7B\.7Btemp.7C/, ".7B.7B");
    window.location = url;
  }
}

/**
 * Hide "Main Page" heading and several other elements on the Main Page
 */

var isDiff = (document.location.search && (document.location.search.indexOf("diff=") != -1 || document.location.search.indexOf("oldid=") != -1));

if (mw.config.get('wgIsMainPage') && !isDiff) {
  mw.loader.using(['mediawiki.util']).then(function() {
    mw.util.addCSS('#lastmod, #siteSub, #contentSub, h1.firstHeading { display: none !important; }');
  });
}

/**
 * Wiktionary-specific tooltips
 */
function wiktHeadingToolTips() {}

/**
 * customizeWiktionary
 *
 * do any Wiktionary-specific customizations
 */
function customizeWiktionary() {
  doRedirect();
  addCharSubsetMenu();
  fixEditSectionWikifiedLinks();
  wiktHeadingToolTips();
}

$(customizeWiktionary);

/* Remember to keep [[MediaWiki:Standard.js]] in sync with this, for classic style! */

/**
 * Link Featured Articles
 */
function LinkFA() {
   // iterate over all <span>-elements
   for (var i=0; a = document.getElementsByTagName("span")[i]; i++) {
      // if found a FA span
      if (a.className == "FA") {
         // iterate over all &lt;li&gt;-elements
         for (var j=0; b = document.getElementsByTagName("li")[j]; j++) {
            // if found a FA link
            if (b.className == "interwiki-" + a.id) {
               b.className += " FA";
               b.title = "This article has gained featured status";
            }
         }
      }
   }
}

/**
 * Interproject links
 */
/**
 * 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 = [];
        var spans = document.getElementsByTagName('span');
        var i;
        var j;

        // filter for projectlinks
        for (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 (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);