UNPKG

1.26 kBJavaScriptView Raw
1var nextTick = require("just-next-tick");
2var dom = require("./dom");
3
4module.exports = async;
5
6function async (brick, embedding) {
7 nextTick(function () {
8 setup(brick, embedding);
9 loop(brick, embedding);
10 });
11}
12
13function setup (brick, embedding) {
14 dom.setup(brick);
15
16 if (!embedding.update && !embedding.show) {
17 dom.update(brick);
18 return ready(brick, embedding);
19 }
20
21 if (!embedding.update) {
22 embedding.show();
23 dom.update(brick);
24 return ready(brick, embedding);
25 }
26
27 embedding.update(createUpdateCallback(brick, embedding));
28}
29
30function ready (brick, embedding) {
31 if (!brick.onReady.publish) return;
32
33 var onReady = brick.onReady;
34
35 brick.onReady = function (fn) {
36 fn();
37 };
38
39 brick.onReady.subscribe = brick.onReady;
40
41 if (embedding.ready) embedding.ready();
42
43 onReady.publish();
44}
45
46function createUpdateCallback (brick, embedding) {
47 return function (error) {
48 if (error) return brick.onError.publish(error);
49
50 if (embedding.show) embedding.show();
51
52 dom.update(brick);
53
54 ready(brick, embedding);
55 };
56}
57
58function loop (brick, embedding) {
59 if (!embedding.loop) return;
60 embedding.loop(function () {
61 embedding.update(createUpdateCallback(brick, embedding));
62 loop(brick, embedding);
63 });
64}