mirror of
https://github.com/openseadragon/openseadragon.git
synced 2024-11-22 05:06:09 +03:00
Merge pull request #1884 from woodchuck/pr-1878
Better handle destruction when navigator in custom location
This commit is contained in:
commit
1c6d67d2d7
@ -6,6 +6,7 @@ OPENSEADRAGON CHANGELOG
|
|||||||
* Now when "simple image" tile sources are removed from the viewer, they free the memory used by the pyramid they create (#1789 @TakumaKira)
|
* Now when "simple image" tile sources are removed from the viewer, they free the memory used by the pyramid they create (#1789 @TakumaKira)
|
||||||
* Documentation fix (#1814 @kenanchristian)
|
* Documentation fix (#1814 @kenanchristian)
|
||||||
* Better cleanup on destruction, to avoid memory leaks (#1832 @JoFrMueller)
|
* Better cleanup on destruction, to avoid memory leaks (#1832 @JoFrMueller)
|
||||||
|
* Better handle destruction when navigator in custom location (#1884 @woodchuck)
|
||||||
* Miscellaneous code cleanup (#1840 @msalsbery)
|
* Miscellaneous code cleanup (#1840 @msalsbery)
|
||||||
* You can now specify tileSize for the Zoomify Tile Source (#1868 @abrlam)
|
* You can now specify tileSize for the Zoomify Tile Source (#1868 @abrlam)
|
||||||
* Better use of IIIF "max" and "full" URL parameters (#1871 @MImranAsghar)
|
* Better use of IIIF "max" and "full" URL parameters (#1871 @MImranAsghar)
|
||||||
@ -57,7 +58,7 @@ OPENSEADRAGON CHANGELOG
|
|||||||
* You can now prevent canvas-click events on the navigator (#1416)
|
* You can now prevent canvas-click events on the navigator (#1416)
|
||||||
* The navigator can now be restricted to just horizontal or just vertical panning (#1416)
|
* The navigator can now be restricted to just horizontal or just vertical panning (#1416)
|
||||||
* Fixed DziTileSource so it doesn't load levels above maxLevel or below minLevel, if set (#1492)
|
* Fixed DziTileSource so it doesn't load levels above maxLevel or below minLevel, if set (#1492)
|
||||||
|
|
||||||
2.3.1:
|
2.3.1:
|
||||||
|
|
||||||
* Debug mode now uses different colors for different tiled images (customizable via debugGridColor) (#1271)
|
* Debug mode now uses different colors for different tiled images (customizable via debugGridColor) (#1271)
|
||||||
|
@ -399,14 +399,22 @@ $.extend( $.Button.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.
|
|||||||
},
|
},
|
||||||
|
|
||||||
destroy: function() {
|
destroy: function() {
|
||||||
this.element.removeChild(this.imgRest);
|
if (this.imgRest) {
|
||||||
this.imgRest = null;
|
this.element.removeChild(this.imgRest);
|
||||||
this.element.removeChild(this.imgGroup);
|
this.imgRest = null;
|
||||||
this.imgGroup = null;
|
}
|
||||||
this.element.removeChild(this.imgHover);
|
if (this.imgGroup) {
|
||||||
this.imgHover = null;
|
this.element.removeChild(this.imgGroup);
|
||||||
this.element.removeChild(this.imgDown);
|
this.imgGroup = null;
|
||||||
this.imgDown = null;
|
}
|
||||||
|
if (this.imgHover) {
|
||||||
|
this.element.removeChild(this.imgHover);
|
||||||
|
this.imgHover = null;
|
||||||
|
}
|
||||||
|
if (this.imgDown) {
|
||||||
|
this.element.removeChild(this.imgDown);
|
||||||
|
this.imgDown = null;
|
||||||
|
}
|
||||||
this.removeAllHandlers();
|
this.removeAllHandlers();
|
||||||
this.tracker.destroy();
|
this.tracker.destroy();
|
||||||
this.element = null;
|
this.element = null;
|
||||||
|
@ -161,7 +161,9 @@ $.Control.prototype = {
|
|||||||
*/
|
*/
|
||||||
destroy: function() {
|
destroy: function() {
|
||||||
this.wrapper.removeChild( this.element );
|
this.wrapper.removeChild( this.element );
|
||||||
this.container.removeChild( this.wrapper );
|
if (this.anchor !== $.ControlAnchor.NONE) {
|
||||||
|
this.container.removeChild(this.wrapper);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -409,14 +409,14 @@ $.Viewer = function( options ) {
|
|||||||
if (!this.drawer.canRotate()) {
|
if (!this.drawer.canRotate()) {
|
||||||
// Disable/remove the rotate left/right buttons since they aren't supported
|
// Disable/remove the rotate left/right buttons since they aren't supported
|
||||||
if (this.rotateLeft) {
|
if (this.rotateLeft) {
|
||||||
i = this.buttons.buttons.indexOf(this.rotateLeft);
|
i = this.buttonGroup.buttons.indexOf(this.rotateLeft);
|
||||||
this.buttons.buttons.splice(i, 1);
|
this.buttonGroup.buttons.splice(i, 1);
|
||||||
this.buttons.element.removeChild(this.rotateLeft.element);
|
this.buttonGroup.element.removeChild(this.rotateLeft.element);
|
||||||
}
|
}
|
||||||
if (this.rotateRight) {
|
if (this.rotateRight) {
|
||||||
i = this.buttons.buttons.indexOf(this.rotateRight);
|
i = this.buttonGroup.buttons.indexOf(this.rotateRight);
|
||||||
this.buttons.buttons.splice(i, 1);
|
this.buttonGroup.buttons.splice(i, 1);
|
||||||
this.buttons.element.removeChild(this.rotateRight.element);
|
this.buttonGroup.element.removeChild(this.rotateRight.element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -774,8 +774,12 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype,
|
|||||||
|
|
||||||
this.removeAllHandlers();
|
this.removeAllHandlers();
|
||||||
|
|
||||||
if (this.buttons) {
|
if (this.buttonGroup) {
|
||||||
this.buttons.destroy();
|
this.buttonGroup.destroy();
|
||||||
|
} else if (this.customButtons) {
|
||||||
|
while (this.customButtons.length) {
|
||||||
|
this.customButtons.pop().destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.paging) {
|
if (this.paging) {
|
||||||
@ -1849,13 +1853,13 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( useGroup ) {
|
if ( useGroup ) {
|
||||||
this.buttons = new $.ButtonGroup({
|
this.buttonGroup = new $.ButtonGroup({
|
||||||
buttons: buttons,
|
buttons: buttons,
|
||||||
clickTimeThreshold: this.clickTimeThreshold,
|
clickTimeThreshold: this.clickTimeThreshold,
|
||||||
clickDistThreshold: this.clickDistThreshold
|
clickDistThreshold: this.clickDistThreshold
|
||||||
});
|
});
|
||||||
|
|
||||||
this.navControl = this.buttons.element;
|
this.navControl = this.buttonGroup.element;
|
||||||
this.addHandler( 'open', $.delegate( this, lightUp ) );
|
this.addHandler( 'open', $.delegate( this, lightUp ) );
|
||||||
|
|
||||||
if( this.toolbar ){
|
if( this.toolbar ){
|
||||||
@ -1869,6 +1873,8 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype,
|
|||||||
{anchor: this.navigationControlAnchor || $.ControlAnchor.TOP_LEFT}
|
{anchor: this.navigationControlAnchor || $.ControlAnchor.TOP_LEFT}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
this.customButtons = buttons;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -3482,8 +3488,10 @@ function doSingleZoomOut() {
|
|||||||
|
|
||||||
|
|
||||||
function lightUp() {
|
function lightUp() {
|
||||||
this.buttons.emulateEnter();
|
if (this.buttonGroup) {
|
||||||
this.buttons.emulateExit();
|
this.buttonGroup.emulateEnter();
|
||||||
|
this.buttonGroup.emulateExit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3502,8 +3510,8 @@ function onFullScreen() {
|
|||||||
this.setFullScreen( !this.isFullPage() );
|
this.setFullScreen( !this.isFullPage() );
|
||||||
}
|
}
|
||||||
// correct for no mouseout event on change
|
// correct for no mouseout event on change
|
||||||
if ( this.buttons ) {
|
if ( this.buttonGroup ) {
|
||||||
this.buttons.emulateExit();
|
this.buttonGroup.emulateExit();
|
||||||
}
|
}
|
||||||
this.fullPageButton.element.focus();
|
this.fullPageButton.element.focus();
|
||||||
if ( this.viewport ) {
|
if ( this.viewport ) {
|
||||||
|
12
test/modules/controls.js
vendored
12
test/modules/controls.js
vendored
@ -53,9 +53,9 @@
|
|||||||
assert.ok(viewer.showZoomControl, 'showZoomControl should be on');
|
assert.ok(viewer.showZoomControl, 'showZoomControl should be on');
|
||||||
assert.ok(!!viewer.zoomInButton, "zoomIn button should not be null");
|
assert.ok(!!viewer.zoomInButton, "zoomIn button should not be null");
|
||||||
assert.ok(!!viewer.zoomOutButton, "zoomOut button should not be null");
|
assert.ok(!!viewer.zoomOutButton, "zoomOut button should not be null");
|
||||||
assert.notEqual(viewer.buttons.buttons.indexOf(viewer.zoomInButton), -1,
|
assert.notEqual(viewer.buttonGroup.buttons.indexOf(viewer.zoomInButton), -1,
|
||||||
"The zoomIn button should be present");
|
"The zoomIn button should be present");
|
||||||
assert.notEqual(viewer.buttons.buttons.indexOf(viewer.zoomOutButton), -1,
|
assert.notEqual(viewer.buttonGroup.buttons.indexOf(viewer.zoomOutButton), -1,
|
||||||
"The zoomOut button should be present");
|
"The zoomOut button should be present");
|
||||||
|
|
||||||
var oldZoom = viewer.viewport.getZoom();
|
var oldZoom = viewer.viewport.getZoom();
|
||||||
@ -108,7 +108,7 @@
|
|||||||
viewer.removeHandler('open', openHandler);
|
viewer.removeHandler('open', openHandler);
|
||||||
assert.ok(viewer.showHomeControl, 'showHomeControl should be on');
|
assert.ok(viewer.showHomeControl, 'showHomeControl should be on');
|
||||||
assert.ok(!!viewer.homeButton, "Home button should not be null");
|
assert.ok(!!viewer.homeButton, "Home button should not be null");
|
||||||
assert.notEqual(viewer.buttons.buttons.indexOf(viewer.homeButton), -1,
|
assert.notEqual(viewer.buttonGroup.buttons.indexOf(viewer.homeButton), -1,
|
||||||
"The home button should be present");
|
"The home button should be present");
|
||||||
|
|
||||||
viewer.viewport.zoomBy(1.1);
|
viewer.viewport.zoomBy(1.1);
|
||||||
@ -167,7 +167,7 @@
|
|||||||
viewer.removeHandler('open', openHandler);
|
viewer.removeHandler('open', openHandler);
|
||||||
assert.ok(viewer.showHomeControl, 'showFullPageControl should be on');
|
assert.ok(viewer.showHomeControl, 'showFullPageControl should be on');
|
||||||
assert.ok(!!viewer.fullPageButton, "FullPage button should not be null");
|
assert.ok(!!viewer.fullPageButton, "FullPage button should not be null");
|
||||||
assert.notEqual(viewer.buttons.buttons.indexOf(viewer.fullPageButton), -1,
|
assert.notEqual(viewer.buttonGroup.buttons.indexOf(viewer.fullPageButton), -1,
|
||||||
"The full page button should be present");
|
"The full page button should be present");
|
||||||
|
|
||||||
assert.ok(!viewer.isFullPage(), "OSD should not be in full page.");
|
assert.ok(!viewer.isFullPage(), "OSD should not be in full page.");
|
||||||
@ -223,9 +223,9 @@
|
|||||||
assert.ok(viewer.drawer, 'Drawer exists');
|
assert.ok(viewer.drawer, 'Drawer exists');
|
||||||
assert.ok(viewer.drawer.canRotate(), 'drawer.canRotate needs to be true');
|
assert.ok(viewer.drawer.canRotate(), 'drawer.canRotate needs to be true');
|
||||||
assert.ok(viewer.showRotationControl, 'showRotationControl should be true');
|
assert.ok(viewer.showRotationControl, 'showRotationControl should be true');
|
||||||
assert.notEqual(viewer.buttons.buttons.indexOf(viewer.rotateLeftButton), -1,
|
assert.notEqual(viewer.buttonGroup.buttons.indexOf(viewer.rotateLeftButton), -1,
|
||||||
"rotateLeft should be found");
|
"rotateLeft should be found");
|
||||||
assert.notEqual(viewer.buttons.buttons.indexOf(viewer.rotateRightButton), -1,
|
assert.notEqual(viewer.buttonGroup.buttons.indexOf(viewer.rotateRightButton), -1,
|
||||||
"rotateRight should be found");
|
"rotateRight should be found");
|
||||||
|
|
||||||
// Now simulate the left/right button clicks.
|
// Now simulate the left/right button clicks.
|
||||||
|
Loading…
Reference in New Issue
Block a user