From e87020cf7868689b3a55584b60cc6b275d1531d3 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Tue, 20 Jan 2015 09:48:28 -0800 Subject: [PATCH 01/12] Removed 'position' property from MouseTracker keyDownHandler/keyUpHandler/keyHandler functions Positional data is not available in the corresponding DOM event objects --- src/mousetracker.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/mousetracker.js b/src/mousetracker.js index 9e8f25ef..86e87076 100644 --- a/src/mousetracker.js +++ b/src/mousetracker.js @@ -1518,7 +1518,6 @@ propagate = tracker.keyDownHandler( { eventSource: tracker, - position: getMouseRelative( event, tracker.element ), keyCode: event.keyCode ? event.keyCode : event.charCode, ctrl: event.ctrlKey, shift: event.shiftKey, @@ -1548,7 +1547,6 @@ propagate = tracker.keyUpHandler( { eventSource: tracker, - position: getMouseRelative( event, tracker.element ), keyCode: event.keyCode ? event.keyCode : event.charCode, ctrl: event.ctrlKey, shift: event.shiftKey, @@ -1578,7 +1576,6 @@ propagate = tracker.keyHandler( { eventSource: tracker, - position: getMouseRelative( event, tracker.element ), keyCode: event.keyCode ? event.keyCode : event.charCode, ctrl: event.ctrlKey, shift: event.shiftKey, From 7c39794bd9fce4e6ee5a7fabcc3712e912e0d8a8 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Tue, 20 Jan 2015 09:52:18 -0800 Subject: [PATCH 02/12] changelog update --- changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.txt b/changelog.txt index e3bd3156..e6c0369e 100644 --- a/changelog.txt +++ b/changelog.txt @@ -20,6 +20,7 @@ OPENSEADRAGON CHANGELOG * 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) 1.2.0: From 3b01014ac8893d3726acb75fd79c70225e5d4690 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Tue, 20 Jan 2015 10:26:14 -0800 Subject: [PATCH 03/12] Fixed pointer event model detection for IE 10 (#571) --- changelog.txt | 1 + src/mousetracker.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index e3bd3156..4d0ebbae 100644 --- a/changelog.txt +++ b/changelog.txt @@ -20,6 +20,7 @@ OPENSEADRAGON CHANGELOG * 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) +* Fixed pointer event model detection for IE 10 (#571) 1.2.0: diff --git a/src/mousetracker.js b/src/mousetracker.js index 9e8f25ef..8693067e 100644 --- a/src/mousetracker.js +++ b/src/mousetracker.js @@ -988,7 +988,7 @@ $.MouseTracker.maxTouchPoints = 0; } $.MouseTracker.haveMouseEnter = false; - } else if ( window.MSPointerEvent ) { + } else if ( window.MSPointerEvent && window.navigator.msPointerEnabled ) { // IE10 $.MouseTracker.havePointerEvents = true; $.MouseTracker.subscribeEvents.push( "MSPointerOver", "MSPointerOut", "MSPointerDown", "MSPointerUp", "MSPointerMove", "MSPointerCancel" ); From 198d4de0e6f5ca926d15eac363bc2aedc639877b Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Tue, 20 Jan 2015 11:01:09 -0800 Subject: [PATCH 04/12] Added setMouseNavEnabled() and isMouseNavEnabled() method overrides to Navigator (#572) --- changelog.txt | 1 + src/navigator.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/changelog.txt b/changelog.txt index e3bd3156..db650743 100644 --- a/changelog.txt +++ b/changelog.txt @@ -20,6 +20,7 @@ OPENSEADRAGON CHANGELOG * 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) +* Added setMouseNavEnabled() and isMouseNavEnabled() method overrides to Navigator (#572) 1.2.0: diff --git a/src/navigator.js b/src/navigator.js index 9e18d6ca..3638efde 100644 --- a/src/navigator.js +++ b/src/navigator.js @@ -229,6 +229,36 @@ $.Navigator = function( options ){ $.extend( $.Navigator.prototype, $.EventSource.prototype, $.Viewer.prototype, /** @lends OpenSeadragon.Navigator.prototype */{ + /** + * @function + * @return {Boolean} + */ + isMouseNavEnabled: function () { + return this.element.innerTracker.isTracking(); + }, + + /** + * @function + * @param {Boolean} enabled - true to enable, false to disable + * @return {OpenSeadragon.Navigator} Chainable. + * @fires OpenSeadragon.Navigator.event:mouse-enabled + */ + setMouseNavEnabled: function( enabled ){ + this.element.innerTracker.setTracking( enabled ); + /** + * Raised when mouse/touch navigation is enabled or disabled (see {@link OpenSeadragon.Navigator#setMouseNavEnabled}). + * + * @event mouse-enabled + * @memberof OpenSeadragon.Navigator + * @type {object} + * @property {OpenSeadragon.Navigator} eventSource - A reference to the Navigator which raised the event. + * @property {Boolean} enabled + * @property {?Object} userData - Arbitrary subscriber-defined object. + */ + this.raiseEvent( 'mouse-enabled', { enabled: enabled } ); + return this; + }, + /** * Used to notify the navigator when its size has changed. * Especially useful when {@link OpenSeadragon.Options}.navigatorAutoResize is set to false and the navigator is resizable. From 674a208d95b50e1f5db610c3cea0d713140caa85 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Tue, 20 Jan 2015 13:56:06 -0800 Subject: [PATCH 05/12] Replace base class innerTracker instead of using a new one --- src/navigator.js | 75 +++++++++++++----------------------------------- 1 file changed, 20 insertions(+), 55 deletions(-) diff --git a/src/navigator.js b/src/navigator.js index 3638efde..9991dbac 100644 --- a/src/navigator.js +++ b/src/navigator.js @@ -52,8 +52,7 @@ $.Navigator = function( options ){ var viewer = options.viewer, _this = this, viewerSize, - navigatorSize, - unneededElement; + navigatorSize; //We may need to create a new element and id if they did not //provide the id for the existing element @@ -168,24 +167,6 @@ $.Navigator = function( options ){ this.displayRegionContainer.style.width = "100%"; this.displayRegionContainer.style.height = "100%"; - this.element.innerTracker = new $.MouseTracker({ - element: this.element, - dragHandler: $.delegate( this, onCanvasDrag ), - clickHandler: $.delegate( this, onCanvasClick ), - releaseHandler: $.delegate( this, onCanvasRelease ), - scrollHandler: $.delegate( this, onCanvasScroll ) - }).setTracking( true ); - - /*this.displayRegion.outerTracker = new $.MouseTracker({ - element: this.container, - clickTimeThreshold: this.clickTimeThreshold, - clickDistThreshold: this.clickDistThreshold, - enterHandler: $.delegate( this, onContainerEnter ), - exitHandler: $.delegate( this, onContainerExit ), - releaseHandler: $.delegate( this, onContainerRelease ) - }).setTracking( this.mouseNavEnabled ? true : false ); // always tracking*/ - - viewer.addControl( this.element, options.controlOptions @@ -211,10 +192,6 @@ $.Navigator = function( options ){ this.displayRegionContainer.appendChild(this.displayRegion); this.element.getElementsByTagName('div')[0].appendChild(this.displayRegionContainer); - unneededElement = this.element.getElementsByTagName('textarea')[0]; - if (unneededElement) { - unneededElement.parentNode.removeChild(unneededElement); - } if (options.navigatorRotate) { @@ -223,42 +200,30 @@ $.Navigator = function( options ){ _setTransformRotate(_this.displayRegion, -args.degrees); _this.viewport.setRotation(args.degrees); }); - } + + // Remove the base class' (Viewer's) innerTracker and replace it with our own + this.innerTracker.destroy(); + this.innerTracker = new $.MouseTracker({ + element: this.element, + dragHandler: $.delegate( this, onCanvasDrag ), + clickHandler: $.delegate( this, onCanvasClick ), + releaseHandler: $.delegate( this, onCanvasRelease ), + scrollHandler: $.delegate( this, onCanvasScroll ) + }).setTracking( true ); + + /*this.displayRegion.outerTracker = new $.MouseTracker({ + element: this.container, + clickTimeThreshold: this.clickTimeThreshold, + clickDistThreshold: this.clickDistThreshold, + enterHandler: $.delegate( this, onContainerEnter ), + exitHandler: $.delegate( this, onContainerExit ), + releaseHandler: $.delegate( this, onContainerRelease ) + }).setTracking( this.mouseNavEnabled ? true : false ); // always tracking*/ }; $.extend( $.Navigator.prototype, $.EventSource.prototype, $.Viewer.prototype, /** @lends OpenSeadragon.Navigator.prototype */{ - /** - * @function - * @return {Boolean} - */ - isMouseNavEnabled: function () { - return this.element.innerTracker.isTracking(); - }, - - /** - * @function - * @param {Boolean} enabled - true to enable, false to disable - * @return {OpenSeadragon.Navigator} Chainable. - * @fires OpenSeadragon.Navigator.event:mouse-enabled - */ - setMouseNavEnabled: function( enabled ){ - this.element.innerTracker.setTracking( enabled ); - /** - * Raised when mouse/touch navigation is enabled or disabled (see {@link OpenSeadragon.Navigator#setMouseNavEnabled}). - * - * @event mouse-enabled - * @memberof OpenSeadragon.Navigator - * @type {object} - * @property {OpenSeadragon.Navigator} eventSource - A reference to the Navigator which raised the event. - * @property {Boolean} enabled - * @property {?Object} userData - Arbitrary subscriber-defined object. - */ - this.raiseEvent( 'mouse-enabled', { enabled: enabled } ); - return this; - }, - /** * Used to notify the navigator when its size has changed. * Especially useful when {@link OpenSeadragon.Options}.navigatorAutoResize is set to false and the navigator is resizable. From 269f9ee71d52d149eee07f70215184bedb062833 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Tue, 20 Jan 2015 17:45:13 -0800 Subject: [PATCH 06/12] changelog update --- changelog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 42812042..4eb7f7e7 100644 --- a/changelog.txt +++ b/changelog.txt @@ -21,7 +21,7 @@ OPENSEADRAGON CHANGELOG * 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) -* Added setMouseNavEnabled() and isMouseNavEnabled() method overrides to Navigator (#572) +* Added setMouseNavEnabled() support to Navigator (#572) 1.2.0: From 545997bace25950a11942d9afc4e026cd9e631e1 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Tue, 20 Jan 2015 18:35:58 -0800 Subject: [PATCH 07/12] MouseTracker now defaults to tracking on (#558) --- changelog.txt | 1 + src/button.js | 2 +- src/buttongroup.js | 2 +- src/mousetracker.js | 6 ++++++ src/navigator.js | 5 +++-- src/referencestrip.js | 8 +++++--- src/viewer.js | 6 ++++-- test/events.js | 2 +- 8 files changed, 22 insertions(+), 10 deletions(-) diff --git a/changelog.txt b/changelog.txt index e6c0369e..6412a2b0 100644 --- a/changelog.txt +++ b/changelog.txt @@ -21,6 +21,7 @@ OPENSEADRAGON CHANGELOG * 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) +* MouseTracker now defaults to tracking on (#558) 1.2.0: diff --git a/src/button.js b/src/button.js index 104955e0..42f68afc 100644 --- a/src/button.js +++ b/src/button.js @@ -355,7 +355,7 @@ $.Button = function( options ) { return true; } - }).setTracking( true ); + }); outTo( this, $.ButtonState.REST ); }; diff --git a/src/buttongroup.js b/src/buttongroup.js index 7505af0a..49cc9c2e 100644 --- a/src/buttongroup.js +++ b/src/buttongroup.js @@ -105,7 +105,7 @@ $.ButtonGroup = function( options ) { } } }, - }).setTracking( true ); + }); }; $.ButtonGroup.prototype = /** @lends OpenSeadragon.ButtonGroup.prototype */{ diff --git a/src/mousetracker.js b/src/mousetracker.js index 86e87076..20f58541 100644 --- a/src/mousetracker.js +++ b/src/mousetracker.js @@ -54,6 +54,9 @@ * @param {Element|String} options.element * A reference to an element or an element id for which the pointer/key * events will be monitored. + * @param {Boolean} [options.startDisabled=false] + * If true, event tracking on the element will not start until + * {@link OpenSeadragon.MouseTracker.setTracking|setTracking} is called. * @param {Number} options.clickTimeThreshold * The number of milliseconds within which a pointer down-up event combination * will be treated as a click gesture. @@ -257,6 +260,9 @@ currentPinchCenter: null }; + if ( !options.startDisabled ) { + this.setTracking( true ); + } }; $.MouseTracker.prototype = /** @lends OpenSeadragon.MouseTracker.prototype */{ diff --git a/src/navigator.js b/src/navigator.js index 9e18d6ca..7c25b742 100644 --- a/src/navigator.js +++ b/src/navigator.js @@ -174,16 +174,17 @@ $.Navigator = function( options ){ clickHandler: $.delegate( this, onCanvasClick ), releaseHandler: $.delegate( this, onCanvasRelease ), scrollHandler: $.delegate( this, onCanvasScroll ) - }).setTracking( true ); + }); /*this.displayRegion.outerTracker = new $.MouseTracker({ element: this.container, + startDisabled: this.mouseNavEnabled ? false : true, clickTimeThreshold: this.clickTimeThreshold, clickDistThreshold: this.clickDistThreshold, enterHandler: $.delegate( this, onContainerEnter ), exitHandler: $.delegate( this, onContainerExit ), releaseHandler: $.delegate( this, onContainerRelease ) - }).setTracking( this.mouseNavEnabled ? true : false ); // always tracking*/ + });*/ viewer.addControl( diff --git a/src/referencestrip.js b/src/referencestrip.js index a872ca58..480009ec 100644 --- a/src/referencestrip.js +++ b/src/referencestrip.js @@ -127,7 +127,7 @@ $.ReferenceStrip = function ( options ) { exitHandler: $.delegate( this, onStripExit ), keyDownHandler: $.delegate( this, onKeyDown ), keyHandler: $.delegate( this, onKeyPress ) - } ).setTracking( true ); + } ); //Controls the position and orientation of the reference strip and sets the //appropriate width and height @@ -215,7 +215,7 @@ $.ReferenceStrip = function ( options ) { viewer.goToPage( page ); } } - } ).setTracking( true ); + } ); this.element.appendChild( element ); @@ -447,8 +447,10 @@ function loadPanels( strip, viewerSize, scroll ) { style.width = ( strip.panelWidth - 4 ) + 'px'; style.height = ( strip.panelHeight - 4 ) + 'px'; + // TODO: What is this for? Future keyboard navigation support? miniViewer.displayRegion.innerTracker = new $.MouseTracker( { - element: miniViewer.displayRegion + element: miniViewer.displayRegion, + startDisabled: true } ); element.getElementsByTagName( 'div' )[0].appendChild( diff --git a/src/viewer.js b/src/viewer.js index 04587719..865a92a5 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -297,6 +297,7 @@ $.Viewer = function( options ) { this.innerTracker = new $.MouseTracker({ element: this.canvas, + startDisabled: this.mouseNavEnabled ? false : true, clickTimeThreshold: this.clickTimeThreshold, clickDistThreshold: this.clickDistThreshold, dblClickTimeThreshold: this.dblClickTimeThreshold, @@ -316,17 +317,18 @@ $.Viewer = function( options ) { nonPrimaryReleaseHandler: $.delegate( this, onCanvasNonPrimaryRelease ), scrollHandler: $.delegate( this, onCanvasScroll ), pinchHandler: $.delegate( this, onCanvasPinch ) - }).setTracking( this.mouseNavEnabled ? true : false ); // default state + }); this.outerTracker = new $.MouseTracker({ element: this.container, + startDisabled: this.mouseNavEnabled ? false : true, clickTimeThreshold: this.clickTimeThreshold, clickDistThreshold: this.clickDistThreshold, dblClickTimeThreshold: this.dblClickTimeThreshold, dblClickDistThreshold: this.dblClickDistThreshold, enterHandler: $.delegate( this, onContainerEnter ), exitHandler: $.delegate( this, onContainerExit ) - }).setTracking( this.mouseNavEnabled ? true : false ); // always tracking + }); if( this.toolbar ){ this.toolbar = new $.ControlDock({ element: this.toolbar }); diff --git a/test/events.js b/test/events.js index 5f850082..677e805f 100644 --- a/test/events.js +++ b/test/events.js @@ -790,7 +790,7 @@ releaseHandler: onMouseTrackerRelease, clickHandler: onMouseTrackerClick, exitHandler: onMouseTrackerExit - } ).setTracking( true ); + } ); var event = { clientX:1, From 406005c8c9eda35d4ab38f6e4de374d4a9eaae86 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Wed, 21 Jan 2015 09:42:03 -0800 Subject: [PATCH 08/12] Removed dead code --- src/navigator.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/navigator.js b/src/navigator.js index 9991dbac..fb0756e8 100644 --- a/src/navigator.js +++ b/src/navigator.js @@ -212,14 +212,6 @@ $.Navigator = function( options ){ scrollHandler: $.delegate( this, onCanvasScroll ) }).setTracking( true ); - /*this.displayRegion.outerTracker = new $.MouseTracker({ - element: this.container, - clickTimeThreshold: this.clickTimeThreshold, - clickDistThreshold: this.clickDistThreshold, - enterHandler: $.delegate( this, onContainerEnter ), - exitHandler: $.delegate( this, onContainerExit ), - releaseHandler: $.delegate( this, onContainerRelease ) - }).setTracking( this.mouseNavEnabled ? true : false ); // always tracking*/ }; $.extend( $.Navigator.prototype, $.EventSource.prototype, $.Viewer.prototype, /** @lends OpenSeadragon.Navigator.prototype */{ From 1e8b3a1ea6ebd5c49213610a511319f361736e71 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Wed, 21 Jan 2015 11:49:19 -0800 Subject: [PATCH 09/12] Removed Viewer focusHandler/onCanvasFocus Presumably, this was meant to manually scroll the viewer into view when it receives focus. This is already handled by browsers when tabbing to the viewer, so doing it explicitly isn't necessary, and it creates a negative user experience when clicking on a viewer to give it focus (as of #569). --- src/viewer.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/viewer.js b/src/viewer.js index 04587719..4ba9ab48 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -301,7 +301,6 @@ $.Viewer = function( options ) { clickDistThreshold: this.clickDistThreshold, dblClickTimeThreshold: this.dblClickTimeThreshold, dblClickDistThreshold: this.dblClickDistThreshold, - focusHandler: $.delegate( this, onCanvasFocus ), keyDownHandler: $.delegate( this, onCanvasKeyDown ), keyHandler: $.delegate( this, onCanvasKeyPress ), clickHandler: $.delegate( this, onCanvasClick ), @@ -2188,13 +2187,6 @@ function onBlur(){ } -function onCanvasFocus( event ) { - if ( !event.preventDefaultAction ) { - var point = $.getElementPosition( this.element ); - window.scrollTo( 0, point.y ); - } -} - function onCanvasKeyDown( event ) { if ( !event.preventDefaultAction && !event.ctrl && !event.alt && !event.meta ) { switch( event.keyCode ){ From b639f1e168a1629f8bcfcc0a9ece2d728861c285 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Wed, 21 Jan 2015 11:51:56 -0800 Subject: [PATCH 10/12] changelog update --- changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.txt b/changelog.txt index 1cd6f9df..7a747759 100644 --- a/changelog.txt +++ b/changelog.txt @@ -23,6 +23,7 @@ OPENSEADRAGON CHANGELOG * 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) +* Removed Viewer focusHandler/onCanvasFocus (#577) 1.2.0: From 43d892451339f65a74b12d98301d0132f6579de0 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Wed, 21 Jan 2015 12:47:42 -0800 Subject: [PATCH 11/12] Added tabIndex option to viewer --- src/navigator.js | 1 + src/openseadragon.js | 4 ++++ src/viewer.js | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/navigator.js b/src/navigator.js index fb0756e8..dcea7687 100644 --- a/src/navigator.js +++ b/src/navigator.js @@ -98,6 +98,7 @@ $.Navigator = function( options ){ sizeRatio: $.DEFAULT_SETTINGS.navigatorSizeRatio }, options, { element: this.element, + tabIndex: -1, // No keyboard navigation, omit from tab order //These need to be overridden to prevent recursion since //the navigator is a viewer and a viewer has a navigator showNavigator: false, diff --git a/src/openseadragon.js b/src/openseadragon.js index 27d3262c..f56f10da 100644 --- a/src/openseadragon.js +++ b/src/openseadragon.js @@ -126,6 +126,10 @@ * The element to append the viewer's container element to. If not provided, the 'id' property must be provided. * If both the element and id properties are specified, the viewer is appended to the element provided in the element property. * + * @property {Number} [tabIndex=0] + * Tabbing order index to assign to the viewer element. Positive values are selected in increasing order. When tabIndex is 0 + * source order is used. A negative value omits the viewer from the tabbing order. + * * @property {Array|String|Function|Object[]|Array[]|String[]|Function[]} [tileSources=null] * As an Array, the tileSource can hold either Objects or mixed * types of Arrays of Objects, Strings, or Functions. When a value is a String, diff --git a/src/viewer.js b/src/viewer.js index 4ba9ab48..4cf7fad7 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -268,7 +268,7 @@ $.Viewer = function( options ) { style.left = "0px"; }(this.canvas.style)); $.setElementTouchActionNone( this.canvas ); - this.canvas.tabIndex = 0; + this.canvas.tabIndex = options.tabIndex || 0; //the container is created through applying the ControlDock constructor above this.container.className = "openseadragon-container"; From a09b6837d3d9e1032bc6b3a8d4fd2e73c48788ee Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Wed, 21 Jan 2015 12:49:45 -0800 Subject: [PATCH 12/12] changelog update --- changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.txt b/changelog.txt index 7a747759..6ab20b94 100644 --- a/changelog.txt +++ b/changelog.txt @@ -24,6 +24,7 @@ OPENSEADRAGON CHANGELOG * Fixed pointer event model detection for IE 10 and IE 11 (#571) * Added setMouseNavEnabled() support to Navigator (#572) * Removed Viewer focusHandler/onCanvasFocus (#577) +* Added tabIndex option to viewer (#577) 1.2.0: