mirror of
https://code.castopod.org/adaures/castopod.git
synced 2024-09-08 03:39:20 +02:00
- add basic rollup config to bundle minified and browser compatible js - use babel to transpile typescript files to js - add static code checkers: eslint and stylelint - update package.json scripts - update DEPENDENCIES.md file to include rollup and popper - set html in rss feed description fields - update Podcast and Episode entities to add description_html attribute generated by parsing markdown to html using parsedown #9
37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
// Original code from: https://gist.github.com/hagemann/382adfc57adbd5af078dc93feef01fe1
|
|
const slugify = (text: string) => {
|
|
const a =
|
|
"àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·/_,:;";
|
|
const b =
|
|
"aaaaaaaaaacccddeeeeeeeegghiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz------";
|
|
const p = new RegExp(a.split("").join("|"), "g");
|
|
|
|
return text
|
|
.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
|
|
};
|
|
|
|
const Slugify = (): void => {
|
|
const title: HTMLInputElement | null = document.querySelector(
|
|
"input[data-slugify='title']"
|
|
);
|
|
const slug: HTMLInputElement | null = document.querySelector(
|
|
"input[data-slugify='slug']"
|
|
);
|
|
|
|
if (title && slug) {
|
|
title.addEventListener("input", () => {
|
|
slug.value = slugify(title.value);
|
|
});
|
|
}
|
|
};
|
|
|
|
export default Slugify;
|