simplified beforeOpen, open, close in Viewer

This commit is contained in:
thatcher 2011-12-12 22:40:02 -05:00
parent 3c31094514
commit 3e39bccbbe
2 changed files with 180 additions and 152 deletions

View File

@ -1668,66 +1668,6 @@ $.Viewer = function( options ) {
$.Viewer.prototype = { $.Viewer.prototype = {
_onClose: function () {
this.source = null;
this.viewport = null;
this.drawer = null;
this.profiler = null;
this.canvas.innerHTML = "";
},
_beforeOpen: function () {
if (this.source) {
this._onClose();
}
this._lastOpenStartTime = new Date().getTime(); // to ignore earlier opens
window.setTimeout($.delegate(this, function () {
if (this._lastOpenStartTime > this._lastOpenEndTime) {
this._setMessage($.Strings.getString("Messages.Loading"));
}
}), 2000);
return this._lastOpenStartTime;
},
_onOpen: function (time, _source, error) {
this._lastOpenEndTime = new Date().getTime();
if (time < this._lastOpenStartTime) {
$.Debug.log("Ignoring out-of-date open.");
raiseEvent( this, "ignore" );
return;
} else if (!_source) {
this._setMessage(error);
raiseEvent( this, "error" );
return;
}
this.canvas.innerHTML = "";
this._prevContainerSize = $.Utils.getElementSize( this.container );
this.source = _source;
this.viewport = new $.Viewport(this._prevContainerSize, this.source.dimensions, this.config);
this.drawer = new $.Drawer(this.source, this.viewport, this.canvas);
this.profiler = new $.Profiler();
this._animating = false;
this._forceRedraw = true;
scheduleUpdate( this, this._updateMulti );
for (var i = 0; i < this.overlayControls.length; i++) {
var overlay = this.overlayControls[ i ];
if (overlay.point != null) {
this.drawer.addOverlay(overlay.id, new $.Point(overlay.point.X, overlay.point.Y), $.OverlayPlacement.TOP_LEFT);
}
else {
this.drawer.addOverlay(overlay.id, new $.Rect(overlay.rect.Point.X, overlay.rect.Point.Y, overlay.rect.Width, overlay.rect.Height), overlay.placement);
}
}
raiseEvent( this, "open" );
},
_updateMulti: function () { _updateMulti: function () {
if (!this.source) { if (!this.source) {
return; return;
@ -1739,7 +1679,7 @@ $.Viewer.prototype = {
scheduleUpdate( this, arguments.callee, beginTime ); scheduleUpdate( this, arguments.callee, beginTime );
}, },
_updateOnce: function () { _updateOnce: function () {
if (!this.source) { if ( !this.source ) {
return; return;
} }
@ -1869,29 +1809,100 @@ $.Viewer.prototype = {
return !!this.source; return !!this.source;
}, },
openDzi: function (xmlUrl, xmlString) { openDzi: function (xmlUrl, xmlString) {
var currentTime = this._beforeOpen(); var _this = this;
$.DziTileSourceHelper.createFromXml( $.DziTileSourceHelper.createFromXml(
xmlUrl, xmlUrl,
xmlString, xmlString,
$.Utils.createCallback( function( source ){
null, _this.open( source );
$.delegate(this, this._onOpen), }
currentTime
)
); );
}, },
openTileSource: function (tileSource) { openTileSource: function ( tileSource ) {
var currentTime = beforeOpen(); var _this = this;
window.setTimeout($.delegate(this, function () { window.setTimeout( function () {
onOpen(currentTime, tileSource); _this.open( tileSource );
}), 1); }, 1);
}, },
close: function () { open: function( source ) {
if ( !this.source ) { var _this = this;
if ( this.source ) {
this.close();
}
this._lastOpenStartTime = new Date().getTime(); // to ignore earlier opens
window.setTimeout( function () {
if ( _this._lastOpenStartTime > _this._lastOpenEndTime ) {
_this._setMessage( $.Strings.getString( "Messages.Loading" ) );
}
}, 2000);
this._lastOpenEndTime = new Date().getTime();
if ( this._lastOpenStartTime < viewer._lastOpenStartTime ) {
$.Debug.log( "Ignoring out-of-date open." );
raiseEvent( this, "ignore" );
return; return;
} }
this._onClose(); this.canvas.innerHTML = "";
this._prevContainerSize = $.Utils.getElementSize( this.container );
if( source ){
this.source = source;
}
this.viewport = new $.Viewport(
this._prevContainerSize,
this.source.dimensions,
this.config
);
this.drawer = new $.Drawer(
this.source,
this.viewport,
this.canvas
);
this.profiler = new $.Profiler();
this._animating = false;
this._forceRedraw = true;
scheduleUpdate( this, this._updateMulti );
for ( var i = 0; i < this.overlayControls.length; i++ ) {
var overlay = this.overlayControls[ i ];
if (overlay.point != null) {
this.drawer.addOverlay(
overlay.id,
new $.Point(
overlay.point.X,
overlay.point.Y
),
$.OverlayPlacement.TOP_LEFT
);
} else {
this.drawer.addOverlay(
overlay.id,
new $.Rect(
overlay.rect.Point.X,
overlay.rect.Point.Y,
overlay.rect.Width,
overlay.rect.Height
),
overlay.placement
);
}
}
raiseEvent( this, "open" );
},
close: function () {
this.source = null;
this.viewport = null;
this.drawer = null;
this.profiler = null;
this.canvas.innerHTML = "";
}, },
removeControl: function ( elmt ) { removeControl: function ( elmt ) {
var elmt = $.Utils.getElement( elmt ), var elmt = $.Utils.getElement( elmt ),
@ -2188,7 +2199,7 @@ function onContainerEnter(tracker, position, buttonDownElmt, buttonDownAny) {
}; };
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Default view event handlers. // Utility methods
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
function getControlIndex( viewer, elmt ) { function getControlIndex( viewer, elmt ) {
for ( i = viewer.controls.length - 1; i >= 0; i-- ) { for ( i = viewer.controls.length - 1; i >= 0; i-- ) {
@ -2204,6 +2215,9 @@ function getControlIndex( viewer, elmt ) {
// Page update routines ( aka Views - for future reference ) // Page update routines ( aka Views - for future reference )
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
}( OpenSeadragon )); }( OpenSeadragon ));
(function( $ ){ (function( $ ){

View File

@ -226,66 +226,6 @@ $.Viewer = function( options ) {
$.Viewer.prototype = { $.Viewer.prototype = {
_onClose: function () {
this.source = null;
this.viewport = null;
this.drawer = null;
this.profiler = null;
this.canvas.innerHTML = "";
},
_beforeOpen: function () {
if (this.source) {
this._onClose();
}
this._lastOpenStartTime = new Date().getTime(); // to ignore earlier opens
window.setTimeout($.delegate(this, function () {
if (this._lastOpenStartTime > this._lastOpenEndTime) {
this._setMessage($.Strings.getString("Messages.Loading"));
}
}), 2000);
return this._lastOpenStartTime;
},
_onOpen: function (time, _source, error) {
this._lastOpenEndTime = new Date().getTime();
if (time < this._lastOpenStartTime) {
$.Debug.log("Ignoring out-of-date open.");
raiseEvent( this, "ignore" );
return;
} else if (!_source) {
this._setMessage(error);
raiseEvent( this, "error" );
return;
}
this.canvas.innerHTML = "";
this._prevContainerSize = $.Utils.getElementSize( this.container );
this.source = _source;
this.viewport = new $.Viewport(this._prevContainerSize, this.source.dimensions, this.config);
this.drawer = new $.Drawer(this.source, this.viewport, this.canvas);
this.profiler = new $.Profiler();
this._animating = false;
this._forceRedraw = true;
scheduleUpdate( this, this._updateMulti );
for (var i = 0; i < this.overlayControls.length; i++) {
var overlay = this.overlayControls[ i ];
if (overlay.point != null) {
this.drawer.addOverlay(overlay.id, new $.Point(overlay.point.X, overlay.point.Y), $.OverlayPlacement.TOP_LEFT);
}
else {
this.drawer.addOverlay(overlay.id, new $.Rect(overlay.rect.Point.X, overlay.rect.Point.Y, overlay.rect.Width, overlay.rect.Height), overlay.placement);
}
}
raiseEvent( this, "open" );
},
_updateMulti: function () { _updateMulti: function () {
if (!this.source) { if (!this.source) {
return; return;
@ -297,7 +237,7 @@ $.Viewer.prototype = {
scheduleUpdate( this, arguments.callee, beginTime ); scheduleUpdate( this, arguments.callee, beginTime );
}, },
_updateOnce: function () { _updateOnce: function () {
if (!this.source) { if ( !this.source ) {
return; return;
} }
@ -427,29 +367,100 @@ $.Viewer.prototype = {
return !!this.source; return !!this.source;
}, },
openDzi: function (xmlUrl, xmlString) { openDzi: function (xmlUrl, xmlString) {
var currentTime = this._beforeOpen(); var _this = this;
$.DziTileSourceHelper.createFromXml( $.DziTileSourceHelper.createFromXml(
xmlUrl, xmlUrl,
xmlString, xmlString,
$.Utils.createCallback( function( source ){
null, _this.open( source );
$.delegate(this, this._onOpen), }
currentTime
)
); );
}, },
openTileSource: function (tileSource) { openTileSource: function ( tileSource ) {
var currentTime = beforeOpen(); var _this = this;
window.setTimeout($.delegate(this, function () { window.setTimeout( function () {
onOpen(currentTime, tileSource); _this.open( tileSource );
}), 1); }, 1);
}, },
close: function () { open: function( source ) {
if ( !this.source ) { var _this = this;
if ( this.source ) {
this.close();
}
this._lastOpenStartTime = new Date().getTime(); // to ignore earlier opens
window.setTimeout( function () {
if ( _this._lastOpenStartTime > _this._lastOpenEndTime ) {
_this._setMessage( $.Strings.getString( "Messages.Loading" ) );
}
}, 2000);
this._lastOpenEndTime = new Date().getTime();
if ( this._lastOpenStartTime < viewer._lastOpenStartTime ) {
$.Debug.log( "Ignoring out-of-date open." );
raiseEvent( this, "ignore" );
return; return;
} }
this._onClose(); this.canvas.innerHTML = "";
this._prevContainerSize = $.Utils.getElementSize( this.container );
if( source ){
this.source = source;
}
this.viewport = new $.Viewport(
this._prevContainerSize,
this.source.dimensions,
this.config
);
this.drawer = new $.Drawer(
this.source,
this.viewport,
this.canvas
);
this.profiler = new $.Profiler();
this._animating = false;
this._forceRedraw = true;
scheduleUpdate( this, this._updateMulti );
for ( var i = 0; i < this.overlayControls.length; i++ ) {
var overlay = this.overlayControls[ i ];
if (overlay.point != null) {
this.drawer.addOverlay(
overlay.id,
new $.Point(
overlay.point.X,
overlay.point.Y
),
$.OverlayPlacement.TOP_LEFT
);
} else {
this.drawer.addOverlay(
overlay.id,
new $.Rect(
overlay.rect.Point.X,
overlay.rect.Point.Y,
overlay.rect.Width,
overlay.rect.Height
),
overlay.placement
);
}
}
raiseEvent( this, "open" );
},
close: function () {
this.source = null;
this.viewport = null;
this.drawer = null;
this.profiler = null;
this.canvas.innerHTML = "";
}, },
removeControl: function ( elmt ) { removeControl: function ( elmt ) {
var elmt = $.Utils.getElement( elmt ), var elmt = $.Utils.getElement( elmt ),
@ -746,7 +757,7 @@ function onContainerEnter(tracker, position, buttonDownElmt, buttonDownAny) {
}; };
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Default view event handlers. // Utility methods
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
function getControlIndex( viewer, elmt ) { function getControlIndex( viewer, elmt ) {
for ( i = viewer.controls.length - 1; i >= 0; i-- ) { for ( i = viewer.controls.length - 1; i >= 0; i-- ) {
@ -762,4 +773,7 @@ function getControlIndex( viewer, elmt ) {
// Page update routines ( aka Views - for future reference ) // Page update routines ( aka Views - for future reference )
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
}( OpenSeadragon )); }( OpenSeadragon ));