Pojdi na vsebino

Uporabnik:Feondulf/vector.js

Iz Wikipedije, proste enciklopedije

Opomba: Da bodo spremembe prišle do veljave, po objavi izpraznite predpomnilnik svojega brskalnika.

  • Firefox/Safari: Držite Shift in kliknite Znova naloži (Reload) ali pritisnite Ctrl + Shift + R ali Ctrl + R (⌘ + R v sistemu Mac)
  • Internet Explorer/Edge: Držite Ctrl + F5 in kliknite Osveži (Refresh) ali pritisnite Ctrl + F5
  • Google Chrome: Pritisnite Ctrl + Shift + R (⌘ + Shift + R v sistemu Mac)
  • Opera: Pritisnite Ctrl + F5.
/*********************************************************
 * 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
    "a": "а",
    "b": "б",
    "v": "в",
    "g": "г",
    "d": "д",
    "e": "е",
    "ž": "ж",
    "z": "з",
    "i": "и",
    "k": "к",
    "l": "л",
    "m": "м",
    "j": "й",
    "č": "ч",
    "s": "c",
    "š": "ш",
    "h": "х",    
    "p": "п",
    "n": "н",    
    "t": "т",      
};

/**
 * 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, /W/g, 'Ƿ');
            temp = myReplace(temp, /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, /W/g, "Ƿ");
            temp = myReplace(temp, /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() === '.&nbsp;&nbsp;') {
            $result.html('&nbsp;.&nbsp;');
        } else if ($result.html() === '&nbsp;.&nbsp;') {
            $result.html('&nbsp;&nbsp;.');
        } else {
            $result.html('.&nbsp;&nbsp;');
        }
    }, 300);

    $.get(
        'https://xtools.wmcloud.org/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);
    });
});