All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.gwt.test.internal.patchers.UIObjectPatcher Maven / Gradle / Ivy

There is a newer version: 0.63
Show newest version
package com.googlecode.gwt.test.internal.patchers;

import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Node;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.PotentialElement;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
import com.googlecode.gwt.test.patchers.PatchClass;
import com.googlecode.gwt.test.patchers.PatchMethod;
import com.googlecode.gwt.test.utils.GwtReflectionUtils;

@PatchClass(UIObject.class)
class UIObjectPatcher {

    @PatchMethod
    static double extractLengthValue(UIObject uiObject, String s) {
        if ("auto".equals(s) || "inherit".equals(s) || "".equals(s)) {
            return 0;
        }
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c >= '0' && c <= '9') {
                buffer.append(c);
            }
        }
        return Double.parseDouble(buffer.toString());
    }

    @PatchMethod
    static boolean isVisible(Element elem) {
        String display = elem.getStyle().getProperty("display");

        return !display.equals("none");
    }

    @PatchMethod
    static void replaceElement(UIObject uiObject, Element elem) {
        Element element = GwtReflectionUtils.getPrivateFieldValue(uiObject, "element");
        if (element != null) {
            // replace this.element in its parent with elem.
            replaceNode(uiObject, element, elem);
        }

        GwtReflectionUtils.setPrivateFieldValue(uiObject, "element", elem);
    }

    @PatchMethod
    static void replaceNode(UIObject uiObject, Element node, Element newNode) {
        Node parent = node.getParentNode();

        if (parent != null) {
            parent.insertBefore(newNode, node);
            parent.removeChild(node);
        }
    }

    @PatchMethod
    static void setElement(UIObject uiObject, com.google.gwt.user.client.Element elem) {
        Element element = GwtReflectionUtils.getPrivateFieldValue(uiObject, "element");
        assert element == null || PotentialElement.isPotential(element) : "Element may only be set once";

        GwtReflectionUtils.setPrivateFieldValue(uiObject, "element", elem);

        // Bind the widget to listen to element so we can trigger event on it even
        // if the widget has not been attached yet
        if (Widget.class.isInstance(uiObject)) {
            DOM.setEventListener(elem, (Widget) uiObject);
        }

    }

    @PatchMethod
    static void setVisible(Element elem, boolean visible) {
        String display = visible ? "" : "none";
        elem.getStyle().setProperty("display", display);
    }

    @PatchMethod
    static void updatePrimaryAndDependentStyleNames(Element elem, String newPrimaryStyle) {

        String[] classes = elem.getPropertyString("className").split(" ");

        if (classes.length < 1) {
            elem.setPropertyString("className", newPrimaryStyle);
        } else {
            String oldPrimaryStyle = classes[0];
            int oldPrimaryStyleLen = oldPrimaryStyle.length();

            classes[0] = newPrimaryStyle;
            for (int i = 1; i < classes.length; i++) {
                String name = classes[i];
                if (name.length() > oldPrimaryStyleLen && name.charAt(oldPrimaryStyleLen) == '-'
                        && name.indexOf(oldPrimaryStyle) == 0) {
                    classes[i] = newPrimaryStyle + name.substring(oldPrimaryStyleLen);
                }
            }

            StringBuilder sb = new StringBuilder();
            for (String name : classes) {
                sb.append(name + " ");
            }

            elem.setPropertyString("className", sb.toString().trim());
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy