Have the launcher only load the classes after the dependencies.
Chris Pressey
7 years ago
2 | 2 | container = document.getElementById(container); |
3 | 3 | } |
4 | 4 | config = config || {}; |
5 | var deps = [ | |
5 | ||
6 | function loadThese(deps, callback) { | |
7 | var loaded = 0; | |
8 | for (var i = 0; i < deps.length; i++) { | |
9 | var elem = document.createElement('script'); | |
10 | elem.src = prefix + deps[i]; | |
11 | elem.onload = function() { | |
12 | if (++loaded < deps.length) return; | |
13 | callback(); | |
14 | } | |
15 | document.body.appendChild(elem); | |
16 | } | |
17 | } | |
18 | ||
19 | loadThese([ | |
6 | 20 | "yoob/element-factory.js", |
7 | 21 | "yoob/controller.js", |
8 | 22 | "yoob/playfield.js", |
9 | 23 | "yoob/playfield-canvas-view.js", |
10 | 24 | "yoob/preset-manager.js", |
11 | 25 | "yoob/source-manager.js", |
12 | "worb.js" | |
13 | ]; | |
14 | var loaded = 0; | |
15 | var onload = function() { | |
16 | if (++loaded < deps.length) return; | |
26 | ], function() { | |
27 | loadThese(["worb.js"], function() { | |
28 | var controlPanel = yoob.makeDiv(container); | |
29 | controlPanel.id = 'control_panel'; | |
30 | var subPanel = yoob.makeDiv(container); | |
31 | var selectSource = yoob.makeSelect(subPanel, 'configuration:', []); | |
32 | var loadIndicator = yoob.makeSpan(subPanel, "load indicator"); | |
33 | loadIndicator.id = 'load_indicator'; | |
34 | var canvasViewport = yoob.makeDiv(container); | |
35 | canvasViewport.id = 'canvas_viewport'; | |
36 | var canvas = yoob.makeCanvas(canvasViewport, 400, 400); | |
37 | var editor = yoob.makeTextArea(container, 40, 25); | |
17 | 38 | |
18 | var controlPanel = yoob.makeDiv(container); | |
19 | controlPanel.id = 'control_panel'; | |
20 | var subPanel = yoob.makeDiv(container); | |
21 | var selectSource = yoob.makeSelect(subPanel, 'configuration:', []); | |
22 | var loadIndicator = yoob.makeSpan(subPanel, "load indicator"); | |
23 | loadIndicator.id = 'load_indicator'; | |
24 | var canvasViewport = yoob.makeDiv(container); | |
25 | canvasViewport.id = 'canvas_viewport'; | |
26 | var canvas = yoob.makeCanvas(canvasViewport, 400, 400); | |
27 | var editor = yoob.makeTextArea(container, 40, 25); | |
39 | var v = new yoob.PlayfieldCanvasView().init({ | |
40 | canvas: canvas | |
41 | }); | |
42 | v.setCellDimensions(16, 16); | |
28 | 43 | |
29 | var v = new yoob.PlayfieldCanvasView().init({ | |
30 | canvas: canvas | |
44 | var controller = (new WorbController()).init({ | |
45 | panelContainer: controlPanel, | |
46 | view: v | |
47 | }); | |
48 | ||
49 | var loadLevel = 0; | |
50 | controller.onstep = function(underLoad) { | |
51 | if (underLoad) loadLevel += 60; | |
52 | loadLevel -= 10; | |
53 | if (loadLevel < 0) loadLevel = 0; | |
54 | if (loadLevel > 255) loadLevel = 255; | |
55 | var l = 255 - loadLevel; | |
56 | loadIndicator.style.background = "rgba(255, " + l + "," + l + ",1.0)"; | |
57 | }; | |
58 | ||
59 | var sourceManager = (new yoob.SourceManager()).init({ | |
60 | panelContainer: controlPanel, | |
61 | editor: editor, | |
62 | hideDuringEdit: [canvasViewport], | |
63 | disableDuringEdit: [controller.panel], | |
64 | storageKey: 'worb.js', | |
65 | onDone: function() { | |
66 | controller.setResetState(this.getEditorText()); | |
67 | controller.clickReset(); | |
68 | } | |
69 | }); | |
70 | ||
71 | var presetManager = (new yoob.PresetManager()).init({ | |
72 | selectElem: selectSource, | |
73 | }); | |
74 | function makeCallback(sourceText) { | |
75 | return function(id) { | |
76 | sourceManager.loadSource(sourceText); | |
77 | } | |
78 | } | |
79 | for (var i = 0; i < examplePrograms.length; i++) { | |
80 | presetManager.add(examplePrograms[i][0], makeCallback(examplePrograms[i][1])); | |
81 | } | |
82 | presetManager.select(examplePrograms[0][0]); | |
31 | 83 | }); |
32 | v.setCellDimensions(16, 16); | |
33 | ||
34 | var controller = (new WorbController()).init({ | |
35 | panelContainer: controlPanel, | |
36 | view: v | |
37 | }); | |
38 | ||
39 | var loadLevel = 0; | |
40 | controller.onstep = function(underLoad) { | |
41 | if (underLoad) loadLevel += 60; | |
42 | loadLevel -= 10; | |
43 | if (loadLevel < 0) loadLevel = 0; | |
44 | if (loadLevel > 255) loadLevel = 255; | |
45 | var l = 255 - loadLevel; | |
46 | loadIndicator.style.background = "rgba(255, " + l + "," + l + ",1.0)"; | |
47 | }; | |
48 | ||
49 | var sourceManager = (new yoob.SourceManager()).init({ | |
50 | panelContainer: controlPanel, | |
51 | editor: editor, | |
52 | hideDuringEdit: [canvasViewport], | |
53 | disableDuringEdit: [controller.panel], | |
54 | storageKey: 'worb.js', | |
55 | onDone: function() { | |
56 | controller.setResetState(this.getEditorText()); | |
57 | controller.clickReset(); | |
58 | } | |
59 | }); | |
60 | ||
61 | var presetManager = (new yoob.PresetManager()).init({ | |
62 | selectElem: selectSource, | |
63 | }); | |
64 | function makeCallback(sourceText) { | |
65 | return function(id) { | |
66 | sourceManager.loadSource(sourceText); | |
67 | } | |
68 | } | |
69 | for (var i = 0; i < examplePrograms.length; i++) { | |
70 | presetManager.add(examplePrograms[i][0], makeCallback(examplePrograms[i][1])); | |
71 | } | |
72 | presetManager.select(examplePrograms[0][0]); | |
73 | }; | |
74 | for (var i = 0; i < deps.length; i++) { | |
75 | var elem = document.createElement('script'); | |
76 | elem.src = prefix + deps[i]; | |
77 | elem.onload = onload; | |
78 | document.body.appendChild(elem); | |
79 | } | |
84 | }); | |
80 | 85 | } |