package ch.unifr.pai.twice.layout.client.mobile;
/*
* Copyright 2013 Oliver Schmid
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.LinkElement;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.Style.Overflow;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;
/**
* Utility functionalities for mobile use
*
* @author Oliver Schmid
*
*/
public class MobileUtils {
/**
* Add necessary html tags to ensure unified initial zoom levels of the web page, fullscreen establishment and add proprietary tags (e.g.
* "apple-mobile-web-app-capable" for extended functionalities).
*
* The main purpose is to establish a "native" look of the application even within the boundaries of the web browser.
*/
public static void preparePage() {
RootPanel.getBodyElement().getStyle().setHeight(100, Unit.PCT);
RootPanel.getBodyElement().getStyle().setOverflow(Overflow.HIDDEN);
RootPanel.getBodyElement().getStyle().setMargin(0, Unit.PX);
RootPanel.getBodyElement().getStyle().setPadding(0, Unit.PX);
Document.get().getDocumentElement().getStyle().setProperty("minHeight", "300px");
Document.get().getDocumentElement().getStyle().setHeight(100, Unit.PCT);
NodeList<Element> tags = Document.get().getElementsByTagName("head");
Element head;
if (tags.getLength() > 0) {
head = tags.getItem(0);
}
else {
head = DOM.createElement("head");
Document.get().insertFirst(head);
}
Element meta = DOM.createElement("meta");
meta.setAttribute("name", "viewport");
meta.setAttribute("content", "width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0");
head.appendChild(meta);
LinkElement e = Document.get().createLinkElement();
e.setRel("stylesheet");
e.setHref(GWT.getModuleBaseURL() + "master.css");
head.appendChild(e);
Element iphoneFullscreen = DOM.createElement("meta");
iphoneFullscreen.setAttribute("name", "apple-touch-fullscreen");
iphoneFullscreen.setAttribute("content", "yes");
head.appendChild(iphoneFullscreen);
Element iphoneWebAppCapable = DOM.createElement("meta");
iphoneWebAppCapable.setAttribute("name", "apple-mobile-web-app-capable");
iphoneWebAppCapable.setAttribute("content", "yes");
head.appendChild(iphoneWebAppCapable);
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
Window.scrollTo(0, 1);
}
});
}
}