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;
35
36 import info.magnolia.rendering.template.AreaDefinition;
37 import info.magnolia.templating.editor.client.dom.MgnlElement;
38 import static info.magnolia.templating.editor.client.jsni.LegacyJavascript.*;
39
40 import com.google.gwt.dom.client.Element;
41 import com.google.gwt.dom.client.Node;
42 import com.google.gwt.dom.client.Style.Float;
43 import com.google.gwt.event.dom.client.ClickEvent;
44 import com.google.gwt.event.dom.client.ClickHandler;
45 import com.google.gwt.event.dom.client.MouseDownEvent;
46 import com.google.gwt.event.dom.client.MouseDownHandler;
47 import com.google.gwt.event.dom.client.MouseOutEvent;
48 import com.google.gwt.event.dom.client.MouseOutHandler;
49 import com.google.gwt.event.dom.client.MouseOverEvent;
50 import com.google.gwt.event.dom.client.MouseOverHandler;
51 import com.google.gwt.user.client.ui.Button;
52
53
54
55
56
57 public class EditBarWidget extends AbstractBarWidget {
58
59 private String workspace;
60 private String path;
61 private String dialog;
62 private String id;
63 private String parentAreaType;
64 private boolean isInherited;
65
66 public EditBarWidget(MgnlElement mgnlElement, final PageEditor pageEditor) {
67
68 super(mgnlElement);
69
70 if(mgnlElement.getParentArea() != null) {
71
72 MgnlElement area = mgnlElement.getParentArea();
73 String content = mgnlElement.getComment().getAttribute("content");
74 int i = content.indexOf(':');
75 this.workspace = content.substring(0, i);
76 this.path = content.substring(i + 1);
77
78 this.id = path.substring(path.lastIndexOf("/") + 1);
79
80 setId("__"+id);
81
82 this.dialog = mgnlElement.getComment().getAttribute("dialog");
83
84 this.parentAreaType = area.getComment().getAttribute("type");
85 }
86 this.isInherited = Boolean.parseBoolean(mgnlElement.getComment().getAttribute("inherited"));
87
88 createButtons(pageEditor);
89
90 createMouseEventsHandlers(pageEditor);
91
92 addStyleName("component");
93 if (isInherited) {
94 addStyleName("mgnlInherited");
95 }
96
97 setVisible(false);
98 attach();
99 }
100
101 private void createMouseEventsHandlers(final PageEditor pageEditor) {
102
103 addDomHandler(new MouseDownHandler() {
104
105 @Override
106 public void onMouseDown(MouseDownEvent event) {
107 String parentPath = path.substring(0, path.lastIndexOf("/"));
108 pageEditor.moveComponentEnd((EditBarWidget)event.getSource(), parentPath);
109
110 }
111 }, MouseDownEvent.getType());
112
113 addDomHandler(new MouseOverHandler() {
114
115 @Override
116 public void onMouseOver(MouseOverEvent event) {
117 pageEditor.moveComponentOver((EditBarWidget)event.getSource());
118 }
119 }, MouseOverEvent.getType());
120
121 addDomHandler(new MouseOutHandler() {
122
123 @Override
124 public void onMouseOut(MouseOutEvent event) {
125 pageEditor.moveComponentOut((EditBarWidget)event.getSource());
126 }
127 }, MouseOutEvent.getType());
128 }
129
130 private void createButtons(final PageEditor pageEditor) {
131
132 if (!this.isInherited) {
133 final Button edit = new Button(getI18nMessage("buttons.edit.js"));
134 edit.addClickHandler(new ClickHandler() {
135 @Override
136 public void onClick(ClickEvent event) {
137 pageEditor.openDialog(dialog, workspace, path, null, null);
138
139 }
140 });
141 addButton(edit, Float.RIGHT);
142 }
143
144
145 if(AreaDefinition.TYPE_LIST.equals(parentAreaType)) {
146 final Button move = new Button(getI18nMessage("buttons.move.js"));
147 move.addClickHandler(new ClickHandler() {
148 @Override
149 public void onClick(ClickEvent event) {
150 pageEditor.moveComponentStart(id);
151 }
152 });
153 addButton(move, Float.RIGHT);
154 }
155
156 if (!this.isInherited) {
157 final Button removeButton = new Button(getI18nMessage("buttons.delete.js"));
158 removeButton.addClickHandler(new ClickHandler() {
159 @Override
160 public void onClick(ClickEvent event) {
161 pageEditor.deleteComponent(path);
162 }
163 });
164 removeButton.addStyleName("mgnlRemoveButton");
165 addButton(removeButton, Float.RIGHT);
166 }
167 }
168
169 private void attach() {
170 Element element = getMgnlElement().getFirstElement();
171 if (element != null) {
172 if (element.getFirstChild() != null && element.getFirstChild().getNodeType() == Node.ELEMENT_NODE) {
173 Element child = element.getFirstChild().cast();
174 String classname = child.getClassName();
175 if (classname.contains("mgnlEditorBar")) {
176 element.insertAfter(getElement(), child);
177 onAttach();
178 return;
179 }
180 }
181
182 element.insertFirst(getElement());
183 onAttach();
184 }
185 }
186
187 }