diff options
Diffstat (limited to 'js/models')
-rwxr-xr-x | js/models/element-model.js | 100 |
1 files changed, 99 insertions, 1 deletions
diff --git a/js/models/element-model.js b/js/models/element-model.js index 966158e4..76f15b21 100755 --- a/js/models/element-model.js +++ b/js/models/element-model.js | |||
@@ -10,7 +10,105 @@ var Montage = require("montage/core/core").Montage, | |||
10 | ControllerFactory = require("js/controllers/elements/controller-factory").ControllerFactory, | 10 | ControllerFactory = require("js/controllers/elements/controller-factory").ControllerFactory, |
11 | PiData = require("js/data/pi/pi-data").PiData; | 11 | PiData = require("js/data/pi/pi-data").PiData; |
12 | 12 | ||
13 | exports.ElementModel = Montage.create(Montage, { | 13 | var modelGenerator = exports.modelGenerator = function() { |
14 | var info = getInfoForElement(this); | ||
15 | |||
16 | Object.defineProperty(this, "_model", { | ||
17 | configurable: true, | ||
18 | enumerable: false, | ||
19 | writable: true, | ||
20 | value: Montage.create(elmo, { | ||
21 | type: { value: info.type}, | ||
22 | selection: { value: info.selection}, | ||
23 | controller: { value: info.controller}, | ||
24 | pi: { value: info.pi}, | ||
25 | props3D: { value: info.props3d}, | ||
26 | shapeModel: { value: info.shapeModel}, | ||
27 | isShape: { value: info.isShape} | ||
28 | }) | ||
29 | }); | ||
30 | |||
31 | if(this._model.selection !== "body") { | ||
32 | this._model.props3D.init(this, false); | ||
33 | } | ||
34 | |||
35 | return this._model; | ||
36 | }; | ||
37 | |||
38 | var getInfoForElement = function(el) { | ||
39 | var elementName, controller, pi, shapeModel = null, isShape = false, isComponent = false; | ||
40 | |||
41 | elementName = el.nodeName.toLowerCase(); | ||
42 | controller = elementNameToController(elementName); | ||
43 | pi = elementNameToPi(elementName); | ||
44 | |||
45 | // Element is a shape | ||
46 | if(el.getAttribute("data-RDGE-id")) { | ||
47 | controller = "shape"; | ||
48 | shapeModel = Montage.create(ShapeModel); | ||
49 | isShape = true; | ||
50 | } | ||
51 | |||
52 | if(el.nodeName.toLowerCase() === "ninja-content") { | ||
53 | elementName = "body"; | ||
54 | controller = elementNameToController(elementName); | ||
55 | pi = elementNameToPi(elementName); | ||
56 | } | ||
57 | |||
58 | // TODO: Add this in case there is no controller for the component | ||
59 | /* | ||
60 | if(el.getAttribute("data-montage-id")) { | ||
61 | elementName = null; | ||
62 | this.isComponent = true; | ||
63 | } | ||
64 | */ | ||
65 | |||
66 | // Element is a component | ||
67 | if(el.controller) { | ||
68 | var componentInfo = Montage.getInfoForObject(el.controller); | ||
69 | var componentName = componentInfo.objectName;//.toLowerCase(); | ||
70 | |||
71 | controller = "component"; | ||
72 | elementName = componentName; | ||
73 | pi = elementNameToPi(componentName.replace(/\s+/g, '')); | ||
74 | isComponent = true; | ||
75 | } | ||
76 | |||
77 | return { | ||
78 | type: el.nodeName, | ||
79 | selection: elementName, | ||
80 | controller: ControllerFactory.getController(controller), | ||
81 | pi: pi, | ||
82 | props3d: Montage.create(Properties3D), | ||
83 | shapeModel: shapeModel, | ||
84 | isShape: isShape, | ||
85 | isComponent: isComponent | ||
86 | } | ||
87 | }; | ||
88 | |||
89 | var elementNameToController = function(name) { | ||
90 | if(name === "div" || name === "custom") { | ||
91 | return "block"; | ||
92 | } else if(name === "img") { | ||
93 | return "image"; | ||
94 | } else { | ||
95 | return name; | ||
96 | } | ||
97 | }; | ||
98 | |||
99 | var elementNameToPi = function(name) { | ||
100 | if(!name) return null; | ||
101 | |||
102 | var piString = name + "Pi"; | ||
103 | |||
104 | if(!PiData.hasOwnProperty(piString)) { | ||
105 | piString = "blockPi"; | ||
106 | } | ||
107 | |||
108 | return piString; | ||
109 | }; | ||
110 | |||
111 | var elmo = exports.ElementModel = Montage.create(Montage, { | ||
14 | key: { value: "_model_"}, | 112 | key: { value: "_model_"}, |
15 | 113 | ||
16 | type: { value: null }, // Tag type that was created | 114 | type: { value: null }, // Tag type that was created |