mirror of
https://github.com/home-assistant/frontend.git
synced 2025-11-06 01:19:45 +00:00
* add cyrilic * Update src/common/string/slugify.ts --------- Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
// https://gist.github.com/hagemann/382adfc57adbd5af078dc93feef01fe1
|
||
export const slugify = (value: string, delimiter = "_") => {
|
||
const a =
|
||
"àáâäæãåāăąабçćčđďдèéêëēėęěеёэфğǵгḧхîïíīįìıİийкłлḿмñńǹňнôöòóœøōõőоṕпŕřрßśšşșсťțтûüùúūǘůűųувẃẍÿýыžźżз·";
|
||
const b = `aaaaaaaaaaabcccdddeeeeeeeeeeefggghhiiiiiiiiijkllmmnnnnnoooooooooopprrrsssssstttuuuuuuuuuuvwxyyyzzzz${delimiter}`;
|
||
const p = new RegExp(a.split("").join("|"), "g");
|
||
const complex_cyrillic = {
|
||
ж: "zh",
|
||
х: "kh",
|
||
ц: "ts",
|
||
ч: "ch",
|
||
ш: "sh",
|
||
щ: "shch",
|
||
ю: "iu",
|
||
я: "ia",
|
||
};
|
||
|
||
let slugified;
|
||
|
||
if (value === "") {
|
||
slugified = "";
|
||
} else {
|
||
slugified = value
|
||
.toString()
|
||
.toLowerCase()
|
||
.replace(p, (c) => b.charAt(a.indexOf(c))) // Replace special characters
|
||
.replace(/[а-я]/g, (c) => complex_cyrillic[c] || "") // Replace some cyrillic characters
|
||
.replace(/(\d),(?=\d)/g, "$1") // Remove Commas between numbers
|
||
.replace(/[^a-z0-9]+/g, delimiter) // Replace all non-word characters
|
||
.replace(new RegExp(`(${delimiter})\\1+`, "g"), "$1") // Replace multiple delimiters with single delimiter
|
||
.replace(new RegExp(`^${delimiter}+`), "") // Trim delimiter from start of text
|
||
.replace(new RegExp(`${delimiter}+$`), ""); // Trim delimiter from end of text
|
||
|
||
if (slugified === "") {
|
||
slugified = "unknown";
|
||
}
|
||
}
|
||
|
||
return slugified;
|
||
};
|