declare function CodeMirror(el: Element, config: any): void; module spine { export class SpinePlayerEditor { private static DEFAULT_CODE = `
`.trim(); private prefix: string = ` `.trim() private postfix: string = ``; private code: any; private player: HTMLIFrameElement; constructor(parent: HTMLElement) { this.render(parent); } private render (parent: HTMLElement) { let dom = /*html*/`
`; parent.innerHTML = dom; let codeElement = parent.getElementsByClassName("spine-player-editor-code")[0]; this.player = parent.getElementsByClassName("spine-player-editor-player")[0] as HTMLIFrameElement; requestAnimationFrame(() => { this.code = CodeMirror(codeElement, { lineNumbers: true, tabSize: 3, indentUnit: 3, indentWithTabs: true, scrollBarStyle: "native", mode: "htmlmixed", theme: "monokai" }); this.code.on("change", () => { this.startPlayer(); }); this.setCode(SpinePlayerEditor.DEFAULT_CODE); }) } setPreAndPostfix(prefix: string, postfix: string) { this.prefix = prefix; this.postfix = postfix; this.startPlayer() } setCode(code: string) { this.code.setValue(code); this.startPlayer(); } private timerId = 0; startPlayer() { clearTimeout(this.timerId); this.timerId = setTimeout( () => { let code = this.code.getDoc().getValue(); code = this.prefix + code + this.postfix; code = window.btoa(code); this.player.src = ""; this.player.src = "data:text/html;base64," + code; }, 500); } } }