Skip to content

Commit 358a0c0

Browse files
author
Tobias von Klipstein
committed
Add common build which includes both worker and iframe runner context
1 parent 19b5228 commit 358a0c0

File tree

4 files changed

+79
-12
lines changed

4 files changed

+79
-12
lines changed

Makefile

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -106,20 +106,13 @@ doc: mkjsdoc
106106
jsdoc -r -d ${WORKSPACE}/jsdoc${SUB_DIR} ${WORKSPACE}/src || true
107107

108108
build: clean mkdist
109-
${CLOSURE_AMD} --common_js_entry_module bootstrapper/_build/worker.js \
110-
src/bootstrapper/_build/worker.js \
111-
`find src -name '*.js' -not -path 'src/bootstrapper/_dev/*' -not -path 'src/bootstrapper/_build/*' -not -path 'src/bootstrapper/context/socketio/*' -not -path 'src/bootstrapper/context/iframe/*' -not -path 'src/bootstrapper/context/node/*'` | ${CLOSURE_PRETTY} > ${DIST_DIR}/bonsai.js
109+
${CLOSURE_AMD} --common_js_entry_module bootstrapper/_build/common.js \
110+
src/bootstrapper/_build/common.js \
111+
`find src -name '*.js' -not -path 'src/bootstrapper/_dev/*' -not -path 'src/bootstrapper/_build/*' -not -path 'src/bootstrapper/context/socketio/*' -not -path 'src/bootstrapper/context/node/*'` | ${CLOSURE_PRETTY} > ${DIST_DIR}/bonsai.js
112112
echo "/*" > ${DIST_DIR}/bonsai.min.js
113113
cat ${WORKSPACE}/LICENSE >> ${DIST_DIR}/bonsai.min.js
114114
echo "*/" >> ${DIST_DIR}/bonsai.min.js
115115
cat ${DIST_DIR}/bonsai.js | ${CLOSURE_FINALIZE} >> ${DIST_DIR}/bonsai.min.js
116-
${CLOSURE_AMD} --common_js_entry_module bootstrapper/_build/iframe.js \
117-
src/bootstrapper/_build/iframe.js \
118-
`find src -name '*.js' -not -path 'src/bootstrapper/_dev/*' -not -path 'src/bootstrapper/_build/*' -not -path 'src/bootstrapper/context/socketio/*' -not -path 'src/bootstrapper/context/worker/*' -not -path 'src/bootstrapper/context/node/*'` | ${CLOSURE_PRETTY} > ${DIST_DIR}/bonsai.iframe.js
119-
echo "/*" > ${DIST_DIR}/bonsai.iframe.min.js
120-
cat ${WORKSPACE}/LICENSE >> ${DIST_DIR}/bonsai.iframe.min.js
121-
echo "*/" >> ${DIST_DIR}/bonsai.iframe.min.js
122-
cat ${DIST_DIR}/bonsai.iframe.js | ${CLOSURE_FINALIZE} >> ${DIST_DIR}/bonsai.iframe.min.js
123116

124117
preview-bundle: build
125118
mkdir -p ${TEMP_DIR}/preview-bundle/lib

example/library/index-build.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<meta name=viewport content=width=device-width,initial-scale=1>
33
<head>
44
<title>Bonsai Movie Library</title>
5-
<script src=../../dist/bonsai.iframe.js></script>
5+
<script src=../../dist/bonsai.js></script>
66
<!--<script src="http://localhost:8080/socket.io/socket.io.js"></script>-->
77
<script src="movies/movie_list.js"></script>
88
<style type="text/css">

src/bootstrapper/_build/common.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/**
2+
* Entry module for building bonsai for the iframe environment.
3+
*/
4+
define([
5+
'../player',
6+
'../../message_channel',
7+
'../context/iframe/bootstrap',
8+
'../context/iframe/context',
9+
'../context/worker/bootstrap',
10+
'../context/worker/context',
11+
'../../renderer/svg/svg',
12+
'../../tools',
13+
'../util'
14+
], function(player, MessageChannel, bootstrapIframe, IframeRunnerContext, bootstrapWorker, WorkerRunnerContext, SvgRenderer, tools, bootstrapUtil) {
15+
'use strict';
16+
17+
if(typeof window != 'undefined' && window.messageChannel) {
18+
19+
// This needs to execute async (setTimeout:1) so that
20+
// IFrameContext.init finishes before this executes:
21+
setTimeout(function() {
22+
var messageChannel = window.messageChannel;
23+
delete window.messageChannel;
24+
bootstrapIframe(messageChannel, window);
25+
}, 1);
26+
27+
} else if(typeof importScripts != 'undefined') {
28+
// init worker bootstrap
29+
var messageChannel;
30+
31+
var notifyRenderer = function(message) {postMessage(message);};
32+
var onMessage = function(message) {messageChannel.notify(message.data);};
33+
var disconnect = function() {
34+
removeEventListener('message', onMessage);
35+
messageChannel = null;
36+
};
37+
38+
messageChannel = new MessageChannel(notifyRenderer, disconnect);
39+
addEventListener('message', onMessage);
40+
bootstrapWorker(messageChannel);
41+
} else {
42+
window['bonsai'] = player;
43+
44+
var scripts = tools.map(document.getElementsByTagName('script'), function(script) {
45+
return script.src;
46+
});
47+
48+
var supportBlobUrls = (function() {
49+
var url = window.URL || window.webkitURL;
50+
return typeof url !== 'undefined';
51+
})();
52+
53+
player.Renderer = SvgRenderer;
54+
55+
var originalPlayerRun = player.run;
56+
player.run = tools.hitch(player, function(node, url, options) {
57+
player.setup({
58+
baseUrl: player._baseUrl || tools.baseUri(document),
59+
runnerContext: player.RunnerContext || (supportBlobUrls ? WorkerRunnerContext : IframeRunnerContext),
60+
runnerUrl: player.runnerUrl || supportBlobUrls ? bootstrapUtil.getBlobUrl(__bonsaiRunnerCode__) : ('' + __bonsaiRunnerCode__)
61+
});
62+
originalPlayerRun.apply(this, arguments);
63+
});
64+
65+
}
66+
});

src/bootstrapper/context/iframe/context.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,15 @@ define([
6060
}
6161
});
6262

63-
frameDoc.write('<script src="' + this.runnerUrl + '"></script>');//TODO: could we append the script here? Also: escaping
63+
if (this.runnerUrl.indexOf('function __bonsaiRunnerCode__') > -1) {
64+
var runnerCode = this.runnerUrl.substring(
65+
this.runnerUrl.indexOf("{") + 1,
66+
this.runnerUrl.lastIndexOf("}")
67+
);
68+
frameDoc.write('<script>' + runnerCode + '</script>');
69+
} else {
70+
frameDoc.write('<script src="' + this.runnerUrl + '"></script>');
71+
}
6472

6573
// TODO: y on first load fails in /library
6674
frameDoc.close();

0 commit comments

Comments
 (0)