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.ui.incub.client;
35
36 import info.magnolia.ui.incub.FieldCaptionActiveExtension;
37
38 import com.google.gwt.dom.client.Element;
39 import com.google.gwt.event.dom.client.BlurEvent;
40 import com.google.gwt.event.dom.client.FocusEvent;
41 import com.google.gwt.query.client.GQuery;
42 import com.google.gwt.user.client.DOM;
43 import com.google.gwt.user.client.EventListener;
44 import com.google.gwt.user.client.ui.Widget;
45 import com.vaadin.client.ComponentConnector;
46 import com.vaadin.client.ServerConnector;
47 import com.vaadin.client.extensions.AbstractExtensionConnector;
48 import com.vaadin.shared.ui.Connect;
49
50
51
52
53 @Connect(FieldCaptionActiveExtension.class)
54 public class FieldCaptionActiveExtensionConnector extends AbstractExtensionConnector {
55
56 @Override
57 protected void extend(ServerConnector target) {
58
59 final Widget widget = ((ComponentConnector) target).getWidget();
60
61 target.addStateChangeHandler(handler -> {
62 if (handler.getConnector().getState().enabled) {
63 final GQuery gQuery = GQuery.$("div[class*='v-caption']", GQuery.$(widget).getContext());
64 final Element[] elements = gQuery.elements();
65 for (int i = 0; i < elements.length; i++) {
66 final Element element = elements[i];
67 final Element spanLabel = element.getFirstChildElement();
68 final Element control = DOM.getElementById(spanLabel.getAttribute("for"));
69 if (control == null) {
70 continue;
71 }
72
73 final EventListener eventListener = DOM.getEventListener(control);
74 if (eventListener != null && eventListener instanceof Widget) {
75 ((Widget) eventListener).addHandler(event -> {
76 element.addClassName("v-caption-focus");
77 }, FocusEvent.getType());
78 ((Widget) eventListener).addHandler(event -> {
79 element.removeClassName("v-caption-focus");
80 }, BlurEvent.getType());
81 }
82 }
83 }
84 });
85
86 }
87
88 }