diff --git a/resources/js/singles/cite-button.ts b/resources/js/singles/cite-button.ts new file mode 100644 index 0000000..d2ccc22 --- /dev/null +++ b/resources/js/singles/cite-button.ts @@ -0,0 +1,49 @@ +export default function handleCiteButton(): void { + const citeButton: HTMLElement | null = document.querySelector('.socials-buttons__button--cite'); + const citeReference: HTMLElement | null = document.querySelector('#cite-reference'); + if (!citeButton || !citeReference) return; + + if (!window.isSecureContext) { + citeButton.setAttribute('disabled', 'true'); + citeButton.setAttribute( + 'title', + 'Vous devez utiliser un navigation sécurisé (https) pour copier la citation' + ); + } + + citeButton.addEventListener('click', () => { + const textToCopy = citeReference.textContent; + if (!textToCopy) return; + + if (navigator.clipboard && window.isSecureContext) { + navigator.clipboard + .writeText(textToCopy) + .then(() => { + const notyf = new Notyf({ + duration: 4000, + ripple: false, + dismissible: true, + types: [ + { + type: 'success', + icon: { + className: 'notyf__icon--success', + tagName: 'i', + }, + }, + ], + position: { + x: 'right', + y: 'top', + }, + }); + notyf.success( + 'Citation copiée dans le presse-papiers !
Vous pouvez maintenant la coller dans votre document.' + ); + }) + .catch((err) => { + console.error('Failed to copy text: ', err); + }); + } + }); +} diff --git a/resources/js/singles/singles.ts b/resources/js/singles/singles.ts index 729a286..180d587 100644 --- a/resources/js/singles/singles.ts +++ b/resources/js/singles/singles.ts @@ -1,5 +1,7 @@ import handleIndexPanel from './index-panel'; import handleFootnoteFormat from './footnote-format'; +import handleCiteButton from './cite-button'; +import { injectIdToNativeTitles } from './sommaire'; export default function singles(): void { const isSingleRevue: HTMLElement | null = document.querySelector('.page--single-revue'); @@ -12,67 +14,3 @@ export default function singles(): void { handleFootnoteFormat(); handleCiteButton(); } - -function handleCiteButton(): void { - const citeButton: HTMLElement | null = document.querySelector('.socials-buttons__button--cite'); - const citeReference: HTMLElement | null = document.querySelector('#cite-reference'); - if (!citeButton || !citeReference) return; - - if (!window.isSecureContext) { - citeButton.setAttribute('disabled', 'true'); - citeButton.setAttribute( - 'title', - 'Vous devez utiliser un navigation sécurisé (https) pour copier la citation' - ); - } - - citeButton.addEventListener('click', () => { - const textToCopy = citeReference.textContent; - if (!textToCopy) return; - - if (navigator.clipboard && window.isSecureContext) { - navigator.clipboard - .writeText(textToCopy) - .then(() => { - const notyf = new Notyf({ - duration: 4000, - ripple: false, - dismissible: true, - types: [ - { - type: 'success', - icon: { - className: 'notyf__icon--success', - tagName: 'i', - }, - }, - ], - position: { - x: 'right', - y: 'top', - }, - }); - notyf.success( - 'Citation copiée dans le presse-papiers !
Vous pouvez maintenant la coller dans votre document.' - ); - }) - .catch((err) => { - console.error('Failed to copy text: ', err); - }); - } - }); -} - -function injectIdToNativeTitles(): void { - const titles = document.querySelectorAll('.content-area h2, .content-area h3'); - titles.forEach((title) => { - const titleText = title.textContent || ''; - const slug = titleText - .toLowerCase() - .normalize('NFD') - .replace(/[\u0300-\u036f]/g, '') - .replace(/\s+/g, '-') - .replace(/[^\w-]+/g, ''); - title.setAttribute('id', slug); - }); -}