diff --git a/src/ol/format/IIIFInfo.js b/src/ol/format/IIIFInfo.js index f6ec81d261..fd27433e07 100644 --- a/src/ol/format/IIIFInfo.js +++ b/src/ol/format/IIIFInfo.js @@ -3,7 +3,7 @@ */ /** - * Supported image formats, qualities and region / size calculation features + * Supported image formats, qualities and supported region / size calculation features * for different image API versions and compliance levels * @const * @type {Object>>} @@ -11,17 +11,17 @@ const IIIF_PROFILE_VALUES = { version1: { level0: { - features: [], + supports: [], formats: [], qualities: ['native'] }, level1: { - features: ['regionByPx', 'sizeByW', 'sizeByH', 'sizeByPct'], + supports: ['regionByPx', 'sizeByW', 'sizeByH', 'sizeByPct'], formats: ['jpg'], qualities: ['native'] }, level2: { - features: ['regionByPx', 'regionByPct', 'sizeByW', 'sizeByH', 'sizeByPct', + supports: ['regionByPx', 'regionByPct', 'sizeByW', 'sizeByH', 'sizeByPct', 'sizeByConfinedWh', 'sizeByWh'], formats: ['jpg', 'png'], qualities: ['native', 'color', 'grey', 'bitonal'] @@ -29,17 +29,17 @@ const IIIF_PROFILE_VALUES = { }, version2: { level0: { - features: [], + supports: [], formats: ['jpg'], qualities: ['default'] }, level1: { - features: ['regionByPx', 'sizeByW', 'sizeByH', 'sizeByPct'], + supports: ['regionByPx', 'sizeByW', 'sizeByH', 'sizeByPct'], formats: ['jpg'], qualities: ['default'] }, level2: { - features: ['regionByPx', 'regionByPct', 'sizeByW', 'sizeByH', 'sizeByPct', + supports: ['regionByPx', 'regionByPct', 'sizeByW', 'sizeByH', 'sizeByPct', 'sizeByConfinedWh', 'sizeByDistortedWh', 'sizeByWh'], formats: ['jpg', 'png'], qualities: ['default', 'bitonal'] @@ -47,24 +47,24 @@ const IIIF_PROFILE_VALUES = { }, version3: { level0: { - features: [], + supports: [], formats: ['jpg'], qualities: ['default'] }, level1: { - features: ['regionByPx', 'regionSquare', 'sizeByW', 'sizeByH'], + supports: ['regionByPx', 'regionSquare', 'sizeByW', 'sizeByH'], formats: ['jpg'], qualities: ['default'] }, level2: { - features: ['regionByPx', 'regionSquare', 'regionByPct', + supports: ['regionByPx', 'regionSquare', 'regionByPct', 'sizeByW', 'sizeByH', 'sizeByPct', 'sizeByConfinedWh', 'sizeByWh'], formats: ['jpg'], qualities: ['default', 'bitonal'] } }, none: { - features: [], + supports: [], formats: [], qualities: [] } @@ -131,7 +131,7 @@ function generateVersion1Options(imageInfo) { const levelProfile = getLevelProfileForImageInfo(imageInfo); return { url: imageInfo['@id'].replace(/\/?(info.json)?$/g, ''), - features: levelProfile.features, + supports: levelProfile.supports, formats: [...levelProfile.formats, imageInfo.formats === undefined ? [] : imageInfo.formats ], @@ -148,7 +148,7 @@ function generateVersion1Options(imageInfo) { function generateVersion2Options(imageInfo) { const levelProfile = getLevelProfileForImageInfo(imageInfo), additionalProfile = Array.isArray(imageInfo.profile) && imageInfo.profile.length > 1, - profileFeatures = additionalProfile && imageInfo.profile[1].supports ? imageInfo.profile[1].supports : [], + profileSupports = additionalProfile && imageInfo.profile[1].supports ? imageInfo.profile[1].supports : [], profileFormats = additionalProfile && imageInfo.profile[1].formats ? imageInfo.profile[1].formats : [], profileQualities = additionalProfile && imageInfo.profile[1].qualities ? imageInfo.profile[1].qualities : [], attributions = []; @@ -181,7 +181,7 @@ function generateVersion2Options(imageInfo) { imageInfo.tiles.map(function(tile) { return tile.scaleFactors; })[0], - features: [...levelProfile.features, ...profileFeatures], + supports: [...levelProfile.supports, ...profileSupports], formats: [...levelProfile.formats, ...profileFormats], qualities: [...levelProfile.qualities, ...profileQualities], attributions: attributions.length == 0 ? undefined : attributions @@ -207,8 +207,8 @@ function generateVersion3Options(imageInfo) { imageInfo.tiles.map(function(tile) { return tile.scaleFactors; })[0], - features: imageInfo.extraFeatures === undefined ? levelProfile.features : - [...levelProfile.features, ...imageInfo.extraFeatures], + supports: imageInfo.extraFeatures === undefined ? levelProfile.supports : + [...levelProfile.supports, ...imageInfo.extraFeatures], formats: imageInfo.extraFormats === undefined ? levelProfile.formats : [...levelProfile.formats, ...imageInfo.extraFormats], qualities: imageInfo.extraQualities === undefined ? levelProfile.qualities : @@ -239,7 +239,7 @@ function getOptionsForImageInformation(imageInfo, preferredOptions) { size: [imageInfo.width, imageInfo.height], sizes: imageOptions.sizes, format: imageOptions.formats.includes(options.format) ? options.format : 'jpg', - features: imageOptions.features, + supports: imageOptions.supports, quality: options.quality && imageOptions.qualities.includes(options.quality) ? options.quality : imageOptions.qualities.includes('native') ? 'native' : 'default', resolutions: Array.isArray(imageOptions.resolutions) ? imageOptions.resolutions.sort(function(a, b) { diff --git a/src/ol/source/IIIF.js b/src/ol/source/IIIF.js index d0f4754767..bf9efd93dd 100644 --- a/src/ol/source/IIIF.js +++ b/src/ol/source/IIIF.js @@ -25,6 +25,8 @@ import TileImage from './TileImage.js'; * @property {import("../size.js").Size[]} [sizes] Supported scaled image sizes. * Content of the IIIF info.json 'sizes' property, but as array of Size objects. * @property {import("../extent.js").Extent} [extent=[0, -height, width, 0]] + * @property {Array} [supports=[]] Supported IIIF region and size calculation + * features. * @property {number} [transition] * @property {number|import("../size.js").Size} [tileSize] Tile size. * Same tile size is used for all zoom levels. If tile size is a number, @@ -62,15 +64,15 @@ class IIIF extends TileImage { const format = options.format || 'jpg'; const quality = options.quality || (options.version == Versions.VERSION1 ? 'native' : 'default'); let resolutions = options.resolutions || []; - const features = options.features || []; + const supports = options.supports || []; const extent = options.extent || [0, -height, width, 0]; const supportsListedSizes = sizes != undefined && Array.isArray(sizes) && sizes.length > 0; const supportsListedTiles = tileSize != undefined && (Number.isInteger(tileSize) && tileSize > 0 || Array.isArray(tileSize) && tileSize.length > 0); - const supportsArbitraryTiling = features != undefined && Array.isArray(features) && - (features.includes('regionByPx') || features.includes('regionByPct')) && - (features.includes('sizeByWh') || features.includes('sizeByH') || - features.includes('sizeByW') || features.includes('sizeByPct')); + const supportsArbitraryTiling = supports != undefined && Array.isArray(supports) && + (supports.includes('regionByPx') || supports.includes('regionByPct')) && + (supports.includes('sizeByWh') || supports.includes('sizeByH') || + supports.includes('sizeByW') || supports.includes('sizeByPct')); let tileWidth, tileHeight, @@ -187,24 +189,24 @@ class IIIF extends TileImage { if (regionX == 0 && regionW == width && regionY == 0 && regionH == height) { // canonical full image region parameter is 'full', not 'x,y,w,h' regionParam = 'full'; - } else if (!supportsArbitraryTiling || features.includes('regionByPx')) { + } else if (!supportsArbitraryTiling || supports.includes('regionByPx')) { regionParam = regionX + ',' + regionY + ',' + regionW + ',' + regionH; - } else if (features.includes('regionByPct')) { + } else if (supports.includes('regionByPct')) { const pctX = formatPercentage(regionX / width * 100), pctY = formatPercentage(regionY / height * 100), pctW = formatPercentage(regionW / width * 100), pctH = formatPercentage(regionH / height * 100); regionParam = 'pct:' + pctX + ',' + pctY + ',' + pctW + ',' + pctH; } - if (version == Versions.VERSION3 && (!supportsArbitraryTiling || features.includes('sizeByWh'))) { + if (version == Versions.VERSION3 && (!supportsArbitraryTiling || supports.includes('sizeByWh'))) { sizeParam = sizeW + ',' + sizeH; - } else if (!supportsArbitraryTiling || features.includes('sizeByW')) { + } else if (!supportsArbitraryTiling || supports.includes('sizeByW')) { sizeParam = sizeW + ','; - } else if (features.includes('sizeByH')) { + } else if (supports.includes('sizeByH')) { sizeParam = ',' + sizeH; - } else if (features.includes('sizeByWh')) { + } else if (supports.includes('sizeByWh')) { sizeParam = sizeW + ',' + sizeH; - } else if (features.includes('sizeByPct')) { + } else if (supports.includes('sizeByPct')) { sizeParam = 'pct:' + formatPercentage(100 / scale); } } else {