slugger_controller.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { Controller } from '@hotwired/stimulus'
  2. export default class extends Controller {
  3. static targets = ['title', 'slug', 'bouton', 'formulaire', 'ligneSlug']
  4. show() {
  5. this.ligneSlugTarget.classList.toggle('hidden', true)
  6. this.formulaireTarget.classList.toggle('hidden', false)
  7. }
  8. async open() {
  9. const basePath = this.slugTarget.dataset.url
  10. this.slugTarget.value = await this.getSlug(this.titleTarget.value, basePath);
  11. this.slugTarget.focus();
  12. }
  13. async getSlug(text, basePath) {
  14. // Envoyer le titre au serveur pour générer le slug
  15. const response = await fetch(basePath + '/generate-slug', {
  16. method: 'POST',
  17. headers: {
  18. 'Content-Type': 'application/json',
  19. 'X-Requested-With': 'XMLHttpRequest'
  20. },
  21. body: JSON.stringify({ title: text })
  22. })
  23. const data = await response.json()
  24. return data.slug
  25. }
  26. generateSlug(text) {
  27. return text.toString().toLowerCase()
  28. .replace(/\s+/g, '-') // Remplace les espaces par des tirets
  29. .replace(/[^\w\-]+/g, '') // Enlève les caractères non alphanumériques
  30. .replace(/\-\-+/g, '-') // Remplace les tirets doubles
  31. .replace(/^-+/, '') // Enlève les tirets au début
  32. .replace(/-+$/, ''); // Enlève les tirets à la fin
  33. }
  34. }