MediaWiki:Comments.js

Da Wikiversità, l'apprendimento libero.

Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.

  • Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
  • Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
  • Internet Explorer / Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5
  • Opera: premi Ctrl-F5.
// MANCA ancora il SUPPORTO per le skin: nostalgia, cologneblue e standard

// opera solo nel namespace Principale e nelle relative Discussioni
// (esclusa 'Pagina principale')
var skin = mw.config.get('skin');
	
if (
    !skin.match(/^(nostalgia|cologneblue|standard)$/)
    &&
    (
        (mw.config.get('wgNamespaceNumber') == 0 && mw.config.get('wgPageName') != 'Pagina_principale')
        ||
        (mw.config.get('wgNamespaceNumber') == 1 && mw.config.get('wgPageName') != 'Discussione:Pagina_principale')
        )
    )
{

    $(document).ready( function() {

        // vedere nelle funzioni impostanti per struttura e descrizione
        //
        // impostate in setPagesElements()
        var pages, article, talk, comments;
        // alcuni elementi di article, talk e comments vengono aggiunti in setPageNames()
        //
        // impostata in createCommentsTab()
        var commentsTabId;
        // impostata in setPageNames()
        var currentPage;

        function createCommentsTab() {

            // il testo della tab dei commenti
            var commentsLabel = 'Domande';
            if (skin.match(/^monobook|modern$/)) {
                commentsLabel = commentsLabel.toLowerCase();
            }

            commentsTabId = 'ca-view-comment';

            // portlet che contiene le tab
            var portletId = ( skin == 'vector' ? 'p-namespaces' : 'p-cactions' );

            // aggiunge la tab dei commenti
            mw.util.addPortletLink(portletId, '', commentsLabel, commentsTabId, '', '', '#ca-edit');

        }

        function setPagesElements() {

            pages = new Object();

            article = new Object();
            talk = new Object();
            comments = new Object();

            pages.article = article;
            pages.talk = talk;
            pages.comments = comments;

            // id del LI della tab
            article.tabId = 'ca-nstab-main';
            talk.tabId = 'ca-talk';
            comments.tabId = commentsTabId;

            for (v in pages) {
                var page = pages[v];
                // l'elemento LI che costituisce la tab
                page.tab = $('#' + page.tabId)[0];
                // l'elemento ANCHOR della tab
                page.anchor = page.tab.getElementsByTagName('a')[0];
            }

            // aggiusta il posizionamento relativo della tab per la skin monobook
            if (skin == 'monobook') {
                talk.tab.style.marginRight = ".3em";
                comments.tab.style.marginRight = "1.6em";
            }

        }

        function setAnchorTitles() {

            article.anchor.title = article.anchor.title.replace(/la voce/, 'l\'articolo');
            talk.anchor.title = talk.anchor.title.replace(/a pagina/, 'o articolo');
            comments.anchor.title = 'Vedi le domande relative a questa risorsa';

        }

        function setPageNames() {

            article.pagename = mw.config.get('wgPageName').replace(/^Discussione:/, '').replace(/\/Domande$/, '');
            talk.pagename = 'Discussione:' + article.pagename;
            comments.pagename = talk.pagename + '/Domande';

            // page.current indica se page è la pagina visualizzata
            // currentPage indica direttamente la pagina correntemente visualizzata
            for (var v in pages) {
                var page = pages[v];
                if (page.pagename == mw.config.get('wgPageName')) {
                    page.current = true;
                    currentPage = page;
                } else {
                    page.current = false;
                }
            }

        }

        // imposta HREF delle anchor e CLASS delle tab
        // viene chiamata una seconda volta nel callback di checkExistingPagesAndFixTabs()
        function setLinksAndClasses() {

            function setLink(page) {

                // /wiki/$1   - http://it.wikiversity.org
                var wgArticlePath = mw.config.get('wgArticlePath');
                wgArticlePath = wgArticlePath.substr(0, wgArticlePath.length - 2);

                // /w/index.php  - http://it.wikinews.org
                var wgScript = mw.config.get('wgScript');

                // imposta il link delle tab
                // tenemdo conto dell'esistenza della pagina, se è stata determinata
                if (page.exists == undefined || page.exists) {
                    page.anchor.href = wgArticlePath + mw.util.wikiUrlencode(page.pagename);
                } else {
                    page.anchor.href = wgScript + '?title=' + mw.util.wikiUrlencode(page.pagename)
                    + '&action=edit'
                    + (page == comments
                        ? '&editintro=Wikiversità:Domande_alle_lezioni/intro&preload=Wikiversità:Domande_alle_lezioni/preload'
                        : '&redlink=1');
                }

            }

            function setClass(page) {

                // imposta class="selected" per la pagina corrente
                if (page.current) {
                    page.tab.setAttribute('class', 'selected');
                } else {
                    page.tab.setAttribute('class', '');
                }

                // aggiunge 'new' per le pagine non esistenti
                if (page.exists == false) {
                    var newClassValue = page.tab.getAttribute('class');
                    newClassValue += (newClassValue == '' ? '' : ' ') + 'new';
                    page.tab.setAttribute('class', newClassValue);
                }

            }

            function fixMoveLink() {

                // quando si sposta la pagina dell'articolo ed esiste la pagina dei commenti,
                // imposta la checkbox per lo spostamento delle sottopagine di discussione
                if ( currentPage == article && comments.exists ) {
                    var pageMoveLink = $( '#ca-move a' );
                    pageMoveLink.attr(
                        'href',
                        pageMoveLink.attr( 'href' ) + '?wpMovesubpages=true'
                        );
                // '?wpMovesubpages=true' non viene duplicato
                // perché, alla prima esecuzione, <comments.exists> == undefined
                }

            }

            // se ci si trova nella pagina dei Commenti, sono da impostare tutti
            // altrimenti la tab dell'Articolo e quella della Discussione sono già a posto
            if (currentPage == comments) {
                for (var v in pages) {
                    setLink(pages[v]);
                    setClass(pages[v]);
                }
            } else {
                setLink(comments);
                setClass(comments);
            }

            fixMoveLink();

        }

        function checkExistingPagesAndFixTabs() {

            function onCheckDone(obj) {

                // variabile pages locale, tanto l'altra qui non serve
                var pages = obj.query.pages;

                if (currentPage == comments) {
                    for (var v in pages) {
                        switch (pages[v].ns) {
                            // funziona perché richieste solo queste due pagine
                            case 0:
                                article.exists = (pages[v].pageid != undefined);
                                break;
                            case 1:
                                talk.exists = (pages[v].pageid != undefined);
                                break;
                        }
                    }
                    comments.exists = true;
                } else {
                    // article.exists = ;  // non necessario - vedi in setLinksAndClasses()
                    // talk.exists = ;     // come sopra
                    for (v in pages) {
                        // funziona perché richiesta solo la pagina dei Commenti
                        comments.exists = (pages[v].pageid != undefined);
                    }
                }

                // fix di link e class in base all'esistenza delle pagine
                setLinksAndClasses();

            }

            // se ci si trova nella pagina dei Commenti, sono da impostare tutti
            // altrimenti la tab dell'Articolo e quella della Discussione sono già a posto
            if (currentPage == comments) {
                var titlesValue = article.pagename + '|' + talk.pagename;
            } else {
                titlesValue = comments.pagename;
            }

            // interrogazione del database per l'esistenza della/e pagina/e
            $.getJSON(
                mw.config.get('wgScriptPath') + '/api.php?',
                {
                    action: 'query',
                    titles: titlesValue,
                    format: 'json'
                },
                onCheckDone
                );

        }

        createCommentsTab();
        setPagesElements();
        setAnchorTitles();
        setPageNames();
        setLinksAndClasses();
        checkExistingPagesAndFixTabs();

    });

}