UNPKG

diginext-utils

Version:
331 lines 6.83 kB
export const makeSlug = (s, opt = {}) => { // s = String(s); // opt = Object(opt); var defaults = { delimiter: "-", lowercase: true, replacements: {}, transliterate: typeof XRegExp === "undefined" ? true : false, }; // Merge options for (var k in defaults) { if (!opt.hasOwnProperty(k)) { opt[k] = defaults[k]; } } var char_map = { // Latin À: "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", ß: "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", // Latin symbols "©": "(c)", // Greek Α: "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", α: "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", // Turkish Ş: "S", İ: "I", Ğ: "G", ş: "s", ı: "i", ğ: "g", // Russian А: "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", // Ukrainian Є: "Ye", І: "I", Ї: "Yi", Ґ: "G", є: "ye", і: "i", ї: "yi", ґ: "g", // Czech Č: "C", Ď: "D", Ě: "E", Ň: "N", Ř: "R", Š: "S", Ť: "T", Ů: "U", Ž: "Z", č: "c", ď: "d", ě: "e", ň: "n", ř: "r", š: "s", ť: "t", ů: "u", ž: "z", // Polish Ą: "A", Ć: "C", Ę: "e", Ł: "L", Ń: "N", Ś: "S", Ź: "Z", Ż: "Z", ą: "a", ć: "c", ę: "e", ł: "l", ń: "n", ś: "s", ź: "z", ż: "z", // Latvian Ā: "A", Ē: "E", Ģ: "G", Ī: "i", Ķ: "k", Ļ: "L", Ņ: "N", Ū: "u", ā: "a", ē: "e", ģ: "g", ī: "i", ķ: "k", ļ: "l", ņ: "n", ū: "u", }; // Vietnamese s = s.replace(/á|à|ả|ạ|ã|ă|ắ|ằ|ẳ|ẵ|ặ|â|ấ|ầ|ẩ|ẫ|ậ/gi, "a"); s = s.replace(/é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ/gi, "e"); s = s.replace(/i|í|ì|ỉ|ĩ|ị/gi, "i"); s = s.replace(/ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ/gi, "o"); s = s.replace(/ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự/gi, "u"); s = s.replace(/ý|ỳ|ỷ|ỹ|ỵ/gi, "y"); s = s.replace(/đ/gi, "d"); s = s.replace(/_/gi, "-"); s = s.replace(/\-\-\-\-\-/gi, "-"); s = s.replace(/\-\-\-\-/gi, "-"); s = s.replace(/\-\-\-/gi, "-"); s = s.replace(/\-\-/gi, "-"); s = "@" + s + "@"; s = s.replace(/\@\-|\-\@|\@/gi, ""); // Make custom replacements for (var k in opt.replacements) { s = s.replace(RegExp(k, "g"), opt.replacements[k]); } // Transliterate characters to ASCII if (opt.transliterate) { for (var k in char_map) { s = s.replace(RegExp(k, "g"), char_map[k]); } } // Replace non-alphanumeric characters with our delimiter var alnum = typeof XRegExp === "undefined" ? RegExp("[^a-z0-9]+", "ig") : XRegExp("[^\\p{L}\\p{N}]+", "ig"); s = s.replace(alnum, opt.delimiter); // Remove duplicate delimiters s = s.replace(RegExp("[" + opt.delimiter + "]{2,}", "g"), opt.delimiter); // Truncate slug to max. characters s = s.substring(0, opt.limit); // Remove delimiter from ends s = s.replace(RegExp("(^" + opt.delimiter + "|" + opt.delimiter + "$)", "g"), ""); return opt.lowercase ? s.toLowerCase() : s; }; const slug = { makeSlug }; export default slug; //# sourceMappingURL=Slug.js.map