Package com.extjs.gxt.ui.client.core

Source Code of com.extjs.gxt.ui.client.core.XDOM

/*
* Ext GWT 2.2.4 - Ext for GWT
* Copyright(c) 2007-2010, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.ui.client.core;

import com.extjs.gxt.ui.client.GXT;
import com.extjs.gxt.ui.client.Style;
import com.extjs.gxt.ui.client.util.Size;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;

/**
* Provides additional static methods that allow you to manipulate the browser's
* Document Object Model (DOM).
*
* @see DOM
*/
public final class XDOM {

  private static El bodyEl;
  private static int scrollBarWidth = Style.DEFAULT;
  private static int autoId = 0;
  private static int zIndexId = 1000;
  private static String autoIdPrefix = "x-auto";

  static {
    GXT.init();
  }

  /**
   * Creates an element form the given markup.
   *
   * @param html the markup
   * @return the new element
   */
  public static Element create(String html) {
    Element div = DOM.createDiv();
    DOM.setInnerHTML(div, html);
    Element firstChild = DOM.getFirstChild(div);
    // support text node creation
    return (firstChild != null) ? firstChild : div;
  }

  /**
   * Returns the auto id prefix.
   *
   * @return the auto id prefix
   */
  public static String getAutoIdPrefix() {
    return autoIdPrefix;
  }

  /**
   * Returns the body element.
   *
   * @return the body
   */
  public static native Element getBody() /*-{
    return $doc.body || $doc.documentElement;
  }-*/;

  /**
   * Returns the body El.
   *
   * @return the body
   */
  public static El getBodyEl() {
    if (bodyEl == null) {
      bodyEl = new El(getBody());
    }
    return bodyEl;
  }

  /**
   * Returns the body elements horizontal scroll.
   *
   * @return the scroll amount in pixels
   */
  public static native int getBodyScrollLeft() /*-{
    if(@com.extjs.gxt.ui.client.GXT::isIE && @com.extjs.gxt.ui.client.GXT::isStrict){
      return $doc.documentElement.scrollLeft || $doc.body.scrollLeft || 0;
    } else {
      return $wnd.pageXOffset || $doc.body.scrollLeft || 0;
    }
  }-*/;

  /**
   * Return the body elements vertical scroll.
   *
   * @return the scroll amount in pixels
   */
  public static native int getBodyScrollTop() /*-{
    if(@com.extjs.gxt.ui.client.GXT::isIE && @com.extjs.gxt.ui.client.GXT::isStrict){
      return $doc.documentElement.scrollTop || $doc.body.scrollTop || 0;
    } else {
      return $wnd.pageYOffset || $doc.body.scrollTop || 0;
    }
  }-*/;

  /**
   * Returns the element's computed style.
   *
   * @param e the element
   * @param style the style name
   * @return the style value
   */
  public static native String getComputedStyle(Element e, String style) /*-{
    var computedStyle;
    if (typeof e.currentStyle != 'undefined') {
      computedStyle = e.currentStyle; }
    else {
      computedStyle = $doc.defaultView.getComputedStyle(e, null);
    }

    return computedStyle[style];
  }-*/;

  /**
   * Returns the document element.
   *
   * @return the document
   */
  public static native Element getDocument() /*-{
    return $doc;
  }-*/;

  /**
   * Returns the document's height.
   *
   * @return the document height
   */
  public static native int getDocumentHeight()/*-{
    var scrollHeight = ($doc.compatMode != "CSS1Compat") ? $doc.body.scrollHeight : $doc.documentElement.scrollHeight;
    return Math.max(scrollHeight, @com.extjs.gxt.ui.client.core.XDOM::getViewportHeight()());
  }-*/;

  /**
   * Returns the document width.
   *
   * @return the document width
   */
  public static native int getDocumentWidth()/*-{
    var scrollWidth = ($doc.compatMode != "CSS1Compat") ? $doc.body.scrollWidth : $doc.documentElement.scrollWidth;
    return Math.max(scrollWidth, @com.extjs.gxt.ui.client.core.XDOM::getViewportWidth()());
  }-*/;

  /**
   * Returns the element with the unique id.
   *
   * @param id the id
   * @return the element, or null if no match
   */
  public static Element getElementById(String id) {
    return DomQuery.selectNode("#" + id);
  }

