burguillos.info/js-src/conquer/interface.ts

54 lines
1.5 KiB
TypeScript

import Conquer from '@burguillosinfo/conquer'
export default abstract class ConquerInterface {
private alreadyGenerated = false
private nodes: HTMLElement[]
private callbacks: Record<string, Array<() => void>> = {}
public getNodes(): HTMLElement[] {
if (!this.alreadyGenerated) {
this.nodes = this.generateNodes()
this.alreadyGenerated = true
}
return this.nodes
}
protected abstract generateNodes(): HTMLElement[]
public run(): void {
return
}
public prune(): void {
this.callbacks = {};
return
}
protected getNodeFromTemplateId(id: string): HTMLElement {
let template = document.getElementById(id)
if (template === null) {
Conquer.fail(`Unable to find template id ${id}.`)
}
const finalNode = template.cloneNode(true)
if (!(finalNode instanceof HTMLElement)) {
Conquer.fail('The node is not an Element.')
}
finalNode.classList.remove('conquer-display-none')
return finalNode
}
public on(eventName: string, callback: () => void): void {
if (this.callbacks[eventName] === undefined) {
this.callbacks[eventName] = []
}
this.callbacks[eventName].push(callback)
}
protected runCallbacks(eventName: string) {
const callbacks = this.callbacks[eventName];
if (callbacks === undefined) {
return
}
for (const callback of callbacks) {
callback()
}
}
}