git @ Cat's Eye Technologies Matchbox / bf9302d
Begin to restructure to use Web Workers. Chris Pressey 10 years ago
4 changed file(s) with 93 addition(s) and 78 deletion(s). Raw diff Collapse all Expand all
99 <div id="container"></div>
1010
1111 </body>
12 <script src="../src/matchbox.js"></script>
12 <script src="../src/matchbox-launcher.js"></script>
1313 <script>
14 launch('../src/yoob/', 'container', {});
14 launch('../src/', 'container', {});
1515 </script>
0 "use strict";
1
2 function launch(prefix, container, config) {
3 if (typeof container === 'string') {
4 container = document.getElementById(container);
5 }
6 config = config || {};
7 var deps = [
8 "yoob/scanner.js",
9 "yoob/tape.js",
10 "yoob/preset-manager.js",
11 "yoob/element-factory.js",
12 "matchbox.js"
13 ];
14 var loaded = 0;
15 for (var i = 0; i < deps.length; i++) {
16 var elem = document.createElement('script');
17 elem.src = prefix + deps[i];
18 elem.onload = function() {
19 if (++loaded < deps.length) return;
20
21 var matchbox = (new Matchbox()).init({
22 'workerURL': config.workerURL || "../src/matchbox-worker.js"
23 });
24
25 var output;
26
27 var controlPanel = yoob.makeDiv(container);
28 var presetSelect = yoob.makeSelect(controlPanel, "Preset:", []);
29
30 var makeContainer = function() {
31 var c = yoob.makeDiv(container);
32 c.style.display = 'inline-block';
33 c.style.verticalAlign = 'top';
34 return c;
35 };
36
37 var prog1Ctr = makeContainer();
38 var run1Btn = yoob.makeButton(prog1Ctr, "Run", function() {
39 output.innerHTML = matchbox.run(prog1ta.value);
40 });
41 yoob.makeLineBreak(prog1Ctr);
42 var prog1ta = yoob.makeTextArea(prog1Ctr, 20, 20);
43
44 var prog2Ctr = makeContainer();
45 var run2Btn = yoob.makeButton(prog2Ctr, "Run", function() {
46 output.innerHTML = matchbox.run(prog2ta.value);
47 });
48 yoob.makeLineBreak(prog2Ctr);
49 var prog2ta = yoob.makeTextArea(prog2Ctr, 20, 20);
50
51 var resultCtr = makeContainer();
52 var findRacesBtn = yoob.makeButton(
53 resultCtr, "Find Race Conditions", function() {
54 output.innerHTML = matchbox.findRaceConditions(
55 prog1ta.value, prog2ta.value
56 );
57 });
58 output = yoob.makeDiv(resultCtr);
59
60 var sourceRoot = config.sourceRoot || '../eg/';
61 var p = new yoob.PresetManager();
62 p.init({
63 'selectElem': presetSelect,
64 'setPreset': function(n) {
65 matchbox.loadSourceFromURL(sourceRoot + n, function(p1, p2) {
66 prog1ta.value = p1;
67 prog2ta.value = p2;
68 });
69 }
70 });
71 p.add('basic-race.mbox');
72 p.add('basic-no-race.mbox');
73 p.add('petersons-no-race.mbox');
74 p.select('basic-race.mbox');
75
76 };
77 document.body.appendChild(elem);
78 }
79 }
0 importScripts('matchbox.js');
1
2 addEventListener('message', function(e) {
3 if (e.data[0] === 'interleave') {
4 postMessage(findAllInterleavings(e.data[1], e.data[2]));
5 }
6 });
00 "use strict";
1
2 function launch(prefix, container, config) {
3 if (typeof container === 'string') {
4 container = document.getElementById(container);
5 }
6 config = config || {};
7 var deps = [
8 "scanner.js",
9 "tape.js",
10 "preset-manager.js",
11 "element-factory.js"
12 ];
13 var loaded = 0;
14 for (var i = 0; i < deps.length; i++) {
15 var elem = document.createElement('script');
16 elem.src = prefix + deps[i];
17 elem.onload = function() {
18 if (++loaded < deps.length) return;
19
20 var sourceRoot = config.sourceRoot || '../eg/';
21
22 var matchbox = (new Matchbox()).init({});
23 var output;
24
25 var controlPanel = yoob.makeDiv(container);
26 var presetSelect = yoob.makeSelect(controlPanel, "Preset:", []);
27
28 var makeContainer = function() {
29 var c = yoob.makeDiv(container);
30 c.style.display = 'inline-block';
31 c.style.verticalAlign = 'top';
32 return c;
33 };
34
35 var prog1Ctr = makeContainer();
36 var run1Btn = yoob.makeButton(prog1Ctr, "Run", function() {
37 output.innerHTML = matchbox.run(prog1ta.value);
38 });
39 yoob.makeLineBreak(prog1Ctr);
40 var prog1ta = yoob.makeTextArea(prog1Ctr, 20, 20);
41
42 var prog2Ctr = makeContainer();
43 var run2Btn = yoob.makeButton(prog2Ctr, "Run", function() {
44 output.innerHTML = matchbox.run(prog2ta.value);
45 });
46 yoob.makeLineBreak(prog2Ctr);
47 var prog2ta = yoob.makeTextArea(prog2Ctr, 20, 20);
48
49 var resultCtr = makeContainer();
50 var findRacesBtn = yoob.makeButton(
51 resultCtr, "Find Race Conditions", function() {
52 output.innerHTML = matchbox.findRaceConditions(
53 prog1ta.value, prog2ta.value
54 );
55 });
56 output = yoob.makeDiv(resultCtr);
57
58 var p = new yoob.PresetManager();
59 p.init({
60 'selectElem': presetSelect,
61 'setPreset': function(n) {
62 matchbox.loadSourceFromURL(sourceRoot + n, function(p1, p2) {
63 prog1ta.value = p1;
64 prog2ta.value = p2;
65 });
66 }
67 });
68 p.add('basic-race.mbox');
69 p.add('basic-no-race.mbox');
70 p.add('petersons-no-race.mbox');
71 p.select('basic-race.mbox');
72
73 };
74 document.body.appendChild(elem);
75 }
76 }
771
782 var matchboxScanner;
793
326250 var Matchbox = function() {
327251 this.init = function(cfg) {
328252 cfg = cfg || {};
253 this.workerURL = cfg.workerURL;
254 if (this.workerURL) {
255 this.worker = new Worker(this.workerURL);
256 }
329257 initScanner();
330258 return this;
331259 };