mirror of
https://github.com/openseadragon/openseadragon.git
synced 2024-11-23 13:46:09 +03:00
second pass at internal use of events through raiseEvent via eventhandler interfaces. Gonna add some tests to see if its addressing the basic use cases.
This commit is contained in:
parent
3d2fb54ea3
commit
55c1aca351
@ -2,9 +2,7 @@
|
||||
|
||||
/**
|
||||
* For use by classes which want to support custom, non-browser events.
|
||||
* TODO: This is an aweful name! This thing represents an "event source",
|
||||
* not an "event handler". PLEASE change the to EventSource. Also please
|
||||
* change 'addHandler', 'removeHandler' and 'raiseEvent' to 'bind',
|
||||
* TODO: Consider mapping 'addHandler', 'removeHandler' and 'raiseEvent' to 'bind',
|
||||
* 'unbind', and 'trigger' respectively. Finally add a method 'one' which
|
||||
* automatically unbinds a listener after the first triggered event that
|
||||
* matches.
|
||||
@ -66,53 +64,87 @@ $.EventHandler.prototype = {
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Retrive the list of all handlers registered for a given event.
|
||||
* @function
|
||||
* @param {String} eventName - Name of event to get handlers for.
|
||||
*/
|
||||
getHandler: function( eventName ) {
|
||||
var events = this.events[ eventName ];
|
||||
if ( !events || !events.length ){
|
||||
return null;
|
||||
}
|
||||
events = events.length === 1 ?
|
||||
[ events[ 0 ] ] :
|
||||
Array.apply( null, events );
|
||||
return function( source, args ) {
|
||||
var i,
|
||||
length = events.length,
|
||||
stop;
|
||||
for ( i = 0; i < length; i++ ) {
|
||||
if( $.isFunction( events[ i ] ) {
|
||||
stop = events[ i ].apply( source, args );
|
||||
if( stop === false ){
|
||||
return stop;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Trigger an event, optionally passing additional information.
|
||||
* @function
|
||||
* @param {String} eventName - Name of event to register.
|
||||
* @param {Function} handler - Function to call when event is triggered.
|
||||
* @param {String} eventName - Name of event to trigger.
|
||||
*/
|
||||
raiseEvent: function( eventName, eventArgs ) {
|
||||
raiseEvent: function( eventName ) {
|
||||
//uncomment if you want to get a log og all events
|
||||
//$.console.log( eventName );
|
||||
var handler = this.getHandler( eventName );
|
||||
var handler = getHandler( this, eventName ),
|
||||
eventArg,
|
||||
allArgs,
|
||||
i;
|
||||
|
||||
if ( handler ) {
|
||||
if ( !eventArgs ) {
|
||||
eventArgs = {};
|
||||
if( arguments.length > 1 ){
|
||||
eventArg = arguments[ 1 ];
|
||||
} else {
|
||||
eventArg = {};
|
||||
}
|
||||
allArgs = [ eventArg ];
|
||||
if( arguments.length > 2 ){
|
||||
for( i = 0; i < arguments.length; i++ ){
|
||||
allArgs[ i ] = arguments[ i + 2 ];
|
||||
}
|
||||
}
|
||||
|
||||
return handler( this, eventArgs );
|
||||
return handler( this, allArgs );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Retrive the list of all handlers registered for a given event.
|
||||
* @private
|
||||
* @inner
|
||||
* @param {String} eventName - Name of event to get handlers for.
|
||||
*/
|
||||
function getHandler( handler, eventName ) {
|
||||
var events = handler.events[ eventName ];
|
||||
if ( !events || !events.length ){
|
||||
return null;
|
||||
}
|
||||
|
||||
return function( source, allArgs ) {
|
||||
var i,
|
||||
length = events.length,
|
||||
stopPropagation,
|
||||
preventDefault,
|
||||
returnValue,
|
||||
eventArg = arguments;
|
||||
//Dress up the primary 'event' argument to provide the usual
|
||||
//stopPropagation and preventDefault functions.
|
||||
if( allArgs && allArgs.length ){
|
||||
allArgs[0].stopProgagation = function(){
|
||||
stopPropagation = true;
|
||||
};
|
||||
allArgs[0].preventDefault = function(){
|
||||
preventDefault = true;
|
||||
};
|
||||
} else {
|
||||
allArgs = [];
|
||||
}
|
||||
for ( i = 0; i < length; i++ ) {
|
||||
if( $.isFunction( events[ i ] ) ) {
|
||||
returnValue = events[ i ].apply( source, allArgs );
|
||||
//stopping propagation isnt dom related, only implying that the chaing
|
||||
//of registered event handlers for this event will be inturrupted.
|
||||
if( stopPropagation === true || length === i + 1 ){
|
||||
if( preventDefault || false === returnValue ){
|
||||
//the implementing class that invoked raiseEvent may choose
|
||||
//to use the return value of false to prevent the default
|
||||
//behavior that would normally occur after the event was invoked
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
}( OpenSeadragon ));
|
||||
|
@ -238,7 +238,7 @@ $.extend( $.Navigator.prototype, $.EventHandler.prototype, $.Viewer.prototype, {
|
||||
* @inner
|
||||
* @function
|
||||
*/
|
||||
function onCanvasClick( tracker, position, quick, shift ) {
|
||||
function onCanvasClick( tracker, position, quick, shift, originalEvent ) {
|
||||
this.displayRegion.focus();
|
||||
}
|
||||
|
||||
@ -248,7 +248,7 @@ function onCanvasClick( tracker, position, quick, shift ) {
|
||||
* @inner
|
||||
* @function
|
||||
*/
|
||||
function onCanvasDrag( tracker, position, delta, shift ) {
|
||||
function onCanvasDrag( tracker, position, delta, shift, originalEvent ) {
|
||||
if ( this.viewer.viewport ) {
|
||||
if( !this.panHorizontal ){
|
||||
delta.x = 0;
|
||||
@ -270,7 +270,7 @@ function onCanvasDrag( tracker, position, delta, shift ) {
|
||||
* @inner
|
||||
* @function
|
||||
*/
|
||||
function onCanvasRelease( tracker, position, insideElementPress, insideElementRelease ) {
|
||||
function onCanvasRelease( tracker, position, insideElementPress, insideElementRelease, originalEvent ) {
|
||||
if ( insideElementPress && this.viewer.viewport ) {
|
||||
this.viewer.viewport.applyConstraints();
|
||||
}
|
||||
@ -282,7 +282,7 @@ function onCanvasRelease( tracker, position, insideElementPress, insideElementRe
|
||||
* @inner
|
||||
* @function
|
||||
*/
|
||||
function onCanvasScroll( tracker, position, scroll, shift ) {
|
||||
function onCanvasScroll( tracker, position, scroll, shift, originalEvent ) {
|
||||
var factor;
|
||||
if ( this.viewer.viewport ) {
|
||||
factor = Math.pow( this.zoomPerScroll, scroll );
|
||||
|
@ -78,7 +78,7 @@ $.Viewport.prototype = {
|
||||
*/
|
||||
resetContentSize: function( contentSize ){
|
||||
if( this.viewer ){
|
||||
if( false === this.viewer.raiseEvent( 'reset', { contentSize: contentSize } ) ){
|
||||
if( this.viewer.raiseEvent( 'reset', { contentSize: contentSize } ) ){
|
||||
//cancel event
|
||||
return this;
|
||||
}
|
||||
@ -133,7 +133,7 @@ $.Viewport.prototype = {
|
||||
*/
|
||||
goHome: function( immediately ) {
|
||||
if( this.viewer ){
|
||||
if( false === this.viewer.raiseEvent( 'home', { immediately: immediately } ) ){
|
||||
if( this.viewer.raiseEvent( 'home', { immediately: immediately } ) ){
|
||||
//cancel event
|
||||
return this;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user