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);
}
}
}