/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsIDOMElement.idl"
#include "nsIVariant.idl"

interface nsIDOMHTMLMenuElement;
interface nsIDOMHTMLPropertiesCollection;

/**
 * The nsIDOMHTMLElement interface is the primary [X]HTML element
 * interface. It represents a single [X]HTML element in the document
 * tree.
 *
 * This interface is trying to follow the DOM Level 2 HTML specification:
 * http://www.w3.org/TR/DOM-Level-2-HTML/
 *
 * with changes from the work-in-progress WHATWG HTML specification:
 * http://www.whatwg.org/specs/web-apps/current-work/
 */
[scriptable, uuid(9a677a5b-e6f7-4e2e-9ef9-22c2ac9967b3)]
interface nsIDOMHTMLElement : nsIDOMElement
{
  // metadata attributes
           attribute DOMString        id;
           attribute DOMString        title;
           attribute DOMString        lang;
           attribute DOMString        dir;
           attribute DOMString        className;
  readonly attribute nsISupports      dataset;

           attribute boolean                        itemScope;
           attribute nsIVariant                     itemType;
           attribute DOMString                      itemId;
  readonly attribute nsIDOMHTMLPropertiesCollection properties; 
  // The following attributes are really nsDOMSettableTokenList, which has
  // PutForwards, so we express them as nsIVariants to deal with this.
           attribute nsIVariant                     itemValue;
           attribute nsIVariant                     itemProp;
           attribute nsIVariant                     itemRef;

  // user interaction
  /**
   * Indicates that the element is not yet, or is no longer, relevant.
   *
   * See <http://www.whatwg.org/html5/#the-hidden-attribute>.
   */
           attribute boolean          hidden;
  [binaryname(DOMClick)]
  void click();
           attribute long             tabIndex;
  [binaryname(DOMFocus)]
  void focus();
  void blur();
           attribute DOMString        accessKey;
  readonly attribute DOMString        accessKeyLabel;
           attribute boolean          draggable;
           attribute DOMString        contentEditable;
  readonly attribute boolean          isContentEditable;
  readonly attribute nsIDOMHTMLMenuElement contextMenu;
           attribute boolean          spellcheck;


  // DOM Parsing and Serialization
  [binaryname(DOMInnerHTML)]
           attribute DOMString        innerHTML;
           attribute DOMString        outerHTML;
  void insertAdjacentHTML(in DOMString position,
                          in DOMString text);


  // CSSOM View
  [optional_argc] void scrollIntoView([optional] in boolean top);
  readonly attribute nsIDOMElement    offsetParent;
  readonly attribute long             offsetTop;
  readonly attribute long             offsetLeft;
  readonly attribute long             offsetWidth;
  readonly attribute long             offsetHeight;
};
