MediaWiki:Gadget-pikan-inkipedia.js
From Inkipedia, the Splatoon wiki
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
//<nowiki> function init_pikan() { pikan.wiki_url = "http://splatoonwiki.org/"; pikan.help_link = "http://splatoonwiki.org/wiki/User:Espyo/Pikan"; pikan.module_name = "Inkipedia"; pikan.module_version = "1.3.0"; pikan.types["Problem"] = { color: "#600", background: "rgba(255, 128, 128, 0.8)", description: "General MediaWiki source or general article problems." }; pikan.types["Policy"] = { color: "#400", background: "rgba(192, 128, 128, 0.8)", description: "Issues that break a policy, specific or implied." }; pikan.types["Style"] = { color: "#206", background: "rgba(160, 128, 255, 0.8)", description: "Problems that do not affect the page, but when fixed, make the source easier to use." }; pikan.types["Question"] = { color: "#420", background: "rgba(255, 192, 128, 0.8)", description: "Results that the analyzer cannot decide whether they're real problems or false-positives." }; pikan.find_problems = function(){ var reg; //Find "Wikia" -- we aren't involved with Wikia, so get rid of leftovers. reg = /wikia/igm; pikan.regex_check(reg, "Problem", "\"Wikia\" found. We moved from Wikia, so make sure this isn't a leftover."); //Find "gamepad" reg = /[Gg]amepad/gm; pikan.regex_check(reg, "Problem", "\"Gamepad\" found. The correct spelling for the Wii U's controller is \"GamePad\"."); //Find "Nunchuck" reg = /Nunchuck/igm; pikan.regex_check(reg, "Problem", "\"Nunchuck\" found. The correct spelling of the Wii peripheral is \"Nunchuk\"."); //Find game names without italicization. reg = /Splatoon/igm; pikan.regex_check( reg, "Policy", "Game and series names should be in italics.", null, function(r){ if(pikan.is_common_exception(r)) return false; if( pikan.before(r, 2) == "''" && pikan.after(r, 2) == "''" ){ return false; } //Check if the name is a link caption. //Let's cheat a bit and assume that //a) the link's text only contains the game name //(otherwise the editor would need the bold inside the link) //b) the italics are placed correctly before the link. if(pikan.after(r, 4) == "]]''") return false; //Special cases: if it's part of "Squidbeak Splatoon", "Splatoon Global Testfire", //"Splatoon Testfire", then ignore. if(pikan.before(r, 10) == "Squidbeak ") return false; if(pikan.after(r, 16) == " Global Testfire") return false; if(pikan.after(r, 9) == " Testfire") return false; return true; } ); //Find lowercase "Splatoon" or "Splatoon 2". reg = /(splatoon 2|splatoon)/gm; pikan.regex_check( reg, "Policy", "Game name with lowercase 's' found. The official spelling is always with an uppercase 'S'.", null, function(r){ return !pikan.is_common_exception(r); } ); //Find lowercase "Inkling", "Octoling", "Octarian", etc. reg = /(inkling|octoling|octarian|octotrooper)/gm; pikan.regex_check( reg, "Policy", "Species name starting with a lowercase letter found. It should start with an uppercase letter.", null, function(r){ return !pikan.is_common_exception(r); } ); //Find button names that aren't using the button template. reg = /\b([Pp]ress(ing)? (the)? (A|B|X|Y|L|R|ZL|ZR)|(A|B|X|Y|L|R|ZL|ZR) [Bb]uttons?)\b/gm; pikan.regex_check( reg, "Policy", "Button being referred to by name. It should be displayed using {{button}} instead.", null, function(r){ return !pikan.is_common_exception(r); } ); //Suggest {{NA}} and {{EUOC}} instead of manually-written tags. reg = /\((NA|US|EU\/OC|EU\\OC|EUOC|EUAU|EU\/AU|EU\\AU|Europe|North America)\)/igm; pikan.regex_check( reg, "Question", "Region in parenthesis found. If possible, use {{NA}}, {{EUOC}} or {{NAEUOC}} instead." ); //"You" outside of guide sections. reg = /\b(you|your|you're)\b/igm; pikan.regex_check( reg, "Question", "The player/reader is referred to as \"you\". This is only okay on guide sections, and this doesn't look like one. If it is, ignore this, otherwise use the third person.", "Inkipedia:Policy#Perspective", function(r){ if(pikan.is_common_exception(r)) return false; if(pikan.in_area(r, "<ref", "/ref", false)) return false; var walkthrough_sec_reg = /^=+ *Walkthrough/igm; var walkthrough_sec_match = null; var you_section_nr = pikan.get_section_nr(r); while(walkthrough_sec_match = walkthrough_sec_reg.exec(pikan.text)){ if(pikan.section_in_section( you_section_nr, pikan.get_section_nr(walkthrough_sec_match) )){ return false; } } return true; } ); //Find "font-family", as it is likely a Wikia visual editor leftover. reg = /font\-family/igm; pikan.regex_check(reg, "Question", "Font family tampering found. Possibly a Wikia visual editor leftover. Remove it if so."); //Find <p> tags, which are possible Wikia leftovers. reg = /<p[ >]/igm; pikan.regex_check(reg, "Question", "<p> tag found. There is normally no reason to use them, meaning this could be a Wikia visual editor leftover. Remove it if so."); //Find black text colors, which are possible Wikia leftovers. reg = /[ ;"]color: ?(black|#000[000]?)/igm; pikan.regex_check(reg, "Question", "Black text color style found. Because it is normally useless to force the text to be black, this is likely a Wikia visual editor leftover. Remove it if so."); //Find gendered nouns; players should be "they". reg = /\b(his|him|her|he|she)\b/igm; pikan.regex_check( reg, "Question", "Gendered noun found. If this is the player, treat them as \"they\". Otherwise, ignore this.", "Inkipedia:Policy#Pronouns", function(r){ return !pikan.is_common_exception(r); } ); //Find "image:" (it should be "file:"). reg = /\[\[Image\:/igm; pikan.regex_check(reg, "Style", "Image being called with \"Image:\" found. \"File:\" is better."); reg = /Image:/igm; pikan.regex_check(reg, "Style", "Image being called with \"Image:\" found. \"File:\" is better.", null, function(r){ return pikan.in_area(r, "<gallery", "/gallery>"); } ); //Find two empty lines in a row. reg = /(\n\n\n|\r\r\r|\r\n\r\n\r\n)/igm; pikan.regex_check(reg, "Style", "Double empty lines found. Just one is enough. If you want to add vertical spacing, try the {{clr}} template. (If you can't see the selection, just press a letter key.)"); //Find redundant "Template:". reg = /\{\{Template\:/igm; pikan.regex_check(reg, "Style", "\"{{Template:abc}}\" and \"{{abc}}\" are the same, so use the latter form, which is simpler."); //Find trailing spaces. reg = /(^ .+$|^.+ $)/igm; pikan.regex_check(reg, "Style", "Trailing space found."); //Find double spaces. reg = / /igm; pikan.regex_check( reg, "Style", "Double spaces found. Just one is enough.", null, function(r){ return !pikan.in_area(r, "|", "="); //Template parameter -- not illegible. } ); //Empty line at the start. if(pikan.text.length > 2){ if(pikan.text[0] == "\n" || pikan.text[0] == "\r"){ pikan.save_problem(0, 1, "Style", "Empty line at the start found. There's no reason for it to exist, so remove it."); } } //Missing empty line before section. reg = /([^\n=]\n|[^\r=]\r|[^(\r\n)=]\r\n)=.+=/gm; pikan.regex_check(reg, "Style", "Add an empty line before section headers, to make it easier to read."); //Files share their line with other text. reg = /((\[\[File.+\]\][^\n\r\[\]]+$)|(^[^\n\r\[\]]+\[\[File.+\]\]))/igm; pikan.regex_check(reg, "Style", "Image has more than just its code on its line; add a line break between it and the text, to make it easier to read."); //Underscores in file names. reg = /\File:.+_.+/igm; pikan.regex_check(reg, "Style", "File name with underscores found; spaces are more human-readable."); //Underscores in gallery file names. reg = /.+_.+\|/gm; pikan.regex_check( reg, "Style", "File name with underscores found; spaces are more human-readable.", "", function(r){ return pikan.in_area(r, "<gallery", "/gallery"); } ); //Underscores in links. reg = /\[\[[^|\]]*_[^|\]]*(\||\]\])/gm; pikan.regex_check(reg, "Style", "Link with underscores found; spaces are more human-readable."); //Underscores in template names. reg = /\{\{[^\|\}]+_.+(\r|\n|\|\}\})/gm; pikan.regex_check(reg, "Style", "Template name with underscores found; spaces are more human-readable."); //Links like [[A|A]]. reg = /\[\[([^\|\]]+)\|\1\]\]/gm; pikan.regex_check(reg, "Style", "Link with the same page and name found. Just simplify it like this: [[Apple|Apple]] → [[Apple]]."); //Links like [[A|AB]]. reg = /\[\[([^\|\]]+)\|\1[^ ]+\]\]/gm; pikan.regex_check(reg, "Style", "Link with a name that contains the page name found. Simplify it like this: [[Apple|Apples]] → [[Apple]]s."); } /* * * * * * * * * * * * * * * * * * * * * * * * * * Is common exception * * * * * * * * * * * * * * * * * * * * * * * * * * Returns whether a regex match belongs to a * "common exception". Use this to ignore capitalization, * spelling, etc. problems on things like template * parameter names. * reg: regex match. */ pikan.is_common_exception = function(reg){ //Is it in a template? if(pikan.in_area(reg, "{{", "}}")) return true; //Is it in a comment? if(pikan.in_area(reg, "<!--", "-->")) return true; //Is it a page link or image? var in_internal_link = (pikan.in_area(reg, "[[", "]]")); if(in_internal_link){ var in_left_half = pikan.in_area(reg, "[[", "|", "]]"); //[[A|B]] format. if(in_left_half) return true; } //Is it a categorization? if(pikan.in_area(reg, "[[Category:", "]]")) return true; if(pikan.in_area(reg, "[[category:", "]]")) return true; //Is it a file name in a gallery? if(pikan.in_area(reg, "<gallery", "/gallery")){ if(pikan.in_area(reg, "\n", "|")) return true; } //Is it in an external link? if(!in_internal_link){ if( (pikan.in_area(reg, "[http", "]") || pikan.in_area(reg, "[www", "]")) && pikan.in_area(reg, "[", " ") ){ return true; } } return false; } } if(typeof(pikan) != "undefined") { init_pikan(); pikan.setup(); } //</nowiki>