From e28eb9158a50d7e6d97dbc68066e591ac600c241 Mon Sep 17 00:00:00 2001
From: Valerio Virgillito
Date: Tue, 5 Jun 2012 21:40:44 -0700
Subject: removing all model creators.

The elementModel is now a getter that will create a new model when needed.

Signed-off-by: Valerio Virgillito <valerio@motorola.com>
---
 js/models/element-model.js | 96 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 95 insertions(+), 1 deletion(-)

(limited to 'js/models')

diff --git a/js/models/element-model.js b/js/models/element-model.js
index 966158e4..ea25e5b1 100755
--- a/js/models/element-model.js
+++ b/js/models/element-model.js
@@ -10,7 +10,101 @@ var Montage             = require("montage/core/core").Montage,
     ControllerFactory   = require("js/controllers/elements/controller-factory").ControllerFactory,
     PiData              = require("js/data/pi/pi-data").PiData;
 
-exports.ElementModel = Montage.create(Montage, {
+var modelGenerator = exports.modelGenerator = function() {
+    var info = getInfoForElement(this);
+
+    Object.defineProperty(this, "_model", {
+        configurable: true,
+        enumerable: false,
+        writable: true,
+        value: Montage.create(elmo, {
+            type:           { value: info.type},
+            selection:      { value: info.selection},
+            controller:     { value: info.controller},
+            pi:             { value: info.pi},
+            props3D:        { value: info.props3d},
+            shapeModel:     { value: info.shapeModel},
+            isShape:        { value: info.isShape}
+        })
+    });
+
+    if(this._model.selection === "body") {
+        this._model.props3D.init(this, true);
+    } else {
+        this._model.props3D.init(this, false);
+    }
+
+    return this._model;
+};
+
+var getInfoForElement = function(el) {
+    var elementName, controller, pi, shapeModel = null, isShape = false, isComponent = false;
+
+    elementName = el.nodeName.toLowerCase();
+    controller = elementNameToController(elementName);
+    pi = elementNameToPi(elementName);
+
+    // Element is a shape
+    if(el.getAttribute("data-RDGE-id")) {
+        controller = "shape";
+        shapeModel = Montage.create(ShapeModel);
+        isShape = true;
+    }
+
+    // TODO: Add this in case there is no controller for the component
+    /*
+    if(el.getAttribute("data-montage-id")) {
+        elementName = null;
+        this.isComponent = true;
+    }
+    */
+
+    // Element is a component
+    if(el.controller) {
+        var componentInfo = Montage.getInfoForObject(el.controller);
+        var componentName = componentInfo.objectName;//.toLowerCase();
+
+        controller = "component";
+        elementName = componentName;
+        pi = elementNameToPi(componentName.replace(/\s+/g, ''));
+        isComponent = true;
+    }
+
+    return {
+        type: el.nodeName,
+        selection: elementName,
+        controller: ControllerFactory.getController(controller),
+        pi: pi,
+        props3d: Montage.create(Properties3D),
+        shapeModel: shapeModel,
+        isShape: isShape,
+        isComponent: isComponent
+    }
+};
+
+var elementNameToController = function(name) {
+    if(name === "div" || name === "custom") {
+        return "block";
+    } else if(name === "img") {
+        return "image";
+    } else {
+        return name;
+    }
+};
+
+var elementNameToPi = function(name) {
+    if(!name) return null;
+
+    var piString = name + "Pi";
+
+    if(!PiData.hasOwnProperty(piString)) {
+        piString = "blockPi";
+    }
+
+    return piString;
+};
+
+var elmo = exports.ElementModel = Montage.create(Montage, {
     key:            { value: "_model_"},
 
     type:           { value: null },                // Tag type that was created
-- 
cgit v1.2.3