MediaWiki:Common.js

Izvor: Wikipedija

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.
//<syntaxhighlight lang="javascript">
//Polyfill za .includes
String.prototype.includes = function (str) {
  var returnValue = false;

  if (this.indexOf(str) !== -1) {
    returnValue = true;
  }

  return returnValue;
};

// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md
(function (arr) {
  arr.forEach(function (item) {
    if (item.hasOwnProperty('prepend')) {
      return;
    }
    Object.defineProperty(item, 'prepend', {
      configurable: true,
      enumerable: true,
      writable: true,
      value: function prepend() {
        var argArr = Array.prototype.slice.call(arguments),
          docFrag = document.createDocumentFragment();
        
        argArr.forEach(function (argItem) {
          var isNode = argItem instanceof Node;
          docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));
        });
        
        this.insertBefore(docFrag, this.firstChild);
      }
    });
  });
})([Element.prototype, Document.prototype, DocumentFragment.prototype]);
// polyfill kraj

//skrivanje evidecija o brisanju praznih SZR:
if (mw.config.get('wgNamespaceNumber') % 2 == 1 //samo SZR
	&& $('.mw-warning-with-logexcerpt .comment').length) { //postoji upozorenje o brisanju
	var tekstSazetkaBrisanja = $('.mw-warning-with-logexcerpt .comment')[0].innerText.toLowerCase();
	if (tekstSazetkaBrisanja == '(brisanje praznih szr)'
		|| tekstSazetkaBrisanja == '(brisanje praznih stranica za razgovor)'
		|| tekstSazetkaBrisanja.includes('stranica bez sadržaja')) {
		$('.mw-warning-with-logexcerpt')[0].style = "display: none;";
	}
}

// +bez polja predmet u zahtjevu za premještanje stranice
if (location.search.includes('Zahtjev_za_premje%C5%A1tanje_stranice')){
	$('#wpSummaryLabel').css("display", "none");
	$('#zzpm-napomena').css("display", "none");
}
/* Učitavanje dodatnih skripti ako je potrebno */

if (mw.config.get('wgAction') === "edit" || mw.config.get('wgAction') === "submit" || mw.config.get('wgPageName') === "Posebno:Postavi_datoteku") // skripte za uređivanje stranica
{
    importScript("MediaWiki:Common.js/edit.js");
}
if (navigator.appName === "Microsoft Internet Explorer") // skripte za Internet Explorer
{
 importScript( 'MediaWiki:Common.js/IEfixes.js' );
}

/**
 * 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' );

/* {{mbox}}, {{ambox}}, {{ombox}}, {{fmbox}}, etc... */
mw.loader.load( '//www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css', 'text/css' );


/** InterProjekti *******************************************************
  *
  * Opis: Poveznice na ostale wiki projekte za glavnu stranicu
  *       s de:wikt:Mediawiki:monobook.js
  *
  * Održava: [[Suradnik:MayaSimFan]]
  */
mw.loader.using('mediawiki.util', function() {
  mw.util.addCSS('#interProject {display: none; speak: none;} #p-tb .pBody {padding-right: 0;}');
});
$(function () {
	if(document.getElementById("interProject")) {
		var iProject = document.getElementById("interProject").innerHTML;
		var interProject = document.createElement("div");
		interProject.style.marginTop = "0.7em";
		interProject.innerHTML = '<h5>Drugi projekti<\/h5><div class="pBody">'+iProject+'<\/div>';
		document.getElementById("p-tb").appendChild(interProject);
	}
});

/** Main Page layout fixes *********************************************************
  *
  *  Description:        Various layout fixes for the main page, including an
  *                      additional link to the complete list of languages available
  *  Maintainers:        [[User:AzaToth]], [[User:R. Koot]]
  */

if (mw.config.get('wgIsMainPage') || mw.config.get('wgPageName') === 'Razgovor:Glavna_stranica') {
    $.when(mw.loader.using('mediawiki.util'), $.ready).then(function () {
        mw.util.addPortletLink('p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',
                 'Cijeli popis', 'interwiki-completelist', 'Popis svih Wikipedija');
    });
}

