53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
import { defineNuxtPlugin } from '#app'
|
|
import { useHead } from '#imports'
|
|
|
|
export default defineNuxtPlugin((nuxtApp) => {
|
|
// Fonction pour ajouter une classe au body
|
|
const addBodyClass = (className: string) => {
|
|
if (process.client) {
|
|
document.body.classList.add(className)
|
|
} else {
|
|
// Pour le SSR, on utilise useHead
|
|
useHead({
|
|
bodyAttrs: {
|
|
class: className
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// Fonction pour supprimer une classe du body
|
|
const removeBodyClass = (className: string) => {
|
|
if (process.client) {
|
|
document.body.classList.remove(className)
|
|
}
|
|
// Pas besoin de gérer la suppression côté SSR
|
|
}
|
|
|
|
// Fonction pour vérifier si une classe est présente
|
|
const hasBodyClass = (className: string) => {
|
|
if (process.client) {
|
|
return document.body.classList.contains(className)
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Exposition des méthodes via le plugin
|
|
return {
|
|
provide: {
|
|
bodyClass: {
|
|
add: addBodyClass,
|
|
remove: removeBodyClass,
|
|
has: hasBodyClass,
|
|
toggle: (className: string) => {
|
|
if (hasBodyClass(className)) {
|
|
removeBodyClass(className)
|
|
} else {
|
|
addBodyClass(className)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})
|