-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathscript.js
104 lines (104 loc) · 2.96 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
const editor = ace.edit('editor');
editor.setTheme('ace/theme/monokai');
editor.getSession().setMode('ace/mode/javascript');
editor.$blockScrolling = Infinity;
const evalEditor = ace.edit('evalEditor');
evalEditor.setTheme('ace/theme/monokai');
evalEditor.getSession().setMode('ace/mode/javascript');
evalEditor.$blockScrolling = Infinity;
evalEditor.setValue('// Code written here will be evaluated on the page');
const versionSelect = document.getElementsByTagName('select')[0];
class Container {
constructor() {
this.iframe = document.createElement('iframe');
document.head.appendChild(this.iframe);
}
setDiscordJS(version) {
this.version = version;
return new Promise((resolve, reject) => {
if(this.script) {
this.script.remove();
delete window.Discord;
}
this.script = document.createElement('script');
this.script.src = 'discord.' + version + '.min.js';
this.script.onload = resolve;
this.script.onerror = reject;
this.iframe.contentDocument.head.appendChild(this.script);
});
}
run(code) {
this.iframe.contentWindow.eval(code);
}
reload() {
return new Promise((resolve, reject) => {
this.iframe.contentWindow.location.reload();
this.iframe.onload = () => {
this.setDiscordJS(this.version).then(resolve).catch(reject);
};
});
}
};
const container = new Container();
if(localStorage.version) versionSelect.value = localStorage.version;
versionSelect.onchange = () => {
versionSelect.disabled = true;
container.setDiscordJS(versionSelect.value)
.then(() => versionSelect.disabled = false)
.catch(e => 'Failed to load Discord.js: ' + e);
};
versionSelect.onchange();
const storage = {
save() {
localStorage.code = editor.getValue();
},
load() {
editor.setValue(localStorage.code || '');
}
}
storage.load();
editor.commands.addCommand({
name: 'save',
bindKey: {
win: 'Ctrl-s',
mac: 'Command-s'
},
exec() {
storage.save();
}
});
const Engine = {
started: false,
start() {
if(Engine.started) container.reload().then(Engine.actuallyStart);
else Engine.actuallyStart();
},
actuallyStart() {
try {
container.run(editor.getValue());
Engine.started = true;
} catch(e) {
console.error(e);
Engine.started = false;
}
},
stop() {
container.reload();
}
};
document.getElementById('save').onclick = storage.save;
document.getElementById('load').onclick = storage.load;
document.getElementById('reset').onclick = () => {
if(confirm('Are you sure?')) {
editor.setValue('');
delete localStorage.code;
Engine.stop();
}
};
document.getElementById('start').onclick = () => {
Engine.start();
if(Engine.started) document.getElementById('start').innerText = 'Restart';
}
document.getElementById('stop').onclick = Engine.stop;
document.getElementById('eval').onclick = () => container.run(evalEditor.getValue());
document.getElementById('clear').onclick = () => evalEditor.setValue('');