30 lines
970 B
JavaScript
30 lines
970 B
JavaScript
// frontend/src/lib/loadQuill.js
|
|
// Shared Quill CDN loader — ensures the script is only injected once across
|
|
// all modals (ComposeEmailModal, MailSettingsModal, etc.).
|
|
// Calls cb() immediately if Quill is already on window, otherwise queues it.
|
|
|
|
let _ready = false
|
|
let _callbacks = []
|
|
|
|
export function loadQuill(cb) {
|
|
if (_ready || window.Quill) { _ready = true; cb(); return }
|
|
_callbacks.push(cb)
|
|
if (document.getElementById('__quill_js__')) return // already injecting
|
|
|
|
const link = document.createElement('link')
|
|
link.id = '__quill_css__'
|
|
link.rel = 'stylesheet'
|
|
link.href = 'https://cdn.quilljs.com/1.3.7/quill.snow.css'
|
|
document.head.appendChild(link)
|
|
|
|
const script = document.createElement('script')
|
|
script.id = '__quill_js__'
|
|
script.src = 'https://cdn.quilljs.com/1.3.7/quill.min.js'
|
|
script.onload = () => {
|
|
_ready = true
|
|
_callbacks.forEach(fn => fn())
|
|
_callbacks = []
|
|
}
|
|
document.head.appendChild(script)
|
|
}
|