Add convenience methods for runtime (un)registration and a sample
This commit is contained in:
47
service.js
47
service.js
@@ -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))
|
||||
})
|
||||
|
Reference in New Issue
Block a user