// Copyright 2015 Google Inc. All Rights Reserved.
//
// 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.

// https://www.w3.org/TR/html5/webappapis.html#globaleventhandlers

[NoInterfaceObject]
interface GlobalEventHandlers {
  attribute EventHandler onblur;
  attribute EventHandler onclick;
  attribute EventHandler onerror;
  attribute EventHandler onfocus;

  attribute EventHandler onkeydown;
  attribute EventHandler onkeypress;
  attribute EventHandler onkeyup;

  attribute EventHandler onload;
  attribute EventHandler onloadeddata;
  attribute EventHandler onloadedmetadata;
  attribute EventHandler onloadstart;

  attribute EventHandler onmousedown;
  attribute EventHandler onmouseenter;
  attribute EventHandler onmouseleave;
  attribute EventHandler onmousemove;
  attribute EventHandler onmouseout;
  attribute EventHandler onmouseover;
  attribute EventHandler onmouseup;

  attribute EventHandler onpause;
  attribute EventHandler onplay;
  attribute EventHandler onplaying;

  attribute EventHandler onresize;

  attribute EventHandler ontransitionend;

  // Extensions for the Pointer Events recommendation.
  //  https://www.w3.org/TR/2015/REC-pointerevents-20150224/#extensions-to-the-globaleventhandlers-interface
  attribute EventHandler ongotpointercapture;
  attribute EventHandler onlostpointercapture;
  attribute EventHandler onpointerdown;
  attribute EventHandler onpointerenter;
  attribute EventHandler onpointerleave;
  attribute EventHandler onpointermove;
  attribute EventHandler onpointerout;
  attribute EventHandler onpointerover;
  attribute EventHandler onpointerup;

  attribute EventHandler onprogress;
  attribute EventHandler onratechange;
  attribute EventHandler onseeked;
  attribute EventHandler onseeking;
  attribute EventHandler ontimeupdate;
  attribute EventHandler onvolumechange;
  attribute EventHandler onwaiting;
  attribute EventHandler onwheel;
};

// TODO: The IDL defines EventHandler as a nullable callback
// function. Define it as a nullable EventListener for now until we can do
// some refactoring to accept both in the EventTarget implementation.
typedef EventListener? EventHandler;
