Участник:Feondulf/monobook.js
Перейти к навигации
Перейти к поиску
Страница персонального оформления. JS-код ниже относится к теме оформления «MonoBook». CSS-файл для этой темы: Участник:Feondulf/monobook.css.
После сохранения очистите кэш браузера.
После сохранения очистите кэш браузера.
/*********************************************************
* Created by PiRSquared17 *
*/
function doConv(event) {
if ($("#mw-content-text-clone").length)
$("#mw-content-text-clone").remove();
//console.log("Entered doConv, (possibly removed old clone)");
// get target style
var targetstyle = event.data.outputstyle;
var contentClone;
$("#mw-content-text").show();
contentClone = $("#mw-content-text").clone();
contentClone.attr("id", "mw-content-text-clone");
convertStyle(contentClone, "gw", targetstyle);
convertStyle(contentClone, "yoghwynn", targetstyle);
convertStyle(contentClone, "insularwynn", targetstyle);
convertStyle(contentClone, "runes", targetstyle);
$("#mw-content-text").hide();
contentClone.addClass("content-" + targetstyle);
contentClone.insertAfter("#mw-content-text");
$(".click-gw").click({"outputstyle": "gw"}, doConv);
$(".click-yoghwynn").click({"outputstyle": "yoghwynn"}, doConv);
$(".click-insularwynn").click({"outputstyle": "insularwynn"}, doConv);
$(".click-runes").click({"outputstyle": "runes"}, doConv);
}
// any errors? Fix them
var runes = { // rune to latin substitutions
"ᚠ": "f",
"ᚢ": "u",
"ᚦ": "þ",
"ᚩ": "o",
"ᚱ": "r",
"ᚳ": "c",
"ᚷ": "ġ",
"ᚹ": "w",
"ᚻ": "h",
"ᚾ": "n",
"ᛁ": "i",
"ᛄ": "ġ",
"ᛇ": "ēo",
"ᛈ": "p",
"ᛉ": "x",
"ᛋ": "s",
"ᛏ": "t",
"ᛒ": "b",
"ᛖ": "e",
"ᛗ": "m",
"ᛚ": "l",
"ᛝ": "ng", // this is correct
"ᛟ": "œ",
"ᛞ": "d",
"ᚪ": "a",
"ᚫ": "æ",
"ᚣ": "y",
"ᛡ": "io", // not ia
"ᛠ": "ea", // this is ok
"ᛢ": "cw",
"ᛣ": "c",
"ᛤ": "cc",
"ᛥ": "st",
"ᚸ": "g"
};
// again, please report any errors, please include replacement for this
var runes2 = { // latin -> runes
"а": "ᚪ",
"б": "ᛒ",
"в": "ᚠ",
"г": "ᚷ",
"д": "ᛞ",
"е": "ᛖ",
"ё": "ᛇᚩ",
"ж": "ᚷᚳ",
"з": "ᛋ",
"и": "ᛁ",
"й": "ᛡ",
"к": "ᛣ",
"л": "ᛚ",
"м": "ᛗ",
"н": "ᚾ",
"о": "ᚩ",
"п": "ᛈ",
"р": "ᚱ",
"с": "ᛋ",
"т": "ᛏ",
"у": "ᚣ",
"ф": "ᚦ",
"х": "ᚻ",
"ц": "ᛏᛋ",
"ч": "ᚳ",
"ш": "ᛋᚳ",
"щ": "ᛋᚳᛁ",
"ь": "'",
"ы": "ᚢᛁ",
"ъ": "''",
"э": "ᚫ",
"ю": "ᛇᚢ",
"я": "ᛇᚪ",
};
/**
* Two or more characters -> a single rune or a pattern of runes
* Put here anything that should be converted from two or more gw characters to one or more rune.
*/
rune2_exceptions = [
["ea", "ᛠ"],
["eo", "ᛇ"],
["io", "ᛡ"],
["ng", "ᛝ"],
["cc", "ᛤ"],
["cw", "ᛢ"]
];
/**
* Replace occurrences of regex, possibly normalize
*
* For nodes (not text) input, modifies object
* @param input the input text or jQuery object
* @param regex the regular expression
* @param replacement replacement
* @param norm Normalize input? (also converts to lowercase)
* @returns the converted version of input (as text/DOM node)
*/
var myReplace = function(input, regex, replacement, norm) {
if (typeof regex == "string")
regex = new RegExp(regex, "g");
if (typeof input == "string")
return norm?normalizeString(input).toLowerCase():input.replace(regex,replacement);
if (typeof input == "undefined") return;
var node = input[0];
if (typeof node == "undefined") node = input;
if (!("nodeType" in node)) return node;
if (node.nodeType == 3) {
if (norm) node.nodeValue = normalizeString(node.nodeValue).toLowerCase();
node.nodeValue = node.nodeValue.replace(regex, replacement);
} else {
if ($(node).hasClass("nochange")) return node;
if (!("childNodes" in node)) return node;
for (var i = 0, len = node.childNodes.length; i < len; i++)
myReplace($(node.childNodes[i]), regex, replacement, norm);
}
return node;
}
/**
* Convert style of text/jQuery node from one spelling style to another
*
* @param inputhtml input text or jQuery node
* @param inputstyle possible values: "gw", "yoghwynn", "runes"
* @param outputstyle possible values:"gw", "yoghwynn", "runes"
* @returns converted version of inputhtml
*/
function convertStyle(inputhtml, inputstyle, outputstyle) {
var temp = inputhtml;
if (inputstyle == outputstyle) return inputhtml;
if (inputstyle != "runes" && outputstyle != "runes") {
if (outputstyle == "yoghwynn") {
temp = myReplace(temp, /[Ᵹ]/g, 'Ȝ');
temp = myReplace(temp, /[gᵹ]/g, 'ȝ');
temp = myReplace(temp, /ruwiki/w/g, 'Ƿ');
temp = myReplace(temp, /ruwiki/w/g, 'ƿ');
} else if (outputstyle == "gw") {
temp = myReplace(temp, /[ȜꝽ]/g, "G");
temp = myReplace(temp, /[ȝᵹ]/g, "g");
temp = myReplace(temp, /Ƿ/g, "W");
temp = myReplace(temp, /ƿ/g, "w");
} else if (outputstyle == "insularwynn") {
temp = myReplace(temp, /[Ȝ]/g, "Ᵹ");
temp = myReplace(temp, /[gȝ]/g, "ᵹ");
temp = myReplace(temp, /ruwiki/w/g, "Ƿ");
temp = myReplace(temp, /ruwiki/w/g, "ƿ");
}
} else if (inputstyle == "runes") {
for (var rune in runes) {
temp = myReplace(temp, rune, runes[rune]);
}
return convertStyle(temp, "gw", outputstyle);
} else if (outputstyle == "runes") {
temp = convertStyle(myReplace(temp,"","",1), inputstyle, "gw");
for (var i = 0; i < rune2_exceptions.length; i++) {
temp = myReplace(temp,rune2_exceptions[i][0],rune2_exceptions[i][1]);
}
for (var latin in runes2) {
temp = myReplace(temp, latin, runes2[latin]);
}
}
return temp;
}
/**
* Remove some accents, in an Anglo-Saxon-centric manner
*
* @param r the string
* @returns normalized version (same case, e.g., É -> E, é -> e)
*/
function normalizeString(r){
// from http://stackoverflow.com/questions/8186302/javascript-removing-accents , modified
// same code is found in another S.O. post
r = myReplace(r, /ċ/g , "c");
r = myReplace(r, /Ċ/g , "C");
r = myReplace(r, "Ġ" , "G");
r = myReplace(r, "ġ" , "g");
r = myReplace(r, /[àáâãäåā]/g, "a");
r = myReplace(r, /[ÀÁÂÃÄÅĀ]/g, "A");
r = myReplace(r, /ç/g , "s");
r = myReplace(r, /Ç/g , "S");
r = myReplace(r, /[èéêëē]/g , "e");
r = myReplace(r, /[ÈÉÊËĒ]/g , "E");
r = myReplace(r, /[ìíîïī]/g , "i");
r = myReplace(r, /[ÌÍÎÏĪ]/g , "I");
r = myReplace(r, /ñ/g , "n");
r = myReplace(r, /Ñ/g , "n");
r = myReplace(r, /[òóôõöō]/g , "o");
r = myReplace(r, /[ÒÓÔÕÖŌ]/g , "O");
r = myReplace(r, /[ùúûüū]/g , "u");
r = myReplace(r, /[ÙÚÛÜŪ]/g , "U");
r = myReplace(r, /[ýÿȳ]/g , "y");
r = myReplace(r, /[ŸȲ]/g , "Y");
r = myReplace(r, /ǣ/g , "æ");
r = myReplace(r, /Ǣ/g , "Æ");
r = myReplace(r, /Ḡ/g , "G");
r = myReplace(r, /ḡ/g , "g");
return r;
}
/*
* This is code to be executed when the document is ready
* Basically, add [ gw ] [ ȝƿ ] [ ᚱᚢᚾ ].
* Clicking each link converts the document to that style.
* (see doConv)
*/
$(function($) {
if ( mw.config.get( 'wgAction' ) !== 'view') {
return;
}
$("#mw-content-text").prepend($("<div class=\"center\"><small>[ <a href=\"javascript:void(0);\" class=\"click-gw\">gw</a> ] [ <a href=\"javascript:void(0);\" class=\"click-runes\">ᚱᚢᚾ</a> ]<sup><a href=\"/wiki/Wikipedia:Stylistic_and_font_options\" title=\"Style and font help\">?</a></sup></small></div>"));
$(".click-gw").click({"outputstyle": "gw"}, doConv);
$(".click-runes").click({"outputstyle": "runes"}, doConv);
});
/**
* XTools ArticleInfo gadget
* Based on meta.wikimedia.org/wiki/User:Hedonil/XTools
* Documentation: mediawiki.org/wiki/XTools/ArticleInfo_gadget
* Released under GPL 3.0+ license
* For updates, please copy and paste from https://xtools.wmcloud.org/articleinfo-gadget.js
*/
$(function () {
if (mw.config.get('wgArticleId') === 0 || // no deleted articles, no special pages
mw.config.get('wgCurRevisionId') !== mw.config.get('wgRevisionId') || // only current revision
mw.config.get('wgAction') !== 'view') { // only when viewing a page, not editing
return;
}
var $result,
markup = "<div id='xtools' style='font-size:84%; line-height:1.2em;" +
"width:auto;'><span id='xtools_result'>.</span></div>";
$(markup).insertBefore('#contentSub');
$result = $('#xtools_result');
var loadinganimation = window.setInterval(function () {
if ($result.html() === '. ') {
$result.html(' . ');
} else if ($result.html() === ' . ') {
$result.html(' .');
} else {
$result.html('. ');
}
}, 300);
$.get(
'https://xtools.wmcloud.org/ruwiki/api/page/articleinfo/' +
mw.config.get('wgServerName') + '/' +
mw.config.get('wgPageName').replace(/["?%&+\\]/g, escape) + '?format=html' +
'&uselang=' + mw.config.get('wgUserLanguage')
).done(function (result) {
$result.html(result);
clearInterval(loadinganimation);
});
});