OPENSEADRAGON CHANGELOG ======================= 5.0.0: (in progress...) * BREAKING CHANGE: Dropped support for IE11 (#2300, #2361 @AndrewADev) * DEPRECATION: The OpenSeadragon.createCallback function is no longer recommended (#2367 @akansjain) * The viewer now uses WebGL when available (#2310, #2462 @pearcetm, @Aiosa) * Added webp to supported image formats (#2455 @BeebBenjamin) * Introduced maxTilesPerFrame option to allow loading more tiles simultaneously (#2387 @jetic83) * Now when creating a viewer or navigator, we leave its position style alone if possible (#2393 @VIRAT9358) * Test improvements (#2382 @AndrewADev) * MouseTracker options documentation fixes (#2389 @msalsbery) * Fixed: Sometimes if the viewport was flipped and the user zoomed in far enough, it would flip back (#2364 @SebDelile) * Fixed: Strange behavior if IIIF sizes were not in ascending order (#2416 @lutzhelm) * Fixed: Two-finger tap on a Mac trackpad would zoom you out (#2431 @cavenel) * Fixed: dragToPan gesture could not be disabled when flickEnabled was activated (#2464 @jonasengelmann) 4.1.0: * NEW BEHAVIOR: When `navigatorRotate` is false, while the navigator image doesn't rotate, the red outline now does (#2356 @lcl45) * The viewer no longer emits `canvas-key` events for both keydown and keypress events; canvas-key is now just for keydown, and the new `canvas-key-press` is for keypress (#2270 @hrghauri) * You can now specify a priority when calling addHandler, to control when your event handler gets called relative to others (#2273 @Aiosa) * Added tileRetryMax and tileRetryDelay options, so the viewer can retry loading failed tiles (#2238 @Ughuuu @paaddyy, #2334 @Ughuuu @Titan21) * All of the viewers keyboard handling is now in response to keydown events (it used to be split between keydown and keypress) (#2291 @MohitBansal321) * Added `canvas-focus` and `canvas-blur` events to Viewer (#2301 @MohitBansal321) * You can now more easily add custom buttons to the viewer (#2306 @MohitBansal321) * The fitBounds function now takes zoom constraints into account (#2293 @pearcetm) * The viewer now has an `after-resize` event what happens after the viewport bounds have been updated, to complement the `resize` event which happens before (#2317 @pearcetm) * IIIFTileSource now uses resolution level dimensions provided in the info.json "sizes" field for more accurate tile requests (#2337 @ruven) * Added setAjaxHeaders method to Viewer and TiledImage (#2346 @uschmidt83) * Improved documentation (#2297 @KevinBritten) * Fixed: The `tile-loaded` event's completionCallback could be called more than once in some circumstances (#2282 @Aiosa, @pearcetm) * Fixed: Navigator display rectangle was off if the page had `box-sizing: border-box` (#2276 @ambujsahu81) * Fixed: Code that required identifying functions would fail for async functions (#2273 @Aiosa) * Fixed: Reference strip click detection was not accurate for long reference strips (#2280 @damonsson) * Fixed: Translation problems in some circumstances with cropping polygons enabled (#2316 @pearcetm) * Fixed: The navigator area rectangle would grow larger when you zoom in very far (#2318 @donotloveshampo) * Fixed: JSON with embedded XML was being incorrectly identified as XML (#2328 @craigberry) * Fixed: Touch/pinch rotate was not working properly on some platforms (#2324 @rsimon, @pearcetm) * Fixed: Navigator rotation didn't honor `immediately` parameter (#2333 @robertjcolley) * Fixed: The navigator didn't update for its new size in certain circumstances (#2347 @pearcetm) 4.0.0: * NEW BEHAVIOR: Setting the viewport rotation now animates by default (pass true for the new `immediately` parameter to disable) (#2136 @jonasengelmann) * NEW BEHAVIOR: The auto resize now takes both width and height into account when scaling the contents proportionally to the viewer (#2256 @pearcetm) * DEPRECATION: Don't access the viewport's degrees property directly anymore; instead use setRotation and getRotation (#2136 @jonasengelmann) * New gesture: Double-click and drag to zoom (on by default for touch) (#2225 @HamzaTatheer) * You can now provide a pivot point when rotating the viewport (#2233 #2253 @pearcetm) * Improved the constraints that keep the image in the viewer, specifically when zoomed out a lot (#2160 @joedf, #2246 @pearcetm) * You can now provide an element for the navigator (as an alternative to an ID) (#1303 @cameronbaney, #2166 #2175 @joedf) * Now supporting IIIF "id" and "identifier" in addition to "@id" (#2173 @ahankinson) * We now delegate tile fetching and caching to the TileSource, to allow for custom tile formats (#2148 @Aiosa) * Added support for dynamic URLs from tile sources (#2247 @JohnReagan) * The viewer now emits before-destroy and destroy events (#2239 @pearcetm) * Auto resize detection is now more efficient (#2256 @pearcetm) * Improved documentation (#2211 @shyamkumaryadav) * Fixed: Cropping tiled images with polygons was broken (#2183 @altert) * Fixed: Boundary constraints were wrong when the viewport was rotated (#2249 @pearcetm) * Fixed: IIIF tile sizes would be calculated wrong on rare occasions (#2206 @filak) * Fixed: Disabling buttons only changed their appearance, but they were still clickable (#2187 @pearcetm) * Fixed: ImageTileSource produced an error having to do with getTileHashKey (#2190 @Aiosa) * Fixed: On startup you would get an unnecessary "Viewer.buttons is deprecated" warning (#2201 @joedf, #2219 @jssullivan, #2212 @joedf) 3.1.0: * Added subPixelRoundingForTransparency Viewer option to address seams that can appear in semi-transparent images (#2075 @TanukiSharp) * Added Viewer.isAnimating() (#2075 @TanukiSharp) * Added isFullScreen method to Viewer (#2067 @JachiOnuoha) * Added option to include POST data when loading files via Ajax (#2072 @Aiosa) * Exposed TiledImage's private functions for better maintainability (#2134 @Aiosa) * Tile cache keys are now generated by the tile source, so it's easier to override them as needed (#2138 @Aiosa) * Pinch to zoom now zooms around the center of the pinch, rather than the center of the viewer (#2158 @cavenel) * Added fallback and deprecation warning for Viewer.buttons (which got changed to buttonGroup in 3.0.0) (#2153 @devbyjonah) * Fixed an issue where turning off panVertical or panHorizontal would not affect the panning keyboard combos (#2069 @JachiOnuoha) * Cleaned up console.logs so that errors and warnings use console.error and console.warn as appropriate (#2073 @Abhishek-90) * Improved documentation (#2067 @JachiOnuoha, #2112 @shyamkumaryadav, #2152 @joedf, #2155 @samwilson) * Fixed: Setting useCanvas to false would break the viewer (#2116 @rvv-bouvet) * Allow silencing multi-image warnings on viewport coordinate conversion functions (#2120 @claycoleman) * Fixed: Swiping fast multiple times made contact points in MouseTracker out of sync for touch events (#2121 @ronnymikalsen) * Made MouseTracker more robust in certain scenarios (#2134, #2147 @Aiosa) * Fixed an issue where full page mode wouldn't grow properly if you resized the window (#2100 @TanukiSharp) * Now if you pass an error handler into makeAjaxRequest, it doesn't report errors into the console (#2142 @Aiosa) * Fixed error caused by attaching MouseTracker to the page's document element (#2145 @tdiprima) * Fixed an issue that would sometimes cause problems with freeing up ImageTileSource memory (#2162 @pearcetm) 3.0.0: * BREAKING CHANGE: Dropped support for older browsers (IE < 11) (#1872 #1949 #1951 @msalsbery, #1950 @rmontroy) * BREAKING CHANGE: Removed deprecated OpenSeadragon.getEvent function (#1949 @msalsbery) * DEPRECATION: MouseTracker exitHandler deprecated for name change to leaveHandler for consistency with DOM event names (#1872 @msalsbery) * Now when "simple image" tile sources are removed from the viewer, they free the memory used by the pyramid they create (#1789 @TakumaKira) * Improvements to docs (#1814 @kenanchristian, #1872 @msalsbery, #1996 @tdiprima) * Better cleanup on destruction, to avoid memory leaks (#1832 @JoFrMueller) * Better handle destruction when navigator in custom location (#1884 @woodchuck) * Miscellaneous code cleanup (#1840 @msalsbery) * You can now specify tileSize for the Zoomify Tile Source (#1868 @abrlam) * Better use of IIIF "max" and "full" URL parameters (#1871 @MImranAsghar) * You can now specify the file format of the tiles in the Zoomify tile source (#1889 @abrlam) * Improved browser sniffing - detect EDGE and CHROMEEDGE browsers (#1872 @msalsbery) * Improved DOM event model feature detection (#1872 @msalsbery) * Added support for options parameter on addEvent()/removeEvent (to support passive option) (#1872 @msalsbery) * Added OpenSeadragon.eventIsCanceled() function for defaultPrevented detection on DOM events (#1872 @msalsbery) * MouseTracker: better PointerEvent model detection - removed use of deprecated window.navigator.pointerEnabled (#1872 @msalsbery) * MouseTracker: added overHandler/outHandler options for handling corresponding pointerover/pointerout events (#1872 @msalsbery) * MouseTracker: changed enterHandler/leaveHandler to use DOM pointerenter/pointerleave events instead of simulating using pointerover/pointerout (#1872 @msalsbery) * All internal uses of MouseTracker use pointerenter/pointerleave events instead of pointerover/pointerout events for more consistent pointer tracking (#1872 @msalsbery) * Fixed bug in Button class where two MouseTracker event handlers used an invalid "this" causing issues in some browsers (#1872 @msalsbery) * Added pointerType property to Viewer container-enter, container-exit, canvas-drag, canvas-drag-end, canvas-pinch events (#1872 @msalsbery) * MouseTracker: Fire dragEndHandler event even if release point same as initial contact point (#1872 @msalsbery) * MouseTracker: Pointer capture implemented with capture APIs where available. Only fallback to emulated capture on extremely old browsers (#1872 @msalsbery) * MouseTracker: Added preProcessEventHandler option to allow MouseTracker instances to control bubbling and default behavior of events on their associated element (#1872 @msalsbery) * MouseTracker: Improved handling of canceled events (#1872 @msalsbery) * MouseTracker: Improved releasing of tracked pointers on destroy()/stopTracking() (#1872 @msalsbery) * Updated Viewer, Button, Drawer, Navigator, ReferenceStrip DOM for proper DOM event handling (#1872 @msalsbery) * Added OpenSeadragon.setElementPointerEventsNone() for setting pointer-events:'none' on DOM elements (#1872 @msalsbery) * MouseTracker: added contextMenuHandler option for handling contextmenu events (#1872 @msalsbery) * Viewer: added a canvas-contextmenu event (#1872 @msalsbery) * Fixed simulated drag events in navigator tests (#1949 @msalsbery) * Added preventDefault option to MouseTracker.contextMenuHandler and Viewer 'canvas-contextmenu' event args (#1951 @msalsbery) * MouseTracker: Added preProcessEventHandler for keydown, keyup, keypress, focus, blur Events (#1951 @msalsbery) * Fixed preventDefaultAction functionality in viewer events (#1953 @msalsbery) * Added setImageFormatsSupported function (#1954 @pandaxtc) * Added dragToPan to the GestureSettings class, implemented in Viewer (#1956 @msalsbery) * Added preventDefault option to MouseTracker handlers: scrollHandler, keyDownHandler, keyUpHandler, keyHandler (#1957 @msalsbery) * Fixed test "Events: Viewer: preventDefaultAction in dblClickHandler". Fixes #1372 (#1960 @msalsbery) * ReferenceStrip: Fixed issue where its element was being removed from its parent element twice on destroy, causing an exception (#1958 @msalsbery) * ReferenceStrip: Made its element focusable for keyboard navigation (#1958 @msalsbery) * You can now flip individual images (not just the whole viewport) (#1903 @ali1234) * Accessibility: we now take the browser's zoom into account when choosing what detail level to draw (#1937 @ronnymikalsen) * Fixed a bug causing overlays to disappear in Sequence Mode (#1865 @gunmiosb) * Fixed a bug where the ajaxHeaders provided per-image were not being used for image requests (#1968 @maxshuty) * MouseTracker: Added workaround for WebKit Pointer Event Implicit Capture Bug (#1972 @msalsbery) * Removed test for move-leave (fly-over, no enter event)...not a valid, handleable event state, no longer supported (#1972 @msalsbery) * Added OpenSeadragon.setElementPointerEvents() for setting pointer-events to other values besides 'none' on DOM elements (#1972 @msalsbery) * Now ensuring the page body is display:block when in fullscreen (#1995 @thewilkybarkid) * Added a static method in OpenSeadragon to get an existing viewer (#2000 @HerCerM) * Now ensuring that the new item is already in the navigator when the "add-item" event fires (#2005 @RammasEchor) * Added keys to change image in sequence mode (j: previous, k: next) (#2007 @RammasEchor) * Fixed a bug where the navigator wouldn't pick up opacity/composite changes made while it is loading (#2018 @crydell) * Explicitly set passive:false for wheel event handlers to suppress console warnings. Fixes #1669 (#2043 @msalsbery) * Viewer's canvas-click events now include an originalTarget property so you can know which element received the click (#2037 @iangilman) * Added method for getting the size of an image in window coordinates (#2049 @superbland) * Added a setMaxLevel function to TileSource so you can change its maxLevel if needed (#2059, #2066 @kim-sanghoon) 2.4.2: * Add support for IIIF Image API 3.0 beta (#1764) * You can now crop an image with arbitrary polygons (#1772) * Improved support for using the Reference Strip in an OpenSeadragon Viewer inside a Web Component (#1676) * Added setWidth and setHeight methods to Navigator (#1686) * Improvements to docs (#1696, #1698, #1716, #1719) * Now passing Viewer AJAX configs down to ReferenceStrip thumbnails (#1701) * The ReferenceStrip now honors the useCanvas option from the Viewer (#1742) * Fixed: Navigator was still resizing after you explicitly set its width and height with navigatorWidth and navigatorHeight (#1686) * Fixed issues with touches on iOS 13 and iPad (#1754, #1756) * No longer throwing an exception on pages that have malformed URL parameters (#1758) * Fixed an issue with flipping the viewport on high pixel density screens (#1779) * Removed use of deprecated imageSmoothingEnabled prefixes (#1740) 2.4.1: * You can now turn off the default canvas image smoothing, if you want sharp pixels when zoomed in past 100% (#1507, #1593, #1595, #1647, #1648) * Fixed problem with navigator highlight rectangle when returning from full screen with a custom navigator location (#1515) * Added option to set rotation increment for nav buttons and keyboard (#1524) * Fixed issue with flipping and opacity with multi-image (#1549) * Removed vestigial button group label element that was causing issues for accessibility tools (#1560) * Fixed a bug causing Viewer.areControlsEnabled to throw an exception (#1562) * Added tileFormat option to IIIFTileSource so you can specify the tile format (#1625) * Now using canonical URIs more consistently in IIIF to make caching and processing time easier on the server side (#1625) * Added support for IIIF's new preferredFormats property (#1656) 2.4.0: * BREAKING CHANGE: Viewer's canvas-double-click event is now fired before it initiates the zoom (#1288) * You can now flip the viewport to get a mirror image of the original (#1441) * You can now prevent canvas-double-click events from zooming on a per-event basis (#1288) * Fixed: Opacity 0 images were causing unnecessary redraws (#1319) * The "page" event is now fired after the page index has been updated (#1330) * Added option pixelsPerArrowPress that sets the speed of arrow keys (#1364) * Improved IIIF options.maxLevel calculation (#1401) * Added canvas-key events, along with the ability to cancel key actions (#1414) * Added optional zoom in the middle of the image instead of pointer position (#1423) * Now supporting square edge tiles that are padded rather than cropped (#1426) * Fixed an issue causing the simple image tileSource to sometimes show duplicate copies (#1370) * Fixed an issue causing seams to appear in semi-transparent PNG tiled images (#1470) * Added visual customization options for the navigator (#1480) * You can now prevent canvas-drag events on the navigator (#1484) * You can now prevent canvas-click events on the navigator (#1416) * The navigator can now be restricted to just horizontal or just vertical panning (#1416) * Fixed DziTileSource so it doesn't load levels above maxLevel or below minLevel, if set (#1492) 2.3.1: * Debug mode now uses different colors for different tiled images (customizable via debugGridColor) (#1271) * Fixed a problem with preventDefaultAction for the canvas-drag event (#1278) * Fixed an issue causing double images with certain aspect ratios (#1280) * Fixed: placeholderFillStyle had no effect (#1286) * Fixed seams that appear in wrap mode on Safari and Firefox (#1305) 2.3.0: * BREAKING CHANGE: Tile.distance has been removed (#1027) * BREAKING CHANGE: Viewer's canvas-click event is now fired before it initiates the zoom (#1148) * BREAKING CHANGE: Viewer's canvas-drag event is now fired before it pans (#1149) * Added Zoomify tile source (#863) * You can now set the rotation of individual tiled images (#1006) * Added getFullyLoaded method and "fully-loaded-change" event to TiledImage to know when tiles are fully loaded (#837, #1073) * You can now preload images without drawing them to the screen (#1071) * Added support for commonjs (#984) * Added an option to addTiledImage to change the crossOriginPolicy (#981) * You can now load tiles via AJAX and custom AJAX request headers (#1055) * Added ability to provide thumbnail URLs for reference strip (#1241) * Improved panning constraints for constrainDuringPan (#1133 and #1245) * You can now prevent canvas-click events from zooming on a per-event basis (#1148) * You can now prevent canvas-drag events from panning on a per-event basis (#1149) * The navigationControlAnchor option now works for custom toolbar as well (#1004) * LegacyTileSource now allows any image URLs regardless of type (#1056) * Enabled configuration of ImageLoader timeout (#1192) * Viewer.open() now supports an initialPage argument for sequenceMode (#1196) * New events for opacity and compositeOperation changes (#1203) * Added support for setting debug mode after the Viewer object has been constructed (#1224) * Added functions for dynamically adding and removing the reference strip in sequence mode (#1213) * Better calculation for TileCache release cutoff (#1214) * The navigator now picks up opacity and compositeOperation changes (#1203) * Improved calculation for determining which level to load first (#1198) * Added fix for supporting weird filenames that look like JSONs (#1189) * Improved DziTileSource guessing of tilesUrl (#1074) * The Viewer's tileSources option is now smarter about detecting JSON vs XML vs URL (#999) * Better compression for our UI images (#1134) * Optimization: Use the squared distance when comparing tiles (#1027) * Now clamping pixel ratio density to a minimum of 1, fixing display issues on low density devices (#1200) * More forgiving check for DZI schema (#1249) * ImageTileSource now works in IE8 (#1041) * Fixed CORS bug in IE 10 (#967) * Fixed issue with tiles not appearing with wrapHorizontal/wrapVertical if you pan too far away from the origin (#987, #1066) * Fixed: Initial tile load wasn't happening in parallel (#1014) * Fixed problem with "sparse image" DZI files (#995) * Fix IndexSizeError on IE and Edge that occurred under certain circumstances (e.g. multi-image with transparency) (#1035) * Fixed error in IE8 when zooming in (due to edge smoothing) (#1064) * Fixed issue with OpenSeadragon.version in the minified JavaScript (#1099) * Fixed smoothTileEdgesMinZoom performance degradation on single-tile images (#1101) * Fixed issue with tiles not appearing after rotation (#1102) * Fixed: The navigator wasn't respecting the constrainDuringPan setting (#1104) * Fixed an issue causing overlays to be mis-positioned in some circumstances (#1119) * Fixed: ImageTileSource would sometimes produce a double image (#1123) * Fixed: console.debug caused exceptions on IE10 (#1129) * Fixed: the reference strip would leak memory when opening new sets of images (#1175) * Fixed: zoomTo/zoomBy ignore refPoint if immediately is true (#1184) * Fixed: IIPImageServer didn't work with the latest OSD release (#1199) * Fixed: setItemIndex method not working with navigator inside "open" event (#1201) * Fixed: The reference strip didn't show the initial page if it wasn't the first page (#1208) * Fixed: Sometimes the image would stick to the mouse when right-clicking and left-clicking simultaneously (#1223) * Fixed issue with transparent images sometimes disappearing on Safari (#1222) * Fixed: One image failing to load could cause the others to never load (#1229) * Fixed: Mouse up outside map will cause "canvas-drag" event to stick (#1133) * Fixed more issues with tracking multiple pointers (#1244) 2.2.1: * Fixed problems with zoom/pan constraints with certain extreme settings (#965) * Fixed an issue causing the browser to crash on iOS (#966) 2.2.0: * BREAKING CHANGE: Viewport.homeBounds, Viewport.contentSize, Viewport.contentAspectX and Viewport.contentAspectY have been removed. (#846) * BREAKING CHANGE: The Overlay.getBounds method now takes the viewport as parameter. (#896) * DEPRECATION: Overlay.scales, Overlay.bounds and Overlay.position have been deprecated. (#896) * Overlay.width !== null should be used to test whether the overlay scales horizontally * Overlay.height !== null should be used to test whether the overlay scales vertically * The Overlay.getBounds method should be used to get the bounds of the overlay in viewport coordinates * Overlay.location replaces Overlay.position * DEPRECATION: Viewport.setHomeBounds has been deprecated (#846) * DEPRECATION: the Viewport constructor is now ignoring the contentSize option (#846) * Tile edge smoothing at high zoom (#764) * Fixed issue with reference strip popping up virtual keyboard on mobile devices (#779) * Now supporting rotation in the Rect class (#782) * Drag outside of iframe now works better, as long as both pages are on the same domain (#790) * Coordinate conversion now takes rotation into account (#796) * Support tile-less IIIF as per LegacyTileSource (#816) * You can now give an empty string to the tabIndex option (#805) * Fixed issue with rotation and clicking in the navigator (#807) * Broadened the check for mime type in LegacyTileSource URLs to allow query strings (#819) * Added globalCompositeOperation option for tiledImage, to allow for different transfer modes (#814) * Added Viewer.addSimpleImage method for easily adding non-tiled images (#827) * DziTileSource now works properly with DZI files that have no extension (#835) * Fixed content clipping with rotation (#463, #567 and #833) * Fixed navigator not being rotated when viewport rotation is set in constructor (#840) * Fixed: Viewer.setMouseNavEnabled wasn't affecting all of the viewer's trackers (#845) * Fixed: with scrollToZoom disabled, the viewer caused page scrolling to slow down (#858) * Added Viewer.getOverlayById and Overlay.getBounds functions (#853) * Tiled images with 0 opacity no longer load their tiles or do drawing calculations (#859) * Fixed issue with edge smoothing with PNG tiles at high zoom (#860) * Fixed: Images with transparency were clearing images layered below them (#861) * Fixed issue causing HTML pages to jump unwantedly to the reference strip upon loading (#872) * Added addOnceHandler method to EventSource (#887) * Added TiledImage.fitBounds method (#888) * Overlays can now be scaled in a single dimension by providing a point location and either width or height (#896) * Added full rotation support to overlays (#729, #193) * Viewport.goHome() now takes clipping into account (#910) * Improved zoom to point (#923) * Optimized sketch canvas clearing and blending for images with opacity or transfer modes (#927) * Now taking rotation into account in viewport getBounds and fitBounds methods (#934) * Added option to disable navigator auto-fade (#935) * Fixed issue with maintaining viewport position with full screen (#940) * Fixed an issue with simultaneous touch events (#930) * Avoid loading clipped out tiles (#939) * Improved precision for subtle moves with fitBounds (#939) * Fixed an issue in viewer.addTiledImage with replace:true when viewer has navigator (#948) 2.1.0: * BREAKING CHANGE: the tile does not hold a reference to its image anymore. Only the tile cache keep a reference to images. * BREAKING CHANGE: TileSource.tileSize no longer exists; use TileSource.getTileWidth() and TileSource.getTileHeight() instead. * DEPRECATION: let ImageRecord.getRenderedContext create the rendered context instead of using ImageRecord.setRenderedContext * DEPRECATION: TileSource.getTileSize() is deprecated. Use TileSource.getTileWidth() and TileSource.getTileHeight() instead. * Changed resize behaviour to prevent "snapping" to world bounds when constraints allow more space (#711) * Added support for non-square tiles (#673) * TileSource.Options objects can now optionally provide tileWidth/tileHeight instead of tileSize for non-square tile support. * IIIFTileSources will now respect non-square tiles if available. * Added new tile source for simple images: ImageTileSource (#760) * Optimized adding large numbers of items to the world with collectionMode (#735) * Registers as an AMD module where possible (#719) * Added "tile-loaded" event on the viewer allowing to modify a tile before it is marked ready to be drawn (#659) * Added "tile-unloaded" event on the viewer allowing to free up memory one has allocated on a tile (#659) * Added 'tile-load-failed' event (#725) * Added additional coordinates conversion methods to TiledImage (#662) * Added `preserveImageSizeOnResize` option (#666) * Added collectionColumns as a configuration parameter (#680) * Added option in addTiledImage to replace tiledImage at index (#706) * Added autoRefigureSizes flag to World for optimizing mass rearrangements (#715) * You can now change viewport margins after the viewer is created (#721) * Added a patch to help slow down the scroll devices that fire too fast (#754) * Fixed flickering tiles with useCanvas=false when no cache is used (#661) * 'display: none' no longer gets reset on overlays during draw (#668) * Better error reporting for tile load failures (#679) * Added XDomainRequest as fallback method for ajax requests if XMLHttpRequest fails (for IE < 10) (#693) * Now avoiding using eval when JSON.parse is available (#696) * Rotation now works properly on retina display (#708) * Fixed issue with tiledImages loading tiles at every level instead of just the best level (#728) * Fixed placeholderFillStyle flicker (#727) * Fix for Chrome (v45) issue that key is sometimes undefined outside of the for-in loop (#730) * World.removeAll now cancels any in-flight image loads; same for Viewer.open and Viewer.close (#734) * Fixed overlays position (use rounding instead of flooring and ceiling) (#741) * Fixed issue with including overlays in your tileSources array when creating/opening in the viewer (#745) * Fixed issue in iOS devices that would cause all touch events to fail after a Multitasking Gesture was triggered (#744) * Fixed an issue with TiledImage setPosition/setWidth/setHeight not reliably triggering a redraw (#720) * Fixed zooming in with plus key on a Swedish keyboard (#763) 2.0.0: * True multi-image mode (#450) * BREAKING CHANGE: Passing an array for the tileSources option is no longer enough to trigger sequence mode; you have to set the sequenceMode option to true as well * BREAKING CHANGE: Navigator no longer sends an open event when its viewer opens * BREAKING CHANGE: Viewer.drawers and Viewer.drawersContainer no longer exist * BREAKING CHANGE: A Viewer's Drawer and Viewport are now made once per Viewer and reused for every image that Viewer opens (rather than being recreated for every open); this means if you change Viewer options between opens, the behavior is different now. * DEPRECATION: use Viewer.addTiledImage instead of Viewer.addLayer * addTiledImage supports positioning config properties * DEPRECATION: use World.getItemAt instead of Viewer.getLayerAtLevel * DEPRECATION: use World.getIndexOfItem instead of Viewer.getLevelOfLayer * DEPRECATION: use World.getItemCount instead of Viewer.getLayersCount * DEPRECATION: use World.setItemIndex instead of Viewer.setLayerLevel * DEPRECATION: use World.removeItem instead of Viewer.removeLayer * DEPRECATION: use World.needsDraw instead of Drawer.needsUpdate * DEPRECATION: use TileCache.numTilesLoaded instead of Drawer.numTilesLoaded * DEPRECATION: use World.resetItems instead of Drawer.reset * DEPRECATION: use Drawer.clear and World.draw instead of Drawer.update * DEPRECATION: the layersAspectRatioEpsilon option is no longer necessary * DEPRECATION: Viewer's add-layer event is now World's add-item event * DEPRECATION: Viewer's layer-level-changed event is now World's item-index-change event * DEPRECATION: Viewer's remove-layer event is now World's remove-item event * DEPRECATION: Viewer's add-layer-failed event is now add-item-failed * DEPRECATION: TileSourceCollection has been retired in favor of World * DEPRECATION: collectionMode no longer draws outlines or reflections for items * Drawer has been split into three classes: * TiledImage, tile management and positioning for a single tiled image * TileCache, tile caching for all images * Drawer, tile drawing for all images * New class: World, keeps track of multiple images in the scene * Viewer now has world and tileCache properties * Rect and Point now have clone functions * New Viewport method for managing homeBounds as well as constraints: setHomeBounds * Viewport.open supports positioning config properties * For multi-image open, drawing isn't started until all tileSources have been opened * You can specify a clip area for each image (only works on browsers that support the HTML5 canvas) (#594) * Added placeholderFillStyle so image rectangles can be drawn even before their tiles load (#635) * Ability to set opacity on individual TiledImages (#644) * Margins option to push the home region in from the edges of the Viewer (#505) * Rect and Point toString() functions are now consistent: rounding values to nearest hundredth * Overlays appear in the DOM immediately on open or addOverlay (#507) * imageLoaderLimit now works (#544) * Turning off scrollToZoom in gestureSettings now allows scroll events to propagate * You can now set a minZoomLevel that's greater than the home zoom level * Added union() to OpenSeadragon.Rect * Fixed an error in fitBounds if the new and old bounds were extremely close in size * Added ajaxWithCredentials option (#543) * Added viewport-change event for after the viewport changes but before it's drawn * A spring's current value is now updated immediately on reset (#524) * Fixed an error in fitBounds that occurred sometimes with immediately = true * Added support for HDPI (retina) displays (#583) * Corrected IIIF tile source to use canonical syntax (#586) * Fixed x/y typo that caused horizontal reference strip to be rendered only relative to height (#595) * Fixed Firefox 35 not able to open local files (#588) * Fixed an issue with zero size viewers in IE8 (#609) * Fixed: Cross Origin policy not working (#613) * Optimized tile loading by clearing the queue on a re-draw when imageLoaderLimit is set (#616) * Now animating zoom spring exponentially (#631) * Added http://editorconfig.org/ config file (#637) * Keyboard pan speed is now the same regardless of zoom level (#645) 1.2.1: * Added preserveOverlays option (#561) * Fixed: DZI tilesource was broken on IE8/IE9 (#563) * Exposed secondary pointer button (middle, right, etc.) events from MouseTracker and through viewer (#479) * MouseTracker - Improved IE 8 compatibility (#562) * MouseTracker - Improved IE 9+ compatibility (#564) * MouseTracker - Simulated touchenter/touchleave events now bubble to parent element MouseTrackers (#566) * MouseTracker - Improved multitouch support in enter/exit event handlers (#566) * MouseTracker - orphaned tracked touch pointers removed (fix for #539) * MouseTracker - removed touchenter/touchleave event support since the events don't exist on any known platform and have been removed from the W3C specification (#566) * Removed Viewer onContainerPress/onContainerRelease handlers (and the associated 'container-release' event ) that were never fired due to the canvas (child) element capturing the DOM events (#566) * Added 'canvas-enter', 'canvas-exit', and 'canvas-press' events to Viewer (#566) * ButtonGroup - removed obsolete MouseTracker event handlers (#566) * MouseTracker - added keydown and keyup handlers (#568) * Modifier keys ignored in keyboard navigation handlers (#503) * Requesting keyboard focus when viewer is clicked (#537) * Arrow key navigation fixed across platforms (#565) * Removed textarea element from viewer DOM. Viewer.canvas now handles keyboard navigation (#569) * Removed 'position' property from MouseTracker keyDownHandler/keyUpHandler/keyHandler functions (#573) * Fixed pointer event model detection for IE 10 and IE 11 (#571) * Added setMouseNavEnabled() support to Navigator (#572) * MouseTracker now defaults to tracking on (#558) * Removed Viewer focusHandler/onCanvasFocus (#577) * Added tabIndex option to viewer (#577) 1.2.0: * New combined IIIF TileSource for 1.0 through 2.0 (#441) * BREAKING CHANGE: Removed IIIF1_1TileSource (now that IIIFTileSource supports all versions) * Allowed TileSources to have dynamic tileSize via source.getTileSize(level) (#441) * DEPRECATION: Use .getTileSize(level) instead of .tileSize * Fix for IIPServer-style urls when using DZI (#413) * Fix memory leak while destroying the viewer (#421) * Added fitBoundsWithConstraints() to the viewport (#423) * Fixed MouseTracker cross-browser issues with tracking pointers over and out of the tracked element (pull request #448, fix for #152, #404, #420, and #427) * Fixed incorrect flick direction after image is rotated (#452) * Debug mode now works with rotate images (#453) * Now supporting dzi xml with namespaces (#462) * 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) * Better handling of mid-update image loaded callbacks (#409) * Tracked pointers are now cleaned up when Viewer.setMouseNavEnabled(false) is called (#518) * Added explicit pointer capture for touch event model touchstart events (#552) 1.1.1: * Fixed issue with dragging the navigator highlight on Webkit browsers (#395) * Improved Viewer Options Support in Gesture Handling (#399) 1.1.0: * BREAKING CHANGE: the openseadragon-canvas element now has two child divs. This means: (#298) * The drawer element is no longer accessible via viewer.canvas.firstChild but via viewer.drawersContainer.firstChild or viewer.drawer.canvas. * The overlays elements are no longer accessible via viewer.canvas.childNodes but via viewer.overlaysContainer.childNodes or viewer.currentOverlays[i].element. * BREAKING CHANGE: Pseudo full screen mode on IE<11 using activex has been dropped. OpenSeadragon will run in full page if full screen mode is requested. * BREAKING CHANGE: MouseTracker touch pinch gestures are no longer converted to scroll events. MouseTracker.pinchHandler should be used instead. (#369) * DEPRECATION: overlay functions have been moved from Drawer to Viewer (#331) * DEPRECATION: OpenSeadragon.cancelFullScreen has been renamed OpenSeadragon.exitFullScreen (#358) * DEPRECATION: The 'isTouchEvent' property passed in MouseTracker events is deprecated and has been replaced with 'pointerType', which is a String value "mouse", "touch", "pen", etc. to support multiple simultaneous pointing devices (#369) * DEPRECATION: The 'buttonDownAny' property passed in MouseTracker enter and exit events (enterHandler/exitHandler) is deprecated and has been replaced with 'buttons', which indicates the button(s) currently pressed (#369) * DEPRECATION: The 'buttonDownAny' property passed in Viewer's 'container-enter' and 'container-exit' events is deprecated and has been replaced with 'buttons', which indicates the button(s) currently pressed (#369) * Added layers support. Multiple images can now been displayed on top of each other with transparency via the Viewer.addLayer method (#298) * Improved overlay functions (#331) * Fixed: Nav button highlight states aren't quite aligned on Firefox (#303) * Added ControlAnchor options for default controls (#304) * Enabled basic cross-domain tile loading without tainting canvas (works in Chrome and Firefox) (#308) * Added crossOriginPolicy drawer configuration to enable or disable CORS image requests (#364) * Disabled CORS by default (#377) * Added a ControlAnchor.ABSOLUTE enumeration. Enables absolute positioning of control elements in the viewer (#310) * Added a 'navigator-scroll' event to Navigator. Fired when mousewheel events occur in the navigator (#310) * Added a navigatorMaintainSizeRatio option. If set to true, the navigator minimap resizes when the viewer element is resized (#310) * Added 'ABSOLUTE' as a navigatorPosition option, along with corresponding navigatorTop, navigatorLeft options. Allows the navigator minimap to be placed anywhere in the viewer (#310) * Enhanced the navigatorTop, navigatorLeft, navigatorHeight, and navigatorWidth options to allow a number for pixel units or a string for other element units (%, em, etc.) (#310) * Additional enhancements for IIIF support (#315) * Fixed: Setting degrees in Viewer constructor has no effect (#336) * Added pre-draw event for tiles to allow applications to alter the image (#348) * Added optional Rotate Left/Right buttons to standard controls (#341) * Added optimization for large numbers of overlays: `checkResize = false` option for OpenSeadragon.Overlay (#365) * Updated full screen API, adding support for Opera and IE11 and allowing keyboard input in Chrome (#358) * Various fixes to bring OpenSeadragon into W3C compliance (#375) * Added separate flags for turning off each of the nav buttons (#376) * Added support for query parameters in DZI tileSource URL (#378) * Enhanced MouseTracker for multi-touch (#369) * Added support for tracking multiple touch-points on multiple/simultaneous pointing devices * Added support for the W3C Pointer Events event model. Enables touch/multi-touch on IE10+ * Added a dragEndHandler event callback, called when a drag gesture ends * Added a pinchHandler event callback, called as a pinch gesture (2 touch points) is occurring * Added real-time velocity (speed and direction) tracking to drag operations. 'speed' and 'direction' values are passed in the dragHandler and dragEndHandler event data * Enhanced Viewer for multi-touch (#369) * Added pinch zoom with the new MouseTracker pinchHandler. The 'pan' and 'zoom' Viewer events can be used to detect changes resulting in pinch gestures * Added a "canvas-pinch" event fired by the pinch event handler * Added flick gesture with the new MouseTracker dragEndHandler * Added a "canvas-drag-end" event fired by the drag-end event handler * Added a GestureSettings class for per-device gesture options. Currently has settings to enable/disable zoom-on-scroll, zoom-on-pinch, zoom-on-click, and flick gesture settings. * Added GestureSettings objects for mouse, touch, and pen devices to the Viewer options giving users the ability to customize gesture handling in the viewer * Added velocity (speed and direction) properties to the "canvas-drag" event * Added double-click gesture detection to MouseTracker with corresponding dblClickHandler event callback (#392) * Added zoom on double-click feature to Viewer, with corresponding dblClickToZoom option added to the GestureSettings class (#392) * Made it possible to run OpenSeadragon from local filesystem on some browsers (#379) 1.0.0: NOTE: This version has a number of breaking changes to the API, mostly in event handling. See below. * BREAKING CHANGE: All EventSource and MouseTracker event handler method signatures changed to 'handlerMethod(event)' where event == { eventSource, userData, ... } (#251) (Also fixes #23, #224, #239) * The new eventSource property in the event object replaces the old eventSource parameter that was passed to handler methods. * Where the event object duplicated the eventSource value, those properties have been removed. This affects the following events: * All Button events - 'button' property removed * All Viewer (Viewer, Drawer, Viewport) events - 'viewer' property removed * BREAKING CHANGE: Renamed EventHandler to EventSource (#225) * BREAKING CHANGE: Event names changed for consistency: changed to lower case, compound names hyphenated, and "on" prefixes removed (#226): * Viewer "animationstart" changed to "animation-start" * Viewer "animationfinish" changed to "animation-finish" * Button "onPress" changed to "press" * Button "onRelease" changed to "release" * Button "onClick" changed to "click" * Button "onEnter" changed to "enter" * Button "onExit" changed to "exit" * Button "onFocus" changed to "focus" * Button "onBlur" changed to "blur" * BREAKING CHANGE: Numerous improvements to fullPage/fullScreen (#256): * Retains zoom/pan position better when switching into and out of fullPage. * Retains scroll position when switching back out. * More resilient to styling variations on the page. * setFullPage no longer automatically engages fullScreen; there's now a separate setFullScreen. * 'fullpage' event is now 'full-page'. * The `fullpage` property of the 'full-page' event is now `fullPage`. * There is now a 'full-screen' event with a `fullScreen` property (true if it has gone to full screen). * There are now 'pre-full-page' and 'pre-full-screen' events that include a `preventDefaultAction` property you can set in your handler to cancel. They also have `fullPage` and `fullScreen` properties respectively, to indicate if they are going into or out of the mode. * BREAKING CHANGE: Removed the 'onPageChange' callback from the viewer options. Viewer.goToPage() now raises the 'page' event only (#285) * Major documentation improvements (#281) * MouseTracker now passes the original event objects to its handler methods (#23) * MouseTracker now supports an optional 'moveHandler' method for tracking mousemove events (#215) * Added stopHandler to MouseTracker. (#262) * Fixed: Element-relative mouse coordinates now correct if the element and/or page is scrolled (using new OpenSeadragon.getElementOffset() method) (#131) * Fixed: Pinch zoom event issue, regressive issue from previous event system changes (#244) * Added IIIF Image API 1.1 Tile Source (#230) * IIIF 1.0 now uses pixel based syntax (#249) * Fixed: Touch event issue where no canvas-click events were being raised (#240) * Check that zoom reference point is valid before using it in zoomTo and zoomBy (#247) * Added a number of easier coordinate conversion methods to viewport (#243) * Added the ability to create a viewer and start at a specified page (#252) * Fixed image resolve issue with collection mode (#255) * DOM events are now passed through as 'event.originalEvent' in viewer and button events where appropriate. (#257) Affects the following events: * Viewer: 'canvas-release', 'canvas-click', 'canvas-drag', 'canvas-scroll', 'container-enter', 'container-exit', 'container-release' * Button: 'enter', 'exit', 'press', 'release', 'focus', 'blur', 'click' * Fixed: IE 10 not reading DZI file correctly in certain circumstances (#218) * Added support for the 'wheel' DOM mousewheel event (#261) * Fix for non-canvas tile rendering at large size (#264) * Drawer now uses an HTML5 canvas element whenever it's available. Can be overridden with the Viewer.useCanvas option (#191) * Added a boolean preventDefaultAction property (default false) to the event object passed to MouseTracker handler methods. (#270) Implemented in the following MouseTracker subscribers: * Viewer.keyboardCommandArea.innerTracker.focusHandler: preventDefaultAction == true prevents scrolling viewer into view * Viewer.keyboardCommandArea.innerTracker.keyHandler: preventDefaultAction == true prevents viewer keyboard navigation * Viewer.innerTracker.clickHandler: preventDefaultAction == true prevents viewer zoom on click * Viewer.innerTracker.dragHandler: preventDefaultAction == true prevents viewer panning with mouse/touch * Viewer.innerTracker.scrollHandler: preventDefaultAction == true prevents viewer zooming on mousewheel/pinch * Fixed: IE8 error with custom buttons - "Object doesn't support this action" (#279) * Support IIIF servers that don't report tile dimensions (#286) * Added an autoResize option. Default is true. When set to false, the viewer takes no action when its container element is resized. (#291) * Added a static 'version' property to OpenSeadragon. Useful for plugins that require specific OpenSeadragon versions. (#292) 0.9.131: * Fixed: canvas-click event shouldn't fire as you drag (#198) * Fixed: LegacyTileSource doesn't fail gracefully when no supported file formats are found (#202) * Added an optional userData argument to EventHandler.addHandler() which is passed unchanged to the handler method (#203) * Fixed AJAX error reporting on IE8 (#208) * Added viewportToImageRectangle method, and updated imageToViewportRectangle, imageToViewportCoordinates, and viewportToImageCoordinates to be more flexible with params (#212) * Fixed: Viewer is not responsive (css) after returning from full screen (#222) 0.9.130: * Added partial support for rotation (just 90 degree increments for now). (#185) * Hiding and restoring broke the viewer; fixed (#177) * You can now provide an onDraw function for overlays to do custom overlay manipulation (#160) * Added a destroy function on the viewer to clean up and remove elements (#179) * Fixed: navigatorPosition option corrected. (#163) * OpenSeadragon.now() returned undefined the first time; fixed * onTouchEnd did not call the correct mouse up handler; fixed (#159) * Touch events no longer capture mouse (was causing issues on devices that support both) (#168) * Clicking on a button control no longer refreshes page (#184) * Drawer now works when the page is rtl (#187) * Fixed a situation that could throw errors in touch handling (#188) 0.9.129: * Fixed: navigator image not updating when base zoom image is changed (#147) * Fixed tile rendering issue at lower zoom levels with the IIIF TileSource (#55) * On IE, ajax errors would cause an exception to be thrown; fixed (#144) * Faster and more consistent millisecond getter (#138) * Fixed an error when using navPrevNextWrap on single images (#135) * Various fixes to our timer handling (#133) * Now generating source map for openseadragon.min.js (#51) * Fix for calculating overlay width / height (#142) * JSHint tidying (#136) * Improved Ajax method (#149) * Overhauled AJAX error reporting (#151) 0.9.128: * The navigator is now off by default (#102) * Reverted minPixelRatio to 0.5 for better quality (#116) * Sometimes tiles wouldn't resolve if you used the blendTime option; fixed. (#95) * You can now choose to have previous and next buttons wrap using the config.navPrevNextWrap. (#114) * You can now specify an ID for a div to hold the navigator (#46) * You can now click in the navigator to go to a new location (#46) * Keyboard handling is now done in the viewer rather than navigator (#46) * Additional navigator fixes (#46) * Drawer events now fire properly (#94) * Fixed an error in EventHandler.removeHandler() (#48) * Better requestAnimationFrame detection on older Firefox (#103) * More efficient navigator loading (#115) * Simplified element opacity setting implementation (#123) 0.9.127: * Fixed a problem with getString when the string property is a sub-property. (#64) * Fixed: Tooltips for Navigation Controls not displaying (#63) * Cleaned up some diagnostic code that was broken. * Added fullpage class to viewer element when in fullpage mode (#61) * Reverted to original New BSD license; cleaned up license declarations (#89) 0.9.126: * DZI JSONp was broken; fixed. 0.9.125: * Fully deprecated OpenSeadragon.createFromDZI, safely deprecated Viewer.openTileSource and Viewer.openDZI to use Viewer.open internally. (#53 & #54). * Full page bug fix for when viewer is child of document body (#43). * Overlays for DZI bug fix (#45). * DziTileSource: avoid changing relative paths (#56). * Fix typo in preserveViewport handling (#77). * Fix updateMulti timer leak after multiple Viewer.open() calls (#76). * Minor documentation fixes. 0.9.124: * Performance enhancements. 0.9.123: * Real fullscreen support. 0.9.122: * Performance enhancements. 0.9.121: * Touch pan now works on Android. * Pinch zoom is better on all devices.