/* -*- 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/.
 */

interface MozControllers;
interface MozFrameLoader;
interface MozRDFCompositeDataSource;
interface MozRDFResource;
interface MozXULTemplateBuilder;

[Func="IsChromeOrXBL"]
interface XULElement : Element {
  [SetterThrows]
  attribute DOMString className;

  // Layout properties
  [SetterThrows]
  attribute DOMString align;
  [SetterThrows]
  attribute DOMString dir;
  [SetterThrows]
  attribute DOMString flex;
  [SetterThrows]
  attribute DOMString flexGroup;
  [SetterThrows]
  attribute DOMString ordinal;
  [SetterThrows]
  attribute DOMString orient;
  [SetterThrows]
  attribute DOMString pack;

  // Properties for hiding elements.
  attribute boolean hidden;
  attribute boolean collapsed;

  // Property for hooking up to broadcasters
  [SetterThrows]
  attribute DOMString observes;

  // Properties for hooking up to popups
  [SetterThrows]
  attribute DOMString menu;
  [SetterThrows]
  attribute DOMString contextMenu;
  [SetterThrows]
  attribute DOMString tooltip;

  // Width/height properties
  [SetterThrows]
  attribute DOMString width;
  [SetterThrows]
  attribute DOMString height;
  [SetterThrows]
  attribute DOMString minWidth;
  [SetterThrows]
  attribute DOMString minHeight;
  [SetterThrows]
  attribute DOMString maxWidth;
  [SetterThrows]
  attribute DOMString maxHeight;

  // Persistence
  [SetterThrows]
  attribute DOMString persist;

  // Position properties for
  // * popups - these are screen coordinates
  // * other elements - these are client coordinates relative to parent stack.
  [SetterThrows]
  attribute DOMString left;
  [SetterThrows]
  attribute DOMString top;

  // XUL Template Builder
  [SetterThrows]
  attribute DOMString datasources;
  [SetterThrows]
  attribute DOMString ref;

  // Tooltip and status info
  [SetterThrows]
  attribute DOMString tooltipText;
  [SetterThrows]
  attribute DOMString statusText;

  attribute boolean allowEvents;

  readonly attribute MozRDFCompositeDataSource? database;
  readonly attribute MozXULTemplateBuilder?     builder;
  [Throws]
  readonly attribute MozRDFResource?            resource;
  [Throws]
  readonly attribute MozControllers             controllers;
  [Throws]
  readonly attribute BoxObject?                 boxObject;

  [Throws]
  void                      focus();
  [Throws]
  void                      blur();
  [Throws]
  void                      click();
  void                      doCommand();

  // XXXbz this isn't really a nodelist!  See bug 818548
  NodeList            getElementsByAttribute(DOMString name,
                                             DOMString value);
  // XXXbz this isn't really a nodelist!  See bug 818548
  [Throws]
  NodeList            getElementsByAttributeNS(DOMString namespaceURI,
                                               DOMString name,
                                               DOMString value);
  [Constant]
  readonly attribute CSSStyleDeclaration style;
};

// And the things from nsIFrameLoaderOwner
[NoInterfaceObject]
interface MozFrameLoaderOwner {
  [ChromeOnly]
  readonly attribute MozFrameLoader? frameLoader;

  [ChromeOnly]
  void setIsPrerendered();

  [ChromeOnly, Throws]
  void presetOpenerWindow(WindowProxy? window);

  [ChromeOnly, Throws]
  void swapFrameLoaders(XULElement aOtherLoaderOwner);

  [ChromeOnly, Throws]
  void swapFrameLoaders(HTMLIFrameElement aOtherLoaderOwner);
};

XULElement implements GlobalEventHandlers;
XULElement implements TouchEventHandlers;
XULElement implements MozFrameLoaderOwner;
XULElement implements OnErrorEventHandlerForNodes;