MediaWiki:Gadget-Base.js

Da Cathopedia, l'enciclopedia cattolica.
Vai alla navigazione Vai alla ricerca

Nota: Dopo aver salvato le preferenze, perché i cambi abbiano effetto, devi bypassare la cache del tuo browser. Mozilla / Firefox / Safari: tieni premuto Shift mentre clicchi Reload, o premi Ctrl-Shift-R (Cmd-Shift-R per Apple Mac); Google Chrome: premi Ctrl o Shift mentre clicchi F5; IE: premi Ctrl mentre clicchi Refresh, o premi Ctrl-F5; Konqueror:: clicca semplicemente il pulsante di Reload, o premi F5; se usi Opera devi cancellare completamente la chache nel menu Tools→Preferences.

/* <source lang="javascript"><nowiki> */

/**
 * Derivato dal monobook.js di [[:en:User:Wayward]], basato su [[:en:User:Alphax/monobook.js]]
 * Necessita dell'[[Wikipedia:Monobook.js/monobook.css|apposito monobook.css]]
 * Testato su Firefox e IE
 * Contiene codice preso dagli script di [[Utente:Salvatore Ingala]], [[Utente:Paulatz]], [[Utente:Helios89]], [[Utente:Timendum]], [[Utente:Senpai]], [[Utente:Kiado]], [[Utente:Pietrodn]]
 * Reso modulare ed elaborato da [[Utente:Jalo]]
 * Forked from [[User:ABCD/monobook.js]] around April 2005
 * Dual licensed under the GFDL and GPL
 */

/** VARIABILI GLOBALI **/


arrayMese = new Array(" ", "gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno",
                      "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre");
