UNPKG

1.62 kBJavaScriptView Raw
1var format = require("format-text");
2var filenameId = require("filename-id");
3var pubsub = require("pubsub");
4
5var MIXINGS_KEY = '#';
6
7var instanceCounter = 1;
8
9module.exports = New;
10
11function New (options) {
12 var Brick = require('../');
13 var id;
14
15 options || (options = {});
16
17 var brick = Brick(options);
18 var defaultTemplateName;
19
20 brick.isBrick = true;
21 brick.templates = {};
22 brick.id = 'brick-' + brick.key + '-' + (instanceCounter++);
23
24 var key;
25 for (key in brick.source.html) {
26 id = filenameId(key);
27
28 if (!defaultTemplate() || id == 'index') {
29 defaultTemplate(id);
30 }
31
32 brick.templates[id] = template(brick.source.html[key]);
33 }
34
35 brick.onReady = pubsub();
36 brick.onError = pubsub();
37 brick.browser = true;
38
39 brick.defaultTemplate = defaultTemplate;
40
41 if (options.mixing) {
42 brick.mixing = mix(brick, options.mixing, options.dom[MIXINGS_KEY]);
43 }
44
45 return brick;
46
47 function defaultTemplate (newValue) {
48 if (brick.parentMixing) return brick.parentMixing.defaultTemplate(newValue);
49
50 if (newValue) defaultTemplateName = newValue;
51
52 return defaultTemplateName;
53 }
54}
55
56function template (source) {
57 read.returnsTemplate = true;
58
59 return read;
60
61 function read () {
62 return source;
63 }
64}
65
66function mix (brick, mixings, dom) {
67 if (!brick.bindings) brick.bindings = {};
68
69 if (brick.parentMixing) brick.bindings = brick.parentMixing.bindings;
70
71 brick.mixings = mixings.map(function (Factory) {
72 var b = Factory.New({ brick: { dom: dom[Factory._brick.meta.key] } }).brick;
73 b.bindings = brick.bindings;
74 b.parentMixing = brick;
75 return b;
76 });
77}