text: // Copyright 2010 The Closure Library Authors. 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.
  
  /**
   * @fileoverview Event Types.
   *
   * @author arv@google.com (Erik Arvidsson)
   */
  
  
  goog.provide('goog.events.EventType');
  
  goog.require('goog.userAgent');
  
  
  /**
   * Returns a prefixed event name for the current browser.
   * @param {string} eventName The name of the event.
   * @return {string} The prefixed event name.
   * @suppress {missingRequire|missingProvide}
   * @private
   */
  goog.events.getVendorPrefixedName_ = function(eventName) {
    return goog.userAgent.WEBKIT ?
        'webkit' + eventName :
        (goog.userAgent.OPERA ? 'o' + eventName.toLowerCase() :
                                eventName.toLowerCase());
  };
  
  
  /**
   * Constants for event names.
   * @enum {string}
   */
  goog.events.EventType = {
    // Mouse events
    CLICK: 'click',
    RIGHTCLICK: 'rightclick',
    DBLCLICK: 'dblclick',
    MOUSEDOWN: 'mousedown',
    MOUSEUP: 'mouseup',
    MOUSEOVER: 'mouseover',
    MOUSEOUT: 'mouseout',
    MOUSEMOVE: 'mousemove',
    MOUSEENTER: 'mouseenter',
    MOUSELEAVE: 'mouseleave',
  
    // Selection events.
    // https://www.w3.org/TR/selection-api/
    SELECTIONCHANGE: 'selectionchange',
    SELECTSTART: 'selectstart',  // IE, Safari, Chrome
  
    // Wheel events
    // http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
    WHEEL: 'wheel',
  
    // Key events
    KEYPRESS: 'keypress',
    KEYDOWN: 'keydown',
    KEYUP: 'keyup',
  
    // Focus
    BLUR: 'blur',
    FOCUS: 'focus',
    DEACTIVATE: 'deactivate',  // IE only
    // NOTE: The following two events are not stable in cross-browser usage.
    //     WebKit and Opera implement DOMFocusIn/Out.
    //     IE implements focusin/out.
    //     Gecko implements neither see bug at
    //     https://bugzilla.mozilla.org/show_bug.cgi?id=396927.
    // The DOM Events Level 3 Draft deprecates DOMFocusIn in favor of focusin:
    //     http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html
    // You can use FOCUS in Capture phase until implementations converge.
    FOCUSIN: goog.userAgent.IE ? 'focusin' : 'DOMFocusIn',
    FOCUSOUT: goog.userAgent.IE ? 'focusout' : 'DOMFocusOut',
  
    // Forms
    CHANGE: 'change',
    RESET: 'reset',
    SELECT: 'select',
    SUBMIT: 'submit',
    INPUT: 'input',
    PROPERTYCHANGE: 'propertychange',  // IE only
  
    // Drag and drop
    DRAGSTART: 'dragstart',
    DRAG: 'drag',
    DRAGENTER: 'dragenter',
    DRAGOVER: 'dragover',
    DRAGLEAVE: 'dragleave',
    DROP: 'drop',
    DRAGEND: 'dragend',
  
    // Touch events
    // Note that other touch events exist, but we should follow the W3C list here.
    // http://www.w3.org/TR/touch-events/#list-of-touchevent-types
    TOUCHSTART: 'touchstart',
    TOUCHMOVE: 'touchmove',
    TOUCHEND: 'touchend',
    TOUCHCANCEL: 'touchcancel',
  
    // Misc
    BEFOREUNLOAD: 'beforeunload',
    CONSOLEMESSAGE: 'consolemessage',
    CONTEXTMENU: 'contextmenu',
    DEVICEORIENTATION: 'deviceorientation',
    DOMCONTENTLOADED: 'DOMContentLoaded',
    ERROR: 'error',
    HELP: 'help',
    LOAD: 'load',
    LOSECAPTURE: 'losecapture',
    ORIENTATIONCHANGE: 'orientationchange',
    READYSTATECHANGE: 'readystatechange',
    RESIZE: 'resize',
    SCROLL: 'scroll',
    UNLOAD: 'unload',
  
    // Media events
    CANPLAY: 'canplay',
    CANPLAYTHROUGH: 'canplaythrough',
    DURATIONCHANGE: 'durationchange',
    EMPTIED: 'emptied',
    ENDED: 'ended',
    LOADEDDATA: 'loadeddata',
    LOADEDMETADATA: 'loadedmetadata',
    PAUSE: 'pause',
    PLAY: 'play',
    PLAYING: 'playing',
    RATECHANGE: 'ratechange',
    SEEKED: 'seeked',
    SEEKING: 'seeking',
    STALLED: 'stalled',
    SUSPEND: 'suspend',
    TIMEUPDATE: 'timeupdate',
    VOLUMECHANGE: 'volumechange',
    WAITING: 'waiting',
  
    // HTML 5 History events
    // See http://www.w3.org/TR/html5/browsers.html#event-definitions-0
    HASHCHANGE: 'hashchange',
    PAGEHIDE: 'pagehide',
    PAGESHOW: 'pageshow',
    POPSTATE: 'popstate',
  
    // Copy and Paste
    // Support is limited. Make sure it works on your favorite browser
    // before using.
    // http://www.quirksmode.org/dom/events/cutcopypaste.html
    COPY: 'copy',
    PASTE: 'paste',
    CUT: 'cut',
    BEFORECOPY: 'beforecopy',
    BEFORECUT: 'beforecut',
    BEFOREPASTE: 'beforepaste',
  
    // HTML5 online/offline events.
    // http://www.w3.org/TR/offline-webapps/#related
    ONLINE: 'online',
    OFFLINE: 'offline',
  
    // HTML 5 worker events
    MESSAGE: 'message',
    CONNECT: 'connect',
  
    // CSS animation events.
    /** @suppress {missingRequire} */
    ANIMATIONSTART: goog.events.getVendorPrefixedName_('AnimationStart'),
    /** @suppress {missingRequire} */
    ANIMATIONEND: goog.events.getVendorPrefixedName_('AnimationEnd'),
    /** @suppress {missingRequire} */
    ANIMATIONITERATION: goog.events.getVendorPrefixedName_('AnimationIteration'),
  
    // CSS transition events. Based on the browser support described at:
    // https://developer.mozilla.org/en/css/css_transitions#Browser_compatibility
    /** @suppress {missingRequire} */
    TRANSITIONEND: goog.events.getVendorPrefixedName_('TransitionEnd'),
  
    // W3C Pointer Events
    // http://www.w3.org/TR/pointerevents/
    POINTERDOWN: 'pointerdown',
    POINTERUP: 'pointerup',
    POINTERCANCEL: 'pointercancel',
    POINTERMOVE: 'pointermove',
    POINTEROVER: 'pointerover',
    POINTEROUT: 'pointerout',
    POINTERENTER: 'pointerenter',
    POINTERLEAVE: 'pointerleave',
    GOTPOINTERCAPTURE: 'gotpointercapture',
    LOSTPOINTERCAPTURE: 'lostpointercapture',
  
    // IE specific events.
    // See http://msdn.microsoft.com/en-us/library/ie/hh772103(v=vs.85).aspx
    // Note: these events will be supplanted in IE11.
    MSGESTURECHANGE: 'MSGestureChange',
    MSGESTUREEND: 'MSGestureEnd',
    MSGESTUREHOLD: 'MSGestureHold',
    MSGESTURESTART: 'MSGestureStart',
    MSGESTURETAP: 'MSGestureTap',
    MSGOTPOINTERCAPTURE: 'MSGotPointerCapture',
    MSINERTIASTART: 'MSInertiaStart',
    MSLOSTPOINTERCAPTURE: 'MSLostPointerCapture',
    MSPOINTERCANCEL: 'MSPointerCancel',
    MSPOINTERDOWN: 'MSPointerDown',
    MSPOINTERENTER: 'MSPointerEnter',
    MSPOINTERHOVER: 'MSPointerHover',
    MSPOINTERLEAVE: 'MSPointerLeave',
    MSPOINTERMOVE: 'MSPointerMove',
    MSPOINTEROUT: 'MSPointerOut',
    MSPOINTEROVER: 'MSPointerOver',
    MSPOINTERUP: 'MSPointerUp',
  
    // Native IMEs/input tools events.
    TEXT: 'text',
    TEXTINPUT: 'textInput',
    COMPOSITIONSTART: 'compositionstart',
    COMPOSITIONUPDATE: 'compositionupdate',
    COMPOSITIONEND: 'compositionend',
  
    // Webview tag events
    // See http://developer.chrome.com/dev/apps/webview_tag.html
    EXIT: 'exit',
    LOADABORT: 'loadabort',
    LOADCOMMIT: 'loadcommit',
    LOADREDIRECT: 'loadredirect',
    LOADSTART: 'loadstart',
    LOADSTOP: 'loadstop',
    RESPONSIVE: 'responsive',
    SIZECHANGED: 'sizechanged',
    UNRESPONSIVE: 'unresponsive',
  
    // HTML5 Page Visibility API.  See details at
    // {@code goog.labs.dom.PageVisibilityMonitor}.
    VISIBILITYCHANGE: 'visibilitychange',
  
    // LocalStorage event.
    STORAGE: 'storage',
  
    // DOM Level 2 mutation events (deprecated).
    DOMSUBTREEMODIFIED: 'DOMSubtreeModified',
    DOMNODEINSERTED: 'DOMNodeInserted',
    DOMNODEREMOVED: 'DOMNodeRemoved',
    DOMNODEREMOVEDFROMDOCUMENT: 'DOMNodeRemovedFromDocument',
    DOMNODEINSERTEDINTODOCUMENT: 'DOMNodeInsertedIntoDocument',
    DOMATTRMODIFIED: 'DOMAttrModified',
    DOMCHARACTERDATAMODIFIED: 'DOMCharacterDataModified',
  
    // Print events.
    BEFOREPRINT: 'beforeprint',
    AFTERPRINT: 'afterprint'
  };
  