Jump to content
Wikipedia The Free Encyclopedia

Wikipedia:Scripts/Wikilinks

From Wikipedia, the free encyclopedia

Makes wikilinks clickable in the output window; contributed to the public domain by IceKarma on April 22, 2005.

Installation:

  1. Copy the code below into a file called wikilinks.js somewhere convenient (download raw source).
  2. Add it to Auto-load scripts on the Startup tab under Global Settings.
  3. If using Chatzilla on an XP box, place the file in %APPDATA%\Mozilla\Firefox\Profiles\????????.default\chatzilla\scripts. Then navigate to Chatzilla --> Preferences --> Global Settings --> Startup. Under Auto-load scripts, press the Add button and enter scripts/wikilinks.js. Press OK twice and restart Chatzilla. According to http://docs.dal.net/docs/chatzillaen.html, you can type /pref profilePath at a chat window to reveal your profile location.
  1. To install the script while ChatZilla is running, use the "/load file://" command in one of the views.

//

//***********************************************
// 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=
functioninit(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=
functiondisable()
{
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.");

returntrue;
}
plugin.enable=
functionenable()
{
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);


varcmdary=[
["wiki-links-class",cmdClass,CMD_CONSOLE,"[<className>]"],
];
plugin.commands=client.commandManager.defineCommands(cmdary);
display(plugin.id+" v"+plugin.version+" enabled.");

returntrue;
}
//
// Mungers
//
functioninsertWikiLink(matchText,containerTag,data,mungerEntry){
varwikiLink=matchText;
varlinkTitle;
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(/\|/)){
varary=linkTitle.match(/^(.*?)\|(.*)$/);
wikiLink=ary[1];
linkTitle=ary[2];
}
wikiLink=escape(wikiLink.replace(/ /g,"_"));
varanchor=document.createElementNS("http://www.w3.org/1999/xhtml",
"html:a");
anchor.setAttribute("href","http://en.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;
deletedata.inLink;

//insertHyphenatedWord(linkTitle, anchor, data);
containerTag.appendChild(document.createTextNode("[["));
containerTag.appendChild(anchor);
containerTag.appendChild(document.createTextNode("]]"));
}
functioninsertWikiTemplateLink(matchText,containerTag,data,mungerEntry){
varwikiLink=matchText;
varlinkTitle;
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
}
elseif(wikiLink.match(/^int:/i)){
wikiLink=wikiLink.replace(/^int:/i,"MediaWiki:");// fix modifier
}
else{
wikiLink=wikiLink.replace(/^/,"Template:");
}

// construct link
wikiLink=escape(wikiLink.replace(/ /g,"_"));
varanchor=document.createElementNS("http://www.w3.org/1999/xhtml",
"html:a");
anchor.setAttribute("href","http://en.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;
deletedata.inLink;
//insertHyphenatedWord(linkTitle, anchor, data);
containerTag.appendChild(document.createTextNode("{{"));
containerTag.appendChild(anchor);
if(linkParam){
containerTag.appendChild(document.createTextNode(linkParam));
}
containerTag.appendChild(document.createTextNode("}}"));
}
functioninsertWikiExtLink(matchText,containerTag,data,mungerEntry){
varwikiExtLink=matchText;
varlinkTitle=matchText;
// separate link and text
wikiExtLink=wikiExtLink.replace(/^\[(http:\/\/[^\s]+)\s+.*$/,"1ドル");
linkTitle=linkTitle.replace(/^\[http:\/\/[^\s]+ ([^\]]+)\]$/,"1ドル");

// create link
varanchor=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;
deletedata.inLink;

// show link syntax
containerTag.appendChild(anchor);

// add external link icon
varimg=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
//
functioncmdClass(e){
if(null!=e.linkclass)
plugin.prefs["class"]=e.linkclass;
display("Current value: "+plugin.prefs["class"]);
}
// End of file

Special options:

  • You can optionally (may not work) configure the formatting applied to Wikilinks using CSS. Use the command below, then define the relevant class in your motif skin. The default class is "wiki-link".
    /wiki-links-class [{class}]

AltStyle によって変換されたページ (->オリジナル) /