From 3811f72f8cd8caaa2d13fa695b918f25facb85c5 Mon Sep 17 00:00:00 2001
From: Jose Antonio Marquez
Date: Wed, 9 May 2012 16:28:13 -0700
Subject: Preliminary Montage Template Cleanup
The template creator is currently not returning serializing code, but does clean the document. Need to investigate reason why, currently all components are removed on save.
---
js/document/models/html.js | 25 ++---
js/document/views/design.js | 14 +++
js/mediators/io-mediator.js | 40 ++++++--
node_modules/tools/template-creator.js | 117 ------------------------
node_modules/tools/template/template-creator.js | 113 +++++++++++++++++++++++
5 files changed, 170 insertions(+), 139 deletions(-)
delete mode 100644 node_modules/tools/template-creator.js
create mode 100755 node_modules/tools/template/template-creator.js
diff --git a/js/document/models/html.js b/js/document/models/html.js
index 2764a6d6..b57ff832 100755
--- a/js/document/models/html.js
+++ b/js/document/models/html.js
@@ -22,30 +22,30 @@ exports.HtmlDocumentModel = Montage.create(BaseDocumentModel, {
draw3DGrid: {
value: false
},
+ ////////////////////////////////////////////////////////////////////
+ //
+ baseHref: {
+ value: null
+ },
////////////////////////////////////////////////////////////////////
//
webGlHelper: {
value: webGlDocumentHelper
},
- ////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
+ //
userComponents: {
value: {}
},
-
- /**
- * Add a reference to a component instance to the userComponents hash using the
- * element UUID
- */
+ ////////////////////////////////////////////////////////////////////
+ //Add a reference to a component instance to the userComponents hash using the element UUID
setComponentInstance: {
value: function(instance, el) {
this.userComponents[el.uuid] = instance;
}
},
-
- /**
- * Returns the component instance obj from the element
- */
+ ////////////////////////////////////////////////////////////////////
+ //Returns the component instance obj from the element
getComponentFromElement: {
value: function(el) {
if(el) {
@@ -55,7 +55,8 @@ exports.HtmlDocumentModel = Montage.create(BaseDocumentModel, {
}
}
}
-
+ ////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////
});
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/js/document/views/design.js b/js/document/views/design.js
index 9ad088cb..765099e6 100755
--- a/js/document/views/design.js
+++ b/js/document/views/design.js
@@ -41,6 +41,11 @@ exports.DesignDocumentView = Montage.create(BaseDocumentView, {
content: {
value: null
},
+ ////////////////////////////////////////////////////////////////////
+ //TODO: Remove usage
+ model: {
+ value: null
+ },
////////////////////////////////////////////////////////////////////
//
document: {
@@ -78,6 +83,8 @@ exports.DesignDocumentView = Montage.create(BaseDocumentView, {
//
onTemplateLoad: {
value: function (e) {
+ //TODO: Add support to constructing URL with a base HREF
+ var basetag = this.content.document.getElementsByTagName('base');
//Removing event
this.iframe.removeEventListener("load", this.onTemplateLoad.bind(this), false);
//TODO: Improve usage of this reference
@@ -88,6 +95,13 @@ exports.DesignDocumentView = Montage.create(BaseDocumentView, {
this.document.styleSheets[k].ownerNode.setAttribute('data-ninja-template', 'true');
}
}
+ //Checking for a base URL
+ if (basetag.length) {
+ if (basetag[basetag.length-1].getAttribute && basetag[basetag.length-1].getAttribute('href')) {
+ //Setting base HREF in model
+ this.model.baseHref = basetag[basetag.length-1].getAttribute('href');
+ }
+ }
//Creating temp code fragement to load head
this._headFragment = this.document.createElement('head');
//Adding event listener to know when head is ready, event only dispatched once when using innerHTML
diff --git a/js/mediators/io-mediator.js b/js/mediators/io-mediator.js
index 6d146c97..cf44ab9d 100644
--- a/js/mediators/io-mediator.js
+++ b/js/mediators/io-mediator.js
@@ -10,7 +10,7 @@ var Montage = require("montage/core/core").Montage,
Component = require("montage/ui/component").Component,
FileIo = require("js/io/system/fileio").FileIo,
ProjectIo = require("js/io/system/projectio").ProjectIo,
- TemplateCreator = require("node_modules/tools/template-creator").TemplateCreator;
+ TemplateCreator = require("node_modules/tools/template/template-creator").TemplateCreator;
////////////////////////////////////////////////////////////////////////
//
exports.IoMediator = Montage.create(Component, {
@@ -203,20 +203,38 @@ exports.IoMediator = Montage.create(Component, {
var regexRootUrl, rootUrl = this.application.ninja.coreIoApi.rootUrl + escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]));
regexRootUrl = new RegExp(rootUrl.replace(/\//gi, '\\\/'), 'gi');
//Injecting head and body into old document
- template.file.content.document.head.innerHTML = template.head.innerHTML.replace(regexRootUrl, '');
- template.file.content.document.body.innerHTML = template.body.innerHTML.replace(regexRootUrl, '');
+ //template.file.content.document.head.innerHTML = template.head.innerHTML.replace(regexRootUrl, '');
+ //template.file.content.document.body.innerHTML = template.body.innerHTML.replace(regexRootUrl, '');
+
+
+
+ //Testing using montage clean up method
+ var mjscode, mjsTemp = TemplateCreator.create();
+
+ //mjscode = mjsTemp.initWithHeadAndBodyElements(template.head, template.body);
+ mjscode = mjsTemp.initWithDocument(template.file.content.document);
+
+ console.log(template.head, mjscode._document.head);
+ template.file.content.document.head.innerHTML = mjscode._document.head.innerHTML.replace(regexRootUrl, '');
+ template.file.content.document.body.innerHTML = mjscode._document.body.innerHTML.replace(regexRootUrl, '');
+
+
+
+
//Getting all CSS (style or link) tags
var styletags = template.file.content.document.getElementsByTagName('style'),
linktags = template.file.content.document.getElementsByTagName('link'),
toremovetags = [],
- njtemplatetags = template.file.content.document.querySelectorAll('[data-ninja-template]'),
- basetags = template.file.content.document.getElementsByTagName('base');
+ njtemplatetags = template.file.content.document.querySelectorAll('[data-ninja-template]');
//////////////////////////////////////////////////
- //TODO: Remove, temp hack to avoid montage
+ //TODO: Remove, temp hack, this is to be fixed by Montage
+ /*
+var basetags = template.file.content.document.getElementsByTagName('base');
for (var g in basetags) {
if (basetags[g].getAttribute) toremovetags.push(basetags[g]);
}
+*/
//////////////////////////////////////////////////
//
@@ -469,9 +487,9 @@ function loadWebGL (e) {\n\
//
- var mjsCounter = 0, mjsComponents = [], temp = TemplateCreator.create();
- //
- for (var m in template.mjs) {
+
+ /*
+for (var m in template.mjs) {
mjsComponents.push(template.mjs[m]);
mjsCounter++;
}
@@ -509,6 +527,7 @@ function loadWebGL (e) {\n\
//
mjstag.innerHTML = mjscode;
}
+*/
@@ -570,7 +589,8 @@ function loadWebGL (e) {\n\
//
getDocRootUrl: {
value: function () {
- return this.application.ninja.coreIoApi.rootUrl + escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]).replace(/\/\//gi, '/'));
+ //TODO: Add support for model.baseHref (base tag)
+ return this.application.ninja.coreIoApi.rootUrl + escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1]).replace(/\/\//gi, '/'));
}
},
////////////////////////////////////////////////////////////////////
diff --git a/node_modules/tools/template-creator.js b/node_modules/tools/template-creator.js
deleted file mode 100644
index e312cd32..00000000
--- a/node_modules/tools/template-creator.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- This file contains proprietary software owned by Motorola Mobility, Inc.
- No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
- (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
- */
-/**
- @module montage/tools/template/template-creator
- @requires montage/ui/template
-*/
-
-exports = typeof exports !== "undefined" ? exports : {};
-
-var Montage = require("montage/core/core").Montage;
-var Template = require("montage/ui/template").Template;
-
-/**
- @class module:montage/tools/template/template-creator.TemplateCreator
- @extends module:montage/ui/template.Template
-*/
-var TemplateCreator = exports.TemplateCreator = Montage.create(Template, /** @lends module:montage/tools/template/template-creator.TemplateCreator# */ {
- initWithDocument: {
- value: function(doc, montageJsPath) {
- return this.initWithHeadAndBodyElements(doc.head, doc.body, montageJsPath);
- }
- },
-
- initWithBodyElement: {
- value: function(body, montageJsPath) {
- return this.initWithHeadAndBodyElements(null, body, montageJsPath);
- }
- },
-
- initWithHeadAndBodyElements: {
- value: function(head, body, components, montageJsPath) {
- var serializer = this.serializer,
- objects = {},
- //components = {},
- doc,
- script,
- self = this;
-
- this._objectNamesIndex = {};
- //doc = this._document = document.implementation.createHTMLDocument("");
-
- /*
-function copyNode(sourceNode, targetNode, isRootNode) {
- var childNodes = sourceNode.childNodes,
- childNode,
- targetChildNode,
- label,
- script,
- component = isRootNode ? null : sourceNode.controller;
-
- if (component) {
- label = self._generateLabelForComponent(component);
- targetNode.setAttribute("id", label);
- component._element = targetNode;
- //components[label] = component;
- } else {
- for (var i = 0; (childNode = childNodes[i]); i++) {
- targetChildNode = targetNode.appendChild(childNode.cloneNode(false));
- copyNode(childNode, targetChildNode);
- }
- }
- }
-*/
-
- /*
-if (head) {
- doc.head.innerHTML = head.innerHTML;
- }
- if (montageJsPath) {
- script = doc.createElement("script");
- script.setAttribute("src", montageJsPath);
- doc.head.appendChild(script);
- doc.head.insertBefore(doc.createTextNode("\n "), script);
- }
-
- // try to make things look nice...
- var html = doc.documentElement;
- html.insertBefore(doc.createTextNode("\n"), doc.head);
- html.insertBefore(doc.createTextNode("\n"), doc.body);
- html.appendChild(doc.createTextNode("\n"));
- if (!head) {
- // the first child is the title
- doc.head.insertBefore(doc.createTextNode("\n "), doc.head.firstChild);
- }
-*/
-
- //copyNode(body, this._document.body, true);
- this._ownerSerialization = serializer.serialize(components);
- this._externalObjects = serializer.getExternalObjects();
-
- return this;
- }
- },
-
- _componentNamesIndex: {
- value: null
- },
-
- _generateLabelForComponent: {value: function(component) {
- var componentInfo = Montage.getInfoForObject(component),
- componentLabel = componentInfo.label,
- componentName,
- index;
-
- if (componentLabel) {
- return componentLabel;
- } else {
- componentName = componentInfo.objectName.toLowerCase();
- index = this._componentNamesIndex[componentName] || 1;
- this._componentNamesIndex[componentName] = index + 1;
- return componentName + index;
- }
- }},
-});
\ No newline at end of file
diff --git a/node_modules/tools/template/template-creator.js b/node_modules/tools/template/template-creator.js
new file mode 100755
index 00000000..1cd65ddd
--- /dev/null
+++ b/node_modules/tools/template/template-creator.js
@@ -0,0 +1,113 @@
+/*
+ This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
+ */
+/**
+ @module montage/tools/template/template-creator
+ @requires montage/ui/template
+*/
+
+exports = typeof exports !== "undefined" ? exports : {};
+
+var Montage = require("montage/core/core").Montage;
+var Template = require("montage/ui/template").Template;
+
+/**
+ @class module:montage/tools/template/template-creator.TemplateCreator
+ @extends module:montage/ui/template.Template
+*/
+var TemplateCreator = exports.TemplateCreator = Montage.create(Template, /** @lends module:montage/tools/template/template-creator.TemplateCreator# */ {
+ initWithDocument: {
+ value: function(doc, montageJsPath) {
+ return this.initWithHeadAndBodyElements(doc.head, doc.body, montageJsPath);
+ }
+ },
+
+ initWithBodyElement: {
+ value: function(body, montageJsPath) {
+ return this.initWithHeadAndBodyElements(null, body, montageJsPath);
+ }
+ },
+
+ initWithHeadAndBodyElements: {
+ value: function(head, body, montageJsPath) {
+ var serializer = this.serializer,
+ objects = {},
+ components = {},
+ doc,
+ script,
+ self = this;
+
+ this._objectNamesIndex = {};
+ doc = this._document = document.implementation.createHTMLDocument("");
+
+ function copyNode(sourceNode, targetNode, isRootNode) {
+ var childNodes = sourceNode.childNodes,
+ childNode,
+ targetChildNode,
+ label,
+ script,
+ component = isRootNode ? null : sourceNode.controller;
+
+ if (component) {
+ label = self._generateLabelForComponent(component);
+ targetNode.setAttribute("id", label);
+ component._element = targetNode;
+ components[label] = component;
+ } else {
+ for (var i = 0; (childNode = childNodes[i]); i++) {
+ targetChildNode = targetNode.appendChild(childNode.cloneNode(false));
+ copyNode(childNode, targetChildNode);
+ }
+ }
+ }
+
+ if (head) {
+ doc.head.innerHTML = head.innerHTML;
+ }
+ if (montageJsPath) {
+ script = doc.createElement("script");
+ script.setAttribute("src", montageJsPath);
+ doc.head.appendChild(script);
+ doc.head.insertBefore(doc.createTextNode("\n "), script);
+ }
+
+ // try to make things look nice...
+ var html = doc.documentElement;
+ html.insertBefore(doc.createTextNode("\n"), doc.head);
+ html.insertBefore(doc.createTextNode("\n"), doc.body);
+ html.appendChild(doc.createTextNode("\n"));
+ if (!head) {
+ // the first child is the title
+ doc.head.insertBefore(doc.createTextNode("\n "), doc.head.firstChild);
+ }
+
+ copyNode(body, this._document.body, true);
+ this._ownerSerialization = serializer.serialize(components);
+ this._externalObjects = serializer.getExternalObjects();
+
+ return this;
+ }
+ },
+
+ _componentNamesIndex: {
+ value: null
+ },
+
+ _generateLabelForComponent: {value: function(component) {
+ var componentInfo = Montage.getInfoForObject(component),
+ componentLabel = componentInfo.label,
+ componentName,
+ index;
+
+ if (componentLabel) {
+ return componentLabel;
+ } else {
+ componentName = componentInfo.objectName.toLowerCase();
+ index = this._componentNamesIndex[componentName] || 1;
+ this._componentNamesIndex[componentName] = index + 1;
+ return componentName + index;
+ }
+ }},
+});
\ No newline at end of file
--
cgit v1.2.3