User:Erutuon/common.js
Appearance
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 is at User:Erutuon/common.css. |
/* globals $ */
// <nowiki>
$.ajax('//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js', { dataType:'script', cache:true }).then(function() {
pathoschild.TemplateScript.add([
// add your own templates or scripts here
{
name: 'proto wikt-lang',
enabled: false,
script: function(editor) {
editor
.replace(/'*\*?\[\[:?wikt:Reconstruction:Proto-Germanic\/([^\|\]]+)\|\*?([^\]]+)\]\]'*/g, '{{wikt-lang|gem-pro|*$2}}')
.replace(/'*\*?\[\[:?wikt:Reconstruction:Proto-Indo-European\/([^\|\]]+)\|\*?([^\]]+)\]\]'*/g, '{{wikt-lang|ine-pro|*$2}}')
.replace(/'*\*?\[\[:?wikt:Reconstruction:Proto-Hellenic\/([^\|\]]+)\|\*?([^\]]+)\]\]'*/g, '{{wikt-lang|grk-pro|*$2}}')
.replace(/'*\*?\[\[:?wikt:Reconstruction:Proto-Slavic\/([^\|\]]+)\|\*?([^\]]+)\]\]'*/g, '{{wikt-lang|sla-pro|*$2}}')
.appendEditSummary('simplified links to Wiktionary with [[Template:wikt-lang]]');
},
},
{
name: 'fix refs',
enabled: false,
script: function(editor) {
editor
.replace(/(<ref[^\w\s\"]*\>[^<>]*<\/ref\>)([\.\,\;\:\)]{1,3})/g, '$2$1') // Move refs after 1-3 punctuation characters.
.replace(/(\{\{[s|r?e]fn[^\}]+\}\})([\.\,\;\:\)]{1,3})/g, '$2$1') // Move refn and efn templates after 1-3 punctuation characters.
.replace(/(\{\{[Cc]itation needed[^\}]+\}\})([\.,;:\)]{1,3})/g, '$2$1'); // Move citation needed templates after 1-3 punctuation characters.
}
},
{
name: 'tag Amharic',
category: 'formatting',
enabled: false,
isMinorEdit: true,
script: function(editor) {
editor
.replace(/([ሀ-᎙ⶀ-ⷞꬁ-ꬮ]+)(?=[\s\)\;\:\.\,\!\|<\'])/g, '{{lang|am|$1}}')
.appendEditSummary('tag Amharic text with the help of [[m:TemplateScript|TemplateScript]]');
}
},
{
name: 'add IPA template',
category: 'formatting',
enabled: false,
script: function(editor) {
editor
.replaceSelection(function (selected) {
return selected
.replace(/(\/[^\/]+\/)/g, '{{IPA|$1}}')
.replace(/(\[[^\]]+\])/g, '{{IPA|$1}}');
})
.appendEditSummary('added IPA template with the help of [[m:TemplateScript|TemplateScript]]');
},
},
{
name: 'IPA link template cleanup',
category: 'formatting',
enabled: false,
script: function(editor) {
editor
.replace(/\/\{\{IPA ?link\|([^\}]+)\}\}\//g, '{{IPAslink|$1}}')
.replace(/\[\{\{IPA ?link\|([^\}]+)\}\}\]/g, '{{IPAblink|$1}}');
}
},
{
name: 'tag Armenian',
category: 'formatting',
isMinorEdit: true,
enabled: false,
script: function(editor) {
editor
.replace(/([Ա-֏ﬓ-ﬗ]+)(?=[\s\)\;\:\.\,\!\|<\'])/g, '{{lang|hy|$1}}')
.replace(/\}\}(\'+)\{\{lang\|hy\|/g, '$1')
.replace(/(\'+)(\{\{lang\|hy\|)/g, '$2$1')
.appendEditSummary('tag Armenian text with the help of [[m:TemplateScript|TemplateScript]]');
}
},
]);
});
// Add or modify CharInsert entries
window.charinsertCustom = {
"Latin": ' ꟾ {{lang|la|+}} {{wikt-lang|la|+}}',
"Arabic": ' {{lang|ar|+}} {{wikt-lang|ar|+}}',
"Cyrillic": ' {{lang|ru|+}} {{wikt-lang|ru|+}} {{lang|orv|+}} {{lang|cu|+}} {{lang|uk|+}} {{lang|be|+}}',
"Greek": ' {{wikt-lang|grc|+}}',
"IPA": ' ◌ {{IPA|{{subst:x2i|+}}}}',
"Templates": ' {{lang|ang|+}} {{IPA|+}} {{lang|zh|+}}',
};
// </nowiki>
window.simplePopups = false;
switch (mw.config.get('wgNamespaceNumber')) {
case 0: // main
importScript('User:Gary/subjects age from year.js'); break; // [[User:Gary/subjects age from year.js]]
case 2: // User:
// [[User:Erutuon/ScriptInstaller.js]]
importWiktionaryScript("User:Erutuon/ScriptInstaller.js");
importScript('User:PleaseStand/userinfo.js'); break; // [[User:PleaseStand/userinfo.js]]
}
/*
If text with the language attribute "grc" (Ancient and Medieval Greek) contains
non-Greek scripts, marks it with the class "error".
*/
function importWiktionaryScript(pageName) {
return mw.loader.load("//en.wiktionary.org/enwiki/w/index.php?title=" + pageName
+ "&action=raw&ctype=text/javascript");
}
window.withWiktionaryScript = function (pageName, successCallback, failureCallback) {
return $.getScript('//en.wiktionary.org/enwiki/w/index.php?title=' + pageName
+ '&action=raw&ctype=text/javascript')
.done(successCallback)
.fail(failureCallback);
};
const LatnToGrek = {
'E': 'Ε', 'M': 'Μ', 'v': 'ν', 'o': 'ο', 'ó': 'ό', 'ò': 'ὸ',
};
const grc = $("[lang=grc]");
if (grc.length > 0) {
$.getScript(
"//en.wikipedia.org/enwiki/w/index.php?action=raw&title=User:Erutuon/scripts/scriptRecognition.js&ctype=text/javascript&smaxage=21600&maxage=86400",
function () {
const countScripts = window.countSignificantScripts;
const fixGreek = function(str) {
return str.replace(/./g, function(char) {
return LatnToGrek[char] || char;
});
};
grc.addClass(
function() {
const innerHTML = this.innerHTML;
for (const script in countScripts(innerHTML.replace(/<\/?[^>]+>/g, ""))) {
if (script !== "Grek") {
console.log("Non-Latin script " + script + " in "
+ innerHTML + " (corrected: " + fixGreek(innerHTML) + ").");
return "error";
}
}
});
});
}
// </nowiki>
if ([ "edit", "submit" ].includes(mw.config.get("wgAction"))) {
importScript('User:Erutuon/scripts/charinsert-names.js');
var addApiResultToTextbox = function (funcName) {
return function (str) {
return withWiktionaryScript('User:Erutuon/scripts/apiWrapper.js', function () {
if (!(funcName in apiWrapper))
throw new Error("Function " + funcName + " not in apiWrapper");
apiWrapper[funcName](str, function (result) {
var $textbox = $('#wpTextbox1');
try { // avoid error: currSelection is undefined
$textbox.textSelection('replaceSelection', result);
} catch (e) {
$textbox.textSelection('setContents', result);
}
});
});
};
};
// Insert expanded wikitext into the text box, as if from
// [[Special:ExpandTemplates]].
window.insertExpandedTemplate = addApiResultToTextbox('expandTemplates');
// Replace selection in text box with the wikitext of a page.
window.insertWikitext = addApiResultToTextbox('getWikitext');
if (mw.config.get("wgCanonicalNamespace") === "") {
importScript('User:Uglemat/RefMan.js'); // Backlink: [[User:Uglemat/RefMan.js]]
importScript('User:Erutuon/scripts/cleanup.js'); // Backlink: [[User:Erutuon/scripts/cleanup.js]]
}
}
if ([ "css", "javascript", "Scribunto" ].includes(mw.config.get("wgPageContentModel")))
mw.loader.using("mediawiki.util").done(function () {
importWiktionaryScript("MediaWiki:Gadget-CodeLinks.js");
});
if (mw.config.get("wgPageName") === "MediaWiki:Gadgets-definition")
importWiktionaryScript("User:Erutuon/scripts/gadgets-definition.js");
mw.loader.using(["mediawiki.storage"], (function templatePreviewIIFE () {
"use strict";
// from [[wikt:User:Erutuon/scripts/storageUtils.js]]
var StorageWrapper = function() {
this.cookiePreferences = {
expires: 30, path: '/'
};
};
StorageWrapper.prototype = {
constructor: StorageWrapper,
localStorageAvailable: mw.storage.get("localStorageTest") !== false,
cookieAvailable: navigator.cookieEnabled,
get storageAvailable () {
return this.localStorageAvailable || this.cookieAvailable;
},
set: function(name, value) {
if (this.localStorageAvailable) {
localStorage[name] = value;
} else {
$.cookie(name, value, {});
}
},
get: function(name) {
if (this.localStorageAvailable) {
return localStorage[name];
} else {
return $.cookie(name);
}
},
remove: function(name) {
if (this.localStorageAvailable) {
delete localStorage[name];
} else {
return $.removeCookie(name);
}
},
};
// from [[wikt:User:Erutuon/scripts/templatePreview.js]]
function TemplatePreviewStorage(key) {
this.key = key;
}
TemplatePreviewStorage.prototype = Object.create(StorageWrapper.prototype, {
rawStorage: {
get: function () {
return StorageWrapper.prototype.get.call(this, this.key);
},
set: function (value) {
return StorageWrapper.prototype.set.call(this, this.key, value);
},
},
// Get and save storage in JSON format.
storage: {
get: function () {
try {
const previewPageNames = this.rawStorage;
if (previewPageNames) {
const previewPageNamesObject = JSON.parse(previewPageNames); // possible error
if (previewPageNamesObject)
return previewPageNamesObject;
}
} catch (e) {
console.log("Error parsing storage:", e);
}
return {};
},
set: function (previewPageNamesObject) {
try {
const previewPageNames = JSON.stringify(previewPageNamesObject); // possible error
this.rawStorage = previewPageNames;
} catch (e) {
console.log("Error stringifying object: ", e);
}
},
},
get: {
value: function (templateName) {
return this.storage[templateName];
},
},
set: {
value: function (templateName, previewPageName) {
const storage = this.storage;
storage[templateName] = previewPageName;
this.storage = storage;
},
},
});
const getDefaultPreviewPage = function (pageName) {
pageName = pageName.replace(/_/g, " ");
return (!/\/doc$/.test(pageName))
? pageName + "/doc"
: pageName;
};
function doIt() {
const button = $("#wpTemplateSandboxPreview input");
const box = $("#wpTemplateSandboxPage input");
if (!(box.length > 0 && button.length > 0))
return;
const storage = new TemplatePreviewStorage("previewPage");
window.templatePreviewStorage = storage;
const pageName = mw.config.get("wgPageName");
if (box.val() === "") {
const pageToPreview = storage.get(pageName) || getDefaultPreviewPage(pageName);
box.val(pageToPreview);
}
button.click(function () {
storage.set(pageName, box.val());
});
}
$(doIt);
}));
function getSearchTitles() {
return $('.mw-search-result-heading a').get()
.map(function (elem) {
return elem.textContent;
});
}
$('p').get().forEach(function (elem) {
if (elem.textContent.trim() === "") {
elem.style.backgroundColor = 'pink';
}
});
$(function() {
const addZwnjBeforeCedilla = function(elem) {
for (var child = elem.firstChild; child !== null; child = child.nextSibling) {
if (child.processedCedilla)
continue;
switch (child.nodeType) {
case Node.ELEMENT_NODE: {
addZwnjBeforeCedilla(child); break;
}
case Node.TEXT_NODE: {
child.nodeValue = child.nodeValue
.normalize('NFD')
.replace(/\u0327/g, '\u200C\u0327')
.normalize('NFC');
}
}
child.processedCedilla = true;
}
};
$(":lang(mh)").get().forEach(addZwnjBeforeCedilla);
});
(function findParserReport() {
const iter = document.createNodeIterator(document.getElementById("content"), NodeFilter.SHOW_COMMENT, function() { return NodeFilter.FILTER_ACCEPT; });
var node;
while ((node = iter.nextNode())) {
const value = node.nodeValue;
if (value.includes("NewPP limit report")) {
console.info(value.trim()); break;
}
}
})();
mw.loader.load('//en.wikipedia.org/enwiki/w/index.php?title=User:Nardog/RefRenamer.js&action=raw&ctype=text/javascript');