Utility functions for event handling.
ALKMaps. | Utility functions for event handling. |
Properties | |
observers | {Object} A hashtable cache of the event observers. |
Constants | |
KEY_SPACE | {int} |
KEY_BACKSPACE | {int} |
KEY_TAB | {int} |
KEY_RETURN | {int} |
KEY_ESC | {int} |
KEY_LEFT | {int} |
KEY_UP | {int} |
KEY_RIGHT | {int} |
KEY_DOWN | {int} |
KEY_DELETE | {int} |
Functions | |
element | Cross browser event element detection. |
isSingleTouch | Determine whether event was caused by a single touch |
isMultiTouch | Determine whether event was caused by a multi touch |
isLeftClick | Determine whether event was caused by a left click. |
isRightClick | Determine whether event was caused by a right mouse click. |
stop | Stops an event from propagating. |
findElement | |
observe | |
stopObservingElement | Given the id of an element to stop observing, cycle through the element’s cached observers, calling stopObserving on each one, skipping those entries which can no longer be removed. |
_removeElementObservers | |
stopObserving | |
unloadCache | Cycle through all the element entries in the events cache and call stopObservingElement on each. |
ALKMaps. | |
Constants | |
BROWSER_EVENTS | {Array(String)} supported events |
Properties | |
listeners | {Object} Hashtable of Array(Function): events listener functions |
object | {Object} the code object issuing application events |
element | {DOMElement} the DOM element receiving browser events |
fallThrough | {Boolean} |
includeXY | {Boolean} Should the .xy property automatically be created for browser mouse events? |
extensions | {Object} Event extensions registered with this instance. |
extensionCount | {Object} Keys are event types (like in listeners), values are the number of extension listeners for each event type. |
Functions | |
clearMouseListener | A version of clearMouseCache that is bound to this instance so that it can be used with ALKMaps.Event.observe and ALKMaps.Event.stopObserving. |
Constructor | |
ALKMaps. | Construct an ALKMaps.Events object. |
Functions | |
destroy | |
addEventType | Deprecated. |
attachToElement | |
on | Convenience method for registering listeners with a common scope. |
register | Register an event on the events object. |
registerPriority | Same as register() but adds the new listener to the front of the events queue instead of to the end. |
un | Convenience method for unregistering listeners with a common scope. |
unregister | |
remove | Remove all listeners for a given event type. |
triggerEvent | Trigger a specified registered event. |
handleBrowserEvent | Basically just a wrapper to the triggerEvent() function, but takes care to set a property ‘xy’ on the event with the current mouse position. |
clearMouseCache | Clear cached data about the mouse position. |
getMousePosition |
Constants | |
BROWSER_EVENTS | {Array(String)} supported events |
Properties | |
listeners | {Object} Hashtable of Array(Function): events listener functions |
object | {Object} the code object issuing application events |
element | {DOMElement} the DOM element receiving browser events |
fallThrough | {Boolean} |
includeXY | {Boolean} Should the .xy property automatically be created for browser mouse events? |
extensions | {Object} Event extensions registered with this instance. |
extensionCount | {Object} Keys are event types (like in listeners), values are the number of extension listeners for each event type. |
Functions | |
clearMouseListener | A version of clearMouseCache that is bound to this instance so that it can be used with ALKMaps.Event.observe and ALKMaps.Event.stopObserving. |
Constructor | |
ALKMaps. | Construct an ALKMaps.Events object. |
Functions | |
destroy | |
addEventType | Deprecated. |
attachToElement | |
on | Convenience method for registering listeners with a common scope. |
register | Register an event on the events object. |
registerPriority | Same as register() but adds the new listener to the front of the events queue instead of to the end. |
un | Convenience method for unregistering listeners with a common scope. |
unregister | |
remove | Remove all listeners for a given event type. |
triggerEvent | Trigger a specified registered event. |
handleBrowserEvent | Basically just a wrapper to the triggerEvent() function, but takes care to set a property ‘xy’ on the event with the current mouse position. |
clearMouseCache | Clear cached data about the mouse position. |
getMousePosition |
{Boolean} Should the .xy property automatically be created for browser mouse events? In general, this should be false. If it is true, then mouse events will automatically generate a ‘.xy’ property on the event object that is passed. (Prior to ALKMaps 2.7, this was true by default.) Otherwise, you can call the getMousePosition on the relevant events handler on the object available via the ‘evt.object’ property of the evt object. So, for most events, you can call: function named(evt) { this.xy = this.object.events.getMousePosition(evt) }
when creating an events object whose primary purpose is to manage relatively positioned mouse events within a div, it may make sense to set it to true.
This option is also used to control whether the events object caches offsets. If this is false, it will not: the reason for this is that it is only expected to be called many times if the includeXY property is set to true. If you set this to true, you are expected to clear the offset cache manually (using this.clearMouseCache()) if: the border of the element changes the location of the element in the page changes
{Object} Event extensions registered with this instance. Keys are event types, values are {ALKMaps.Events.*} extension instances or {Boolean} for events that an instantiated extension provides in addition to the one it was created for.
Extensions create an event in addition to browser events, which usually fires when a sequence of browser events is completed. Extensions are automatically instantiated when a listener is registered for an event provided by an extension.
Extensions are created in the ALKMaps.Events namespace using <ALKMaps.Class>, and named after the event they provide. The constructor receives the target ALKMaps.Events instance as argument. Extensions that need to capture browser events before they propagate can register their listeners events using register, with {extension: true} as 4th argument.
If an extension creates more than one event, an alias for each event type should be created and reference the same class. The constructor should set a reference in the target’s extensions registry to itself.
Below is a minimal extension that provides the “foostart” and “fooend” event types, which replace the native “click” event type if clicked on an element with the css class “foo”:
ALKMaps.Events.foostart = ALKMaps.Class({ initialize: function(target) { this.target = target; this.target.register("click", this, this.doStuff, {extension: true}); // only required if extension provides more than one event type this.target.extensions["foostart"] = true; this.target.extensions["fooend"] = true; }, destroy: function() { var target = this.target; target.unregister("click", this, this.doStuff); delete this.target; // only required if extension provides more than one event type delete target.extensions["foostart"]; delete target.extensions["fooend"]; }, doStuff: function(evt) { var propagate = true; if (ALKMaps.Event.element(evt).className === "foo") { propagate = false; var target = this.target; target.triggerEvent("foostart"); window.setTimeout(function() { target.triggerEvent("fooend"); }, 1000); } return propagate; } }); // only required if extension provides more than one event type ALKMaps.Events.fooend = ALKMaps.Events.foostart;
{Object} Keys are event types (like in listeners), values are the number of extension listeners for each event type.
A version of clearMouseCache that is bound to this instance so that it can be used with ALKMaps.Event.observe and ALKMaps.Event.stopObserving.
Construct an ALKMaps.Events object.
object | {Object} The js object to which this Events object is being added |
element | {DOMElement} A dom element to respond to browser events |
eventTypes | {Array(String)} Deprecated. Array of custom application events. A listener may be registered for any named event, regardless of the values provided here. |
fallThrough | {Boolean} Allow events to fall through after these have been handled? |
options | {Object} Options for the events object. |
on: function( object )
Convenience method for registering listeners with a common scope. Internally, this method calls register as shown in the examples below.
// register a single listener for the "loadstart" event events.on({"loadstart": loadStartListener}); // this is equivalent to the following events.register("loadstart", undefined, loadStartListener); // register multiple listeners to be called with the same `this` object events.on({ "loadstart": loadStartListener, "loadend": loadEndListener, scope: object }); // this is equivalent to the following events.register("loadstart", object, loadStartListener); events.register("loadend", object, loadEndListener);
object | {Object} |
register: function ( type, obj, func, priority )
Register an event on the events object.
When the event is triggered, the ‘func’ function will be called, in the context of ‘obj’. Imagine we were to register an event, specifying an ALKMaps.Bounds Object as ‘obj’. When the event is triggered, the context in the callback function will be our Bounds object. This means that within our callback function, we can access the properties and methods of the Bounds object through the “this” variable. So our callback could execute something like:
leftStr = "Left: " + this.left;
or
centerStr = "Center: " + this.getCenterLonLat();
type | {String} Name of the event to register |
obj | {Object} The object to bind the context to for the callback#. If no object is specified, default is the Events’s ‘object’ property. |
func | {Function} The callback function. If no callback is specified, this function does nothing. |
priority | {Boolean|Object} If true, adds the new listener to the front of the events queue instead of to the end. |
extension | {Boolean} If true, then the event will be registered as extension event. Extension events are handled before all other events. |
always | {Boolean} If true, event listener will always be triggered even if event propagation is stopped for a particular event. |
registerPriority: function ( type, obj, func )
Same as register() but adds the new listener to the front of the events queue instead of to the end.
type | {String} Name of the event to register |
obj | {Object} The object to bind the context to for the callback#. If no object is specified, default is the Events’s ‘object’ property. |
func | {Function} The callback function. If no callback is specified, this function does nothing. |
un: function( object )
Convenience method for unregistering listeners with a common scope. Internally, this method calls unregister as shown in the examples below.
// unregister a single listener for the "loadstart" event events.un({"loadstart": loadStartListener}); // this is equivalent to the following events.unregister("loadstart", undefined, loadStartListener); // unregister multiple listeners with the same `this` object events.un({ "loadstart": loadStartListener, "loadend": loadEndListener, scope: object }); // this is equivalent to the following events.unregister("loadstart", object, loadStartListener); events.unregister("loadend", object, loadEndListener);
getMousePosition: function ( evt )
evt | {Event} |
{ALKMaps.Pixel} The current xy coordinate of the mouse, adjusted for offsets
Cross browser event element detection.
element: function( event )
Determine whether event was caused by a single touch
isSingleTouch: function( event )
Determine whether event was caused by a multi touch
isMultiTouch: function( event )
Determine whether event was caused by a left click.
isLeftClick: function( event )
Determine whether event was caused by a right mouse click.
isRightClick: function( event )
Stops an event from propagating.
stop: function( event, allowDefault )
findElement: function( event, tagName )
observe: function( elementParam, name, observer, useCapture )
Given the id of an element to stop observing, cycle through the element’s cached observers, calling stopObserving on each one, skipping those entries which can no longer be removed.
stopObservingElement: function( elementParam )
_removeElementObservers: function( elementObservers )
stopObserving: function( elementParam, name, observer, useCapture )
Cycle through all the element entries in the events cache and call stopObservingElement on each.
unloadCache: function()
Clear cached data about the mouse position.
clearMouseCache: function()
destroy: function ()
Deprecated.
addEventType: function( eventName )
attachToElement: function ( element )
Convenience method for registering listeners with a common scope.
on: function( object )
Register an event on the events object.
register: function ( type, obj, func, priority )
Same as register() but adds the new listener to the front of the events queue instead of to the end.
registerPriority: function ( type, obj, func )
Convenience method for unregistering listeners with a common scope.
un: function( object )
unregister: function ( type, obj, func )
Remove all listeners for a given event type.
remove: function( type )
Trigger a specified registered event.
triggerEvent: function ( type, evt )
Basically just a wrapper to the triggerEvent() function, but takes care to set a property ‘xy’ on the event with the current mouse position.
handleBrowserEvent: function ( evt )
getMousePosition: function ( evt )