|
@@ -0,0 +1,43 @@
|
|
|
+import { Controller } from '@hotwired/stimulus'
|
|
|
+
|
|
|
+export default class extends Controller {
|
|
|
+ static targets = ['title', 'slug', 'bouton']
|
|
|
+
|
|
|
+ async open() {
|
|
|
+ if (this.slugTarget.hasAttribute('readonly')) {
|
|
|
+ sessionStorage.setItem('oldSlugValue', this.slugTarget.value)
|
|
|
+ this.slugTarget.removeAttribute('readonly');
|
|
|
+ this.slugTarget.value = await this.getSlug(this.titleTarget.value);
|
|
|
+ this.slugTarget.focus();
|
|
|
+ this.boutonTarget.innerText = 'Annuler la modification';
|
|
|
+ } else {
|
|
|
+ this.slugTarget.value = sessionStorage.getItem('oldSlugValue')
|
|
|
+ sessionStorage.removeItem('oldSlugValue')
|
|
|
+ this.slugTarget.setAttribute('readonly', true);
|
|
|
+ this.boutonTarget.innerText = 'Générer le slug';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async getSlug(text) {
|
|
|
+ // Envoyer le titre au serveur pour générer le slug
|
|
|
+ const response = await fetch('/generate-slug', {
|
|
|
+ method: 'POST',
|
|
|
+ headers: {
|
|
|
+ 'Content-Type': 'application/json',
|
|
|
+ 'X-Requested-With': 'XMLHttpRequest'
|
|
|
+ },
|
|
|
+ body: JSON.stringify({ title: text })
|
|
|
+ })
|
|
|
+ const data = await response.json()
|
|
|
+ return data.slug
|
|
|
+ }
|
|
|
+
|
|
|
+ generateSlug(text) {
|
|
|
+ return text.toString().toLowerCase()
|
|
|
+ .replace(/\s+/g, '-') // Remplace les espaces par des tirets
|
|
|
+ .replace(/[^\w\-]+/g, '') // Enlève les caractères non alphanumériques
|
|
|
+ .replace(/\-\-+/g, '-') // Remplace les tirets doubles
|
|
|
+ .replace(/^-+/, '') // Enlève les tirets au début
|
|
|
+ .replace(/-+$/, ''); // Enlève les tirets à la fin
|
|
|
+ }
|
|
|
+}
|