| 1 | // Copyright 2005 The Closure Library Authors. All Rights Reserved. |
| 2 | // |
| 3 | // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | // you may not use this file except in compliance with the License. |
| 5 | // You may obtain a copy of the License at |
| 6 | // |
| 7 | // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | // |
| 9 | // Unless required by applicable law or agreed to in writing, software |
| 10 | // distributed under the License is distributed on an "AS-IS" BASIS, |
| 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | // See the License for the specific language governing permissions and |
| 13 | // limitations under the License. |
| 14 | |
| 15 | /** |
| 16 | * @fileoverview A base class for event objects. |
| 17 | * |
| 18 | */ |
| 19 | |
| 20 | |
| 21 | goog.provide('goog.events.Event'); |
| 22 | goog.provide('goog.events.EventLike'); |
| 23 | |
| 24 | /** |
| 25 | * goog.events.Event no longer depends on goog.Disposable. Keep requiring |
| 26 | * goog.Disposable here to not break projects which assume this dependency. |
| 27 | * @suppress {extraRequire} |
| 28 | */ |
| 29 | goog.require('goog.Disposable'); |
| 30 | goog.require('goog.events.EventId'); |
| 31 | |
| 32 | |
| 33 | /** |
| 34 | * A typedef for event like objects that are dispatchable via the |
| 35 | * goog.events.dispatchEvent function. strings are treated as the type for a |
| 36 | * goog.events.Event. Objects are treated as an extension of a new |
| 37 | * goog.events.Event with the type property of the object being used as the type |
| 38 | * of the Event. |
| 39 | * @typedef {string|Object|goog.events.Event|goog.events.EventId} |
| 40 | */ |
| 41 | goog.events.EventLike; |
| 42 | |
| 43 | |
| 44 | |
| 45 | /** |
| 46 | * A base class for event objects, so that they can support preventDefault and |
| 47 | * stopPropagation. |
| 48 | * |
| 49 | * @param {string|!goog.events.EventId} type Event Type. |
| 50 | * @param {Object=} opt_target Reference to the object that is the target of |
| 51 | * this event. It has to implement the {@code EventTarget} interface |
| 52 | * declared at {@link http://developer.mozilla.org/en/DOM/EventTarget}. |
| 53 | * @constructor |
| 54 | */ |
| 55 | goog.events.Event = function(type, opt_target) { |
| 56 | /** |
| 57 | * Event type. |
| 58 | * @type {string} |
| 59 | */ |
| 60 | this.type = type instanceof goog.events.EventId ? String(type) : type; |
| 61 | |
| 62 | /** |
| 63 | * TODO(user): The type should probably be |
| 64 | * EventTarget|goog.events.EventTarget. |
| 65 | * |
| 66 | * Target of the event. |
| 67 | * @type {Object|undefined} |
| 68 | */ |
| 69 | this.target = opt_target; |
| 70 | |
| 71 | /** |
| 72 | * Object that had the listener attached. |
| 73 | * @type {Object|undefined} |
| 74 | */ |
| 75 | this.currentTarget = this.target; |
| 76 | |
| 77 | /** |
| 78 | * Whether to cancel the event in internal capture/bubble processing for IE. |
| 79 | * @type {boolean} |
| 80 | * @public |
| 81 | * @suppress {underscore|visibility} Technically public, but referencing this |
| 82 | * outside this package is strongly discouraged. |
| 83 | */ |
| 84 | this.propagationStopped_ = false; |
| 85 | |
| 86 | /** |
| 87 | * Whether the default action has been prevented. |
| 88 | * This is a property to match the W3C specification at |
| 89 | * {@link http://www.w3.org/TR/DOM-Level-3-Events/ |
| 90 | * #events-event-type-defaultPrevented}. |
| 91 | * Must be treated as read-only outside the class. |
| 92 | * @type {boolean} |
| 93 | */ |
| 94 | this.defaultPrevented = false; |
| 95 | |
| 96 | /** |
| 97 | * Return value for in internal capture/bubble processing for IE. |
| 98 | * @type {boolean} |
| 99 | * @public |
| 100 | * @suppress {underscore|visibility} Technically public, but referencing this |
| 101 | * outside this package is strongly discouraged. |
| 102 | */ |
| 103 | this.returnValue_ = true; |
| 104 | }; |
| 105 | |
| 106 | |
| 107 | /** |
| 108 | * For backwards compatibility (goog.events.Event used to inherit |
| 109 | * goog.Disposable). |
| 110 | * @deprecated Events don't need to be disposed. |
| 111 | */ |
| 112 | goog.events.Event.prototype.disposeInternal = function() { |
| 113 | }; |
| 114 | |
| 115 | |
| 116 | /** |
| 117 | * For backwards compatibility (goog.events.Event used to inherit |
| 118 | * goog.Disposable). |
| 119 | * @deprecated Events don't need to be disposed. |
| 120 | */ |
| 121 | goog.events.Event.prototype.dispose = function() { |
| 122 | }; |
| 123 | |
| 124 | |
| 125 | /** |
| 126 | * Stops event propagation. |
| 127 | */ |
| 128 | goog.events.Event.prototype.stopPropagation = function() { |
| 129 | this.propagationStopped_ = true; |
| 130 | }; |
| 131 | |
| 132 | |
| 133 | /** |
| 134 | * Prevents the default action, for example a link redirecting to a url. |
| 135 | */ |
| 136 | goog.events.Event.prototype.preventDefault = function() { |
| 137 | this.defaultPrevented = true; |
| 138 | this.returnValue_ = false; |
| 139 | }; |
| 140 | |
| 141 | |
| 142 | /** |
| 143 | * Stops the propagation of the event. It is equivalent to |
| 144 | * {@code e.stopPropagation()}, but can be used as the callback argument of |
| 145 | * {@link goog.events.listen} without declaring another function. |
| 146 | * @param {!goog.events.Event} e An event. |
| 147 | */ |
| 148 | goog.events.Event.stopPropagation = function(e) { |
| 149 | e.stopPropagation(); |
| 150 | }; |
| 151 | |
| 152 | |
| 153 | /** |
| 154 | * Prevents the default action. It is equivalent to |
| 155 | * {@code e.preventDefault()}, but can be used as the callback argument of |
| 156 | * {@link goog.events.listen} without declaring another function. |
| 157 | * @param {!goog.events.Event} e An event. |
| 158 | */ |
| 159 | goog.events.Event.preventDefault = function(e) { |
| 160 | e.preventDefault(); |
| 161 | }; |