slugger_controller.js 1.3 KB

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