User:YumeChaser/monobook.js
Appearance
(Redirected from User:MS/monobook.js)
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
The accompanying .css page for this skin can be added at User:YumeChaser/monobook.css. |
//<nowiki>
/* delinking dates per updated MoS Numb */
importScript('User:Lightmouse/monobook.js/script.js')
// --------------------------------------- --------------------------------------- //
// ----------------------------------- Credits ------------------------------------ //
//
// This script was created by modifying the following scripts:
// [[User:Lightmouse/monobook.js/script.js]]
// [[Wikipedia:WikiProject User scripts/Scripts/Formatter]]
//
// This script is intended to be complimentary to these scripts with very little
// to no duplication of function.
// ---------------------------------- Disclaimer ---------------------------------- //
//
// Use at your own risk and make sure you check the edit changes before you save
//
// Let me know [[User_Talk:Plastikspork]] if you find bugs!
// ----------------------------- Installing the Script ---------------------------- //
//
// (1) Open/Create your USERNAME/monobook.js page, where USERNAME is your username.
// A quick way to get there is to go to your user page, then append
// '/monobook.js' to the end of the URL.
//
// (2) Put the following command on your monobook.js page:
// importScript('User:Plastikspork/monobook.js/script.js');
//
// (3) Save the page and reload it by following the instructions at the top of your
// monobook.js page. For example, Ctrl+Shift+R in Firefox.
// ------------------------------- Using the Script ------------------------------- //
//
// (1) Open an article which you would like to edit, and you should see a bunch of
// 'Spork' buttons in your 'toolbox' on the left side of your browser.
//
// (2) Click on one of the Spork buttons and the script will run, performing edits
// by pattern matches. When it is finished, it will show you the changes and
// add some comments to the edit summary. It is up to you to accept these
// changes as is by clicking 'Save page', modify the changes by further editing
// the edit form, or reject by leaving the page.
//
// Note: The script will run very slowly on very large pages, but it does always
// eventually complete in my experience.
// ----------------------------- Current Functionality ---------------------------- //
//
// [Sprk: WS] Removes excessive non-essential whitespace, non-breaking space, and
// some minor wikification.
//
// [Sprk: Wki/Lnk Rpair] Wikification, fixes of simple repeated references,
// conversion of external wikilinks to wikilinks, and simplification of
// piped wikilinks.
//
// [Sprk: [] to Refs] Replaces [URL] with <ref>URL</ref>
//
// [Sprk: Cite Templte] Adds citation templates to some common
// untemplated references.
//
// [Sprk: Ref Repeat] Fixes obvious repeated references and marks
// non-obvious ones for human inspection with REPEAT tags.
// Once the script runs, you can inspect the tagged refs to
// see if they are actual repeats, or if they are false
// positives.
//
// [Sprk: Color] Simplifies some hex color codes to named colors.
//
// [Sprk: Table to Wiki] An attempt to turn HTML tables into
// wikitables. Requires some hand tuning after it runs.
//
// [Sprk: cite date to mdy] Changes date = YYYY-MM-DD to date = Month DD, YYYY
//
// [Sprk: cite date to dmy] Changes date = YYYY-MM-DD to date = DD Month YYYY
//
// [UnSprk: cite date] Reverses prior two commands
//
// ----------------------- Turning off and Renaming Buttons ----------------------- //
//
// The buttons in the script can be selectively disabled and renamed, to rename a
// button, say 'Sprk: WS' to 'Spork: Whitespace', paste the following into your
// monobook.js:
//
// if( typeof( SporkConfig ) == 'undefined' ) SporkConfig = {};
// SporkConfig.ws = "Spork: Whitespace";
//
// To rename more buttons, just add an additional line for each button. The initial
// creation of the empty structure only needs to be performed once.
//
// To remove a button, give it a null string for its name. For example,
//
// if( typeof( SporkConfig ) == 'undefined' ) SporkConfig = {};
// SporkConfig.ws = "";
//
// will turn off the 'Sprk: WS' button.
//
// The variable names for each button can be found in the code directly below.
// --------------------------------------- --------------------------------------- //
// Set Default Button Names
if( typeof( SporkConfig ) == 'undefined' ) SporkConfig = {};
if( typeof( SporkConfig.wlr ) == 'undefined' ) SporkConfig.wlr = "Sprk: Wki/LinkRepair";
if( typeof( SporkConfig.b2r ) == 'undefined' ) SporkConfig.b2r = "Sprk: [] to Refs";
if( typeof( SporkConfig.ct ) == 'undefined' ) SporkConfig.ct = "Sprk: CiteTemplate";
if( typeof( SporkConfig.rr ) == 'undefined' ) SporkConfig.rr = "Sprk: Ref Repeat";
if( typeof( SporkConfig.ws ) == 'undefined' ) SporkConfig.ws = "Sprk: WS";
if( typeof( SporkConfig.c ) == 'undefined' ) SporkConfig.c = "Sprk: Color";
if( typeof( SporkConfig.t2w ) == 'undefined' ) SporkConfig.t2w = "Sprk: Table to Wiki";
if( typeof( SporkConfig.cmdy ) == 'undefined' ) SporkConfig.cmdy = "Sprk: cite date mdy";
if( typeof( SporkConfig.cdmy ) == 'undefined' ) SporkConfig.cdmy = "Sprk: cite date dmy";
if( typeof( SporkConfig.unc ) == 'undefined' ) SporkConfig.unc = "UnSprk: cite date";
if( typeof( SporkConfig.noa ) == 'undefined' ) SporkConfig.noa = ""; // testing 1
if( typeof( SporkConfig.tst ) == 'undefined' ) SporkConfig.tst = ""; // testing 2
if( typeof( SporkConfig.fullurl ) == 'undefined' ) SporkConfig.fullurl = ""; // testing 3
// --------------------------------------- --------------------------------------- //
// Import Spork-Tools scripts
importScript('User:Plastikspork/tools.js');
importScript('User:Plastikspork/whitespace.js');
importScript('User:Plastikspork/citetools.js');
importScript('User:Plastikspork/reftools.js');
importScript('User:Plastikspork/datetools.js');
// --------------------------------------- --------------------------------------- //
// Spork: Wiki/LinkRepair
function spork_wiki_link_repair(clk){
var txt = document.editform.wpTextbox1;
txt.value = spork_headings2wiki(txt.value); // See User:Plastikspork/tools.js
txt.value = spork_section_headings(txt.value);
txt.value = spork_external_links(txt.value);
txt.value = spork_extern_wikilinks_to_wikilinks(txt.value); // See User:Plastikspork/tools.js
txt.value = spork_ref_clean(txt.value);
txt.value = spork_dehexchar_wikilinks(txt.value); // See User:Plastikspork/tools.js
txt.value = spork_special_char(txt.value);
txt.value = spork_simplify_wikilinks(txt.value); // See User:Plastikspork/tools.js
txt.value = spork_no_selflink(txt.value); // See User:Plastikspork/tools.js
txt.value = spork_convert(txt.value);
txt.value = spork_lists(txt.value);
spork_edit_summary("wikification");
spork_edit_summary("link repair");
if(clk) document.editform.wpDiff.click();
}
// Spork: [] to ref
function spork_bracket_to_ref(clk){
var txt = document.editform.wpTextbox1;
txt.value = spork_bracket_url_to_ref(txt.value);
spork_edit_summary("wikification");
if(clk) document.editform.wpDiff.click();
}
// Spork: CiteTemplate
function spork_citation_template(clk){
var txt = document.editform.wpTextbox1;
txt.value = txt.value.replace(/([\[]+http[^\[\]<>]*)(<!-- Bot generated title -->)([\]]+)/gi, '$1$3$2');
txt.value = txt.value.replace(/(<ref[^<>\/]*>[^<>]*)(<!-- Bot generated title -->)([^<>]*<\/ref>)/gi, '$1$3$2');
txt.value = spork_cite_web(txt.value);
txt.value = spork_cite_article(txt.value);
txt.value = txt.value.replace(/(<ref[^<>\/]*>[^<>]*)(<\/ref>)(<!-- Bot generated title -->)/gi, '$1$3$2');
txt.value = txt.value.replace(/(\{\{cite[^}]*\|[ ]*title[ ]*=[^\|}]*)([^\|}]*?\}\}[^<>]*)(<!-- Bot generated title -->)/gi, '$1$3$2');
txt.value = txt.value.replace(/([\[]+http[^\[\]<>]*)([\]]+)(<!-- Bot generated title -->)/gi, '$1$3$2');
spork_edit_summary("cite template");
if(clk) document.editform.wpDiff.click();
}
// Spork: Ref Repeat
function spork_ref_repeat(clk){
var txt = document.editform.wpTextbox1;
txt.value = spork_ref_clean(txt.value);
// Mark duplicate ref names with NAME REPEAT1 REPEAT2 (change to name by hand and re-run script)
txt.value=txt.value.replace(/<ref name[ ]*=[ ]*(["'])([^'"<>]*)\1[ ]*>((?:.|[\r\n])*)<ref name[ ]*=[ ]*\1\2\1[ ]*>/gim, '<ref $1$2$1><!-- NAME REPEAT1 -->$3<ref $1$2$1><!-- NAME REPEAT2 -->');
// Mark repeated references with REPEAT (change to name by hand and re-run script)
txt.value=txt.value.replace(/<ref>([^<>]*)<\/ref>((?:.|[\r\n])*)<ref>\1<\/ref>/gim, '<ref><!--REPEAT-->$1</ref>$2<ref>$1</ref>');
// Mark possible repeated references with REPEAT1 REPEAT2 (change to name by hand and re-run script)
txt.value=txt.value.replace(/(<ref[^<>]*>)(|[^<>]*[^<>\/])(https?:[^ <>\[\]\|]*)([ \|}\]][^<>]*)<\/ref>((?:.|[\r\n])*)(<ref[^<>]*>)(|[^<>]*[^<>\/])\3([ \|}\]][^<>]*)<\/ref>/gim, '$1<!--?REPEAT1?-->$2$3$4</ref>$5$6<!--?REPEAT2?-->$7$3$8</ref>');
spork_edit_summary("ref simplification");
if(clk) document.editform.wpDiff.click();
}
// Spork: WS
function spork_ws_compress(clk){
var txt = document.editform.wpTextbox1;
txt.value = spork_whitespace(txt.value); //See User:Plastikspork/whitespace.js
txt.value = spork_ws_refs(txt.value); //See User:Plastikspork/whitespace.js
txt.value = spork_ws_nowrap(txt.value); //See User:Plastikspork/whitespace.js
txt.value = spork_br(txt.value); //See User:Plastikspork/tools.js
txt.value = spork_ws_tables_infoboxes(txt.value); //See User:Plastikspork/whitespace.js
txt.value = spork_dehexchar_wikilinks(txt.value); //See User:Plastikspork/tools.js
txt.value = spork_special_char(txt.value);
txt.value = spork_whitespace(txt.value); //See User:Plastikspork/whitespace.js
spork_edit_summary("wikification");
spork_edit_summary("WS removal");
if(clk) document.editform.wpDiff.click();
}
// Spork: Color
function spork_color(clk){
var txt = document.editform.wpTextbox1;
txt.value = spork_color_simple(txt.value);
spork_edit_summary("color simplification");
if(clk) document.editform.wpDiff.click();
}
// Spork: Table to Wiki
function spork_wiki_table(clk){
var txt = document.editform.wpTextbox1;
txt.value = spork_table2wiki(txt.value);
spork_edit_summary("wikification");
if(clk) document.editform.wpDiff.click();
}
// Spork: cite date mdy
function spork_cite_to_mdy(clk) {
var txt = document.editform.wpTextbox1;
txt.value = spork_yyyymmdd_to_mdy(txt.value); // See User:Plastikspork/tools.js
txt.value = spork_dmy_to_mdy(txt.value); // See User:Plastikspork/tools.js
spork_edit_summary("date formatting");
if(clk) document.editform.wpDiff.click();
}
// Spork: cite date dmy
function spork_cite_to_dmy(clk) {
var txt = document.editform.wpTextbox1;
txt.value = spork_yyyymmdd_to_dmy(txt.value); // See User:Plastikspork/tools.js
txt.value = spork_mdy_to_dmy(txt.value); // See User:Plastikspork/tools.js
spork_edit_summary("date formatting");
if(clk) document.editform.wpDiff.click();
}
// Unspork: cite date
function spork_cite_to_yyyymmdd(clk) {
var txt = document.editform.wpTextbox1;
txt.value = spork_mdy_to_yyyymmdd(txt.value); // See User:Plastikspork/tools.js
txt.value = spork_dmy_to_yyyymmdd(txt.value); // See User:Plastikspork/tools.js
spork_edit_summary("date formatting");
if(clk) document.editform.wpDiff.click();
}
// Spork: No Align
function spork_no_align(clk){
var txt = document.editform.wpTextbox1;
txt.value=txt.value.replace(/([\r\n]\||\|\||[\r\n]!|!!|\|-)([ ]*[a-z][^\|!]* |[ ]*)align[ ]*=["' ]*(?:center|left|right)['" ]*/gi, '$1$2 ');
txt.value=txt.value.replace(/([\r\n]\||\|\||[\r\n]!|!!|\|-)([ ]*[a-z][^\|!]* |[ ]*)(style[ ]*=["' ]*)([ ]*[a-z][^'"\|!]*;|[ ]*)text-align[ ]*:[ ]*(?:center|left|right);?[ ]*/gi, '$1$2$3$4');
txt.value=txt.value.replace(/([^a-z])style[ ]*=[ ]*["'][ ]*['"]/gi, '$1 ');
txt.value=txt.value.replace(/([\r\n]\||\|\||[\r\n]!|!!|\|-)[ ]+\|([^\|])/g, '$1 $2');
txt.value=txt.value.replace(/<[\/]*center[ ]*>/gi, '');
txt.value=txt.value.replace(/([\r\n]\||\|\||[\r\n]!|!!|\|-)[ ]+([\r\n])/g, '$1$2');
txt.value=txt.value.replace(/<span [^<>]*>/g, '');
txt.value=txt.value.replace(/<\/span>/g, '');
spork_edit_summary("table simplification");
if(clk) document.editform.wpDiff.click();
}
// Spork: Testing
function spork_testing(clk){
// Spork: WS
spork_ws_compress(0);
// Spork: Wiki/Link/Repair
spork_wiki_link_repair(0);
// Spork: [] to Refs
spork_bracket_to_ref(0);
// Spork: CiteTemplate
spork_citation_template(0);
// Spork: Ref Repeat
spork_ref_repeat(0);
// Spork: Color
spork_color(0);
// Spork: WS
spork_ws_compress(0);
// WP:DATE
var txt = document.editform.wpTextbox1;
txt.value = txt.value.replace(/(\(|years_?active[\s]*=[\s]*)([12][0-9]{3})[\s]*(?:[–—\-–]| to[\s]+present|[–—\-–][\s]*present)([\s]*\)|[\s]*\||[\s]*\}\}|[\s]*$)/gi, '$1since $2$3');
//txt.value=txt.value.replace(/\[http:\/\/www\.hulu\.com\/watch[^ \[\]]*\]/g, '');
//txt.value=txt.value.replace(/\[http:\/\/www\.hulu\.com\/watch[^ \[\]]* ([^\[\]]*)\]/g, '$1');
document.editform.wpSummary.value = "Script assisted wikification";
if(clk) document.editform.wpDiff.click();
}
// Spork: Fullurl Template
function spork_fullurl(clk){
// WP:DATE
var txt = document.editform.wpTextbox1;
var loopcount = 0;
txt.value = txt.value.replace(/\{\{SERVER\}\}\/wiki\/([^\/\?]*)\?([^\[\]{}\|\r\n ]*)([}\]\| \r\n])/gi, '\{\{fullurl:$1|$2\}\}$3');
txt.value = txt.value.replace(/http:\/\/en\.wikipedia\.org\/wiki\/([^\/\?]*)\?([^\[\]{}\|\r\n ]*)([}\]\| \r\n])/gi, '\{\{fullurl:$1|$2\}\}$3');
txt.value = txt.value.replace(/http:\/\/en\.wikipedia\.org\/w\/index\.php\?title=([^\/&]*)&([^\[\]{}\|\r\n ]*)([}\]\| \r\n])/gi, '\{\{fullurl:$1|$2\}\}$3');
txt.value = txt.value.replace(/https:\/\/secure\.wikipedia\.org\/wikipedia\/en\/wiki\/([^\/\?]*)\?([^\[\]{}\|\r\n ]*)([}\]\| \r\n])/gi, '\{\{fullurl:$1|$2\}\}$3');
loopcount = 0;
while( txt.value.search( /\{\{fullurl:Special:Search\|[^}]*&search=[^&}]*%20/gi ) >= 0 && loopcount <= 10 ) {
txt.value = txt.value.replace(/(\{\{fullurl:Special:Search\|[^}]*&search=[^&}]*)%20/gi, '$1+');
loopcount++;
}
loopcount = 0;
while( txt.value.search( /\{\{fullurl:Special:Search\|[^}]*&search=[^&}]*%27/gi ) >= 0 && loopcount <= 10 ) {
txt.value = txt.value.replace(/(\{\{fullurl:Special:Search\|[^}]*&search=[^&}]*)%27/gi, "$1'"); // "'"
loopcount++;
}
document.editform.wpSummary.value = "Script assisted switch to fullurl template";
if(clk) document.editform.wpDiff.click();
}
// --------------------------------- WS Functions --------------------------------- //
// Called by Spork: WS
function spork_special_char(str) {
str=str.replace(/([a-z][ ]*) -- ([ ]*[a-z])/gi, '$1 – $2');
str=str.replace(/—/gi, '—');
str=str.replace(/–/gi, '–');
// str=str.replace(/[‘’]/g, "'"); //'
// str=str.replace(/[“”]/g, '"'); //"
return str;
}
// -------------------------- Wiki/LinkRepair Functions -------------------------- //
// Called by Spork: Wiki/LinkRepair
function spork_section_headings(str){
// Extra bold section headings
str=str.replace(/(^|[\r\n])(=[=]+[ ]*)'''([^\r\n]*)'''([ ]*=[=]+)[\t ]*([\r\n]|$)/g, '$1$2$3$4$5');
// Capitalization of common section headings
str=str.replace(/(==See) A(lso==)/g, '$1 a$2');
str=str.replace(/(==External) L(inks==)/g, '$1 l$2');
str=str.replace(/(==Early) L(ife==)/g, '$1 l$2');
return str;
}
// Called by Spork: Wiki/LinkRepair
function spork_external_links(str) {
// Common broken links
str=str.replace(/(\[https?:[^\[\]]+\])([a-z])/gi, '$1 $2');
str=str.replace(/(\[https?:\/\/[^\]\]\| ]+)[ ]*\|[ ]*([^\]\[\|]*\])/gi, '$1 $2');
// Convert links to secure wikipedia to standard wikipedia
str=str.replace(/\https:\/\/secure.wikimedia.org\/wikipedia\/([a-z]+)\//g, 'http://$1.wikipedia.org/');
// Linking to upload page rather than image page
str=str.replace(/http:\/\/upload\.wikimedia\.org\/wikipedia\/commons\/[a-z0-9]\/[a-z0-9][a-z0-9]\//gi, 'http://commons.wikimedia.org/wiki/Image:');
// Punctuation inside external links
str=str.replace(/(\[https?:[^\[\]\| ]*)[\| ][ ]*([']+|["]+)([^"'\|\[\]]*)\2([:\.,\? ]*\])/g, '$2$1 $3$4$2');
str=str.replace(/(\[https?:[^\[\]\| ]*)[\| ][ ]*([‘’]|[“])([^“’‘\|\[\]]*)([‘’]|[”])([:\.,\? ]*\])/g, '$2$1 $3$5$4');
// Extra brackets around references
str=str.replace(/\[(\[)(http|ftp|https)(:[^\[\]]+\])\]/gi, '$1$2$3');
// Extra brackets inside references
str=str.replace(/(<ref[^<>\/]*>)\[([^\[\]<> ]*)\](<\/ref>)/gi, '$1$2$3');
// Convert "external wikipedia" image references to (PIC) links
str=str.replace(/(\[)http:\/\/(commons)\.wikimedia\.org\/wiki\/(Image:[^ \[\]\|<>]*)(\])/gi, '($1$1$2:$3|pic$4$4)');
str=str.replace(/(\[)http:\/\/en\.wikipedia\.org\/wiki\/Image(:[^ \[\]\|<>]*)(\])/gi, '($1$1:File$2|pic$3$3)');
return str;
}
// Called by Spork: Wiki/LinkRepair
function spork_convert(str) {
// Template Fun
str=str.replace(/ ([1-9])[ ]*'[ ]*([1-9]|1[01])[ ]*"[ ]*\([12]\.[0-9][0-9]?[ ]*m\)/g, ' \{\{height|ft=$1|in=$2\}\}');
str=str.replace(/ ([0-9][0-9,\.]*)( | )+(\[\[)square mile(\]\])s[ ]+\([0-9][0-9,\.]*( | )+(\[\[)km²(\]\])\)/g, ' \{\{convert|$1|sqmi|km2|lk=on\}\}');
str=str.replace(/ ([0-9][0-9,\.]*)( | )+(\[\[)square mile(\]\])s[ ]+\([0-9][0-9,\.]*( | )+km²\)/g, ' \{\{convert|$1|sqmi|km2|lk=in\}\}');
str=str.replace(/ ([0-9][0-9,\.]*)( | )+square miles[ ]+\([0-9][0-9,\.]*( | )+(\[\[)km²(\]\])\)/g, ' \{\{convert|$1|sqmi|km2|lk=out\}\}');
str=str.replace(/ ([0-9][0-9,\.]*)( | )+square miles[ ]+\([0-9][0-9,\.]*( | )+km²\)/g, ' \{\{convert|$1|sqmi|km2\}\}');
str=str.replace(/ ([0-9][0-9,\.]*) people per square mile \([0-9][0-9,\.]*\/km²\)/g, ' \{\{convert|$1|PD/sqmi|/km2\}\}');
str=str.replace(/ ([0-9][0-9,\.]+) people per square mile/g, ' \{\{convert|$1|PD/sqmi|/km2\}\}');
str=str.replace(/ ([0-9][0-9,\.]*)\/sq mi \([0-9][0-9,\.]*\/km²\)/g, ' \{\{convert|$1|/sqmi|/km2\}\}');
str=str.replace(/(\{\{convert\|[0-9]+),/g, '$1');
return str;
}
// Called by Spork: Wiki/LinkRepair
function spork_lists(str) {
// Wikify bullet lists
str=str.replace(/([\r\n])•(.*[\r\n])[\r\n]/gim, '$1* $2');
// Convert all-bold lines to use semicolon markup
str=str.replace(/([\r\n])'''([^':]*)[']*[ ]*<[\\\/\. ]*BR[^<>]*>([\r\n])/gi, '$1;$2$3');
str=str.replace(/([\r\n])'''([^':]*)[']*[ ]*([\r\n])/gi, '$1;$2$3');
return str;
}
// ------------------------------- Color Functions ------------------------------- //
// Called by Spork: Color
function spork_color_simple(str){
str=str.replace(/([\r\n]\||[\r\n]!|\|\||!!)([^\|!<>\[\]]*)style[ ]*=[" ]*color[ ]*:[ ]*([a-z0-9\#]*)[; ]*[ "]*([^\|!<>\[\]]*\|)([^\|])/gi, '$1$2 $4<font color="$3">$5');
str=str.replace(/([\r\n]\||[\r\n]!|\|\||!!)([^\|!<>\[\]]*style[ ]*=[ ]*"[^"<>\|!]*;)[ ]*color[ ]*:[ ]*([a-z0-9\#]*)[ ;]*([^\|!<>\[\]]*\|)([^\|])/gi, '$1$2$4<font color="$3">$5');
str=str.replace(/<span style=[ "]*(background|background-color):([^ ";]*)[; ]*[" ]*>(( ){1,4}|\{\{nbsp\|[1-4]\}\})<\/span>/gi, '\{\{colorbox|$2\}\}'); //"
str=str.replace(/<span style="(background|background-color):([^ ";]*)[; ]*">([^<>]*)<\/span>/gi, '\{\{colorbox|$2|$3\}\}'); //"
str=str.replace(/(\|\|[^\|\r\n]*)style="(?:background|background-color):([^ ";]*)[; ]*"/gi, '$1bgcolor="$2"'); //"
str=str.replace(/([\r\n]\|[^\|\r\n]*)style="(?:background|background-color):([^ ";]*)[; ]*"/gi, '$1bgcolor="$2"'); //"
str=str.replace(/bgcolor="(transparent|none)"/gi, 'style="background: $1"');
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?000000\2/gi, '$1$2black$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?0000FF\2/gi, '$1$2blue$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?A52A2A\2/gi, '$1$2brown$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?FF7F50\2/gi, '$1$2coral$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?00FFFF\2/gi, '$1$2cyan$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?FF00FF\2/gi,'$1$2fuchsia$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?FFD700\2/gi, '$1$2gold$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?808080\2/gi, '$1$2gray$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?008000\2/gi, '$1$2green$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?00FF00\2/gi, '$1$2lime$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?FF00FF\2/gi,'$1$2magenta$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?800000\2/gi, '$1$2maroon$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?000080\2/gi, '$1$2navy$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?808000\2/gi, '$1$2olive$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?FFA500\2/gi, '$1$2orange$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?FFC0CB\2/gi, '$1$2pink$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?800080\2/gi, '$1$2purple$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?FF0000\2/gi, '$1$2red$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?C0C0C0\2/gi, '$1$2silver$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?D2B48C\2/gi, '$1$2tan$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?008080\2/gi, '$1$2teal$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?EE82EE\2/gi, '$1$2violet$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?FFFFFF\2/gi, '$1$2white$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?FFFF00\2/gi, '$1$2yellow$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?FFF5EE\2/gi,'$1$2seashell$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?F08080\2/gi,'$1$2lightcoral$2'); // "
str=str.replace(/(color[ ]?box[ ]*\||color[ ]*=|color[ ]*:)[ ]*("?)#?D2691E\2/gi,'$1$2chocolate$2'); // "
str=str.replace(/(color[ ]?box[ ]*\|)[ ]*"([^\|}{]*)"/gi, '$1$2');
// Font tag outside of footnote
str=str.replace(/(<font[^<>]*>[ ]*)(\[\[#fn[^\|\]]*\|)/gi, '$2$1');
return str;
}
// ------------------------------ testing Functions ------------------------------ //
function spork_newlines(str) {
var loopcount = 0;
// Extra newlines after section headings
str = str.replace(/([\r\n]=.*=[\r\n])[\t ]*[\r\n][\t ]*([\r\n])/gim, '$1$2');
// newlines in citation templates (multiple times)
str = str.replace(/(\{\{(?:cite|citation))[\r\n]/gim, '$1 ');
loopcount = 0;
while( str.search( /\{\{(?:cite|citation) [^}]*[\r\n]/gi ) >= 0 && loopcount <= 10 ) {
str=str.replace(/(\{\{(?:cite|citation) [^}]*)[\r\n]/gim, '$1 ');
loopcount++;
}
// Extra newlines after before bullets
str=str.replace(/([\r\n]\*.*[\r\n])[\t ]*[\r\n](\*)/gim, '$1$2');
// Extra newlines before semicolon marked bold lines
str=str.replace(/([\r\n])([#;:\*].*[\r\n])[ ]*[\r\n]([#;:\*])/gim, '$1$2$3');
return str;
}
// ----------------------------- interface Functions ----------------------------- //
function spork_edit_summary(summary){
// Add a tag to the summary box
var txt = document.editform.wpSummary;
var fullsummary = "Script assisted " + summary;
if (txt.value.indexOf(summary) == -1) {
if (txt.value.match( /Script assisted [A-Za-z]/ )) {
txt.value = txt.value.replace( /Script assisted /, fullsummary + "/");
} else if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
txt.value += " | " + fullsummary;
} else {
txt.value += fullsummary;
}
}
}
$(function () {
if(document.forms.editform) {
if( SporkConfig.ws != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_ws_compress(1)', SporkConfig.ws);
if( SporkConfig.wlr != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_wiki_link_repair(1)', SporkConfig.wlr);
if( SporkConfig.b2r != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_bracket_to_ref(1)', SporkConfig.b2r);
if( SporkConfig.ct != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_citation_template(1)', SporkConfig.ct);
if( SporkConfig.rr != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_ref_repeat(1)', SporkConfig.rr);
if( SporkConfig.c != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_color(1)', SporkConfig.c);
if( SporkConfig.t2w != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_wiki_table(1)', SporkConfig.t2w);
if( SporkConfig.cmdy != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_cite_to_mdy(1)', SporkConfig.cmdy);
if( SporkConfig.cdmy != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_cite_to_dmy(1)', SporkConfig.cdmy);
if( SporkConfig.unc != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_cite_to_yyyymmdd(1)', SporkConfig.unc);
if( SporkConfig.noa != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_no_align(1)', SporkConfig.noa);
if( SporkConfig.tst != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_testing(1)', SporkConfig.tst);
if( SporkConfig.fullurl != "" )
mw.util.addPortletLink('p-tb', 'javascript:spork_fullurl(1)', SporkConfig.fullurl);
}
});
importScript('User:AzaToth/twinkle.js');
importScript('User:Ioeth/friendlywelcome.js');
importScript('User:Ioeth/friendlytag.js');
importScript('User:Ioeth/friendlyshared.js');
importScript('User:TheDJ/Gadget-HotCat.js');
// [[User:Lupin/popups.js]]
importScript('User:Lupin/popups.js');
// install User:Cacycle/wikEdDiff enhanced diff view using ajax
importScript('User:Cacycle/wikEdDiff.js');
//Auto AFD script
//Please include the two following lines
//Modified version of AutoVFD script to work with AFD
//Script Modified by User:Jtkiefer
//Further modified to work with [[WP:AFDC]] by [[User:ais523]]
// This needs to change depending on skin used.
function add_link(url, name)
{
var na = document.createElement('a');
na.setAttribute('href', url);
na.appendChild(document.createTextNode(name));
var li = document.createElement('li');
li.appendChild(na);
var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
tabs.appendChild(li);
}
function strip_namespace(target)
{
var colon = target.indexOf(':');
if (colon != -1)
{
var spaces = new Array('User', 'Wikipedia', 'Image', 'MediaWiki', 'Template', 'Help', 'Category');
var ns = target.substring(0, colon);
if (ns == '' || ns == 'Talk')
return target.substring(colon + 1);
else
for (var i = 0; i < spaces.length; ++i)
{
if (ns == spaces[i]
|| ns == spaces[i] + '_talk')
return target.substring(colon + 1);
}
}
return target;
}
function afd()
{
document.editform.wpTextbox1.value = '{{' + 'subst:afd}}\n' + document.editform.wpTextbox1.value;
document.editform.wpSummary.value = 'afd';
var target = document.editform.action;
target = target.substring(target.indexOf('title=') + 6,
target.lastIndexOf('&action=submit'));
var months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var date = new Date();
date = date.getUTCFullYear() + '_' + months[date.getUTCMonth()] + '_' + date.getUTCDate();
var pagename = strip_namespace(target);
window.open('/w/index.php?title=Wikipedia:Articles_for_deletion/' + pagename + '&action=edit&fakeaction=afdsub&faketarget=' + target,
'Afd ' + unescape(target),
'status,toolbar,location,menubar,directories,resizeable,scrollbars');
window.open('/w/index.php?title=Wikipedia:Articles_for_deletion/Log/' + date + '&action=edit&fakeaction=afdlist&faketarget=' + pagename,
'AfdLog ' + unescape(target),
'status,toolbar,location,menubar,directories,resizeable,scrollbars');
}
function autoafd()
{
if (document.title.indexOf('Editing ') == 0)
{
var action = '';
var target = '';
if (location.search)
{
var l = location.search.substring(1).split('&');
for (var i = 0; i < l.length; ++i)
{
var eq = l[i].indexOf('=');
var name = l[i].substring(0, eq);
if (name == 'fakeaction')
action = l[i].substring(eq + 1);
else if (name == 'faketarget')
target = unescape(l[i].substring(eq + 1)).replace(/_/g, ' ');
}
}
if (action == 'afdlist')
{
document.editform.wpTextbox1.value += '{{' + 'Wikipedia:Articles for deletion/' + target + '}}\n';
document.editform.wpSummary.value = '[[Wikipedia:Articles for deletion/' + target + ']]';
}
else if (action == 'afdsub')
{
if (document.editform.wpTextbox1.value.length > 0)
{
target = document.editform.action;
target = unescape(target.substring(target.indexOf('title=') + 6, target.lastIndexOf('&action=submit'))).replace(/_/g, ' ');
window.alert("There's an old afd at the default location already.\n\n" +
'Please either move it out of the way (and update existing links to it), or file the Afd by hand in another location (such as [[' + target + ' (2)]]).');
}
else
document.editform.wpTextbox1.value += '===[[' + target + ']]===\n' +
'{{'+'REMOVE THIS TEMPLATE WHEN '+'CLOSING THIS AfD|>>add cat here<<}}\n'+
':{{la|' + target + '}} – <includeonly>([[Wikipedia:Articles for deletion/' + target + '|View AfD]])</includeonly>\n'+
'Reason for nomination. ~~' + '~~\n*\n*\n*\n';
}
else
add_link('javascript:afd()', 'Afd');
}
}
$(autoafd);
//
//This function adds a link to the toolbox which, when clicked, displays the size of the page
//and the size of the prose in bytes. See the talk page for more details.
//
//To use this function add {{subst:js|User:Dr pda/prosesizebytes.js}} to your monobook.js
//
function loadXMLDocPassingTemplate(url,handler, page)
{
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
var req = new XMLHttpRequest();
}
// branch for IE/Windows ActiveX version
else if (window.ActiveXObject) {
var req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req) {
req.onreadystatechange = function () {handler(req, page)};
req.open("GET", url, true);
req.send("");
}
}
function getWikiText(req, page) {
// only if req shows "loaded"
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
// ...processing statements go here...
response = req.responseXML.documentElement;
var rev = response.getElementsByTagName('rev');
if(rev.length > 0){
result = rev[0].getAttribute('size');
result = result+' B';
wiki_value = document.createElement("li");
wiki_value.id = "wiki-size";
wiki_value.innerHTML = '<b>Wiki text: </b>'+result;
var output = document.getElementById("document-size-stats");
prose_value = document.getElementById("prose-size");
output.insertBefore(wiki_value,prose_value);
}
else{
//alert("There was a problem using the Wikipedia Search to find the wiki text size\nEither the search is not working or the correct article did not appear on the first page of results");
wiki_value = document.createElement("li");
wiki_value.id = "wiki-size";
wiki_value.innerHTML = '<b>Wiki text: </b>Problem getting wiki text size';
var output = document.getElementById("document-size-stats");
prose_value = document.getElementById("prose-size");
output.insertBefore(wiki_value,prose_value);
}
} else {
alert("There was a problem retrieving the XML data:\n" +
req.statusText);
}
}
}
function getFileSize(req, page) {
// only if req shows "loaded"
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
// ...processing statements go here...
var fsize = req.responseText.length;
window.status = fsize;
var total_value = document.createElement("li");
total_value.id = "total-size";
total_value.innerHTML='<b>File size: </b>'+fsize+' B';
var output = document.getElementById("document-size-stats");
var prose_html_value = document.getElementById("prose-size-html");
output.insertBefore(total_value,prose_html_value);
} else {
alert("There was a problem retrieving the XML data:\n" +
req.statusText + "\n(" + url + ")");
}
}
}
function getLength(id){
var textLength = 0;
for(var i=0;i<id.childNodes.length; i++){
if(id.childNodes[i].nodeName == '#text'){
textLength += id.childNodes[i].nodeValue.length;
}
else{
textLength += getLength(id.childNodes[i]);
}
}
return textLength;
}
function getRefMarkLength(id,html){
var textLength = 0;
for(var i=0;i<id.childNodes.length; i++){
if(id.childNodes[i].className == 'reference'){
textLength += (html)? id.childNodes[i].innerHTML.length : getLength(id.childNodes[i]);
}
}
return textLength;
}
function getDocumentSize(){
contentDivName = '';
if(skin == 'monobook' || skin == 'chick' || skin == 'myskin' || skin == 'simple'){
contentDivName = 'bodyContent';
}
else if (skin == 'modern'){
contentDivName = 'mw_contentholder';
}
else if (skin == 'standard' || skin == 'cologneblue' || skin == 'nostalgia'){
contentDivName = 'article';
}
else{
//fallback case; the above covers all currently existing skins
contentDivName = 'bodyContent';
}
//Same for all skins if previewing page
if(wgAction == 'submit') contentDivName = 'wikiPreview';
var bodyContent = document.getElementById(contentDivName);
if(document.getElementById("document-size-stats")){
//if statistics already exist, turn them off and remove highlighting
var output = document.getElementById("document-size-stats");
var oldStyle = output.className;
var pList = bodyContent.getElementsByTagName("p");
for(var i=0;i<pList.length; i++){
if(pList[i].parentNode.id == contentDivName) pList[i].style.cssText = oldStyle;
}
output.parentNode.removeChild(output);
var header = document.getElementById("document-size-header");
header.parentNode.removeChild(header);
}
else{
var output = document.createElement("ul");
output.id = "document-size-stats";
var prose_html_value = document.createElement("li");
prose_html_value.id = "prose-size-html";
output.appendChild(prose_html_value);
var ref_html_value = document.createElement("li");
ref_html_value.id = "ref-size-html";
output.appendChild(ref_html_value);
var prose_value = document.createElement("li");
prose_value.id = "prose-size";
output.appendChild(prose_value);
output.className = bodyContent.getElementsByTagName("p").item(0).style.cssText;
var ref_value = document.createElement("li");
ref_value.id = "ref-size";
output.appendChild(ref_value);
var dummy = document.getElementById("siteSub");
dummy.parentNode.insertBefore(output, dummy.nextSibling);
var header = document.createElement("span");
header.id = "document-size-header";
header.innerHTML = '<br/>Document statistics: <small><i>(See <a href="http://wiki.riteme.site/wiki/User_talk:Dr_pda/prosesize.js">here</a> for details.)<i></small>';
dummy.parentNode.insertBefore(header,output);
//File size not well defined for preview mode or section edit
if(wgAction != 'submit'){
//If browser supports document.fileSize property (IE)
if(document.fileSize){
var total_value = document.createElement("li");
total_value.id = "total-size";
total_value.innerHTML='<b>File size: </b>'+document.fileSize+' B';
output.insertBefore(total_value,prose_html_value);
}
else{
loadXMLDocPassingTemplate(location.pathname,getFileSize,'')
}
}
//Get size of images only if browser supports filesize property (IE)
var iList = bodyContent.getElementsByTagName("img");
if(iList.length >0 && iList[0].fileSize){
//Get size of images included in document
var image_size = 0;
var first_magnify = true;
for (var i=0;i<iList.length; i++){
var im = iList[i];
if(im.getAttribute("src").indexOf("magnify-clip.png") != -1){
if(first_magnify){
image_size += im.fileSize*1;
first_magnify = false;
}
}
else{
image_size += im.fileSize*1;
}
}
var image_value = document.createElement("li");
image_value.id = "image-size";
image_value.innerHTML='<b>Images: </b>'+image_size+' B';
output.appendChild(image_value);
}
//Calculate prose size and size of reference markers ([1] etc)
var pList = bodyContent.getElementsByTagName("p");
prose_size = 0;
prose_size_html = 0;
refmark_size = 0;
refmark_size_html = 0;
word_count = 0;
for(var i=0;i<pList.length; i++){
var para = pList[i];
if(para.parentNode.id == contentDivName){
prose_size += getLength(para);
prose_size_html += para.innerHTML.length;
refmark_size += getRefMarkLength(para,false);
refmark_size_html += getRefMarkLength(para,true);
word_count += para.innerHTML.replace(/(<([^>]+)>)/ig,"").split(' ').length
para.style.cssText = "background-color:yellow";
}
}
prose_value.innerHTML='<b>Prose size (text only): </b>'+(prose_size-refmark_size)+' B ('+word_count+' words) "readable prose size"';
prose_html_value.innerHTML='<b>Prose size (including all HTML code): </b>'+(prose_size_html-refmark_size_html)+' B';
//Calculate size of references (i.e. output of <references/>)
var rList = bodyContent.getElementsByTagName("ol");
var ref_size = 0;
var ref_size_html = 0;
for (var i=0; i<rList.length; i++){
if(rList[i].className == "references"){
ref_size = getLength(rList[i]);
ref_size_html = rList[i].innerHTML.length;
}
}
ref_value.innerHTML='<b>References (text only): </b>'+(ref_size+refmark_size)+' B';
ref_html_value.innerHTML='<b>References (including all HTML code): </b>'+(ref_size_html+refmark_size_html)+' B';
//get correct name of article from wikipedia-defined global variables
var pageNameUnderscores = wgPageName;
var pageNameSpaces = pageNameUnderscores.replace(/_/g,' ')
//if page is a permalink, diff, etc don't try to search
if(!location.pathname.match('/w/index.php')){
//Get revision size from API
var searchURL = '/w/api.php?action=query&prop=revisions&rvprop=size&format=xml&revids=' + wgCurRevisionId;
loadXMLDocPassingTemplate(searchURL,getWikiText,pageNameSpaces);
}
else if(wgAction == 'submit'){
//Get size of text in edit box
result = document.getElementById('wpTextbox1').value.length;
result = result+' B';
wiki_value = document.createElement("li");
wiki_value.id = "wiki-size";
wiki_value.innerHTML = '<b>Wiki text: </b>'+result;
var output = document.getElementById("document-size-stats");
prose_value = document.getElementById("prose-size");
output.insertBefore(wiki_value,prose_value);
}
}
}
$(function () {
if(wgAction == 'edit' || (wgAction == 'submit' && document.getElementById('wikiDiff')) ){
mw.util.addPortletLink('p-tb', 'javascript:alert("You need to preview the text for the prose size script to work in edit mode.")', 'Page size', 't-page-size', 'Calculate page and prose size', '', '');
document.getElementById("t-page-size").firstChild.style.cssText = "color:black;"
}
else if(wgAction == 'view' || wgAction == 'submit' || wgAction == 'purge'){
mw.util.addPortletLink('p-tb', 'javascript:getDocumentSize()', 'Page size', 't-page-size', 'Calculate page and prose size', '', '');
}
});
importScript('User:Gary King/localize comments.js');
LocalizeConfig = { dateFormat : 'mdy' };
importScript('User:AzaToth/twinkle.js');
//</nowiki>