Jump to content

User:Lenore/autolink.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Lenore (talk | contribs) at 19:30, 22 June 2009 (diffchange). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// Autolink [[wikilinks]], [external links] and {{templates}} (especially useful for monobook.js 
// and similar pages); adapted from [[Wikipedia:WikiProject User scripts/Scripts/Autolink]]

/* ---------------------------------------------------------------------------------------------- */

addOnloadHook (function () {

    if (location.href.indexOf('&action=edit') != -1
     || location.href.indexOf('&action=submit') != -1
     || location.href.indexOf('Special%3A') != -1
     || location.href.indexOf('Speciale%3A') != -1) {

       return; // Disabled in edit, submit and some critic pages

    }

    if (typeof(autolinkParseLink) == 'undefined') { 

       autolinkParseLink = true; // Parse external links in all cases

    }

/* ------------------------------------------ Skins --------------------------------------------- */

    if (document.getElementById('bodyContent'))
       autolinkBody = document.getElementById('bodyContent');
    // MonoBook-like skins

    else {

    if (document.getElementById('mw_content'))
       autolinkBody = document.getElementById('mw_content');
    // Modern skin

    else autolinkBody = document.getElementById('content');
    // Older skins

    }

/* ---------------------------------------- Variables ------------------------------------------- */

    autolinkCrono = location.href.indexOf('&action=history') != -1 || /*
    */location.href.indexOf('Speciale:UltimeModifiche') != -1 || /*
    */location.href.indexOf('Special:RecentChanges') != -1 || /*
    */location.href.indexOf('Speciale:OsservatiSpeciali') != -1 || /*
    */location.href.indexOf('Special:Watchlist') != -1 || /*
    */location.href.indexOf('Speciale:ModificheCorrelate') != -1 || /*
    */location.href.indexOf('Special:RecentChangesLinked') != -1 || /*
    */location.href.indexOf('Speciale:PaginePiùRecenti') != -1 || /*
    */location.href.indexOf('Special:NewPages') != -1 || /*
    */location.href.indexOf('Speciale:Contributi') != -1 || /*
    */location.href.indexOf('Special:Contributions') != -1;
    // It says if I'm in a history page

    autolinkDiff = location.href.indexOf('&diff=') != -1;
    // It says if I'm in a diff page

    autolinkTargetDiv = new Array();

    if (autolinkDiff) {

       autolinkTargetDiv = autolinkBody.getElementsByClassName('diff');

    } else {

       if (!autolinkCrono)

          autolinkTargetDiv = autolinkBody.getElementsByTagName('pre','tt','code','source');

       else

          autolinkTargetDiv[0] = autolinkBody;

    }

/* ------------------------------------------ Regex --------------------------------------------- */

    if (autolinkCrono) {

       var autolinkColor = ''; // Link color in history pages

       autolinkRegexURLinWcodeWoLabel = /()\[{1}((?:https?|ftps?):\/\/[^\{\}\s]+?)\s*\]{1}()/g;
       // External links in history pages, wikicode without label

       autolinkRegexURLinWcodeWithLabel = /()\[{1}((?:https?|ftps?):\/\/[^\{\}\s]+)()\s+([^\]\n]+)\]{1}()/g;
       // External links in history pages, wikicode with label (the URL will not be visible)

    } else {

       var autolinkColor = 'inherit'; // Link color in other pages

       autolinkRegexURLinWcodeWoLabel = /(\[{1})((?:https?|ftps?):\/\/[^\{\}\s]+?)(\s*\]{1})/g;
       // External links in other pages, wikicode without label

       autolinkRegexURLinWcodeWithLabel = /(\[{1})(((?:https?|ftps?):\/\/[^\{\}\s]+))(\s+[^\]\n]+)(\]{1})/g;
       // External links in other pages, wikicode with label

    }

    autolinkRegexURL = /([^>"\[]|[^\=]")((?:https?|ftps?):\/\/[^\{\}]+?)([\s\]\)'"])/g;
    // External links (no wikicode)

    autolinkRegexWlink = /\[{2}([^\[\]<>\n]*?)(\<span class\="diffchange"\>|)([^\[\]<>\n]*?)(\<\/span\>|)([^\[\]<>\n]*?)(|\|[^\n]*?)\]{2}/g;
    // Wikilinks

    autolinkRegexTemplate = /\{{2}([Ss][Uu][Bb][Ss][Tt]\:|[Mm][Ss][Gg]\:|[Mm][Ss][Gg][Nn][Ww]\:|)([^\{\}\:\&\|<>\n]*?)(\<span class\="diffchange"\>|)([^\{\}\:\&\|<>\n]*?)(\<\/span\>|)([^\{\}\:\&\|<>\n]*?)(\s*(?:(?:\:|\|)|\}{2}))/g;
    // Templates

    autolinkRegexInternalURL = /([^\=])('|")((?:\/?w\/index\.php\?|\/?wiki\/)[^\s\{\}]+?)\2/g;
    // External links (no wikicode, under wgServer)

    autolinkRegexImportScript = /([Ii]mport[Ss]cript(?:\<span class\="br0"\>)?\((?:\<\/span\>\<span class\="st0"\>)?)('|")([^\|\[\]<>\n]+?)(\2(?:\<\/span\>\<span class\="br0"\>)?\)(?:\<\/span\>)?)/g;
    // ImportScript

/* ---------------------------------------------------------------------------------------------- */

    for (i=0; i<autolinkTargetDiv.length; i++) {

    autolinkContent = autolinkTargetDiv[i].innerHTML;

    if (autolinkParseLink == true || !autolinkDiff) { 
    // Qui vanno tutte le sostituzioni fatte anche dal wikEd nelle diff

       autolinkContent = autolinkContent.replace(autolinkRegexURLinWcodeWoLabel,
       '$1<a class="autolink" style="color:' + autolinkColor + '" href="$2">$2</a>$3');
       // Make external links in wikicode without label into links

       autolinkContent = autolinkContent.replace(autolinkRegexURLinWcodeWithLabel,
       '$1<a class="autolink" style="color:' + autolinkColor + '" href="$2">$3$4</a>$5');
       // Make external links in wikicode with label into links

       autolinkContent = autolinkContent.replace(autolinkRegexURL,
       '$1<a class="autolink" style="color:' + autolinkColor + '" href="$2">$2</a>$3'); 
       // Parse inactive external links (no wikicode)

       autolinkContent = autolinkContent.replace(autolinkRegexWlink,
       '[[<a class="autolink" style="color:' + autolinkColor + '" href="/wiki/$1$3$5">$1$2$3$4$5</a>$6]]');
       // Make wikilink code into links

       autolinkContent = autolinkContent.replace(autolinkRegexTemplate,
       '{{<a class="autolink" style="color:' + autolinkColor + '" href="/wiki/Help:$1">$1</a><a class="autolink" style="color:' + autolinkColor + '" href="/wiki/Template:$2$4$6">$2$3$4$5$6</a>$7');
       // Make template code into links

    }

    autolinkContent = autolinkContent.replace(autolinkRegexInternalURL,
    '$1$2<a class="autolink" style="color:' + autolinkColor + '" href="' + wgServer + '$3">$3</a>$2');
    // Parse inactive external links (no wikicode, under wgServer)

    autolinkContent = autolinkContent.replace(autolinkRegexImportScript,
    '$1$2<a class="autolink" style="color:' + autolinkColor + '" href="/wiki/$3">$3</a>$4');
    // Parse ImportScript

    autolinkTargetDiv[i].innerHTML = autolinkContent; // Write it back

    }

});

// [[Category:Wikipedia scripts|Autolink]]