From 75a01802f73e791b082229f065eeb3df6a48a962 Mon Sep 17 00:00:00 2001
From: António Afonso
Date: Wed, 30 May 2012 10:17:49 -0700
Subject: Avoid duplicate labels in template creator

This is the fix for Motorola-Mobility/montage#649---
 node_modules/tools/template/template-creator.js | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/node_modules/tools/template/template-creator.js b/node_modules/tools/template/template-creator.js
index 374353f0..dc6b1190 100755
--- a/node_modules/tools/template/template-creator.js
+++ b/node_modules/tools/template/template-creator.js
@@ -51,8 +51,8 @@ var TemplateCreator = exports.TemplateCreator = Montage.create(Template, /** @le
                     component = isRootNode ? null : sourceNode.controller;
                     
                 if (component) {
-                    label = self._generateLabelForComponent(component);
                     targetNode.setAttribute("id", label);
+                    label = self._generateLabelForComponent(component, Object.keys(components));
                     component._element = targetNode;
                     components[label] = component;
                 } else {
@@ -94,8 +94,8 @@ var TemplateCreator = exports.TemplateCreator = Montage.create(Template, /** @le
     _componentNamesIndex: {
         value: null
     },
-    
-    _generateLabelForComponent: {value: function(component) {
+
+    _generateLabelForComponent: {value: function(component, labels) {
         var componentInfo = Montage.getInfoForObject(component),
             componentLabel = componentInfo.label,
             componentName,
@@ -105,8 +105,11 @@ var TemplateCreator = exports.TemplateCreator = Montage.create(Template, /** @le
             return componentLabel;
         } else {
             componentName = componentInfo.objectName.toLowerCase();
-            index = this._componentNamesIndex[componentName] || 1;
-            this._componentNamesIndex[componentName] = index + 1;
+            do {
+                index = this._componentNamesIndex[componentName] || 1;
+                this._componentNamesIndex[componentName] = index + 1;
+            } while (labels.indexOf(componentName+index) >= 0);
+
             return componentName + index;
         }
     }},
-- 
cgit v1.2.3


From e6dbd73e80ac47ae9bfdfdb5bef3263b24a36603 Mon Sep 17 00:00:00 2001
From: António Afonso
Date: Wed, 30 May 2012 10:34:45 -0700
Subject: Stop adding ids to elements in template creator

This is the fix for Motorola-Mobility/montage#648
---
 node_modules/tools/template/template-creator.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/node_modules/tools/template/template-creator.js b/node_modules/tools/template/template-creator.js
index dc6b1190..4ba1b443 100755
--- a/node_modules/tools/template/template-creator.js
+++ b/node_modules/tools/template/template-creator.js
@@ -51,7 +51,6 @@ var TemplateCreator = exports.TemplateCreator = Montage.create(Template, /** @le
                     component = isRootNode ? null : sourceNode.controller;
                     
                 if (component) {
-                    targetNode.setAttribute("id", label);
                     label = self._generateLabelForComponent(component, Object.keys(components));
                     component._element = targetNode;
                     components[label] = component;
-- 
cgit v1.2.3


From 87a5999ecd9e7d84d21fd8c712944cd9408c3aa0 Mon Sep 17 00:00:00 2001
From: António Afonso
Date: Wed, 30 May 2012 10:36:59 -0700
Subject: Stop serializing the child components of the top components are not
 serialized

We just removed them before serializing and add them again afterwards.---
 node_modules/tools/template/template-creator.js | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/node_modules/tools/template/template-creator.js b/node_modules/tools/template/template-creator.js
index 4ba1b443..01a2518b 100755
--- a/node_modules/tools/template/template-creator.js
+++ b/node_modules/tools/template/template-creator.js
@@ -35,6 +35,7 @@ var TemplateCreator = exports.TemplateCreator = Montage.create(Template, /** @le
             var serializer = this.serializer,
                 objects = {},
                 components = {},
+                componentsChildComponents = {},
                 doc,
                 script,
                 self = this;
@@ -54,6 +55,8 @@ var TemplateCreator = exports.TemplateCreator = Montage.create(Template, /** @le
                     label = self._generateLabelForComponent(component, Object.keys(components));
                     component._element = targetNode;
                     components[label] = component;
+                    componentsChildComponents[label] = component.childComponents;
+                    delete component.childComponents;
                 } else {
                     for (var i = 0; (childNode = childNodes[i]); i++) {
                         targetChildNode = targetNode.appendChild(childNode.cloneNode(false));
@@ -84,6 +87,10 @@ var TemplateCreator = exports.TemplateCreator = Montage.create(Template, /** @le
             
             copyNode(body, this._document.body, true);
             this._ownerSerialization = serializer.serialize(components);
+            for (var label in components) {
+                components[label].childComponents = componentsChildComponents[label];
+            }
+            components = componentsChildComponents = null;
             this._externalObjects = serializer.getExternalObjects();
             
             return this;
-- 
cgit v1.2.3


From 78c80a68083ed8ad573898de215fb723b0546d32 Mon Sep 17 00:00:00 2001
From: António Afonso
Date: Wed, 30 May 2012 10:37:38 -0700
Subject: Initialize an internal Template variable in TemplateCreator

---
 node_modules/tools/template/template-creator.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/node_modules/tools/template/template-creator.js b/node_modules/tools/template/template-creator.js
index 01a2518b..c5d3cffd 100755
--- a/node_modules/tools/template/template-creator.js
+++ b/node_modules/tools/template/template-creator.js
@@ -41,6 +41,7 @@ var TemplateCreator = exports.TemplateCreator = Montage.create(Template, /** @le
                 self = this;
             
             this._componentNamesIndex = {};
+            this._objectNamesIndex = {};
             doc = this._document = document.implementation.createHTMLDocument("");
             
             function copyNode(sourceNode, targetNode, isRootNode) {
-- 
cgit v1.2.3