/* 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);
    };
})();

/* 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.
 */

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 <li>-elements
         for(var j=0; b = document.getElementsByTagName("li")[j]; j++) {
            // if found a FA link
            if(b.className === "interwiki-" + a.id && b.className.indexOf("badge-featuredarticle") === -1 && b.className.indexOf("badge-goodarticle") === -1) {
               b.style.padding = "0 0 0 16px";
               b.style.backgroundImage = "url('//upload.wikimedia.org/wikipedia/en/6/60/LinkFA-star.png')";
               b.style.backgroundRepeat = "no-repeat";
               b.title = "Ovaj je članak dobio status izabranog članka";
            }
         }
      }
   }
}

$(LinkFA);

/** Collapsible tables *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *               [[Wikipedia:NavFrame]].
 *  Maintainers: [[User:R. Koot]]
 */

var autoCollapse = 2;
var collapseCaption = "sakrij";
var expandCaption = "otkrij";

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 j = 1; j < Rows.length; j++ ) {
            Rows[j].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 ( 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.className = "collapseButton";  //Styles are declared in Common.css

            ButtonLink.style.color = Header.style.color;
            ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
            ButtonLink.setAttribute( "href", "#" );
            ButtonLink.addEventListener("click", new Function("e","e.preventDefault(); 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 );
        }
        else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) {
            var element = NavigationBoxes[i];
            while (element = element.parentNode) {
                if ( hasClass( element, "outercollapse" ) ) {
                    collapseTable ( i );
                    break;
                }
            }
        }
    }
}

$( createCollapseButtons );

// ============================================================
// BEGIN Dynamic Navigation Bars (experimantal)

// set up the words in your language
var NavigationBarHide = ' Sakrij ';
var NavigationBarShow = ' Otkrij ';

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


 // 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 != null;
               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 != null;
               NavChild = NavChild.nextSibling
           ) {
           if (NavChild.className == 'NavPic') {
               NavChild.style.display = 'block';
           }
           if (NavChild.className == 'NavContent') {
               NavChild.style.display = 'block';
           }
        }
    NavToggle.firstChild.data = NavigationBarHide;
    }
 }

 // adds show/hide-button to navigation bars
 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
 // ============================================================

// The function looks for <span class="editsection">, and move them
// at the end of their parent and display them inline in small font.
// var oldEditsectionLinks=true disables the function.

function setModifySectionStyle() {
	try {
		if (!(typeof oldEditsectionLinks === 'undefined' || oldEditsectionLinks == false)) return;
		var spans = document.getElementsByTagName("span");
		for (var s = 0; s < spans.length; ++s) {
			var span = spans[s];
			if (span.className === "editsection") {
				span.style.fontSize = "xx-small";
				span.style.fontWeight = "normal";
				span.style.cssFloat = span.style.styleFloat = "none";
				span.className = "editsectionmoved";
				span.parentNode.appendChild(document.createTextNode(" "));
				span.parentNode.appendChild(span);
			}
		}
	} catch (e) { /* something went wrong */ }
}
$(setModifySectionStyle);

/* */

if(mw.config.get('wgAction') == 'submit' || mw.config.get('wgAction') == 'view') {
	mw.loader.using('mediawiki.util', function() {
		var cnote = document.getElementById('centralNotice');
		if( !document.getElementById('mw-dismissible-notice') && !(cnote && hasClass(cnote, 'expanded'))) return;
		mw.util.addCSS('#bodyContent { position:relative; } \n.topicon { position:absolute; top:-2em !important;}\n#coordinates{ position:absolute; top:1px !important; }');
	});
}

// Ispravno sortiranje u tablicama (koje koriste class="sortable").
mw.config.set('tableSorterCollation', {
    'č':'czz', 'Č':'CZZ',
    'ć':'czzz','Ć':'CZZZ',
    'dž':'dzz', 'Dž':'Dzz', 'dŽ':'dZZ', 'DŽ':'DZZ',
    'đ':'dzzz', 'Đ':'DZZZ',
    'lj':'lzz', 'Lj':'Lzz', 'lJ':'lZZ', 'LJ':'LZZ',
    'nj':'nzz', 'Nj':'Nzz', 'nJ':'nZZ', 'NJ':'NZZ',
    'š':'szz', 'Š':'SZZ',
    'ž':'zzz', 'Ž':'ZZZ'
});

//</syntaxhighlight>