arrayMeseValore = new Array(" ", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12");

var curTemplate;

function addLoadEvent(func) 
{
  if (window.addEventListener) 
    window.addEventListener("load", func, false);
  else if (window.attachEvent) 
    window.attachEvent("onload", func);
}

// Utilities del monobook<br/>
// Vedi [[Wikipedia:Monobook.js/Utils.js]]
document.write('<script type="text/javascript" src="'
    + 'https://it.wikipedia.org/w/index.php?title=Wikipedia:Monobook.js/Utils.js'
    + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');

function curled (text){
  return "{{"+text+"}}";
}
function curled1 (text){
  return "{{"+text;
}
function curled2 (text){
  return text+"}}";
}
function bracket (text){
  return "<"+text+">";
}

//Questa variabile contiene il nome del browser utilizzato. Molto utile per evitare problemi
// di incompatibilita' tra la varie funzioni Javascript
// Si autovalorizza. Le sottovariabili da usare sono "BrowserDetect.browser", "BrowserDetect.version"
// e "BrowserDetect.OS"
var BrowserDetect = {
    init: function () {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
            || this.searchVersion(navigator.appVersion)
            || "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function (data) {
        for (var i=0;i<data.length;i++)    {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function (dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
    },
    dataBrowser: [
        {     string: navigator.userAgent,
            subString: "OmniWeb",
            versionSearch: "OmniWeb/",
            identity: "OmniWeb"
        },
        {
            string: navigator.vendor,
            subString: "Apple",
            identity: "Safari"
        },
        {
            prop: window.opera,
            identity: "Opera"
        },
        {
            string: navigator.vendor,
            subString: "iCab",
            identity: "iCab"
        },
        {
            string: navigator.vendor,
            subString: "KDE",
            identity: "Konqueror"
        },
        {
            string: navigator.userAgent,
            subString: "Firefox",
            identity: "Firefox"
        },
        {
            string: navigator.vendor,
            subString: "Camino",
            identity: "Camino"
        },
        {        // for newer Netscapes (6+)
            string: navigator.userAgent,
            subString: "Netscape",
            identity: "Netscape"
        },
        {
            string: navigator.userAgent,
            subString: "MSIE",
            identity: "Explorer",
            versionSearch: "MSIE"
        },
        {
            string: navigator.userAgent,
            subString: "Gecko",
            identity: "Mozilla",
            versionSearch: "rv"
        },
        {         // for older Netscapes (4-)
            string: navigator.userAgent,
            subString: "Mozilla",
            identity: "Netscape",
            versionSearch: "Mozilla"
        }
    ],
    dataOS : [
        {
            string: navigator.platform,
            subString: "Win",
            identity: "Windows"
        },
        {
            string: navigator.platform,
            subString: "Mac",
            identity: "Mac"
        },
        {
            string: navigator.platform,
            subString: "Linux",
            identity: "Linux"
        }
    ]

};
BrowserDetect.init();

/**** Inizializzazione ****/

//Alias di document.getElementById
$ = function(id){
	return document.getElementById(id);
};

/**** Carica le funzioni personalizzate ****/

//Codice adattato da Prototype 1.6.0, http://www.prototypejs.org/
//Distribuito con licenza MIT-style
(function() {
  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
     Matthias Miller, Dean Edwards and John Resig. */

  var timer, fired = false;

  function fireContentLoadedEvent() {
    if (fired) return;
    if (timer) window.clearInterval(timer);
    contentLoaded();
    fired = true;
  }

  if (document.addEventListener) {
    if (navigator.userAgent.indexOf('AppleWebKit/') > -1) {
      timer = window.setInterval(function() {
        if (/loaded|complete/.test(document.readyState))
          fireContentLoadedEvent();
      }, 0);

      window.addEventListener('load', fireContentLoadedEvent, false);

    } else {
      document.addEventListener("DOMContentLoaded",
        fireContentLoadedEvent, false);
    }

  } else {
    document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
    $("__onDOMContentLoaded").onreadystatechange = function() {
      if (this.readyState == "complete") {
        this.onreadystatechange = null;
        fireContentLoadedEvent();
      }
    };
  }
})();

/** AutoComplete: Based on http://www.webreference.com/programming/javascript/gr/column5/ **/
function AutoComplete(db, oText, /* optional */ nMaxSize){
	this.oText = oText;
	this.nMaxSize = nMaxSize || 20;

	var oDiv = document.createElement('div');
	oDiv.style.border = '2px solid green';
	oDiv.style.position = 'absolute';
	oDiv.style.visibility = 'hidden';
	oDiv.style.backgroundColor = 'white';
	this.oDiv = oDiv;
	oText.parentNode.insertBefore(oDiv, oText.nextSibling);

	this.db = db.sort();
			
	oText.AutoComplete = this;
	oText.onkeyup = AutoComplete.prototype.onTextChange;
	oText.onblur = AutoComplete.prototype.onTextBlur;
};

AutoComplete.prototype.onTextBlur = function(){ this.AutoComplete.onblur(); };
AutoComplete.prototype.onblur = function(){ this.oDiv.style.visibility = "hidden"; };
AutoComplete.prototype.onTextChange = function(){ this.AutoComplete.onchange(); };
AutoComplete.prototype.onDivMouseDown = function(){ this.AutoComplete.oText.value = this.innerHTML; };
AutoComplete.prototype.onDivMouseOver = function(){ this.style.backgroundColor = 'lime'; };
AutoComplete.prototype.onDivMouseOut = function(){ this.style.backgroundColor = 'white'; };
AutoComplete.prototype.onchange = function(){
	var txt = this.oText.value;
	
	var aStr = [];
	for(var i = 0; i < this.db.length; i++)
		if(this.db[i].toLowerCase().indexOf(txt.toLowerCase()) == 0)
			aStr.push(this.db[i]);
	
	var nCount = aStr.length;
	if ((this.nMaxSize == -1) || ((nCount < this.nMaxSize) && (nCount > 0))){
		while (this.oDiv.hasChildNodes())
			this.oDiv.removeChild(this.oDiv.firstChild);
					
		var i, n = aStr.length;
		for (i = 0; i < n; i++){
			var d = document.createElement('div');
			this.oDiv.appendChild(d);
			d.appendChild(document.createTextNode(aStr[i]));
			d.onmousedown = AutoComplete.prototype.onDivMouseDown;
			d.onmouseover = AutoComplete.prototype.onDivMouseOver;
			d.onmouseout = AutoComplete.prototype.onDivMouseOut;
			d.AutoComplete = this;			
		}
		this.oDiv.style.left = this.oText.offsetLeft+'px'; //NON-STANDARD! offsetLeft
		this.oDiv.style.top = (this.oText.offsetTop+this.oText.clientHeight)+'px'; //NON-STANDARD! offsetTop e clientHeight
		this.oDiv.style.visibility = "visible";
	}
	else {
		this.oDiv.innerHTML = "";
		this.oDiv.style.visibility = "hidden";
	}
};

/** AutoComplete END **/

// Recupera il valore di un cookie
function GetCookie(name)
{
  var cookie = ' ' + document.cookie;
  var search = ' ' + name + '=';
  var setStr = '';
  var offset = 0;
  var end = 0;
  offset = cookie.indexOf(search);
  if (offset != -1)
  {
    offset += search.length;
    end = cookie.indexOf(';', offset)
    if (end == -1)
      end = cookie.length;
    setStr = cookie.substring(offset, end);
    setStr = setStr.replace(/\\+/g, ' ');
    setStr = decodeURIComponent(setStr);
  }
  return(setStr);
}

// Setta il valore di un cookie
function SetCookie(name, value, expires, path, domain, secure)
{
  var cookie = name + '=' + encodeURIComponent(value);
  if (expires != null)
    cookie += '; expires=' + expires
  if (path != null)
    cookie += '; path=' + path;
  if (domain != null)
    cookie += '; domain=' + domain;
  if (secure != null)
    cookie += '; secure';
  document.cookie = cookie;
}

/** WikiHistory **/
function getHistoryFromCookie(){
    var c = GetCookie("wikiHistory");
    var hist = c ? c.split('#') : [];
    for(var i = 0; i < hist.length; i++)
        hist[i] = decodeURIComponent(hist[i]);
    return hist;
}

function saveHistoryToCookie(){
    if(wgNamespaceNumber < 0) return;
    var c = GetCookie("wikiHistory"), i;
    var h = c ? c.split('#') : [];
    var current = encodeURIComponent(wgPageName.replace(/_/g, ' ')), found = -1;
    for(i = 0; i < h.length; i++)
        if(h[i] == current){
            found = i; break;
        }
    if(found == -1)
        h.push(current);
    else
        h[found] = null;
    var newh = [];
    for(i = Math.max(0, h.length - 100); i < h.length; i++)
        if(h[i] != null)
            newh.push(h[i]);
    var expire = new Date(); // scadenza del cookie
    expire.setTime(expire.getTime() + (60 * 60 * 1000)); //scadenza di un'ora
    SetCookie('wikiHistory', newh.join('#'), expire.toGMTString(), '/');
}

/** WikiHistory END **/

function contentLoaded(){

    //ta['pt-logout'] = ['x', 'Logout (esci)']; //cambia l'accesskey per "logout"
    //akeytt();
}


/**** Funzioni per le pagine di discussione ****/
// Aggiunge il messaggio "msg" alla pagina editata, scrive "summ" nell'oggetto,
// segna o meno "segui questa pagina" a seconda dell'impostazione precedente
// e spunta "modifica minore"
function edit_summary_watch(msg, summ, watch, minor)
{
  WEUpdateTextarea();

  var f = document.editform, t = f.wpTextbox1;
  if (t.value.length > 0)
    t.value += '\n';
  t.value += msg;
  f.wpSummary.value = summ;
  f.wpWatchthis.checked = watch;
  f.wpMinoredit.checked = minor;

  WEUpdateFrame();
}

// Come il precedente, ma aggiunge "msg" all'inizio della pagina
function edit_summary_watch2(msg, summ, watch, minor)
{
  WEUpdateTextarea();

  var f = document.editform, t = f.wpTextbox1;
  t.value = msg + '\n' + t.value;
  f.wpSummary.value = summ;
  f.wpWatchthis.checked = watch;
  f.wpMinoredit.checked = minor;

  WEUpdateFrame();
}

//Aggiunge qualcosa ad un portlet.
//PARAMS:
//*  id: id del portlet.
//* obj: L'oggetto da aggiungere
function addToPortlet(id, obj)
{
    var f = document.getElementById(id);

    f = f.getElementsByTagName("div")[0];
    f.appendChild(obj);
}

/* INIZIO Segna come verificata */

mphkLinkTitle = "Segna come verificata la revisione corrente";
mphkLinkTitle2 = "Segna come verificata l'ultima revisione analizzata";
mphkLinkText = "Segna come verificata";
mphkLinkText2 = "Segna come verificata";
mphkShortLinkText = "ver"

function setMarkPatrolledHotKey(){
  //ta['p-verified'] = ['v', 'Segna come verificato'];
  //akeytt();
}

function mphkAddMarkpatrolledLink(){
   //100 alla volta, comunque non più 2000 links
   for(var i = mphkCounter; (i < mphkCounter + 100) && (i < mphkLinks.length) && i < 2000; i++){
     var rcidpos = mphkLinks[i].href.indexOf('&rcid=');
     if ((rcidpos == -1) || (mphkLinks[i].href.indexOf('&action=') != -1)) continue;
     var rcid = mphkLinks[i].href.substring(rcidpos);
     var mp = document.createElement('a');
     mp.href = "/w/index.php?title=" + encodeURIComponent(mphkLinks[i].title) + "&action=markpatrolled"+rcid;
     mp.title = mphkLinkTitle;
     mp.appendChild(document.createTextNode(mphkShortLinkText));
     mphkLinks[i].parentNode.insertBefore(mp, mphkLinks[i+mphkOffset].nextSibling);
     mphkLinks[i].parentNode.insertBefore(document.createTextNode("; "), mp);
   }

   mphkCounter = i;

   if (mphkCounter < mphkLinks.length && mphkCounter < 2000)
     setTimeout("mphkAddMarkpatrolledLink()", 100);
   else{
     mphkLinks = null;
     mphkCount = null;
   }
}


/* INIZIO Dynamic pages */

function mbAddTrustedPages(/* params */){
  if (typeof mbTrustedPages == 'undefined') mbTrustedPages = {};
  for(var i = 0; i < arguments.length; i++)
    mbTrustedPages[arguments[i]] = true;
}

addOnloadHook(function (){
  if(!wgIsArticle) return; //non in modifica
  if(typeof mbTrustedPages == 'undefined') return;
  if (mbTrustedPages[wgPageName] == true){
    var pre = $('javascriptCode');
    if (!pre) return;
    var code = pre.innerHTML.replace(/&amp;/g, "&").replace(/&gt;/g, ">").replace(/&lt;/g, "<");
    //eval(code);
    var script = document.createElement('script');
    script.appendChild(document.createTextNode(code));
    document.body.appendChild(script);
  }
});

/* FINE Dynamic pages */

function HelpHotkeys ()
{
  var text = "";
  var counter = 0;
  
  for (codice in pulsantiHotkey)
    if (pulsantiHotkey[codice] != '')
      text += pulsantiDescr[codice] + " = Alt+" + pulsantiHotkey[codice] + '\n';
  
  alert (text);
}

/* Aggiorna la lista degli hotkeys */
addOnloadHook(function(){
  if (typeof(tastiHotkeys) == "undefined")
    return;
  else
    for (tasto in tastiHotkeys)
    {
      // vietato usare lo stesso codice per 2 pulsanti diversi
      for (tasto2 in pulsantiHotkey)
        if (pulsantiHotkey[tasto2] == tastiHotkeys[tasto])
          pulsantiHotkey[tasto2] = '';

      // assegna il valore scelto dall'utente
      pulsantiHotkey[tasto] = tastiHotkeys[tasto];
    }
})

/* Catch di hotkeys + speedy google search*/
function catchHotkeys (){
  if (BrowserDetect.browser=="Firefox" || BrowserDetect.browser=="Mozilla" || BrowserDetect.browser=="Netscape")
  {
    var listenerKeyPress = function(e){
      e = (e) ? e : ((window.event) ? window.event : null);
      if(e && e.altKey && !e.shiftKey && !e.ctrlKey){
        var toCheckNum = (e.which) ? e.which : e.keyCode;
        var toCheck = String.fromCharCode(toCheckNum);
      
        for (x in pulsantiHotkey)
        {
          if (pulsantiHotkey[x].toUpperCase() == toCheck.toUpperCase())
            eval(pulsantiComando[x]);
        }
      
        //Fermo il propagarsi degli eventi
        e.stopPropagation();
        //Cancello l'azione di default
        e.preventDefault();
      
        return false;
      }
    }

    wpTextbox1 = $("wpTextbox1");
    if (wpTextbox1 != null)
    {
      if (wpTextbox1.addEventListener)
        wpTextbox1.addEventListener('keypress', listenerKeyPress, true); //Non-IE
      else
        wpTextbox1.onkeypress = listenerKeyPress; 
    }
  }
  var listenerMouseUp = function(e){
    e = (e) ? e : ((window.event) ? window.event : null);
    if(e && e.ctrlKey){
      if(navigator.appName=='Microsoft Internet Explorer' && navigator.userAgent.indexOf("Opera")==-1) //IE
        var t = document.selection.createRange().text;
      else //Non-IE
        var t = document.getSelection ? document.getSelection().toString() : window.getSelection().toString();
      t = t.replace(/^\s+/, '').replace(/\s+$/, ''); //trim
      var q = t.indexOf('"') == -1 ? '"' : '';
      if(t)
        window.open("https://www.google.com/search?q=" + q + encodeURIComponent(t) + q);
    }
  }

  if (window.addEventListener)
    window.addEventListener('mouseup', listenerMouseUp, false); //Non-IE
  else
    document.onmouseup = listenerMouseUp; //IE
}
addOnloadHook(catchHotkeys);

/**** Fine ****/
// </nowiki></pre>


// </nowiki></source>