MediaWiki:Comments.js
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 = 'Opinioni';
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 opinioni relative a questo articolo';
}
function setPageNames() {
article.pagename = mw.config.get('wgPageName').replace(/^Discussione:/, '').replace(/\/Commenti$/, '');
talk.pagename = 'Discussione:' + article.pagename;
comments.pagename = talk.pagename + '/Commenti';
// 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.wikinews.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=Wikinotizie:Pagine_di_commento_agli_articoli/intro&preload=Wikinotizie:Pagine_di_commento_agli_articoli/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();
});
}