1 | var nextTick = require("just-next-tick");
|
2 | var dom = require("./dom");
|
3 |
|
4 | module.exports = async;
|
5 |
|
6 | function async (brick, embedding) {
|
7 | nextTick(function () {
|
8 | setup(brick, embedding);
|
9 | loop(brick, embedding);
|
10 | });
|
11 | }
|
12 |
|
13 | function 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 |
|
30 | function 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 |
|
46 | function 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 |
|
58 | function loop (brick, embedding) {
|
59 | if (!embedding.loop) return;
|
60 | embedding.loop(function () {
|
61 | embedding.update(createUpdateCallback(brick, embedding));
|
62 | loop(brick, embedding);
|
63 | });
|
64 | }
|