1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.templating.editor.client.model.focus;
35
36 import info.magnolia.templating.editor.client.dom.MgnlElement;
37 import info.magnolia.templating.editor.client.jsni.JavascriptUtils;
38 import info.magnolia.templating.editor.client.model.ModelStorage;
39 import info.magnolia.templating.editor.client.widget.dnd.LegacyDragAndDrop;
40
41 import com.google.gwt.dom.client.Element;
42
43
44
45
46 public class FocusModelImpl3 implements FocusModel {
47
48 private final ModelStorage model;
49 private boolean rootSelected = false;
50
51 public FocusModelImpl3(ModelStorage model) {
52 super();
53 this.model = model;
54 }
55
56 @Override
57 public void onMouseUp(Element element) {
58
59 MgnlElement mgnlElement = model.getMgnlElement(element);
60
61 if (LegacyDragAndDrop.isMoving()) {
62 if (!LegacyDragAndDrop.sourceBar.getMgnlElement().isRelated(mgnlElement)) {
63 LegacyDragAndDrop.moveComponentReset();
64 reset();
65 }
66 return;
67 }
68 if (mgnlElement == null) {
69 reset();
70 }
71
72 else if (mgnlElement.getParentArea() != null) {
73 MgnlElement area = mgnlElement.getParentArea();
74 if (area != model.getSelectedMgnlElement()) {
75 deSelect();
76 hideRoot();
77 toggleSelection(area, true, true);
78 if (area != area.getTopParentArea()) {
79 toggleSelection(area.getTopParentArea(), true, false);
80 }
81 model.setSelectedMgnlElement(area);
82 }
83 }
84 }
85
86 @Override
87 public void onLoadSelect(MgnlElement selectedMgnlElement) {
88 model.setSelectedMgnlElement(selectedMgnlElement);
89 toggleRootAreaBar(false);
90 showRootPlaceHolder();
91 toggleSelection(selectedMgnlElement, true, true);
92 }
93 @Override
94 public void reset() {
95 deSelect();
96 toggleRootAreaBar(true);
97 showRootPlaceHolder();
98 }
99
100 private void toggleSelection(MgnlElement mgnlElement, boolean visible, boolean setCookies) {
101 if (setCookies) {
102 if (visible) {
103 String contentId = mgnlElement.getAttribute("content");
104 JavascriptUtils.setEditorContentIdCookie(contentId);
105 } else {
106 JavascriptUtils.removeEditorContentIdCookie();
107 }
108 }
109
110 if (model.getEditBar(mgnlElement) != null) {
111 model.getEditBar(mgnlElement).setVisible(visible);
112 }
113 if (model.getAreaEndBar(mgnlElement) != null) {
114 model.getAreaEndBar(mgnlElement).setVisible(visible);
115 }
116
117
118 for (MgnlElement area : mgnlElement.getAreas()) {
119 if (model.getAreaPlaceHolder(area) != null) {
120 model.getAreaPlaceHolder(area).setVisible(visible);
121 }
122 }
123
124 for (MgnlElement component : mgnlElement.getComponents()) {
125
126
127 if (model.getEditBar(component) != null) {
128 model.getEditBar(component).setVisible(visible);
129 }
130
131 for (MgnlElement area : component.getAreas()) {
132
133 if (model.getAreaPlaceHolder(area) != null) {
134 model.getAreaPlaceHolder(area).setVisible(visible);
135 } else {
136 if (model.getEditBar(area) != null) {
137 model.getEditBar(area).setVisible(visible);
138 }
139 if (model.getAreaEndBar(area) != null) {
140 model.getAreaEndBar(area).setVisible(visible);
141 }
142 }
143 }
144 }
145
146 if (model.getAreaPlaceHolder(mgnlElement)!= null) {
147 if (mgnlElement.getParent() != null) {
148 model.getAreaPlaceHolder(mgnlElement).setVisible(visible);
149 }
150 model.getAreaPlaceHolder(mgnlElement).setActive(visible);
151 }
152
153 if (model.getComponentPlaceHolder(mgnlElement) != null) {
154 model.getComponentPlaceHolder(mgnlElement).setVisible(visible);
155 }
156 }
157
158 private void deSelect() {
159 MgnlElement parentArea = model.getSelectedMgnlElement() != null ? model.getSelectedMgnlElement().getParentArea() : null;
160 MgnlElement topParentArea = parentArea != null ? parentArea.getTopParentArea() : null;
161
162 if (parentArea != null) {
163 toggleSelection(parentArea, false, true);
164 if (topParentArea != parentArea) {
165 toggleSelection(topParentArea, false, false);
166 }
167 model.setSelectedMgnlElement(null);
168 }
169 }
170
171 @Override
172 public void toggleRootAreaBar(boolean visible) {
173 deSelect();
174
175 this.rootSelected = !this.rootSelected;
176 for (MgnlElement root : model.getRootElements()) {
177 if (model.getEditBar(root) != null) {
178 model.getEditBar(root).setVisible(visible);
179 }
180 if (model.getAreaEndBar(root) != null) {
181 model.getAreaEndBar(root).setVisible(visible);
182 }
183 if (model.getAreaPlaceHolder(root) != null) {
184 model.getAreaPlaceHolder(root).setVisible(visible);
185 }
186 }
187 }
188
189 private void showRootPlaceHolder() {
190 for (MgnlElement root : model.getRootElements()) {
191 if (model.getAreaPlaceHolder(root) != null) {
192 model.getAreaPlaceHolder(root).setVisible(true);
193 model.getAreaPlaceHolder(root).setActive(false);
194 }
195 }
196 }
197
198 private void hideRoot() {
199 for (MgnlElement root : model.getRootElements()) {
200 if (model.getEditBar(root) != null) {
201 model.getEditBar(root).setVisible(false);
202 }
203 if (model.getAreaEndBar(root) != null) {
204 model.getAreaEndBar(root).setVisible(false);
205 }
206 if (model.getComponentPlaceHolder(root) != null) {
207 model.getComponentPlaceHolder(root).setVisible(false);
208 }
209 if (model.getAreaPlaceHolder(root) != null) {
210 model.getAreaPlaceHolder(root).setVisible(true);
211 }
212 }
213 }
214 }