Questa pagina contiene una lista di script utili per l'utilizzo del canale IRC di it.wiki adattati per it.wiki. La lista è incompleta ma potrebbe essere aggiornata col tempo. Per un maggior numero di script, consultate la pagina di en.wiki.

Per utilizzare questo script, copia il codice qui sotto in un file chiamato wikilinks.js e salva il tuo nella cartella del tuo disco fisso che ritieni più opportuna.

In seguito apri ChatZilla, clicca su ChatZilla nella barra in alto, e in seguito su Preferences; dalla finestra di dialogo che ti si aprirà, clicca sull'etichetta Startup e infine sul bottone "Add..." nella sezione Auto-load scripts, seleziona il file wikilinks.js creato in precedenza e clicca su "Ok", riavviando il programma.

Questo plugin è stato creato per en.wiki e rilasciato nel publico dominio da IceKarma, e adattato per it.wiki da Gatto Nero. Aggiornato il 5/6/2007 da kiado. Per futuri aggiornamenti controllare en:Wikipedia:Scripts/Wikilinks.

//***********************************************
// IceKarma's WikiLinks script for ChatZilla
// Version 1.2
//   1.2 by James Ross: fix the normal links by shunting the
//       word-hyphenator as well.
// Version 2.0
//   2.0 By Glen Mailer:
//        - Converted to new plugin API
//        - Ripped out a whole load of unused stuff
//        - Also Made to fit chatzilla coding pedantics
//   2.1 By Alphax:
//        - Added basic template linking functionality
//   2.2 By Alphax:
//        - subst: and pipes now handled correctly in templates
//   2.3 by Pathoschild:
//        - reverted to 2.2 (2.3 broke all links with non-interlanguage prefixes)
//        - fixed mailto: wikilink glitch (based on 2.3 code by Stigmj)
//   2.4 By Stigmj:
//        - added support for handling mirc-colors.
//   2.5 By GeorgeMoney:
//        - fixed for change in API
//   2.6 By Pathoschild:
//        - fix broken interwiki prefix ([[w:foo]]);
//        - add support for namespace template syntax;
//        - fix modifiers msg, msgnw, raw; correct int (points to "mediawiki:foo", not "template:int:foo");
//        - don't link parameters: {{[[template:foo|foo]]|bar}}.
//   2.7 By Pathoschild:
//        - added support for external link syntax.
// This file is hereby placed by the authors into the public domain.


plugin.id = "WikiLinks";

plugin.prefary = [
    ["class", "wiki-link", ""],
];

//
// Plugin management
//

plugin.init = 
function init(glob) {
    plugin.major = 2;
    plugin.minor = 7;
    plugin.version = plugin.major + "." + plugin.minor;
    plugin.description = "Munges wikiML links to be clickable in the output window";
    plugin.prefary = plugin.prefary.concat(plugin.prefary);
}

plugin.disable = 
function disable()
{
    client.munger.delRule("wiki-link");
    client.munger.delRule("wiki-template-link");
        client.munger.delRule("wiki-external-link");
    client.commandManager.removeCommands(plugin.commands);

    display( plugin.id + " v" + plugin.version + " disabled.");
    
    return true;
}

