From 22a66cb6e243a3f1c867b62e3942fd2e828019d9 Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Thu, 8 Mar 2012 13:56:09 -0800 Subject: integrating v0.7 montage into ninja Signed-off-by: Valerio Virgillito --- node_modules/montage/ui/component.js | 115 +++++++++++++++++++++++------------ 1 file changed, 77 insertions(+), 38 deletions(-) (limited to 'node_modules/montage/ui/component.js') diff --git a/node_modules/montage/ui/component.js b/node_modules/montage/ui/component.js index d347f655..69559fc1 100755 --- a/node_modules/montage/ui/component.js +++ b/node_modules/montage/ui/component.js @@ -59,7 +59,6 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon value: function() { var actionEvent = document.createEvent("CustomEvent"); actionEvent.initCustomEvent("action", true, true, null); - actionEvent.type = "action"; return actionEvent; } }, @@ -162,6 +161,15 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon } }, + setElementWithParentComponent: { + value: function(element, parent) { + this._alternateParentComponent = parent; + if (this.element != element) { + this.element = element; + } + } + }, + // access to the Application object /** Description TODO @@ -215,6 +223,11 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon return targetElementController; } }, + + _alternateParentComponent: { + value: null + }, + /** Description TODO @private @@ -235,21 +248,27 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon get: function() { var cachedParentComponent = this._cachedParentComponent; if (cachedParentComponent == null) { - var anElement = this.element, - aParentNode, - eventManager = this.eventManager; - if (anElement) { - while ((aParentNode = anElement.parentNode) !== null && eventManager.eventHandlerForElement(aParentNode) == null) { - anElement = aParentNode; - } - return (this._cachedParentComponent = aParentNode ? eventManager.eventHandlerForElement(aParentNode) : null); - } + return (this._cachedParentComponent = this.findParentComponent()); } else { return cachedParentComponent; } } }, + findParentComponent: { + value: function() { + var anElement = this.element, + aParentNode, + eventManager = this.eventManager; + if (anElement) { + while ((aParentNode = anElement.parentNode) !== null && eventManager.eventHandlerForElement(aParentNode) == null) { + anElement = aParentNode; + } + return aParentNode ? eventManager.eventHandlerForElement(aParentNode) : this._alternateParentComponent; + } + } + }, + querySelectorComponent: { value: function(selector) { if (typeof selector !== "string") { @@ -406,19 +425,30 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon attachToParentComponent: { value: function() { this._cachedParentComponent = null; - - var parentComponent = this.parentComponent; - + + var parentComponent = this.parentComponent, + childComponents, + childComponent; + if (parentComponent) { + childComponents = parentComponent.childComponents; + for (var i = 0; (childComponent = childComponents[i]); i++) { + var newParentComponent = childComponent.findParentComponent(); + if (newParentComponent === this) { + parentComponent.removeChildComponent(childComponent); + newParentComponent._addChildComponent(childComponent); + } + } + parentComponent._addChildComponent(this); } } }, - + detachFromParentComponent: { value: function() { var parentComponent = this.parentComponent; - + if (parentComponent) { parentComponent.removeChildComponent(this); } @@ -438,6 +468,7 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon if (ix > -1) { childComponents.splice(ix, 1); childComponent._cachedParentComponent = null; + childComponent._alternateParentComponent = null; } } }, @@ -458,7 +489,6 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon */ ownerComponent: { enumerable: false, - serializable: true, value: null }, /** @@ -488,7 +518,7 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon enumerable: false, value: null }, - + /** * Remove all bindings and starts buffering the needsDraw. * @function @@ -498,23 +528,20 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon this.needsDraw = false; this.traverseComponentTree(function(component) { Object.deleteBindings(component); - component.canDrawGate.setField("componentTreeLoaded", false); - component.blockDrawGate.setField("element", false); - component.blockDrawGate.setField("drawRequested", false); component.needsDraw = false; }); } }, - + originalContent: { value: null }, - + _newContent: { enumerable: false, value: null }, - + content: { get: function() { if (this._element) { @@ -526,21 +553,21 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon set: function(value) { var components = [], childNodes; - + this._newContent = value; this.needsDraw = true; - + if (typeof this.contentWillChange === "function") { this.contentWillChange(value); } - + // cleanup current content components = this.childComponents; for (var i = 0, component; (component = components[i]); i++) { component.detachFromParentComponent(); component.cleanupDeletedComponentTree(); } - + if (value instanceof Element) { findAndDetachComponents(value); } else { @@ -548,11 +575,11 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon findAndDetachComponents(value[i]); } } - + // find the component fringe and detach them from the component tree function findAndDetachComponents(node) { var component = node.controller; - + if (component) { component.detachFromParentComponent(); components.push(component); @@ -563,14 +590,14 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon } } } - + // not sure if I can rely on _cachedParentComponent to detach the nodes instead of doing one loop for dettach and another to attach... for (var i = 0, component; (component = components[i]); i++) { this._addChildComponent(component); } } }, - + /** Description TODO @function @@ -581,6 +608,9 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon if (this._element) { this.originalContent = Array.prototype.slice.call(this._element.childNodes, 0); } + if (!("identifier" in this)) { + this.identifier = Montage.getInfoForObject(this).label; + } } }, @@ -886,6 +916,15 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon // this call will be synchronous if the template is cached. Template.templateWithModuleId(info.require, templateModuleId, onTemplateLoad); }}, + + templateDidDeserializeObject: { + value: function(object) { + if (Component.isPrototypeOf(object)) { + object.ownerComponent = this; + } + } + }, + /** Callback for the _canDrawGate.
Propagates to the parent and adds the component to the draw list. @@ -990,10 +1029,10 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon if (attributeName === "id" || attributeName === "data-montage-id") { continue; } else { - value = (template.getAttribute(attributeName) || "") + " " + + value = (template.getAttribute(attributeName) || "") + (attributeName === "style" ? "; " : " ") + attribute.nodeValue; } - + template.setAttribute(attributeName, value); } @@ -1072,13 +1111,13 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon value: function() { var contents = this._newContent, element; - + this._canDrawTable = {}; this._canDrawCount = 0; - + if (contents) { element = this._element; - + element.innerHTML = ""; if (contents instanceof Element) { @@ -1088,7 +1127,7 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon element.appendChild(content); } } - + this._newContent = null; if (typeof this.contentDidChange === "function") { this.contentDidChange(); @@ -1196,7 +1235,7 @@ var Component = exports.Component = Montage.create(Montage,/** @lends module:mon } if (this._needsDraw !== value) { if (drawLogger.isDebug) { - drawLogger.debug("NEEDS DRAW TOGGLED " + value + " FOR " + (this.element != null ? this.element.id : '')); + drawLogger.debug("NEEDS DRAW TOGGLED " + value + " FOR " + this._montage_metadata.objectName); } this._needsDraw = !!value; if (value) { -- cgit v1.2.3