1 | var format = require("format-text");
|
2 | var filenameId = require("filename-id");
|
3 | var pubsub = require("pubsub");
|
4 |
|
5 | var MIXINGS_KEY = '#';
|
6 |
|
7 | var instanceCounter = 1;
|
8 |
|
9 | module.exports = New;
|
10 |
|
11 | function 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 |
|
56 | function template (source) {
|
57 | read.returnsTemplate = true;
|
58 |
|
59 | return read;
|
60 |
|
61 | function read () {
|
62 | return source;
|
63 | }
|
64 | }
|
65 |
|
66 | function 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 | }
|