diff --git a/src/viewer.js b/src/viewer.js index bc40160a..d3847f95 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -994,7 +994,7 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype, /** * Add a layer. * options.tileSource can be anything that {@link OpenSeadragon.Viewer#open} - * supports. + * supports except arrays of images as layers cannot be sequences. * @function * @param {Object} options * @param {String|Object|Function} [options.tileSource] The TileSource of the layer. @@ -1008,6 +1008,9 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype, var _this = this, tileSource = options.tileSource; + if ( !this.isOpen() ) { + throw new Error( "An image must be loaded before adding layers." ); + } if ( !tileSource ) { throw new Error( "No tile source provided as new layer." ); } @@ -1034,7 +1037,7 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype, if ( tileSource instanceof Array ) { raiseAddLayerFailed({ - message: "Collections can not be added as layers.", + message: "Sequences can not be added as layers.", source: tileSource, options: options }); @@ -1062,7 +1065,7 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype, debugGridColor: _this.debugGridColor }); _this.drawers.push( drawer ); - if ( options.level ) { + if ( options.level !== undefined ) { _this.setLayerLevel( drawer, options.level ); } THIS[ _this.hash ].forceRedraw = true; @@ -1114,8 +1117,8 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype, * Get the number of layers used. * @returns {Number} The number of layers used. */ - getNumberOfLayers: function() { - return this.drawers.length - 1; + getLayersCount: function() { + return this.drawers.length; }, /** @@ -1128,22 +1131,33 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype, */ setLayerLevel: function( drawer, level ) { var oldLevel = this.getLevelOfLayer( drawer ); - if ( level === 0 || oldLevel === 0 ) { - throw new Error( "Cannot reassign base level." ); - } + if ( level >= this.drawers.length ) { throw new Error( "Level bigger than number of layers." ); } if ( level === oldLevel || oldLevel === -1 ) { return this; } + if ( level === 0 || oldLevel === 0 ) { + if ( THIS[ this.hash ].sequenced ) { + throw new Error( "Cannot reassign base level when in sequence mode." ); + } + // We need to re-assign the base drawer + this.drawer = level === 0 ? drawer : this.getLayerAtLevel( level ); + } this.drawers.splice( oldLevel, 1 ); this.drawers.splice( level, 0, drawer ); this.canvas.removeChild( drawer.canvas ); - // Insert right after layer at level - 1 - var prevLevelCanvas = this.drawers[level - 1].canvas; - prevLevelCanvas.parentNode.insertBefore( drawer.canvas, - prevLevelCanvas.nextSibling ); + if ( level === 0 ) { + var nextLevelCanvas = this.drawers[ 1 ].canvas; + nextLevelCanvas.parentNode.insertBefore( drawer.canvas, + nextLevelCanvas ); + } else { + // Insert right after layer at level - 1 + var prevLevelCanvas = this.drawers[level - 1].canvas; + prevLevelCanvas.parentNode.insertBefore( drawer.canvas, + prevLevelCanvas.nextSibling ); + } /** * Raised when the order of the layers has been changed. diff --git a/test/demo/layers.html b/test/demo/layers.html index 1803d2f6..87467480 100644 --- a/test/demo/layers.html +++ b/test/demo/layers.html @@ -28,7 +28,7 @@
- Availables layers
+ Available layers