plugin.enable = 
function enable()
{
    client.munger.addRule("wiki-link", /(\[(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\[(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*[^\]]+(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\](?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\])/, insertWikiLink, 10, 10);
    client.munger.addRule("wiki-template-link", /(\{(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\{(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*[^\}]+(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\}(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\})/, insertWikiTemplateLink, 10, 10);
    client.munger.addRule("wiki-external-link", /(\[http:\/\/[^\s]+ [^\]]+\])/, insertWikiExtLink, 10, 10);
        
        
    var cmdary = [
        [ "wiki-links-class", cmdClass, CMD_CONSOLE, "[<className>]" ],
    ];

    plugin.commands = client.commandManager.defineCommands(cmdary);

    display( plugin.id + " v" + plugin.version + " enabled.");
    
    return true;

}

//
// Mungers
//

function insertWikiLink(matchText,containerTag, data, mungerEntry) {
    var wikiLink = matchText;
    var linkTitle;

    wikiLink  = matchText.replace(/^\[(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\[(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*/, "");
    wikiLink  = wikiLink.replace(/(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\](?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\]$/, "");
        linkTitle = wikiLink;
        
        // fix bad links (but leave linkTitle)
        wikiLink = wikiLink.replace(/^w:/, ""); 
        
    if (linkTitle.match(/\|/)) {
        var ary = linkTitle.match(/^(.*?)\|(.*)$/);
        wikiLink = ary[1];
        linkTitle = ary[2];
    }
    wikiLink = escape(wikiLink.replace(/ /g, "_"));

    var anchor = document.createElementNS( "http://www.w3.org/1999/xhtml",
                                           "html:a");
    anchor.setAttribute("href", "http://it.wikipedia.org/wiki/" + wikiLink);
    anchor.setAttribute("class", "chatzilla-link "+plugin.prefs["class"]);
    mungerEntry.enabled = false;
    data.inLink = true;
    client.munger.munge(linkTitle, anchor, data);
    mungerEntry.enabled = true;
    delete data.inLink;
    
    //insertHyphenatedWord(linkTitle, anchor, data);
    containerTag.appendChild(document.createTextNode("[["));
    containerTag.appendChild(anchor);
    containerTag.appendChild(document.createTextNode("]]"));
}

function insertWikiTemplateLink(matchText,containerTag, data, mungerEntry) {
    var wikiLink = matchText;
    var linkTitle;

    wikiLink  = matchText.replace(/^\{(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\{(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*/, "");
    wikiLink  = wikiLink.replace(/(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\}(?:[\x1f\x02\x0f\x03\x16]\d{1,2})*\}$/, "");
        linkTitle = wikiLink;

        // fix  parameters
        if(linkTitle.match(/^[^\|]+\|/)) {
                linkParam = linkTitle.replace(/^[^\|]+\|(.*)$/, "|$1");
                linkTitle = linkTitle.replace(/^([^\|]+)\|.*$/, "$1");
                wikiLink  = linkTitle;
        }
        else {
                linkParam = false;
        }
        
        // fix bad links (but leave linkTitle)
                wikiLink  = wikiLink.replace(/^(?:template|msgnw|raw|subst):/, ""); // modifiers

        // set namespace by syntax
        if(wikiLink.match(/^:[a-z\s]*:?/i)) {
                wikiLink = wikiLink.replace(/^:([a-z\s]+):/i, "$1:"); // most ns
                wikiLink = wikiLink.replace(/^:/, ""); // main
        }
        else if(wikiLink.match(/^int:/i)) {
                wikiLink = wikiLink.replace(/^int:/i, "MediaWiki:"); // fix modifier
        }
        else {
                wikiLink = wikiLink.replace(/^/, "Template:");
        }
        
        // construct link
    wikiLink = escape(wikiLink.replace(/ /g, "_"));
    var anchor = document.createElementNS( "http://www.w3.org/1999/xhtml",
                                           "html:a");
    anchor.setAttribute("href", "http://it.wikipedia.org/wiki/" + wikiLink);
    anchor.setAttribute("class", "chatzilla-link "+plugin.prefs["class"]);
    mungerEntry.enabled = false;
    data.inLink = true;
    client.munger.munge(linkTitle, anchor, data);
    mungerEntry.enabled = true;
    delete data.inLink;

    //insertHyphenatedWord(linkTitle, anchor, data);
    containerTag.appendChild(document.createTextNode("{{"));
    containerTag.appendChild(anchor);
        if(linkParam) {
                containerTag.appendChild(document.createTextNode(linkParam));
        }
    containerTag.appendChild(document.createTextNode("}}"));
}

function insertWikiExtLink(matchText,containerTag, data, mungerEntry) {
    var wikiExtLink = matchText;
    var linkTitle = matchText;

        // separate link and text
        wikiExtLink = wikiExtLink.replace(/^\[(http:\/\/[^\s]+)\s+.*$/, "$1");
        linkTitle   = linkTitle.replace(/^\[http:\/\/[^\s]+ ([^\]]+)\]$/, "$1");
        
        // create link
        var anchor = document.createElementNS( "http://www.w3.org/1999/xhtml",
                                           "html:a");
    anchor.setAttribute("href", wikiExtLink);
    anchor.setAttribute("class", "chatzilla-link "+plugin.prefs["class"]);
        anchor.setAttribute("style", "text-decoration:underline;");
    mungerEntry.enabled = false;
    data.inLink = true;
    client.munger.munge(linkTitle, anchor, data);
    mungerEntry.enabled = true;
    delete data.inLink;
    
    // show link syntax
    containerTag.appendChild(anchor);
        
        // add external link icon
        var img = document.createElementNS( "http://www.w3.org/1999/xhtml",
                                           "html:img");
        img.setAttribute("src", 'http://upload.wikimedia.org/wikipedia/commons/4/44/External.png');
        containerTag.appendChild(img);
}

//
// Commands
//

function cmdClass(e) {
    if ( null != e.linkclass )
        plugin.prefs["class"] = e.linkclass;
    display( "Current value: " + plugin.prefs["class"] );
}