MediaWiki:Common.js

Википєдїѩ · отврьстꙑ єнкѷклопєдїѩ · страница

НАРОЧИТО: По съхранѥнии можєши обити своѥго съмотрила съхранъ да видѣлъ би мѣнꙑ

  • Mozilla ли Firefox ли Safari' ли жьмꙑи Shift а мꙑшиѭ жьми Reload или жьми Ctrl-F5 ꙗко жє Ctrl-R (⌘-R вън Apple Mac)
  • Google Chrome: ли жьмꙑи Ctrl-Shift-R (⌘-Shift-R въ Mac)
  • Internet Explorer ли жьмꙑи Ctrl а мꙑшиѭ жьми Refresh или жьми Ctrl-F5
  • Опєрꙑ польꙃєватєльмъ можєть бꙑти ноужда пльнѣ поничьжити ихъ съмотрила съхранъ въ Tools → Preferences (Opera → Preferences вън Apple Mac) ⁙
/**
 * 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' );

/**
 * Interwiki links to featured articles
 *
 * 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.indexOf( 'badge-featuredarticle' ) === -1 ) {
                InterwikiLinks[i].className += ' FA';
                InterwikiLinks[i].title = 'This is a featured article in another language.';
            }
        }
    }
}
$( LinkFA );


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

var autoCollapse = 2;
var collapseCaption = "hide";
var expandCaption = "show";

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 = {};
    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 = "6em";

            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 );
        }
        else if (  $(NavigationBoxes[i]).hasClass( "innercollapse" ) ) {
            element = NavigationBoxes[i];
            while (element.parentNode) {
                var element = element.parentNode;
                if ( $(element).hasClass( "outercollapse" ) ) {
                    collapseTable ( i );
                    break;
                } else if (element.getAttribute("id") == "bodyContent" ) break;
            }
        }
    }
}

$( createCollapseButtons );


/** Dynamic Navigation Bars (experimental)
 *
 *  Description: See [[Wikipedia:NavFrame]].
 *  Maintainers: UNMAINTAINED
 */

// set up the words in your language
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';

// 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).hasClass( 'NavPic' ) ) {
                NavChild.style.display = 'none';
            }
            if ( $(NavChild).hasClass( '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).hasClass( 'NavPic')) {
                NavChild.style.display = 'block';
            }
            if ($(NavChild).hasClass( '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
    var divs = document.getElementsByTagName("div");
    for (var i = 0; NavFrame = divs[i]; i++) {
        // if found a navigation bar
        if ($(NavFrame).hasClass( "NavFrame")) {

            indexNavigationBar++;
            var NavToggle = document.createElement("a");
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');

            var isCollapsed = $(NavFrame).hasClass( "collapsed" );
            /*
             * Check if any children are already hidden.  This loop is here for backwards compatibility:
             * the old way of making NavFrames start out collapsed was to manually add style="display:none"
             * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make
             * the content visible without JavaScript support), the new recommended way is to add the class
             * "collapsed" to the NavFrame itself, just like with collapsible tables.
             */
            for (var NavChild = NavFrame.firstChild; NavChild !== null && !isCollapsed; NavChild = NavChild.nextSibling) {
                if ( $(NavChild).hasClass( 'NavPic' ) || $(NavChild).hasClass( 'NavContent' ) ) {
                    if ( NavChild.style.display == 'none' ) {
                        isCollapsed = true;
                    }
                }
            }
            if (isCollapsed) {
                for (var NavChild = NavFrame.firstChild; NavChild !== null; NavChild = NavChild.nextSibling) {
                    if ( $(NavChild).hasClass( 'NavPic' ) || $(NavChild).hasClass( 'NavContent' ) ) {
                        NavChild.style.display = 'none';
                    }
                }
            }
            var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : 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]).hasClass( "NavHead")) {
                    NavFrame.childNodes[j].appendChild(NavToggle);
                }
            }
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
        }
    }
}

$( createNavigationBarToggleButton );


/** Main Page layout fixes
 *
 *  Description: Adds an additional link to the complete list of languages available.
 *  Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
 */

function mainPageAppendCompleteListLink() {
	mw.loader.using(['mediawiki.util']).then(function () {
	     mw.util.addPortletLink( 'p-lang', 'Project:Каталогъ',
		      'пль́нъ ката́логъ', 'interwiki-completelist', 'пльнъ каталогъ' );
	});
}

if ( mw.config.get('wgIsMainPage') || ( mw.config.get('wgTitle') == 'Википєдїꙗ' && mw.config.get('wgNamespaceNumber') == 100 ) ) {
	$( mainPageAppendCompleteListLink );
}


/** "Technical restrictions" title fix *
 *
 *  Description: For pages that have something like Template:Wrongtitle, replace
 *               the title, but only if it is cut-and-pasteable as a valid
 *               wikilink. For instance, "NZR WB class" can be changed to
 *               "NZR W<sup>B</sup> class", but [[C#]] is not an equivalent wikilink,
 *               so [[C Sharp]] doesn't have its main title changed.
 *
 *               The function looks for a banner like this:
 *               <div id="RealTitleBanner"> ... <span id="RealTitle">title</span> ... </div>
 *               An element with id=DisableRealTitle disables the function.
 *  Maintainers: Remember_the_dot
 */

