/* 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.
*/ var Montage = require("montage/core/core").Montage, Properties3D = require("js/models/properties-3d").Properties3D, ShapeModel = require("js/models/shape-model").ShapeModel, ControllerFactory = require("js/controllers/elements/controller-factory").ControllerFactory, PiData = require("js/data/pi/pi-data").PiData; 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, 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; } if(el.nodeName.toLowerCase() === "ninja-content") { elementName = "body"; controller = elementNameToController(elementName); pi = elementNameToPi(elementName); } // 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 if(name === "embed") { 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 selection: { value: null }, // Selection string controller: { value: null }, // Controller Class pi: { value: null }, id: { value: "" }, classList: { value: null }, defaultRule: { value: null }, top: { value: null }, left: { value: null }, width: { value: null }, height: { value: null }, props3D: { value: null }, isShape: { value: false }, shapeModel: { value: null }, isIn2DSnapCache : { value: false }, isComponent: { value: false }, fill: { value: null }, stroke: { value: null }, initialize: { value: function(el, isShape, selection, isComponent) { var elementName, controller; elementName = el.nodeName.toLowerCase(); this.type = el.nodeName; this.selection = selection ? selection : elementName; if(isComponent) { controller = "component"; this.pi = this.elementNameToPi(selection.replace(/\s+/g, '')); this.isComponent = true; } else { controller = this.elementNameToController(elementName); this.pi = this.elementNameToPi(elementName); } this.props3D = Montage.create(Properties3D); if(isShape) { this.controller = ControllerFactory.getController("shape"); this.shapeModel = Montage.create(ShapeModel); this.isShape = true; } else { this.controller = ControllerFactory.getController(controller); } return this; } }, elementNameToController: { value: function(name) { if(name === "div" || name === "custom") { return "block"; } else if(name === "img") { return "image"; } else if(name === "embed") { return "image"; } else { return name; } } }, elementNameToPi: { value: function(name) { var piString = name + "Pi"; if(!PiData.hasOwnProperty(piString)) { piString = "blockPi"; } return piString; } }, getProperty: { value: function(property) { var key = this.key + property; if(!this.hasOwnProperty(key)) { this.defineModelProperty(key, null); } return this[key]; } }, setProperty: { value: function(property, value) { var key = this.key + property; if(!this.hasOwnProperty(key)) { this.defineModelProperty(key, value); } else { this[key] = value; } } }, defineModelProperty: { value: function(property, value) { Montage.defineProperty(this, property, { enumarable: true, value:value }); } } });