2020-07-27 09:35:34 +00:00
|
|
|
// Original code from: https://gist.github.com/hagemann/382adfc57adbd5af078dc93feef01fe1
|
2020-07-28 15:57:48 +00:00
|
|
|
const slugify = (text: string) => {
|
2020-07-27 09:35:34 +00:00
|
|
|
const a =
|
|
|
|
"àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·/_,:;";
|
|
|
|
const b =
|
|
|
|
"aaaaaaaaaacccddeeeeeeeegghiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz------";
|
|
|
|
const p = new RegExp(a.split("").join("|"), "g");
|
|
|
|
|
2020-07-28 15:57:48 +00:00
|
|
|
return text
|
2020-07-27 09:35:34 +00:00
|
|
|
.toString()
|
|
|
|
.toLowerCase()
|
|
|
|
.replace(/\s+/g, "-") // Replace spaces with -
|
|
|
|
.replace(p, (c) => b.charAt(a.indexOf(c))) // Replace special characters
|
|
|
|
.replace(/&/g, "-and-") // Replace & with 'and'
|
|
|
|
.replace(/[^\w-]+/g, "") // Remove all non-word characters
|
|
|
|
.replace(/--+/g, "-") // Replace multiple - with single -
|
|
|
|
.replace(/^-+/, "") // Trim - from start of text
|
|
|
|
.replace(/-+$/, ""); // Trim - from end of text
|
|
|
|
};
|
|
|
|
|
2020-07-28 15:57:48 +00:00
|
|
|
const Slugify = (): void => {
|
|
|
|
const title: HTMLInputElement | null = document.querySelector(
|
|
|
|
"input[data-slugify='title']"
|
|
|
|
);
|
|
|
|
const slug: HTMLInputElement | null = document.querySelector(
|
|
|
|
"input[data-slugify='slug']"
|
|
|
|
);
|
2020-07-27 09:35:34 +00:00
|
|
|
|
|
|
|
if (title && slug) {
|
|
|
|
title.addEventListener("input", () => {
|
|
|
|
slug.value = slugify(title.value);
|
2021-08-10 14:25:13 +00:00
|
|
|
slug.dispatchEvent(new Event("change"));
|
2020-07-27 09:35:34 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export default Slugify;
|