  /**
   * Returns the HTML head element.
   *
   * @return the head
   */
  public static native Element getHead() /*-{
    return $doc.getElementsByTagName('head')[0];
  }-*/;

  /**
   * Returns the width of the scroll bar.
   *
   * @return the scroll bar width
   */
  public static int getScrollBarWidth() {
    if (scrollBarWidth == Style.DEFAULT) {
      scrollBarWidth = getScrollBarWidthInternal();
    }
    return scrollBarWidth;
  }

  /**
   * Increments and returns the top z-index value. Use this value to ensure the
   * z-index is the highest value of all elements in the DOM.
   *
   * @return the z-index
   */
  public static int getTopZIndex() {
    return ++zIndexId;
  }

  /**
   * Increments and returns the top z-index value. Use this value to ensure the
   * z-index is the highest value of all elements in the DOM.
   *
   * @param i the increment amount
   * @return the z-index
   */
  public static int getTopZIndex(int i) {
    zIndexId += i + 1;
    return zIndexId;
  }

  /**
   * Returns an unique id.
   *
   * @return the id
   */
  public static String getUniqueId() {
    return autoIdPrefix + "-" + autoId++;
  }

  /**
   * Returns the view height.
   *
   * @param full true to return the document height, false for viewport height
   * @return the view height
   */
  public static int getViewHeight(boolean full) {
    return full ? getDocumentHeight() : getViewportHeight();
  }

  /**
   * Returns the viewport height.
   *
   * @return the viewport height
   */
  public static native int getViewportHeight()/*-{
    if(@com.extjs.gxt.ui.client.GXT::isIE){
        return @com.extjs.gxt.ui.client.GXT::isStrict ? $doc.documentElement.clientHeight :
                 $doc.body.clientHeight;
    }else{
        return $wnd.self.innerHeight;
    }
  }-*/;

  /**
   * Returns the viewports size.
   *
   * @return the viewport size
   */
  public static Size getViewportSize() {
    return new Size(getViewportWidth(), getViewportHeight());
  }

  /**
   * Returns the viewport width.
   *
   * @return the viewport width
   */
  public static native int getViewportWidth() /*-{
    if(@com.extjs.gxt.ui.client.GXT::isIE){
        return @com.extjs.gxt.ui.client.GXT::isStrict ? $doc.documentElement.clientWidth :
                 $doc.body.clientWidth;
    }else{
        return $wnd.self.innerWidth;
    }
  }-*/;

  /**
   * Returns the view width.
   *
   * @param full true to return the document width, false for viewport width
   * @return the view width
   */
  public static int getViewWidth(boolean full) {
    return full ? getDocumentWidth() : getViewportWidth();
  }

  /**
   * Reloads the page.
   */
  public native static void reload() /*-{
    $wnd.location.reload();
  }-*/;

  /**
   * Sets the auto id prefix which is prepended to the auto id counter when
   * generating auto ids (defaults to 'x-auto').
   *
   * @param autoIdPrefix the auto id prefix
   */
  public static void setAutoIdPrefix(String autoIdPrefix) {
    XDOM.autoIdPrefix = autoIdPrefix;
  }

  private native static int getScrollBarWidthInternal() /*-{
    var scr = null;
    var inn = null;
    var wNoScroll = 0;
    var wScroll = 0;
    scr = $doc.createElement('div');
    scr.style.position = 'absolute';
    scr.style.top = '-1000px';
    scr.style.left = '-1000px';
    scr.style.width = '100px';
    scr.style.height = '100px';
    scr.style.overflow = 'hidden';
    inn = $doc.createElement('div');
    inn.style.height = '50px';
    inn.style.width = '100%';
    scr.appendChild(inn);
    $doc.body.appendChild(scr);
   
    wNoScroll = inn.offsetWidth; 
    scr.style.overflow = 'scroll'; 
    wScroll = inn.offsetWidth; 
    if (wNoScroll == wScroll) {
      wScroll = scr.clientWidth;
    }
 
    $doc.body.removeChild(scr);
    //2 px next to the scrollbar cannot be used
    return (wNoScroll - wScroll) + 2;
  }-*/;

  private XDOM() {

  }

}
TOP

Related Classes of com.extjs.gxt.ui.client.core.XDOM

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.