diff --git a/changelog.txt b/changelog.txt index d2429333..0ac9abfb 100644 --- a/changelog.txt +++ b/changelog.txt @@ -47,6 +47,7 @@ OPENSEADRAGON CHANGELOG * You can now rotate the navigator along with the main viewer (#455) * Viewport.setRotation now allows all rotation angles (#466) * Pinch rotate is now available (defaults to off) (#468) +* Added option for home button to fill viewer (#474) 1.1.1: diff --git a/src/iiiftilesource.js b/src/iiiftilesource.js index 8c1da291..c3c1fcd5 100644 --- a/src/iiiftilesource.js +++ b/src/iiiftilesource.js @@ -54,6 +54,7 @@ $.IIIFTileSource = function( options ){ options.tileSizePerScaleFactor = {}; + // N.B. 2.0 renamed scale_factors to scaleFactors if ( this.tile_width ) { options.tileSize = this.tile_width; } else if ( this.tile_height ) { @@ -62,13 +63,13 @@ $.IIIFTileSource = function( options ){ // Version 2.0 forwards if ( this.tiles.length == 1 ) { options.tileSize = this.tiles[0].width; - this.scale_factors = this.tiles[0].scale_factors; + this.scale_factors = this.tiles[0].scaleFactors; } else { // Multiple tile sizes at different levels this.scale_factors = []; for (var t = 0; t < this.tiles.length; t++ ) { - for (var sf = 0; sf < this.tiles[t].scale_factors.length; sf++) { - var scaleFactor = this.tiles[t].scale_factors[sf]; + for (var sf = 0; sf < this.tiles[t].scaleFactors.length; sf++) { + var scaleFactor = this.tiles[t].scaleFactors[sf]; this.scale_factors.push(scaleFactor); options.tileSizePerScaleFactor[scaleFactor] = this.tiles[t].width; } diff --git a/src/openseadragon.js b/src/openseadragon.js index 010a348d..63f0a659 100644 --- a/src/openseadragon.js +++ b/src/openseadragon.js @@ -218,6 +218,10 @@ * * @property {Number} [maxZoomLevel=null] * + * @property {Boolean} [homeFillsViewer=false] + * Make the 'home' button fill the viewer and clip the image, instead + * of fitting the image to the viewer and letterboxing. + * * @property {Boolean} [panHorizontal=true] * Allow horizontal pan. * @@ -909,6 +913,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){ defaultZoomLevel: 0, minZoomLevel: null, maxZoomLevel: null, + homeFillsViewer: false, //UI RESPONSIVENESS AND FEEL clickTimeThreshold: 300, diff --git a/src/viewer.js b/src/viewer.js index 4027c73e..388d6b1e 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -1849,7 +1849,8 @@ function openTileSource( viewer, source, options ) { degrees: _this.degrees //, //TODO: figure out how to support these in a way that makes sense //minZoomLevel: this.minZoomLevel, - //maxZoomLevel: this.maxZoomLevel + //maxZoomLevel: this.maxZoomLevel, + //homeFillsViewer: this.homeFillsViewer }); } else { if( source ){ @@ -1869,7 +1870,8 @@ function openTileSource( viewer, source, options ) { maxZoomLevel: _this.maxZoomLevel, viewer: _this, degrees: _this.degrees, - navigatorRotate: _this.navigatorRotate + navigatorRotate: _this.navigatorRotate, + homeFillsViewer: _this.homeFillsViewer }); } diff --git a/src/viewport.js b/src/viewport.js index c6c7b49a..0c3744b0 100644 --- a/src/viewport.js +++ b/src/viewport.js @@ -84,7 +84,8 @@ $.Viewport = function( options ) { defaultZoomLevel: $.DEFAULT_SETTINGS.defaultZoomLevel, minZoomLevel: $.DEFAULT_SETTINGS.minZoomLevel, maxZoomLevel: $.DEFAULT_SETTINGS.maxZoomLevel, - degrees: $.DEFAULT_SETTINGS.degrees + degrees: $.DEFAULT_SETTINGS.degrees, + homeFillsViewer: $.DEFAULT_SETTINGS.homeFillsViewer }, options ); @@ -186,15 +187,22 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{ * @function */ getHomeZoom: function() { - var aspectFactor = - this.contentAspectX / this.getAspectRatio(); - if( this.defaultZoomLevel ){ return this.defaultZoomLevel; } else { - var output = ( aspectFactor >= 1 ) ? - 1 : - aspectFactor; + var aspectFactor = + this.contentAspectX / this.getAspectRatio(); + + var output; + if( this.homeFillsViewer ){ // fill the viewer and clip the image + output = ( aspectFactor >= 1) ? + aspectFactor : + 1; + } else { + output = ( aspectFactor >= 1 ) ? + 1 : + aspectFactor; + } return output / this.homeBounds.width; } diff --git a/test/data/iiif_2_0_tiled/info.json b/test/data/iiif_2_0_tiled/info.json index 4cb0c3ab..d9b56f62 100644 --- a/test/data/iiif_2_0_tiled/info.json +++ b/test/data/iiif_2_0_tiled/info.json @@ -4,7 +4,7 @@ "protocol": "http://iiif.io/api/image", "height": 1024, "width": 775, - "tiles" : [{"width":256, "scale_factors":[1,2,4,8]}], + "tiles" : [{"width":256, "scaleFactors":[1,2,4,8]}], "profile": ["http://iiif.io/api/image/2/level1.json", {