12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- 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
- }
- }
|