Add convenience methods for runtime (un)registration and a sample

This commit is contained in:
2024-06-18 09:49:09 +02:00
parent 843d2d5b1f
commit 3a8919c260
2 changed files with 119 additions and 12 deletions

View File

@@ -69,6 +69,29 @@ class BesService {
besServices.push(this)
}
/**
* Registers grammar checking service for given DOM element.
*
* Note: CKEditor controls are an exception that may not be registered using this method. Use
* BesCKService.register for that.
*
* @param {Element} hostElement Host element
* @returns Grammar checking service registered for given DOM element; unfedined if no service
* registered.
*/
static registerByElement(hostElement) {
if (hostElement.tagName === 'TEXTAREA') {
return BesTAService.register(hostElement)
} else if (
hostElement.getAttribute('contenteditable')?.toLowerCase() ===
'plaintext-only'
) {
return BesDOMPlainTextService.register(hostElement)
} else {
return BesDOMService.register(hostElement)
}
}
/**
* Unregisters grammar checking service.
*/
@@ -98,6 +121,15 @@ class BesService {
return besServices.find(service => service.hostElement === hostElement)
}
/**
* Unregisters grammar checking service
*
* @param {Element} hostElement Host element
*/
static unregisterByElement(hostElement) {
BesService.getServiceByElement(hostElement)?.unregister()
}
/**
* Called initially when grammar-checking run is started
*/
@@ -2094,16 +2126,7 @@ customElements.define('bes-popup-el', BesPopup)
// Auto-register all elements with bes-service class.
window.addEventListener('load', () => {
document.querySelectorAll('.bes-service').forEach(hostElement => {
if (hostElement.tagName === 'TEXTAREA') {
BesTAService.register(hostElement)
} else if (
hostElement.getAttribute('contenteditable').toLowerCase() ===
'plaintext-only'
) {
BesDOMPlainTextService.register(hostElement)
} else {
BesDOMService.register(hostElement)
}
})
document
.querySelectorAll('.bes-service')
.forEach(hostElement => BesService.registerByElement(hostElement))
})