From 5542ead48b5a5daf64839af384a5656a0ac0fa7b Mon Sep 17 00:00:00 2001 From: Lutz Helm Date: Tue, 19 Sep 2023 09:55:53 +0200 Subject: [PATCH 1/3] Fix #2415, order IIIF sizes on tile source init --- src/iiiftilesource.js | 3 +++ test/modules/iiif.js | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/iiiftilesource.js b/src/iiiftilesource.js index 6db4e321..1105ea51 100644 --- a/src/iiiftilesource.js +++ b/src/iiiftilesource.js @@ -269,6 +269,9 @@ $.extend( $.IIIFTileSource.prototype, $.TileSource.prototype, /** @lends OpenSea } } } + data.sizes = data.sizes && data.sizes.sort( + ( size1, size2 ) => size1.width - size2.width + ); return data; } }, diff --git a/test/modules/iiif.js b/test/modules/iiif.js index cc5035b7..b230150a 100644 --- a/test/modules/iiif.js +++ b/test/modules/iiif.js @@ -141,6 +141,21 @@ "width": 2000, "height": 1000, "profile": "level1" + }, + infoJson3DescendingSizeOrder = { + "@context": "http://iiif.io/api/image/3/context.json", + "id": id, + "width": 2000, + "height": 1000, + "tiles": [ + { "width": 512, "scaleFactors": [ 1, 2, 4 ] } + ], + "sizes": [ + { width: 2000, height: 1000 }, + { width: 1000, height: 500 }, + { width: 500, height: 250 } + ], + "profile": "level1", }; QUnit.module('IIIF'); @@ -246,6 +261,11 @@ assert.equal(source3Level1.getTileUrl(8, 3, 0), "http://example.com/identifier/1536,0,464,512/464,512/0/default.jpg"); assert.equal(source3Level1.getTileUrl(8, 0, 1), "http://example.com/identifier/0,512,512,488/512,488/0/default.jpg"); assert.equal(source3Level1.getTileUrl(8, 3, 1), "http://example.com/identifier/1536,512,464,488/464,488/0/default.jpg"); + + var source3DescendingSizeOrder = getSource(infoJson3DescendingSizeOrder); + assert.equal(source3DescendingSizeOrder.getTileUrl(0, 0, 0), "http://example.com/identifier/full/500,250/0/default.jpg"); + assert.equal(source3DescendingSizeOrder.getTileUrl(1, 1, 0), "http://example.com/identifier/1024,0,976,1000/488,500/0/default.jpg"); + assert.equal(source3DescendingSizeOrder.getTileUrl(2, 0, 0), "http://example.com/identifier/0,0,512,512/512,512/0/default.jpg"); }); })(); From b92a428e88730546058bf9890aa44061ca370eb5 Mon Sep 17 00:00:00 2001 From: Lutz Helm Date: Tue, 10 Oct 2023 14:02:44 +0200 Subject: [PATCH 2/3] Sort levelSizes instead of sizes --- src/iiiftilesource.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/iiiftilesource.js b/src/iiiftilesource.js index 1105ea51..54ec073f 100644 --- a/src/iiiftilesource.js +++ b/src/iiiftilesource.js @@ -145,7 +145,7 @@ $.IIIFTileSource = function( options ){ if( this.sizes ) { var sizeLength = this.sizes.length; if ( (sizeLength === options.maxLevel) || (sizeLength === options.maxLevel + 1) ) { - this.levelSizes = this.sizes; + this.levelSizes = this.sizes.slice().sort(( size1, size2 ) => size1.width - size2.width); // Need to take into account that the list may or may not include the full resolution size if( sizeLength === options.maxLevel ) { this.levelSizes.push( {width: this.width, height: this.height} ); @@ -269,9 +269,6 @@ $.extend( $.IIIFTileSource.prototype, $.TileSource.prototype, /** @lends OpenSea } } } - data.sizes = data.sizes && data.sizes.sort( - ( size1, size2 ) => size1.width - size2.width - ); return data; } }, From 5272cf092cc2bc3a9d875935a6f0caa44941328e Mon Sep 17 00:00:00 2001 From: Lutz Helm Date: Tue, 10 Oct 2023 14:04:31 +0200 Subject: [PATCH 3/3] Ensure descending size order also works for level 0 --- test/modules/iiif.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/modules/iiif.js b/test/modules/iiif.js index b230150a..e64e34a9 100644 --- a/test/modules/iiif.js +++ b/test/modules/iiif.js @@ -107,6 +107,21 @@ ], "profile": "level0" }, + infoJson3level0WithTiles = { + "@context": "http://iiif.io/api/image/3/context.json", + "id": id, + "width": 2000, + "height": 1000, + "tiles": [ + { "width": 256, "scaleFactors": [ 2, 4, 1 ] } + ], + "sizes": [ + { width: 2000, height: 1000 }, + { width: 1000, height: 500 }, + { width: 500, height: 250 } + ], + "profile": "level0" + }, infoJson3level0ContextExtension = { "@context": [ "http://iiif.io/api/image/3/context.json", @@ -253,6 +268,11 @@ assert.equal(source2Level0.getTileUrl(0, 0, 0), "http://example.com/identifier/full/1000,/0/default.jpg"); assert.equal(source2Level0.getTileUrl(1, 0, 0), "http://example.com/identifier/full/2000,/0/default.jpg"); + var source3Level0WithTiles = getSource(infoJson3level0WithTiles); + assert.equal(source3Level0WithTiles.getTileUrl(0, 0, 0), "http://example.com/identifier/0,0,1024,1000/256,250/0/default.jpg"); + assert.equal(source3Level0WithTiles.getTileUrl(1, 1, 0), "http://example.com/identifier/512,0,512,512/256,256/0/default.jpg"); + assert.equal(source3Level0WithTiles.getTileUrl(2, 0, 0), "http://example.com/identifier/0,0,256,256/256,256/0/default.jpg"); + var source3Level1 = getSource(infoJson3level1); assert.equal(source3Level1.getTileUrl(0, 0, 0), "http://example.com/identifier/full/8,4/0/default.jpg"); assert.equal(source3Level1.getTileUrl(7, 0, 0), "http://example.com/identifier/0,0,1024,1000/512,500/0/default.jpg");