diff --git a/packages/blaze/builtins.js b/packages/blaze/builtins.js index 17cf066f30..880304e0d0 100644 --- a/packages/blaze/builtins.js +++ b/packages/blaze/builtins.js @@ -87,7 +87,7 @@ Blaze.Each = function (argFunc, contentFunc, elseFunc) { eachView.inElseMode = false; } - var range = Blaze.render(newItemView, eachView); + var range = Blaze.render(newItemView, eachView).domrange; eachView.domrange.addMember(range, index); } else { eachView.initialSubviews.splice(index, 0, newItemView); @@ -106,7 +106,7 @@ Blaze.Each = function (argFunc, contentFunc, elseFunc) { eachView.domrange.addMember( Blaze.render( Blaze.View('each_else',eachView.elseFunc), - eachView), 0); + eachView).domrange, 0); } } else { eachView.initialSubviews.splice(index, 1); diff --git a/packages/blaze/view.js b/packages/blaze/view.js index 51a346f10d..90ba7dc70d 100644 --- a/packages/blaze/view.js +++ b/packages/blaze/view.js @@ -390,7 +390,9 @@ Blaze.render = function (content, parentView) { throw new Error("Expected a function, template, or View in Blaze.render"); view = content; } - return Blaze._materializeView(view, parentView); + Blaze._materializeView(view, parentView); + + return view; }; Blaze.toHTML = function (htmljs, parentView) { diff --git a/packages/less/less_tests.js b/packages/less/less_tests.js index 29464c8e6e..6a677f19b4 100644 --- a/packages/less/less_tests.js +++ b/packages/less/less_tests.js @@ -2,7 +2,7 @@ Tinytest.add("less - presence", function(test) { var div = document.createElement('div'); - Blaze.render(Template.less_test_presence).attach(div); + UI.insert(UI.render(Template.less_test_presence), div); div.style.display = 'block'; document.body.appendChild(div); diff --git a/packages/stylus/stylus_tests.js b/packages/stylus/stylus_tests.js index e447e121bd..72e350f613 100644 --- a/packages/stylus/stylus_tests.js +++ b/packages/stylus/stylus_tests.js @@ -2,7 +2,7 @@ Tinytest.add("stylus - presence", function(test) { var div = document.createElement('div'); - Blaze.render(Template.stylus_test_presence).attach(div); + UI.insert(UI.render(Template.stylus_test_presence), div); div.style.display = 'block'; document.body.appendChild(div); @@ -15,7 +15,7 @@ Tinytest.add("stylus - presence", function(test) { Tinytest.add("stylus - @import", function(test) { var div = document.createElement('div'); - Blaze.render(Template.stylus_test_import).attach(div); + UI.insert(UI.render(Template.stylus_test_import), div); div.style.display = 'block'; document.body.appendChild(div); diff --git a/packages/templating/templating.js b/packages/templating/templating.js index 5ff147af30..e9061059ba 100644 --- a/packages/templating/templating.js +++ b/packages/templating/templating.js @@ -49,19 +49,12 @@ Template._body_.renderToDocument = function () { if (Template._body_.view) return; - var range = UI.render(Template._body_); - Template._body_.view = range.view; - UI.insert(range, document.body); + var view = UI.render(Template._body_); + Template._body_.view = view; + UI.insert(view, document.body); }; -// Renders a template (eg `Template.foo`), returning a DOMRange. The -// range will keep updating reactively. -UI.render = function (tmpl) { - if (! (tmpl instanceof Template)) - throw new Error("Template required here"); - - return Blaze.render(tmpl); -}; +UI.render = Blaze.render; // Same as `UI.render` with a data context passed in. UI.renderWithData = function (tmpl, data) { @@ -70,16 +63,16 @@ UI.renderWithData = function (tmpl, data) { if (typeof data === 'function') throw new Error("Data argument can't be a function"); // XXX or can it? - return Blaze.render(Blaze.With(data, function () { + return UI.render(Blaze.With(data, function () { return tmpl; })); }; -// The publicly documented API for inserting a DOMRange returned from +// The publicly documented API for inserting a View returned from // `UI.render` or `UI.renderWithData` into the DOM. If you then remove // `parentElement` using jQuery, all reactive updates on the rendered // template will stop. -UI.insert = function (range, parentElement, nextNode) { +UI.insert = function (view, parentElement, nextNode) { // parentElement must be a DOM node. in particular, can't be the // result of a call to `$`. Can't check if `parentElement instanceof // Node` since 'Node' is undefined in IE8. @@ -87,17 +80,18 @@ UI.insert = function (range, parentElement, nextNode) { throw new Error("'parentElement' must be a DOM node"); if (nextNode && typeof nextNode.nodeType !== 'number') // 'nextNode' is optional throw new Error("'nextNode' must be a DOM node"); - if (! range instanceof Blaze._DOMRange) + if (! (view && (view.domrange instanceof Blaze._DOMRange))) throw new Error("Expected template rendered with UI.render"); - range.attach(parentElement, nextNode); + view.domrange.attach(parentElement, nextNode); }; // XXX test and document -UI.remove = function (range) { - if (! range instanceof Blaze._DOMRange) +UI.remove = function (view) { + if (! (view && (view.domrange instanceof Blaze._DOMRange))) throw new Error("Expected template rendered with UI.render"); + var range = view.domrange; if (range.attached) range.detach(); range.destroy(); diff --git a/packages/test-helpers/render_div.js b/packages/test-helpers/render_div.js index 2976d5c18c..1cd805013c 100644 --- a/packages/test-helpers/render_div.js +++ b/packages/test-helpers/render_div.js @@ -1,13 +1,13 @@ renderToDiv = function (template, optData) { var div = document.createElement("DIV"); if (optData == null) { - Blaze.render(template).attach(div); + UI.insert(UI.render(template), div); } else { - Blaze.render(function () { + UI.insert(UI.render(function () { return Blaze.With(optData, function () { return template; }); - }).attach(div); + }), div); } return div; }; diff --git a/packages/ui/render_tests.js b/packages/ui/render_tests.js index 503a0fd0d0..55286037d7 100644 --- a/packages/ui/render_tests.js +++ b/packages/ui/render_tests.js @@ -20,7 +20,7 @@ var materialize = function (content, parent) { return content; }; } - Blaze.render(func).attach(parent); + UI.insert(UI.render(func), parent); }; var toHTML = Blaze.toHTML; @@ -305,7 +305,7 @@ Tinytest.add("ui - render - reactive attributes", function (test) { test.equal(R.numListeners(), 0); var div = document.createElement("DIV"); - Blaze.render(spanFunc).attach(div); + UI.insert(UI.render(spanFunc), div); test.equal(canonicalizeHtml(div.innerHTML), ''); test.equal(R.numListeners(), 1); @@ -344,7 +344,7 @@ Tinytest.add("ui - render - reactive attributes", function (test) { test.equal(R.numListeners(), 0); var div = document.createElement("DIV"); - Blaze.render(spanFunc).attach(div); + UI.insert(UI.render(spanFunc), div); test.equal(canonicalizeHtml(div.innerHTML), ''); test.equal(R.numListeners(), 1); @@ -379,7 +379,7 @@ Tinytest.add("ui - render - reactive attributes", function (test) { var div = document.createElement("DIV"); document.body.appendChild(div); - Blaze.render(spanFunc).attach(div); + UI.insert(UI.render(spanFunc), div); test.equal(canonicalizeHtml(div.innerHTML), ''); var span = div.firstChild; @@ -435,7 +435,7 @@ Tinytest.add("ui - render - reactive attributes", function (test) { 'HTML.SPAN({id: "foo", ggg: ["x", ["y", ["z"]]]})'); var div = document.createElement("DIV"); - Blaze.render(spanFunc).attach(div); + UI.insert(UI.render(spanFunc), div); var span = div.firstChild; test.equal(span.nodeName, 'SPAN'); @@ -514,7 +514,7 @@ Tinytest.add("ui - render - views", function (test) { var div = document.createElement("DIV"); - Blaze.render(makeView).attach(div); + UI.insert(UI.render(makeView), div); buf.push('---flush---'); Deps.flush(); test.equal(buf, ['created 1', @@ -571,7 +571,7 @@ Tinytest.add("ui - render - findAll", function (test) { var div = document.createElement("DIV"); - Blaze.render(myTemplate).attach(div); + UI.insert(UI.render(myTemplate), div); Deps.flush(); test.equal(_.isArray(found), true); @@ -591,7 +591,7 @@ Tinytest.add("ui - render - reactive attributes 2", function (test) { }; var div = document.createElement("DIV"); - Blaze.render(spanFunc).attach(div); + UI.insert(UI.render(spanFunc), div); var check = function (expected) { test.equal(Blaze.toHTML(spanFunc()), expected); test.equal(canonicalizeHtml(div.innerHTML), expected);