All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 32s
532 lines
9.8 KiB
JavaScript
532 lines
9.8 KiB
JavaScript
/*global XRegExp*/
|
||
"use strict";
|
||
{
|
||
const LATIN_MAP = {
|
||
À: "A",
|
||
Á: "A",
|
||
Â: "A",
|
||
Ã: "A",
|
||
Ä: "A",
|
||
Å: "A",
|
||
Æ: "AE",
|
||
Ç: "C",
|
||
È: "E",
|
||
É: "E",
|
||
Ê: "E",
|
||
Ë: "E",
|
||
Ì: "I",
|
||
Í: "I",
|
||
Î: "I",
|
||
Ï: "I",
|
||
Ð: "D",
|
||
Ñ: "N",
|
||
Ò: "O",
|
||
Ó: "O",
|
||
Ô: "O",
|
||
Õ: "O",
|
||
Ö: "O",
|
||
Ő: "O",
|
||
Ø: "O",
|
||
Ù: "U",
|
||
Ú: "U",
|
||
Û: "U",
|
||
Ü: "U",
|
||
Ű: "U",
|
||
Ý: "Y",
|
||
Þ: "TH",
|
||
Ÿ: "Y",
|
||
ß: "ss",
|
||
à: "a",
|
||
á: "a",
|
||
â: "a",
|
||
ã: "a",
|
||
ä: "a",
|
||
å: "a",
|
||
æ: "ae",
|
||
ç: "c",
|
||
è: "e",
|
||
é: "e",
|
||
ê: "e",
|
||
ë: "e",
|
||
ì: "i",
|
||
í: "i",
|
||
î: "i",
|
||
ï: "i",
|
||
ð: "d",
|
||
ñ: "n",
|
||
ò: "o",
|
||
ó: "o",
|
||
ô: "o",
|
||
õ: "o",
|
||
ö: "o",
|
||
ő: "o",
|
||
ø: "o",
|
||
ù: "u",
|
||
ú: "u",
|
||
û: "u",
|
||
ü: "u",
|
||
ű: "u",
|
||
ý: "y",
|
||
þ: "th",
|
||
ÿ: "y",
|
||
};
|
||
const LATIN_SYMBOLS_MAP = {
|
||
"©": "(c)",
|
||
};
|
||
const GREEK_MAP = {
|
||
α: "a",
|
||
β: "b",
|
||
γ: "g",
|
||
δ: "d",
|
||
ε: "e",
|
||
ζ: "z",
|
||
η: "h",
|
||
θ: "8",
|
||
ι: "i",
|
||
κ: "k",
|
||
λ: "l",
|
||
μ: "m",
|
||
ν: "n",
|
||
ξ: "3",
|
||
ο: "o",
|
||
π: "p",
|
||
ρ: "r",
|
||
σ: "s",
|
||
τ: "t",
|
||
υ: "y",
|
||
φ: "f",
|
||
χ: "x",
|
||
ψ: "ps",
|
||
ω: "w",
|
||
ά: "a",
|
||
έ: "e",
|
||
ί: "i",
|
||
ό: "o",
|
||
ύ: "y",
|
||
ή: "h",
|
||
ώ: "w",
|
||
ς: "s",
|
||
ϊ: "i",
|
||
ΰ: "y",
|
||
ϋ: "y",
|
||
ΐ: "i",
|
||
Α: "A",
|
||
Β: "B",
|
||
Γ: "G",
|
||
Δ: "D",
|
||
Ε: "E",
|
||
Ζ: "Z",
|
||
Η: "H",
|
||
Θ: "8",
|
||
Ι: "I",
|
||
Κ: "K",
|
||
Λ: "L",
|
||
Μ: "M",
|
||
Ν: "N",
|
||
Ξ: "3",
|
||
Ο: "O",
|
||
Π: "P",
|
||
Ρ: "R",
|
||
Σ: "S",
|
||
Τ: "T",
|
||
Υ: "Y",
|
||
Φ: "F",
|
||
Χ: "X",
|
||
Ψ: "PS",
|
||
Ω: "W",
|
||
Ά: "A",
|
||
Έ: "E",
|
||
Ί: "I",
|
||
Ό: "O",
|
||
Ύ: "Y",
|
||
Ή: "H",
|
||
Ώ: "W",
|
||
Ϊ: "I",
|
||
Ϋ: "Y",
|
||
};
|
||
const TURKISH_MAP = {
|
||
ş: "s",
|
||
Ş: "S",
|
||
ı: "i",
|
||
İ: "I",
|
||
ç: "c",
|
||
Ç: "C",
|
||
ü: "u",
|
||
Ü: "U",
|
||
ö: "o",
|
||
Ö: "O",
|
||
ğ: "g",
|
||
Ğ: "G",
|
||
};
|
||
const ROMANIAN_MAP = {
|
||
ă: "a",
|
||
î: "i",
|
||
ș: "s",
|
||
ț: "t",
|
||
â: "a",
|
||
Ă: "A",
|
||
Î: "I",
|
||
Ș: "S",
|
||
Ț: "T",
|
||
Â: "A",
|
||
};
|
||
const RUSSIAN_MAP = {
|
||
а: "a",
|
||
б: "b",
|
||
в: "v",
|
||
г: "g",
|
||
д: "d",
|
||
е: "e",
|
||
ё: "yo",
|
||
ж: "zh",
|
||
з: "z",
|
||
и: "i",
|
||
й: "j",
|
||
к: "k",
|
||
л: "l",
|
||
м: "m",
|
||
н: "n",
|
||
о: "o",
|
||
п: "p",
|
||
р: "r",
|
||
с: "s",
|
||
т: "t",
|
||
у: "u",
|
||
ф: "f",
|
||
х: "h",
|
||
ц: "c",
|
||
ч: "ch",
|
||
ш: "sh",
|
||
щ: "sh",
|
||
ъ: "",
|
||
ы: "y",
|
||
ь: "",
|
||
э: "e",
|
||
ю: "yu",
|
||
я: "ya",
|
||
А: "A",
|
||
Б: "B",
|
||
В: "V",
|
||
Г: "G",
|
||
Д: "D",
|
||
Е: "E",
|
||
Ё: "Yo",
|
||
Ж: "Zh",
|
||
З: "Z",
|
||
И: "I",
|
||
Й: "J",
|
||
К: "K",
|
||
Л: "L",
|
||
М: "M",
|
||
Н: "N",
|
||
О: "O",
|
||
П: "P",
|
||
Р: "R",
|
||
С: "S",
|
||
Т: "T",
|
||
У: "U",
|
||
Ф: "F",
|
||
Х: "H",
|
||
Ц: "C",
|
||
Ч: "Ch",
|
||
Ш: "Sh",
|
||
Щ: "Sh",
|
||
Ъ: "",
|
||
Ы: "Y",
|
||
Ь: "",
|
||
Э: "E",
|
||
Ю: "Yu",
|
||
Я: "Ya",
|
||
};
|
||
const UKRAINIAN_MAP = {
|
||
Є: "Ye",
|
||
І: "I",
|
||
Ї: "Yi",
|
||
Ґ: "G",
|
||
є: "ye",
|
||
і: "i",
|
||
ї: "yi",
|
||
ґ: "g",
|
||
};
|
||
const CZECH_MAP = {
|
||
č: "c",
|
||
ď: "d",
|
||
ě: "e",
|
||
ň: "n",
|
||
ř: "r",
|
||
š: "s",
|
||
ť: "t",
|
||
ů: "u",
|
||
ž: "z",
|
||
Č: "C",
|
||
Ď: "D",
|
||
Ě: "E",
|
||
Ň: "N",
|
||
Ř: "R",
|
||
Š: "S",
|
||
Ť: "T",
|
||
Ů: "U",
|
||
Ž: "Z",
|
||
};
|
||
const SLOVAK_MAP = {
|
||
á: "a",
|
||
ä: "a",
|
||
č: "c",
|
||
ď: "d",
|
||
é: "e",
|
||
í: "i",
|
||
ľ: "l",
|
||
ĺ: "l",
|
||
ň: "n",
|
||
ó: "o",
|
||
ô: "o",
|
||
ŕ: "r",
|
||
š: "s",
|
||
ť: "t",
|
||
ú: "u",
|
||
ý: "y",
|
||
ž: "z",
|
||
Á: "a",
|
||
Ä: "A",
|
||
Č: "C",
|
||
Ď: "D",
|
||
É: "E",
|
||
Í: "I",
|
||
Ľ: "L",
|
||
Ĺ: "L",
|
||
Ň: "N",
|
||
Ó: "O",
|
||
Ô: "O",
|
||
Ŕ: "R",
|
||
Š: "S",
|
||
Ť: "T",
|
||
Ú: "U",
|
||
Ý: "Y",
|
||
Ž: "Z",
|
||
};
|
||
const POLISH_MAP = {
|
||
ą: "a",
|
||
ć: "c",
|
||
ę: "e",
|
||
ł: "l",
|
||
ń: "n",
|
||
ó: "o",
|
||
ś: "s",
|
||
ź: "z",
|
||
ż: "z",
|
||
Ą: "A",
|
||
Ć: "C",
|
||
Ę: "E",
|
||
Ł: "L",
|
||
Ń: "N",
|
||
Ó: "O",
|
||
Ś: "S",
|
||
Ź: "Z",
|
||
Ż: "Z",
|
||
};
|
||
const LATVIAN_MAP = {
|
||
ā: "a",
|
||
č: "c",
|
||
ē: "e",
|
||
ģ: "g",
|
||
ī: "i",
|
||
ķ: "k",
|
||
ļ: "l",
|
||
ņ: "n",
|
||
š: "s",
|
||
ū: "u",
|
||
ž: "z",
|
||
Ā: "A",
|
||
Č: "C",
|
||
Ē: "E",
|
||
Ģ: "G",
|
||
Ī: "I",
|
||
Ķ: "K",
|
||
Ļ: "L",
|
||
Ņ: "N",
|
||
Š: "S",
|
||
Ū: "U",
|
||
Ž: "Z",
|
||
};
|
||
const ARABIC_MAP = {
|
||
أ: "a",
|
||
ب: "b",
|
||
ت: "t",
|
||
ث: "th",
|
||
ج: "g",
|
||
ح: "h",
|
||
خ: "kh",
|
||
د: "d",
|
||
ذ: "th",
|
||
ر: "r",
|
||
ز: "z",
|
||
س: "s",
|
||
ش: "sh",
|
||
ص: "s",
|
||
ض: "d",
|
||
ط: "t",
|
||
ظ: "th",
|
||
ع: "aa",
|
||
غ: "gh",
|
||
ف: "f",
|
||
ق: "k",
|
||
ك: "k",
|
||
ل: "l",
|
||
م: "m",
|
||
ن: "n",
|
||
ه: "h",
|
||
و: "o",
|
||
ي: "y",
|
||
};
|
||
const LITHUANIAN_MAP = {
|
||
ą: "a",
|
||
č: "c",
|
||
ę: "e",
|
||
ė: "e",
|
||
į: "i",
|
||
š: "s",
|
||
ų: "u",
|
||
ū: "u",
|
||
ž: "z",
|
||
Ą: "A",
|
||
Č: "C",
|
||
Ę: "E",
|
||
Ė: "E",
|
||
Į: "I",
|
||
Š: "S",
|
||
Ų: "U",
|
||
Ū: "U",
|
||
Ž: "Z",
|
||
};
|
||
const SERBIAN_MAP = {
|
||
ђ: "dj",
|
||
ј: "j",
|
||
љ: "lj",
|
||
њ: "nj",
|
||
ћ: "c",
|
||
џ: "dz",
|
||
đ: "dj",
|
||
Ђ: "Dj",
|
||
Ј: "j",
|
||
Љ: "Lj",
|
||
Њ: "Nj",
|
||
Ћ: "C",
|
||
Џ: "Dz",
|
||
Đ: "Dj",
|
||
};
|
||
const AZERBAIJANI_MAP = {
|
||
ç: "c",
|
||
ə: "e",
|
||
ğ: "g",
|
||
ı: "i",
|
||
ö: "o",
|
||
ş: "s",
|
||
ü: "u",
|
||
Ç: "C",
|
||
Ə: "E",
|
||
Ğ: "G",
|
||
İ: "I",
|
||
Ö: "O",
|
||
Ş: "S",
|
||
Ü: "U",
|
||
};
|
||
const GEORGIAN_MAP = {
|
||
ა: "a",
|
||
ბ: "b",
|
||
გ: "g",
|
||
დ: "d",
|
||
ე: "e",
|
||
ვ: "v",
|
||
ზ: "z",
|
||
თ: "t",
|
||
ი: "i",
|
||
კ: "k",
|
||
ლ: "l",
|
||
მ: "m",
|
||
ნ: "n",
|
||
ო: "o",
|
||
პ: "p",
|
||
ჟ: "j",
|
||
რ: "r",
|
||
ს: "s",
|
||
ტ: "t",
|
||
უ: "u",
|
||
ფ: "f",
|
||
ქ: "q",
|
||
ღ: "g",
|
||
ყ: "y",
|
||
შ: "sh",
|
||
ჩ: "ch",
|
||
ც: "c",
|
||
ძ: "dz",
|
||
წ: "w",
|
||
ჭ: "ch",
|
||
ხ: "x",
|
||
ჯ: "j",
|
||
ჰ: "h",
|
||
};
|
||
|
||
const ALL_DOWNCODE_MAPS = [
|
||
LATIN_MAP,
|
||
LATIN_SYMBOLS_MAP,
|
||
GREEK_MAP,
|
||
TURKISH_MAP,
|
||
ROMANIAN_MAP,
|
||
RUSSIAN_MAP,
|
||
UKRAINIAN_MAP,
|
||
CZECH_MAP,
|
||
SLOVAK_MAP,
|
||
POLISH_MAP,
|
||
LATVIAN_MAP,
|
||
ARABIC_MAP,
|
||
LITHUANIAN_MAP,
|
||
SERBIAN_MAP,
|
||
AZERBAIJANI_MAP,
|
||
GEORGIAN_MAP,
|
||
];
|
||
|
||
const Downcoder = {
|
||
Initialize: function () {
|
||
if (Downcoder.map) {
|
||
// already made
|
||
return;
|
||
}
|
||
Downcoder.map = {};
|
||
for (const lookup of ALL_DOWNCODE_MAPS) {
|
||
Object.assign(Downcoder.map, lookup);
|
||
}
|
||
Downcoder.regex = new RegExp(
|
||
Object.keys(Downcoder.map).join("|"),
|
||
"g",
|
||
);
|
||
},
|
||
};
|
||
|
||
function downcode(slug) {
|
||
Downcoder.Initialize();
|
||
return slug.replace(Downcoder.regex, function (m) {
|
||
return Downcoder.map[m];
|
||
});
|
||
}
|
||
|
||
function URLify(s, num_chars, allowUnicode) {
|
||
// changes, e.g., "Petty theft" to "petty-theft"
|
||
if (!allowUnicode) {
|
||
s = downcode(s);
|
||
}
|
||
s = s.toLowerCase(); // convert to lowercase
|
||
// if downcode doesn't hit, the char will be stripped here
|
||
if (allowUnicode) {
|
||
// Keep Unicode letters including both lowercase and uppercase
|
||
// characters, whitespace, and dash; remove other characters.
|
||
s = XRegExp.replace(s, XRegExp("[^-_\\p{L}\\p{N}\\s]", "g"), "");
|
||
} else {
|
||
s = s.replace(/[^-\w\s]/g, ""); // remove unneeded chars
|
||
}
|
||
s = s.replace(/^\s+|\s+$/g, ""); // trim leading/trailing spaces
|
||
s = s.replace(/[-\s]+/g, "-"); // convert spaces to hyphens
|
||
s = s.substring(0, num_chars); // trim to first num_chars chars
|
||
return s.replace(/-+$/g, ""); // trim any trailing hyphens
|
||
}
|
||
window.URLify = URLify;
|
||
}
|