if (mw.config.get('wgIsArticle')) //prevents the "Editing " prefix from disappearing during preview
{
    $(function() {
        var realTitle = document.getElementById("RealTitle");

        if (realTitle) {
            //normalizes a title or a namespace name (but not both)
            //trims leading and trailing underscores and converts (possibly multiple) spaces and underscores to single underscores
            var normalizeTitle = function(title) {
                return title.replace(/^_+/, "").replace(/_+$/, "").replace(/[\s_]+/g, "_");
            };

            if (realTitle.textContent) //everyone but IE
            {
                realTitleText = realTitle.textContent;
            } else //IE
            {
                realTitleText = realTitle.innerText;
            }

            var normalizedRealTitle;
            var normalizedPageTitle;
            var indexOfColon = realTitleText.indexOf(":");
            var normalizedNamespaceName = normalizeTitle(realTitleText.substring(0, indexOfColon)).toLowerCase();

            //make namespace prefix lowercase and uppercase the first letter of the title
            if (indexOfColon == -1 || mw.config.get('wgCanonicalNamespace').toLowerCase() != normalizedNamespaceName) //no namespace prefix - either no colon or a nonsensical namespace prefix (for example, "Foo" in "Foo: The Story of My Life")
            {
                normalizedRealTitle = normalizeTitle(realTitleText);
                normalizedRealTitle = normalizedRealTitle.charAt(0).toUpperCase() + normalizedRealTitle.substring(1);
                normalizedPageTitle = mw.config.get('wgPageName').charAt(0).toUpperCase() + mw.config.get('wgPageName').substring(1);
            }
            else //using a namespace prefix
            {
                var normalizedRealPageTitle = normalizeTitle(realTitleText.substring(indexOfColon + 1));

                normalizedRealTitle = normalizedNamespaceName;
                if (normalizedNamespaceName !== '') //namespace 0 is a special case where the leading colon should never be shown
                {
                    normalizedRealTitle += ':';
                }
                normalizedRealTitle += normalizedRealPageTitle.charAt(0).toUpperCase() + normalizedRealPageTitle.substring(1);
                normalizedPageTitle = mw.config.get('wgPageName').substring(0, mw.config.get('wgPageName').indexOf(':') + 1).toLowerCase() + mw.config.get('wgPageName').substring(mw.config.get('wgPageName').indexOf(':') + 1);
            }

            if (normalizedRealTitle == normalizedPageTitle) //normalized titles match, so we can do full replacement
            {
                var h1 = document.getElementsByTagName('h1')[0];

                //remove all child nodes, including text
                while (h1.firstChild) {
                    h1.removeChild(h1.firstChild);
                }

                //populate with nodes of real title
                while (realTitle.firstChild) //the children are moved to a new parent element
                {
                    h1.appendChild(realTitle.firstChild);
                }

                //delete the real title banner since the problem is solved
                var realTitleBanner = document.getElementById('RealTitleBanner');
                realTitleBanner.parentNode.removeChild(realTitleBanner);
            }

            //no matter what, correct the page title
            document.title = realTitleText + ' - Wikipedia, the free encyclopedia';
        }
    });
}

/** Disambig editintro
 *
 *  Description: Adds an editintro on disambiguation pages. Original code
 *  located at [[User:RockMFR/disambigeditintro.js]].
 *
 *  Maintainers: [[User:RockMFR]], [[User:Quiddity]]
 */
if (mw.config.get('wgNamespaceNumber') === 0) {
	$(document).ready(function(){
		if (!document.getElementById('disambig')) return;
		var el = document.getElementById('ca-edit');
		if (el) el = el.getElementsByTagName('a')[0];
		if (el) el.href += '&editintro=Template:Disambig_editintro';
	});
}

window.addWikifButton = function(){
 var toolbar = document.getElementById('toolbar');
 var textbox = document.getElementById('wpTextbox1');
 if (!textbox || !toolbar) return;
 var i = document.createElement('img');
 i.src = '//upload.wikimedia.org/wikisource/ru/d/d1/Button-wikifikator.png';
 i.alt = i.title = 'Викификаторъ';
 i.onclick = Wikify;
 i.style.cursor = 'pointer';
 toolbar.appendChild(i);
};
if (mw.config.get('wgAction') == 'edit' || mw.config.get('wgAction') == 'submit'){
 $.getScript( mw.config.get('wgServer') + '/w/index.php?title=MediaWiki:Wikificator.js&action=raw&ctype=text/javascript',
  function(){
   $(addWikifButton);
  }
 );
}

if (mw.config.get('wgAction')=='edit' || mw.config.get('wgAction')=='submit') {
 mw.loader.load( '//de.wiktionary.org/w/index.php?title=MediaWiki:If-search.js&action=raw&ctype=text/javascript' );
}