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