com.google.gwt.dom.client.DOMImplIE9 Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vaadin-client Show documentation
Show all versions of vaadin-client Show documentation
Vaadin is a web application framework for Rich Internet Applications (RIA).
Vaadin enables easy development and maintenance of fast and
secure rich web
applications with a stunning look and feel and a wide browser support.
It features a server-side architecture with the majority of the logic
running
on the server. Ajax technology is used at the browser-side to ensure a
rich
and interactive user experience.
/*
* Copyright 2011 Google Inc.
*
* 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.google.gwt.dom.client;
/**
* IE9 based implementation of {@link com.google.gwt.dom.client.DOMImplStandardBase}.
*/
class DOMImplIE9 extends DOMImplStandardBase {
@Override
public double getSubpixelAbsoluteLeft(Element elem) {
double left = getBoundingClientRectLeft(elem) + getDocumentScrollLeftImpl();
if (isRTL(elem)) { // in RTL, account for the scroll bar shift if present
left += getParentOffsetDelta(elem);
}
return left;
}
@Override
public double getSubpixelAbsoluteTop(Element elem) {
return getBoundingClientRectTop(elem) + getDocumentScrollTopImpl();
}
/**
* Coerce numeric values a string. In IE, some values can be stored as numeric
* types.
*/
@Override
public native String getNumericStyleProperty(Style style, String name) /*-{
return typeof(style[name]) == "number" ? "" + style[name] : style[name];
}-*/;
@Override
public double getSubpixelScrollLeft(Document doc) {
return getDocumentScrollLeftImpl();
}
@Override
public int getScrollLeft(Document doc) {
return (int) getSubpixelScrollLeft(doc) | 0;
}
@Override
public int getScrollLeft(Element elem) {
return (int) getSubpixelScrollLeft(elem) | 0;
}
@Override
public double getSubpixelScrollLeft(Element elem) {
double left = getScrollLeftImpl(elem);
if (isRTL(elem)) {
left = -left;
}
return left;
}
@Override
public int getScrollTop(Document doc) {
return (int) getSubpixelScrollTop(doc) | 0;
}
@Override
public double getSubpixelScrollTop(Document doc) {
return getDocumentScrollTopImpl();
}
@Override
public native int getTabIndex(Element elem) /*-{
return elem.tabIndex < 65535 ? elem.tabIndex : -(elem.tabIndex % 65535) - 1;
}-*/;
@Override
public boolean isOrHasChild(Node parent, Node child) {
// IE9 still behaves like IE6-8 for this method
return DOMImplTrident.isOrHasChildImpl(parent, child);
}
@Override
public native void selectRemoveOption(SelectElement select, int index) /*-{
try {
// IE9 throws if elem at index is an optgroup
select.remove(index);
} catch(e) {
select.removeChild(select.childNodes[index]);
}
}-*/;
@Override
public void setScrollLeft(Element elem, int left) {
if (isRTL(elem)) {
left = -left;
}
setScrollLeftImpl(elem, left);
}
protected native int getBoundingClientRectLeft(Element elem) /*-{
// getBoundingClientRect() throws a JS exception if the elem is not attached
// to the document, so we wrap it in a try/catch block
try {
return elem.getBoundingClientRect().left | 0;
} catch (e) {
// if not attached return 0
return 0;
}
}-*/;
protected native int getBoundingClientRectTop(Element elem) /*-{
// getBoundingClientRect() throws a JS exception if the elem is not attached
// to the document, so we wrap it in a try/catch block
try {
return elem.getBoundingClientRect().top | 0;
} catch (e) {
// if not attached return 0
return 0;
}
}-*/;
private native double getDocumentScrollLeftImpl() /*-{
return $wnd.pageXOffset;
}-*/;
private native double getDocumentScrollTopImpl() /*-{
return $wnd.pageYOffset;
}-*/;
private native double getParentOffsetDelta(Element elem) /*-{
var offsetParent = elem.offsetParent;
if (offsetParent) {
return offsetParent.offsetWidth - offsetParent.clientWidth;
}
return 0;
}-*/;
private native double getScrollLeftImpl(Element elem) /*-{
return elem.scrollLeft || 0;
}-*/;
private native void setScrollLeftImpl(Element elem, int left) /*-{
elem.scrollLeft = left;
}-*/;
}