Fix merge conflict in upstream changelog.txt

This commit is contained in:
Conner Wingard 2015-07-14 16:46:47 -04:00
commit b687332c9e
9 changed files with 178 additions and 20 deletions

View File

@ -9,12 +9,14 @@ OPENSEADRAGON CHANGELOG
* Fixed flickering tiles with useCanvas=false when no cache is used (#661) * Fixed flickering tiles with useCanvas=false when no cache is used (#661)
* Added additional coordinates conversion methods to TiledImage (#662) * Added additional coordinates conversion methods to TiledImage (#662)
* 'display: none' no longer gets reset on overlays during draw (#668) * 'display: none' no longer gets reset on overlays during draw (#668)
* Added `preserveImageSizeOnResize` option (#666)
* Better error reporting for tile load failures (#679)
* Added collectionColumns as a configuration parameter (#680)
* Added support for non-square tiles (#673) * Added support for non-square tiles (#673)
* TileSource.Options objects can now optionally provide tileWidth/tileWidth instead of tileSize for non-square tile support. * TileSource.Options objects can now optionally provide tileWidth/tileWidth instead of tileSize for non-square tile support.
* IIIFTileSources will now respect non-square tiles if available. * IIIFTileSources will now respect non-square tiles if available.
* DEPRECATION: TileSource.getTileSize is deprecated use TileSource.getTileWidth and TileSource.getTileHeight instead. * DEPRECATION: TileSource.getTileSize is deprecated use TileSource.getTileWidth and TileSource.getTileHeight instead.
2.0.0: 2.0.0:
* True multi-image mode (#450) * True multi-image mode (#450)

View File

@ -5,16 +5,16 @@
"devDependencies": { "devDependencies": {
"grunt": "^0.4.5", "grunt": "^0.4.5",
"grunt-contrib-clean": "^0.5.0", "grunt-contrib-clean": "^0.5.0",
"grunt-text-replace": "^0.3.11", "grunt-contrib-compress": "^0.9.1",
"grunt-contrib-concat": "^0.4.0", "grunt-contrib-concat": "^0.4.0",
"grunt-git-describe": "^2.3.2", "grunt-contrib-connect": "^0.7.1",
"grunt-contrib-jshint": "^0.10.0",
"grunt-contrib-uglify": "^0.4.0", "grunt-contrib-uglify": "^0.4.0",
"grunt-contrib-watch": "^0.6.1", "grunt-contrib-watch": "^0.6.1",
"grunt-contrib-jshint": "^0.10.0", "grunt-git-describe": "^2.3.2",
"grunt-contrib-compress": "^0.9.1", "grunt-qunit-istanbul": "^0.5.0",
"grunt-contrib-connect": "^0.7.1", "grunt-text-replace": "^0.3.11",
"qunitjs": "^1.14.0", "qunitjs": "^1.18.0"
"grunt-qunit-istanbul": "^0.4.5"
}, },
"scripts": { "scripts": {
"test": "grunt test" "test": "grunt test"

View File

@ -51,6 +51,7 @@ function ImageJob ( options ) {
} }
ImageJob.prototype = { ImageJob.prototype = {
errorMsg: null,
start: function(){ start: function(){
var _this = this; var _this = this;
@ -64,10 +65,12 @@ ImageJob.prototype = {
_this.finish( true ); _this.finish( true );
}; };
this.image.onabort = this.image.onerror = function(){ this.image.onabort = this.image.onerror = function(){
_this.errorMsg = "Image load aborted";
_this.finish( false ); _this.finish( false );
}; };
this.jobId = window.setTimeout( function(){ this.jobId = window.setTimeout( function(){
_this.errorMsg = "Image load exceeded timeout";
_this.finish( false ); _this.finish( false );
}, this.timeout); }, this.timeout);
@ -173,7 +176,7 @@ function completeJob( loader, job, callback ) {
loader.jobsInProgress++; loader.jobsInProgress++;
} }
callback( job.image ); callback( job.image, job.errorMsg );
} }
}( OpenSeadragon )); }( OpenSeadragon ));

View File

@ -252,6 +252,9 @@
* @property {Boolean} [autoResize=true] * @property {Boolean} [autoResize=true]
* Set to false to prevent polling for viewer size changes. Useful for providing custom resize behavior. * Set to false to prevent polling for viewer size changes. Useful for providing custom resize behavior.
* *
* @property {Boolean} [preserveImageSizeOnResize=false]
* Set to true to have the image size preserved when the viewer is resized. This requires autoResize=true (default).
*
* @property {Number} [pixelsPerWheelLine=40] * @property {Number} [pixelsPerWheelLine=40]
* For pixel-resolution scrolling devices, the number of pixels equal to one scroll line. * For pixel-resolution scrolling devices, the number of pixels equal to one scroll line.
* *
@ -556,6 +559,10 @@
* If collectionMode is true, specifies how many rows the grid should have. Use 1 to make a line. * If collectionMode is true, specifies how many rows the grid should have. Use 1 to make a line.
* If collectionLayout is 'vertical', specifies how many columns instead. * If collectionLayout is 'vertical', specifies how many columns instead.
* *
* @property {Number} [collectionColumns=0]
* If collectionMode is true, specifies how many columns the grid should have. Use 1 to make a line.
* If collectionLayout is 'vertical', specifies how many rows instead. Ignored if collectionRows is not set to a falsy value.
*
* @property {String} [collectionLayout='horizontal'] * @property {String} [collectionLayout='horizontal']
* If collectionMode is true, specifies whether to arrange vertically or horizontally. * If collectionMode is true, specifies whether to arrange vertically or horizontally.
* *
@ -987,6 +994,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
maxZoomPixelRatio: 1.1, //-> higher allows 'over zoom' into pixels maxZoomPixelRatio: 1.1, //-> higher allows 'over zoom' into pixels
pixelsPerWheelLine: 40, pixelsPerWheelLine: 40,
autoResize: true, autoResize: true,
preserveImageSizeOnResize: false, // requires autoResize=true
//DEFAULT CONTROL SETTINGS //DEFAULT CONTROL SETTINGS
showSequenceControl: true, //SEQUENCE showSequenceControl: true, //SEQUENCE
@ -1035,6 +1043,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
//COLLECTION VISUALIZATION SETTINGS //COLLECTION VISUALIZATION SETTINGS
collectionRows: 3, //or columns depending on layout collectionRows: 3, //or columns depending on layout
collectionColumns: 0, //columns in horizontal layout, rows in vertical layout
collectionLayout: 'horizontal', //vertical collectionLayout: 'horizontal', //vertical
collectionMode: false, collectionMode: false,
collectionTileSize: 800, collectionTileSize: 800,

View File

@ -1011,8 +1011,8 @@ function loadTile( tiledImage, tile, time ) {
tiledImage._imageLoader.addJob({ tiledImage._imageLoader.addJob({
src: tile.url, src: tile.url,
crossOriginPolicy: tiledImage.crossOriginPolicy, crossOriginPolicy: tiledImage.crossOriginPolicy,
callback: function( image ){ callback: function( image, errorMsg ){
onTileLoad( tiledImage, tile, time, image ); onTileLoad( tiledImage, tile, time, image, errorMsg );
}, },
abort: function() { abort: function() {
tile.loading = false; tile.loading = false;
@ -1020,9 +1020,9 @@ function loadTile( tiledImage, tile, time ) {
}); });
} }
function onTileLoad( tiledImage, tile, time, image ) { function onTileLoad( tiledImage, tile, time, image, errorMsg ) {
if ( !image ) { if ( !image ) {
$.console.log( "Tile %s failed to load: %s", tile, tile.url ); $.console.log( "Tile %s failed to load: %s - error: %s", tile, tile.url, errorMsg );
if( !tiledImage.debugMode ){ if( !tiledImage.debugMode ){
tile.loading = false; tile.loading = false;
tile.exists = false; tile.exists = false;

View File

@ -1318,6 +1318,7 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype,
_this.world.arrange({ _this.world.arrange({
immediately: queueItem.options.collectionImmediately, immediately: queueItem.options.collectionImmediately,
rows: _this.collectionRows, rows: _this.collectionRows,
columns: _this.collectionColumns,
layout: _this.collectionLayout, layout: _this.collectionLayout,
tileSize: _this.collectionTileSize, tileSize: _this.collectionTileSize,
tileMargin: _this.collectionTileMargin tileMargin: _this.collectionTileMargin
@ -1710,7 +1711,7 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype,
* is closed which include when changing page. * is closed which include when changing page.
* @method * @method
* @param {Element|String|Object} element - A reference to an element or an id for * @param {Element|String|Object} element - A reference to an element or an id for
* the element which will overlayed. Or an Object specifying the configuration for the overlay * the element which will be overlayed. Or an Object specifying the configuration for the overlay
* @param {OpenSeadragon.Point|OpenSeadragon.Rect} location - The point or * @param {OpenSeadragon.Point|OpenSeadragon.Rect} location - The point or
* rectangle which will be overlayed. * rectangle which will be overlayed.
* @param {OpenSeadragon.OverlayPlacement} placement - The position of the * @param {OpenSeadragon.OverlayPlacement} placement - The position of the
@ -1770,6 +1771,8 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype,
* Updates the overlay represented by the reference to the element or * Updates the overlay represented by the reference to the element or
* element id moving it to the new location, relative to the new placement. * element id moving it to the new location, relative to the new placement.
* @method * @method
* @param {Element|String} element - A reference to an element or an id for
* the element which is overlayed.
* @param {OpenSeadragon.Point|OpenSeadragon.Rect} location - The point or * @param {OpenSeadragon.Point|OpenSeadragon.Rect} location - The point or
* rectangle which will be overlayed. * rectangle which will be overlayed.
* @param {OpenSeadragon.OverlayPlacement} placement - The position of the * @param {OpenSeadragon.OverlayPlacement} placement - The position of the
@ -2824,13 +2827,31 @@ function updateOnce( viewer ) {
return; return;
} }
var containerSize;
if ( viewer.autoResize ) { if ( viewer.autoResize ) {
var containerSize = _getSafeElemSize( viewer.container ); containerSize = _getSafeElemSize( viewer.container );
if ( !containerSize.equals( THIS[ viewer.hash ].prevContainerSize ) ) { if ( !containerSize.equals( THIS[ viewer.hash ].prevContainerSize ) ) {
// maintain image position if ( viewer.preserveImageSizeOnResize ) {
var oldBounds = viewer.viewport.getBounds(); var prevContainerSize = THIS[ viewer.hash ].prevContainerSize;
var oldCenter = viewer.viewport.getCenter(); var bounds = viewer.viewport.getBounds(true);
resizeViewportAndRecenter(viewer, containerSize, oldBounds, oldCenter); var deltaX = (containerSize.x - prevContainerSize.x);
var deltaY = (containerSize.y - prevContainerSize.y);
var viewportDiff = viewer.viewport.deltaPointsFromPixels(new OpenSeadragon.Point(deltaX, deltaY), true);
viewer.viewport.resize(new OpenSeadragon.Point(containerSize.x, containerSize.y), false);
// Keep the center of the image in the center and just adjust the amount of image shown
bounds.width += viewportDiff.x;
bounds.height += viewportDiff.y;
bounds.x -= (viewportDiff.x / 2);
bounds.y -= (viewportDiff.y / 2);
viewer.viewport.fitBoundsWithConstraints(bounds, true);
}
else {
// maintain image position
var oldBounds = viewer.viewport.getBounds();
var oldCenter = viewer.viewport.getCenter();
resizeViewportAndRecenter(viewer, containerSize, oldBounds, oldCenter);
}
THIS[ viewer.hash ].prevContainerSize = containerSize; THIS[ viewer.hash ].prevContainerSize = containerSize;
THIS[ viewer.hash ].forceRedraw = true; THIS[ viewer.hash ].forceRedraw = true;
} }

View File

@ -281,6 +281,7 @@ $.extend( $.World.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.W
* @param {Boolean} [options.immediately=false] - Whether to animate to the new arrangement. * @param {Boolean} [options.immediately=false] - Whether to animate to the new arrangement.
* @param {String} [options.layout] - See collectionLayout in {@link OpenSeadragon.Options}. * @param {String} [options.layout] - See collectionLayout in {@link OpenSeadragon.Options}.
* @param {Number} [options.rows] - See collectionRows in {@link OpenSeadragon.Options}. * @param {Number} [options.rows] - See collectionRows in {@link OpenSeadragon.Options}.
* @param {Number} [options.columns] - See collectionColumns in {@link OpenSeadragon.Options}.
* @param {Number} [options.tileSize] - See collectionTileSize in {@link OpenSeadragon.Options}. * @param {Number} [options.tileSize] - See collectionTileSize in {@link OpenSeadragon.Options}.
* @param {Number} [options.tileMargin] - See collectionTileMargin in {@link OpenSeadragon.Options}. * @param {Number} [options.tileMargin] - See collectionTileMargin in {@link OpenSeadragon.Options}.
* @fires OpenSeadragon.World.event:metrics-change * @fires OpenSeadragon.World.event:metrics-change
@ -290,10 +291,16 @@ $.extend( $.World.prototype, $.EventSource.prototype, /** @lends OpenSeadragon.W
var immediately = options.immediately || false; var immediately = options.immediately || false;
var layout = options.layout || $.DEFAULT_SETTINGS.collectionLayout; var layout = options.layout || $.DEFAULT_SETTINGS.collectionLayout;
var rows = options.rows || $.DEFAULT_SETTINGS.collectionRows; var rows = options.rows || $.DEFAULT_SETTINGS.collectionRows;
var columns = options.columns || $.DEFAULT_SETTINGS.collectionColumns;
var tileSize = options.tileSize || $.DEFAULT_SETTINGS.collectionTileSize; var tileSize = options.tileSize || $.DEFAULT_SETTINGS.collectionTileSize;
var tileMargin = options.tileMargin || $.DEFAULT_SETTINGS.collectionTileMargin; var tileMargin = options.tileMargin || $.DEFAULT_SETTINGS.collectionTileMargin;
var increment = tileSize + tileMargin; var increment = tileSize + tileMargin;
var wrap = Math.ceil(this._items.length / rows); var wrap;
if (!options.rows && columns) {
wrap = columns;
} else {
wrap = Math.ceil(this._items.length / rows);
}
var x = 0; var x = 0;
var y = 0; var y = 0;
var item, box, width, height, position; var item, box, width, height, position;

View File

@ -0,0 +1,96 @@
<!DOCTYPE html>
<html>
<head>
<title>TileSource Swapping</title>
<script type="text/javascript" src="../../build/openseadragon/openseadragon.js"></script>
<script type="text/javascript" src="../lib/jquery-1.9.1.min.js"></script>
<style type="text/css">
html,
body {
width: 100%;
height: 100%;
margin: 0;
}
.viewer-position {
position: absolute;
left: 0;
top: 30px;
right: 0;
bottom: 0;
}
</style>
</head>
<body>
<div>This is a demo of using a single image stand-in and then swapping to a full TileSource on zooming. Click the image to see it in action.</div>
<div id="openseadragon1" class="viewer-position"></div>
<script>
var duomoStandin = {
type: 'legacy-image-pyramid',
levels: [
{
url: 'http://openseadragon.github.io/example-images/duomo/duomo_files/8/0_0.jpg',
width: 218,
height: 160
}
]
};
var duomo = {
Image: {
xmlns: 'http://schemas.microsoft.com/deepzoom/2008',
Url: 'http://openseadragon.github.io/example-images/duomo/duomo_files/',
Format: 'jpg',
Overlap: '2',
TileSize: '256',
Size: {
Width: '13920',
Height: '10200'
}
}
};
var viewer = OpenSeadragon({
id: 'openseadragon1',
prefixUrl: '../../build/openseadragon/images/',
tileSources: duomoStandin,
minZoomImageRatio: 0.1,
defaultZoomLevel: 0.1,
zoomPerClick: 1
});
viewer.addHandler('canvas-click', function(event) {
if (event.quick) {
var standin = viewer.world.getItemAt(0);
var standinBounds = standin.getBounds();
viewer.viewport.fitBounds(standinBounds);
viewer.addTiledImage({
x: standinBounds.x,
y: standinBounds.y,
width: standinBounds.width,
tileSource: duomo,
index: 0, // Add the new image below the stand-in.
success: function(event) {
var fullImage = event.item;
// The changeover will look better if we wait for the first tile to be drawn.
var tileDrawnHandler = function(event) {
if (event.tiledImage === fullImage) {
viewer.removeHandler('tile-drawn', tileDrawnHandler);
viewer.world.removeItem(standin);
}
};
viewer.addHandler('tile-drawn', tileDrawnHandler);
}
});
}
});
</script>
</body>
</html>

View File

@ -213,6 +213,26 @@
checkBounds(new OpenSeadragon.Rect(0, 0, 1, 4), 'one vertical column'); checkBounds(new OpenSeadragon.Rect(0, 0, 1, 4), 'one vertical column');
viewer.world.arrange({
layout: 'horizontal',
rows: false,
columns: 3,
tileSize: 1,
tileMargin: 0.5
});
checkBounds(new OpenSeadragon.Rect(0, 0, 4, 1), 'three horizontal columns (one horizontal row)');
viewer.world.arrange({
layout: 'vertical',
rows: false,
columns: 3,
tileSize: 1,
tileMargin: 0.5
});
checkBounds(new OpenSeadragon.Rect(0, 0, 1, 4), 'three vertical rows (one vertical column)');
start(); start();
}); });