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.vaadin.gwt.client.widget;
35
36 import info.magnolia.ui.vaadin.gwt.client.editor.jsni.AbstractFrameEventHandler;
37
38 import com.google.gwt.core.client.GWT;
39 import com.google.gwt.dom.client.Element;
40 import com.google.gwt.dom.client.Style;
41 import com.google.gwt.user.client.ui.Composite;
42 import com.google.gwt.user.client.ui.SimplePanel;
43 import com.google.gwt.user.client.ui.Widget;
44 import com.google.web.bindery.event.shared.EventBus;
45 import com.vaadin.client.BrowserInfo;
46 import com.vaadin.client.ComputedStyle;
47
48
49
50
51 public class PageEditorViewImpl extends Composite implements PageEditorView {
52
53 public static final String PAGE_EDITOR_CLASS_NAME = "pageEditor";
54
55 private Listener listener;
56
57 private PageEditorFrame iframe = new PageEditorFrame();
58
59 private String url;
60
61 private SimplePanel content;
62
63 private AbstractFrameEventHandler handler;
64 private int lastScrollPosition;
65
66 public PageEditorViewImpl(EventBus eventBus) {
67 super();
68 this.handler = GWT.create(AbstractFrameEventHandler.class);
69 this.content = new SimplePanel();
70 handler.setView(this);
71 handler.setEventBus(eventBus);
72 content.setWidget(iframe);
73 initWidget(content);
74 setStyleName(PAGE_EDITOR_CLASS_NAME);
75
76 final Element iframeElement = iframe.getElement();
77 iframeElement.setAttribute("width", "100%");
78 iframeElement.setAttribute("height", "100%");
79 iframeElement.setAttribute("allowTransparency", "true");
80 iframeElement.setAttribute("frameborder", "0");
81
82 handler.init();
83 if (BrowserInfo.get().isIE8()) {
84 registerPageEditorIframe(iframeElement);
85 }
86 }
87
88 private native void registerPageEditorIframe(Element iframeElement)
89
90 ;
91
92 @Override
93 public PageEditorFrame getFrame() {
94 return iframe;
95 }
96
97 @Override
98 public Widget getContent() {
99 return content;
100 }
101
102 @Override
103 public void setListener(Listener listener) {
104 this.listener = listener;
105 }
106
107 @Override
108 public void setUrl(String url) {
109 getFrame().setUrl(url);
110 this.url = url;
111 handler.notifyUrlChange();
112 }
113
114 @Override
115 public void reload() {
116 handler.reloadIFrame(iframe.getElement());
117 handler.notifyUrlChange();
118 }
119
120 @Override
121 public void setLastScrollPosition(int lastScrollPosition) {
122 this.lastScrollPosition = lastScrollPosition;
123 }
124
125 @Override
126 public void resetScrollTop() {
127 if (BrowserInfo.get().isTouchDevice()) {
128 getFrame().getElement().getStyle().setHeight(getFrame().getBody().getOffsetHeight(), Style.Unit.PX);
129 new ComputedStyle(getFrame().getElement());
130 }
131 content.getElement().setScrollTop(lastScrollPosition);
132 }
133
134 @Override
135 public void initDomEventListeners() {
136 if (BrowserInfo.get().isTouchDevice()) {
137 handler.initNativeTouchSelectionListener(iframe.getBody(), listener);
138 } else {
139 handler.initNativeMouseSelectionListener(iframe.getElement(), iframe.getBody(), listener);
140 }
141 handler.initNativeKeyListener(iframe.getElement());
142 handler.initScrollListener(content.getElement());
143 }
144
145 @Override
146 public void initKeyEventListeners() {
147 handler.initNativeKeyListener(iframe.getElement());
148 }
149
150 }