diff --git a/app/views.js b/app/views.js index 82666ec..11cc18a 100644 --- a/app/views.js +++ b/app/views.js @@ -14,9 +14,9 @@ app.compose(function () { expr.resultBinary = formatter.toBinaryString(expr.result, maxLen); var templateId = /<<|>>/.test(expr.sign) ? 'shiftExpressionView' : 'binaryExpressionView'; - var htmlTpl = document.getElementById(templateId).innerHTML; - var el = html.element(htmlTpl, expr); + var template = app.template(templateId) + var el = template.render(expr); colorizeBits(el); return el; } @@ -54,8 +54,8 @@ app.compose(function () { app.modelView(app.models.HelpResult, { renderView: function(model) { - var template = document.getElementById('helpView').innerHTML; - return html.element(template); + var template = app.template('helpResultTpl'); + return template.render(); } }); @@ -67,7 +67,7 @@ app.compose(function () { app.modelView(app.models.DisplayResult, { renderView: function(model) { - var resultView = html.element(document.getElementById('resultView').innerHTML, model); + var resultView = app.template('resultView').render(model); var contentView = app.buildViewFor(model.content); resultView.querySelector('.content').appendChild(contentView); diff --git a/components/controllersFeature.js b/components/controllersFeature.js index 15e4b8c..d453e19 100644 --- a/components/controllersFeature.js +++ b/components/controllersFeature.js @@ -19,6 +19,10 @@ controllerDi.register(name, reg); }; + app.run(function(){ + attachControllers(app.rootViewElement, app.di); + }); + function addControllerMixin(ctrl) { ctrl.attachView = function(viewElement) { @@ -39,10 +43,6 @@ }; } - app.run(function(){ - attachControllers(app.rootViewElement, app.di); - }); - function attachControllers(rootViewElement) { var elements = rootViewElement.querySelectorAll('[data-controller]'), i = 0, l = elements.length, @@ -78,9 +78,4 @@ } } - function isController(obj) { - return obj.componentType == 'controller'; - - } - })(window.app, window.should, window.Container); diff --git a/components/templatesFeature.js b/components/templatesFeature.js new file mode 100644 index 0000000..ed07d25 --- /dev/null +++ b/components/templatesFeature.js @@ -0,0 +1,41 @@ +(function(app) { + + function Template(html) { + this.html = html; + } + + Template.prototype.render = function (model) { + return app.get('html').element(this.html, model); + }; + + app.templates = []; + app.template = function (key) { + var tpl = this.templates[key]; + if(tpl == null) { + throw new Error(key + ' template is not found'); + } + return tpl; + } + + app.run(function() { + readTemplates(app.rootViewElement); + }) + + function readTemplates(containerEl) { + var els = containerEl.querySelectorAll('[data-template]'); + var store = app.templates; + + Array.prototype.forEach.call(els, function(element) { + var key = element.getAttribute('data-template'); + + if(store[key] instanceof Template) { + console.warn(key + ' templates already registered'); + return; + } + + store[key] = new Template(element.innerHTML); + }); + } + + +})(window.app); diff --git a/index.html b/index.html index 6ea53a0..2a9ca6b 100644 --- a/index.html +++ b/index.html @@ -11,8 +11,11 @@ + + + @@ -44,7 +47,7 @@