@mitre/nuxt-smartscript
Version:
Smart typography transformations for Nuxt - automatic superscript, subscript, and symbol formatting
66 lines (65 loc) • 1.52 kB
JavaScript
import { useNuxtApp } from "#imports";
import { onMounted, ref } from "vue";
export function useSmartScript() {
const nuxtApp = useNuxtApp();
const smartscript = nuxtApp.$smartscript;
const isProcessing = ref(false);
const stats = ref({
processedElements: 0,
superscripts: 0,
subscripts: 0,
total: 0
});
const updateStats = () => {
if (!smartscript)
return;
stats.value = smartscript.getStats();
};
const process = async () => {
if (!smartscript || isProcessing.value)
return;
isProcessing.value = true;
try {
await smartscript.process();
updateStats();
} finally {
isProcessing.value = false;
}
};
const enableForElement = (element) => {
if (element.dataset.superscriptProcessed === "true") {
delete element.dataset.superscriptProcessed;
}
element.classList.remove("no-superscript");
};
const disableForElement = (element) => {
element.classList.add("no-superscript");
};
const toggleForElement = (element) => {
if (element.classList.contains("no-superscript")) {
enableForElement(element);
} else {
disableForElement(element);
}
};
onMounted(() => {
if (smartscript) {
setTimeout(() => {
process();
}, 100);
}
});
return {
// State
isProcessing,
stats,
// Methods
process,
updateStats,
enableForElement,
disableForElement,
toggleForElement,
// Direct access to API
api: smartscript
};
}