1 | var domquery = require("domquery");
|
2 | var render = require("./render");
|
3 |
|
4 | module.exports = {
|
5 | setup: setup,
|
6 | update: update
|
7 | };
|
8 |
|
9 | function setup (brick) {
|
10 | if (brick.element) return;
|
11 |
|
12 | var id, element;
|
13 |
|
14 | if (brick.dom) {
|
15 | id = brick.dom.id.splice(0, 1)[0];
|
16 | element = document.getElementById(id);
|
17 | brick.id = id;
|
18 | } else {
|
19 | element = document.createElement('div');
|
20 | element.setAttribute('id', brick.id);
|
21 | }
|
22 |
|
23 | brick.element = domquery(element);
|
24 | }
|
25 |
|
26 | function update (brick) {
|
27 | if (brick.parentMixing) return;
|
28 |
|
29 | var replace = Array.prototype.slice.call(render.body(brick));
|
30 | var current = Array.prototype.slice.call(brick.element[0].children);
|
31 | var parent = brick.element[0];
|
32 |
|
33 | var i = -1;
|
34 | var len = replace.length;
|
35 | var dirty;
|
36 |
|
37 | while (++i < len) {
|
38 | if (current && current[i] && current[i].isEqualNode(replace[i])) continue;
|
39 |
|
40 | dirty = !current
|
41 | || current[i].children.length != replace[i].children.length
|
42 | || current[i].outerHTML != replace[i].outerHTML;
|
43 |
|
44 | if (!dirty) continue;
|
45 |
|
46 | if (!current || !current[i]) return parent.appendChild(replace[i]);
|
47 |
|
48 | parent.replaceChild(replace[i], current[i]);
|
49 | }
|
50 | }
|