From 8fe92b94ce5e1e2857d088752d94e19db7e3d8a8 Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Sun, 17 Jun 2012 22:31:44 -0700 Subject: montage v11 merge into ninja Signed-off-by: Valerio Virgillito --- node_modules/montage/core/deserializer.js | 64 ++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 23 deletions(-) (limited to 'node_modules/montage/core/deserializer.js') diff --git a/node_modules/montage/core/deserializer.js b/node_modules/montage/core/deserializer.js index 86cdc560..424a2bc9 100755 --- a/node_modules/montage/core/deserializer.js +++ b/node_modules/montage/core/deserializer.js @@ -31,7 +31,7 @@ try { @class module:montage/core/deserializer.Deserializer @extends module:montage/core/core.Montage */ -var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deserializer.Deserializer# */ { +var Deserializer = exports.Deserializer = Montage.create(Montage, /** @lends module:montage/core/deserializer.Deserializer# */ { _MONTAGE_ID_ATTRIBUTE: {value: "data-montage-id"}, _objects: {value: null}, @@ -533,7 +533,7 @@ var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deseri var serialization = this._serialization, moduleIds = this._requiredModuleIds = [], modules = this._modules, - desc, moduleId, name, objectLocation; + desc, moduleId; for (var label in serialization) { desc = serialization[label]; @@ -542,16 +542,8 @@ var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deseri if ("module" in desc) { moduleId = desc.module; } else if ("prototype" in desc || "object" in desc) { - name = desc.prototype || desc.object - objectLocation = name.split("["); - moduleId = objectLocation[0]; - desc.module = moduleId; - if (objectLocation.length == 2) { - desc.name = objectLocation[1].slice(0, -1); - } else { - this._findObjectNameRegExp.test(moduleId); - desc.name = RegExp.$1.replace(this._toCamelCaseRegExp, this._replaceToCamelCase); - } + Deserializer.parseForModuleAndName(desc.prototype || desc.object, desc); + moduleId = desc.module; } if (moduleId && !modules[moduleId] && moduleIds.indexOf(moduleId) == -1) { @@ -559,6 +551,34 @@ var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deseri } } }}, + + /** + Sets the module loader used during deserialization. + @function + @param {String} name The string representing a module/name pair, such as "my-module[MyModule]". + @param {Object} description The description object on which the parseForModuleAndName will populate the module and name properties. [Optional] + @returns {Object} The description object with module and name properties populated. + */ + parseForModuleAndName: { + value: function(name, desc) { + var bracketIndex; + + if (typeof desc === "undefined") { + desc = {}; + } + bracketIndex = name.indexOf("["); + if (bracketIndex > 0) { + desc.module = name.substr(0, bracketIndex); + desc.name = name.slice(bracketIndex+1, -1); + } else { + desc.module = name; + Deserializer._findObjectNameRegExp.test(name); + desc.name = RegExp.$1.replace(Deserializer._toCamelCaseRegExp, Deserializer._replaceToCamelCase); + } + return desc; + } + }, + /** @private */ @@ -680,23 +700,25 @@ var Deserializer = Montage.create(Montage, /** @lends module:montage/core/deseri hasObject = object != null, counter, descString, - objectLocation; + objectLocation, + bracketIndex; if ("module" in desc) { moduleId = desc.module; objectName = name = desc.name; } else if ("prototype" in desc || "object" in desc) { - objectLocation = (desc.prototype || desc.object).split("["); + bracketIndex = (desc.prototype || desc.object).indexOf("["); // this code is actually only used when canEval == false, // module+name are added when the modules are parsed but it's // slow to redo the _serializationString in order to keep the // added module+name when we do JSON.parse(_serializationString) // at canEval == false. - moduleId = objectLocation[0]; - if (objectLocation.length == 2) { - objectName = name = objectLocation[1].slice(0, -1); + if (bracketIndex > 0) { + moduleId = name.substr(0, bracketIndex); + objectName = name = name.slice(bracketIndex+1, -1); } else { - self._findObjectNameRegExp.test(moduleId); + moduleId = name; + self._findObjectNameRegExp.test(name); objectName = name = RegExp.$1.replace(self._toCamelCaseRegExp, function(_, g1) { return g1.toUpperCase() }); } } @@ -1142,8 +1164,4 @@ function deserialize(serialization, require, origin) { return deferred.promise; } -if (typeof exports !== "undefined") { - exports.Deserializer = Deserializer; - exports.deserialize = deserialize; -} - +exports.deserialize = deserialize; -- cgit v1.2.3