diff options
Diffstat (limited to 'js/mediators/element-mediator.js')
-rwxr-xr-x | js/mediators/element-mediator.js | 220 |
1 files changed, 72 insertions, 148 deletions
diff --git a/js/mediators/element-mediator.js b/js/mediators/element-mediator.js index 3182d5ec..3a9055e8 100755 --- a/js/mediators/element-mediator.js +++ b/js/mediators/element-mediator.js | |||
@@ -5,149 +5,100 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot | |||
5 | </copyright> */ | 5 | </copyright> */ |
6 | 6 | ||
7 | var Montage = require("montage/core/core").Montage, | 7 | var Montage = require("montage/core/core").Montage, |
8 | NJComponent = require("js/lib/nj-base").NJComponent; | 8 | Component = require("montage/ui/component").Component; |
9 | 9 | ||
10 | var ElementController = require("js/controllers/elements/element-controller").ElementController, | 10 | var ElementController = require("js/controllers/elements/element-controller").ElementController, |
11 | Command = require("js/controllers/undo-controller").Command, | 11 | Command = require("js/controllers/undo-controller").Command, |
12 | GroupCommand = require("js/controllers/undo-controller").GroupCommand, | ||
13 | NJUtils = require("js/lib/NJUtils").NJUtils; | 12 | NJUtils = require("js/lib/NJUtils").NJUtils; |
14 | 13 | ||
15 | exports.ElementMediator = Montage.create(NJComponent, { | 14 | exports.ElementMediator = Montage.create(Component, { |
16 | 15 | ||
17 | deleteDelegate: { | ||
18 | value: null | ||
19 | }, | ||
20 | 16 | ||
21 | deserializedFromTemplate: { | 17 | addDelegate: { |
22 | value: function () { | 18 | enumerable: false, |
23 | this.eventManager.addEventListener("elementAdding", this, false); | 19 | value: null |
24 | this.eventManager.addEventListener("deleting", this, false); | ||
25 | } | ||
26 | }, | 20 | }, |
27 | 21 | ||
28 | // TODO use the specific controller to be able to subclass the functionality | 22 | deleteDelegate: { |
29 | handleElementAdding: { | 23 | enumerable: false, |
30 | value: function(event) { | 24 | value: null |
31 | this.addElement(event.detail.el, event.detail.data); | ||
32 | } | ||
33 | }, | 25 | }, |
34 | 26 | ||
35 | handleDeleting: { | 27 | addElements: { |
36 | value: function(event) { | 28 | value: function(elements, rules, notify) { |
37 | if(this.deleteDelegate && (typeof this.deleteDelegate.handleDelete === 'function')) { | 29 | if(Array.isArray(elements)) { |
38 | this.deleteDelegate.handleDelete(); | 30 | elements.forEach(function(element) { |
31 | element = element; | ||
32 | ElementController.addElement(element, rules); | ||
33 | }); | ||
39 | } else { | 34 | } else { |
40 | // Add the Undo/Redo | 35 | ElementController.addElement(elements, rules); |
41 | var els = [], | ||
42 | len = this.application.ninja.selectedElements.length; | ||
43 | 36 | ||
44 | if(len) { | 37 | // TODO - Check with webgl branch - Props seem to be already there. |
45 | for(var i = 0; i<len; i++) { | 38 | var prop3d = this.get3DProperties(elements); |
46 | els.push(this.application.ninja.selectedElements[i]); | 39 | if(prop3d) { |
40 | elements.elementModel.controller["set3DProperties"](elements, [prop3d], 0, true); | ||
47 | } | 41 | } |
48 | |||
49 | for(i=0; i<len; i++) { | ||
50 | this._removeElement(els[i]._element); | ||
51 | } | 42 | } |
52 | 43 | ||
53 | NJevent( "deleteSelection", els ); | 44 | if(this.addDelegate && typeof (this.addDelegate['onAddElements']) === "function") { |
45 | this.addDelegate['onAddElements'].call(this.addDelegate, elements); | ||
54 | } | 46 | } |
55 | } | ||
56 | } | ||
57 | }, | ||
58 | 47 | ||
59 | addElement: { | 48 | var undoLabel = "add element"; |
60 | value: function(el, rules, noEvent) { | ||
61 | var command = Montage.create(Command, { | ||
62 | _el: { value: el }, | ||
63 | _rules: { value: rules }, | ||
64 | _noEvent: { value: noEvent }, | ||
65 | 49 | ||
66 | description: { value: "Adding Element"}, | 50 | document.application.undoManager.add(undoLabel, this.removeElements, this, elements, notify); |
67 | 51 | ||
68 | receiver: { value: this}, | 52 | this.application.ninja.documentController.activeDocument.needsSave = true; |
69 | 53 | ||
70 | execute: { | 54 | if(notify || notify === undefined) { |
71 | value: function() { | 55 | NJevent("elementAdded", elements); |
72 | this.receiver._addElement(this._el, this._rules, this._noEvent); | ||
73 | return this._el; | ||
74 | } | 56 | } |
57 | } | ||
75 | }, | 58 | }, |
76 | 59 | ||
77 | unexecute: { | 60 | removeElements: { |
78 | value: function() { | 61 | value: function(elements, notify /* Used for the add undo */) { |
79 | this.receiver._removeElement(this._el, this._rules, this._noEvent); | ||
80 | return this._el; | ||
81 | } | ||
82 | } | ||
83 | }); | ||
84 | 62 | ||
85 | NJevent("sendToUndo", command); | 63 | if(this.deleteDelegate && (typeof this.deleteDelegate.handleDelete === 'function')) { |
86 | command.execute(); | 64 | return this.deleteDelegate.handleDelete(); |
65 | // this.handleDelete.call(deleteDelegate); | ||
87 | } | 66 | } |
88 | }, | ||
89 | 67 | ||
90 | _addElement: { | 68 | if(Array.isArray(elements)) { |
91 | value: function(el, rules, noEvent) { | 69 | elements = Array.prototype.slice.call(elements, 0); |
92 | ElementController.addElement(el, rules); | 70 | elements.forEach(function(element) { |
93 | var p3d = this.get3DProperties(el); | 71 | ElementController.removeElement(element); |
94 | if(p3d) { | 72 | }); |
95 | el.elementModel.controller["set3DProperties"](el, [p3d], 0, true); | 73 | } else { |
74 | ElementController.removeElement(elements); | ||
96 | } | 75 | } |
97 | if(!noEvent) { | 76 | |
77 | var undoLabel = "add element"; | ||
78 | |||
79 | document.application.undoManager.add(undoLabel, this.addElements, this, elements, null, notify); | ||
80 | |||
98 | this.application.ninja.documentController.activeDocument.needsSave = true; | 81 | this.application.ninja.documentController.activeDocument.needsSave = true; |
99 | NJevent("elementAdded", el); | 82 | |
83 | NJevent("elementsRemoved", elements); | ||
100 | } | 84 | } |
101 | } | ||
102 | }, | 85 | }, |
103 | 86 | ||
104 | deleteElements: { | 87 | replaceElement: { |
105 | value: function(items) { | 88 | value: function(newChild, oldChild, notify) { |
106 | // Add the Undo/Redo | ||
107 | var len, el; | ||
108 | 89 | ||
109 | len = items.length; | 90 | this.application.ninja.currentDocument.documentRoot.replaceChild(newChild, oldChild); |
110 | 91 | ||
111 | if(len) { | 92 | var undoLabel = "replace element"; |
112 | 93 | ||
113 | for(var i = len - 1; i >= 0; i--) { | 94 | document.application.undoManager.add(undoLabel, this.replaceElement, this, oldChild, newChild); |
114 | el = items[i]._element || items[i]; | ||
115 | this._removeElement(el); | ||
116 | } | ||
117 | 95 | ||
118 | NJevent( "deleteSelection", items ); | ||
119 | } | ||
120 | } | ||
121 | }, | ||
122 | |||
123 | _removeElement: { | ||
124 | value: function(el, rules) { | ||
125 | ElementController.removeElement(el, rules); | ||
126 | this.application.ninja.documentController.activeDocument.needsSave = true; | 96 | this.application.ninja.documentController.activeDocument.needsSave = true; |
127 | NJevent("elementDeleted", el); | ||
128 | } | ||
129 | }, | ||
130 | 97 | ||
131 | replaceElement: { | 98 | if(notify || notify === undefined) { |
132 | value: function(el, el2) { | 99 | NJevent("elementReplaced", {type : "replaceElement", data: {"newChild": newChild, "oldChild": oldChild}}); |
133 | el2.elementModel = el.elementModel; | ||
134 | this.application.ninja.currentDocument.documentRoot.replaceChild(el2, el); | ||
135 | el2.elementModel.isIn2DSnapCache = false; | ||
136 | } | 100 | } |
137 | }, | ||
138 | |||
139 | getNJProperty: { | ||
140 | value: function(el, p) { | ||
141 | if(el.elementModel) { | ||
142 | if(el.elementModel.hasOwnProperty(p)) { | ||
143 | return el.elementModel[p]; | ||
144 | } else { | ||
145 | console.log("Element Model does not have ", p); | ||
146 | } | 101 | } |
147 | } else { | ||
148 | console.log("Element has no Model -- Create one"); | ||
149 | } | ||
150 | } | ||
151 | }, | 102 | }, |
152 | 103 | ||
153 | getProperty: { | 104 | getProperty: { |
@@ -205,9 +156,7 @@ exports.ElementMediator = Montage.create(NJComponent, { | |||
205 | } else { | 156 | } else { |
206 | // Calculate currentValue if not found for each element | 157 | // Calculate currentValue if not found for each element |
207 | if(currentValue === null) { | 158 | if(currentValue === null) { |
208 | console.log("Here"); | 159 | currentValue = el.getAttribute(att); |
209 | var item = el._element || el; | ||
210 | currentValue = item.getAttribute(att); | ||
211 | } | 160 | } |
212 | 161 | ||
213 | var command = Montage.create(Command, { | 162 | var command = Montage.create(Command, { |
@@ -246,9 +195,7 @@ exports.ElementMediator = Montage.create(NJComponent, { | |||
246 | 195 | ||
247 | _setAttribute: { | 196 | _setAttribute: { |
248 | value: function(el, att, value, eventType, source) { | 197 | value: function(el, att, value, eventType, source) { |