/* * Copyright (c) 2010 Zhihua (Dennis) Jiang * * 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. */ package com.gwtmobile.ui.client.utils; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.EventTarget; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.user.client.DOM; import com.google.gwt.dom.client.Element; import com.google.gwt.user.client.EventListener; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.RootLayoutPanel; public class Utils { public static native void Console(String msg) /*-{ // if ($wnd.console) { // $wnd.console.log(msg); // } // else { var log = $doc.getElementById('log'); if (log) { log.innerHTML = msg + '<br/>' + log.innerHTML; } else { if ($wnd.console) { $wnd.console.log(msg); } } } }-*/; public static native JavaScriptObject addEventListener(Element ele, String event, boolean capture, EventListener listener) /*-{ var callBack = function(e) { listener.@com.google.gwt.user.client.EventListener::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(e); }; ele.addEventListener(event, callBack, capture); return callBack; }-*/; public static native void addEventListenerOnce(Element ele, String event, boolean capture, EventListener listener) /*-{ var callBack = function(e) { ele.removeEventListener(event, callBack, capture); listener.@com.google.gwt.user.client.EventListener::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(e); }; ele.addEventListener(event, callBack, capture); }-*/; public static native void removeEventListener(Element ele, String event, boolean capture, JavaScriptObject callBack) /*-{ ele.removeEventListener(event, callBack, capture); }-*/; private static Element htmlNode = DOM.createElement("DIV"); public static String unescapeHTML(String html) { htmlNode.setInnerHTML(html); return htmlNode.getInnerText(); } //The url loaded by this method can be intercepted by //WebViewClient.shouldOverrideUrlLoading public static void loadUrl(String url) { Anchor a = new Anchor("", url); RootLayoutPanel.get().add(a); NativeEvent event = Document.get().createClickEvent(1, 1, 1, 1, 1, false, false, false, false); a.getElement().dispatchEvent(event); RootLayoutPanel.get().remove(a); } public static boolean isHtmlFormControl(com.google.gwt.dom.client.Element ele) { if (ele == null) { return false; } String FromControls = "BUTTON INPUT SELECT TEXTAREA"; String nodeName = ele.getNodeName().toUpperCase(); String roleName = ele.getAttribute("role").toUpperCase(); return FromControls.contains(nodeName) || roleName.length() > 0 && FromControls.contains(roleName) || isHtmlFormControl(ele.getParentElement()); } public native static Element getActiveElement() /*-{ return $doc.activeElement; }-*/; public static boolean isAndroid() { return Window.Navigator.getUserAgent().contains("Android"); } public static boolean isIOS() { return Window.Navigator.getUserAgent().contains("iPhone") || Window.Navigator.getUserAgent().contains("iPod"); } public static boolean isWVGA() { return Document.get().getDocumentElement().getClassName().contains("WVGA"); } public static native void setTranslateX(Element ele, double value) /*-{ ele.style.webkitTransform = "translate3d(" + value + "px, 0px, 0px)"; }-*/; public static native int getTranslateX(Element ele) /*-{ var transform = ele.style.webkitTransform; var translateX = 0; if (transform && transform !== "") { translateX = parseInt((/translate3d\((\-?.*)px, 0px, 0px\)/).exec(transform)[1]); } return translateX; }-*/; public static native void setTranslateY(Element ele, double value) /*-{ ele.style.webkitTransform = "translate3d(0px, " + value + "px ,0px)"; }-*/; public static native int getTranslateY(Element ele) /*-{ var transform = ele.style.webkitTransform; var translateY = 0; if (transform && transform !== "") { translateY = parseInt((/translate3d\(0px, (\-?.*)px, 0px\)/).exec(transform)[1]); } return translateY; }-*/; public static native int getMatrixY(Element ele) /*-{ var matrix = new WebKitCSSMatrix(window.getComputedStyle(ele).webkitTransform); return matrix.f; }-*/; public static native void setTransitionDuration(Element ele, double value) /*-{ ele.style.webkitTransitionDuration = "" + value + "ms"; }-*/; public static native int getHeight(Element ele) /*-{ return parseInt($doc.defaultView.getComputedStyle(ele, "").getPropertyValue("height")); }-*/; public static native int getWidth(Element ele) /*-{ return parseInt($doc.defaultView.getComputedStyle(ele, "").getPropertyValue("width")); }-*/; public static int getTargetItemIndex(Element parent, EventTarget target) { Element div = Element.as(target); if (div == parent) { Utils.Console("Is click on list working? " + target.toString()); return -1; } while (div.getParentElement() != parent) { div = div.getParentElement(); if (div == null) { return -1; } } int index = DOM.getChildIndex( (com.google.gwt.user.client.Element)parent, (com.google.gwt.user.client.Element)div); return index; } public static boolean isSubclassOf(Class<?> class1, Class<?> class2) { while (class1 != null) { if (class1 == class2) { return true; } class1 = class1.getSuperclass(); } return false; } }