From 04fcd742e91228cf06d8a9f0a790432b0349e68c Mon Sep 17 00:00:00 2001 From: Lalo Martins Date: Fri, 19 Jun 2015 02:14:34 +0200 Subject: [PATCH] Correctly insert nodes at the end of a parent In _uihooks, sometimes the `next` argument is null, which means the new dquote> node should be appended to the parent. However, using jQuery (`$(node).insertBefore(next)`), that's not possible, since jQuery has no way of knowing what parent you mean. Instead, this commit uses a standard DOM method, `parent.insertBefore(node, next)`, which does the right thing -- it's what Blaze uses internally when no `insertElement` hook is defined. --- components/ionNavBar/ionNavBar.js | 11 +++++++---- components/ionNavView/ionNavView.js | 8 +++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/components/ionNavBar/ionNavBar.js b/components/ionNavBar/ionNavBar.js index ae2de3b..c2f3ab8 100644 --- a/components/ionNavBar/ionNavBar.js +++ b/components/ionNavBar/ionNavBar.js @@ -26,12 +26,13 @@ Template.ionNavBar.rendered = function () { IonHeaderBar.positionTitle.call(this); var template = this; - this.find('[data-navbar-container]')._uihooks = { + var container = this.find('[data-navbar-container]'); + container._uihooks = { insertElement: function(node, next) { var $node = $(node); if (!$node.hasClass('title') && !$node.hasClass('button') || IonNavigation.skipTransitions) { - $node.insertBefore(next); + container.insertBefore(node, next); // Changing tabs skips transition animations, but we still want to update the position of the title IonHeaderBar.alignTitle.call(template); IonHeaderBar.positionTitle.call(template); @@ -39,7 +40,8 @@ Template.ionNavBar.rendered = function () { } if ($node.hasClass('title')) { - $node.insertBefore(next).addClass('title-entering title-stage'); + container.insertBefore(node, next); + $node.addClass('title-entering title-stage'); IonHeaderBar.alignTitle.call(template); IonHeaderBar.positionTitle.call(template); @@ -55,7 +57,8 @@ Template.ionNavBar.rendered = function () { } if ($node.hasClass('button')) { - $node.insertBefore(next).addClass('button-entering button-stage'); + container.insertBefore(node, next); + $node.addClass('button-entering button-stage'); Meteor.setTimeout(function() { $node.removeClass('button-stage').addClass('button-active'); }, 16); diff --git a/components/ionNavView/ionNavView.js b/components/ionNavView/ionNavView.js index c54de3c..d42fb64 100644 --- a/components/ionNavView/ionNavView.js +++ b/components/ionNavView/ionNavView.js @@ -26,16 +26,18 @@ Template.ionNavView.created = function () { Template.ionNavView.rendered = function () { var template = this; + var container = this.find('[data-nav-container]'); - this.find('[data-nav-container]')._uihooks = { + container._uihooks = { insertElement: function(node, next) { var $node = $(node); if (!template.transition || !$node.hasClass('view') || IonNavigation.skipTransitions) { - $node.insertBefore(next); + container.insertBefore(node, next); return; } - $node.insertBefore(next).addClass('nav-view-entering nav-view-stage'); + $node.addClass('nav-view-entering nav-view-stage'); + container.insertBefore(node, next); Meteor.setTimeout(function() { $node.removeClass('nav-view-stage').addClass('nav-view-active'); }, 0);