From bff85f53c2a23bc559a9486370d5599bb707eb7c Mon Sep 17 00:00:00 2001 From: Minh Nguyen Date: Thu, 10 Aug 2017 14:31:54 -0700 Subject: [PATCH 1/2] Fix: annotation handler rebinding --- src/lib/annotations/Annotator.js | 14 +++++--------- src/lib/annotations/BoxAnnotations.js | 2 +- src/lib/annotations/__tests__/Annotator-test.js | 10 ---------- src/lib/annotations/drawing/DrawingThread.js | 4 ++++ 4 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/lib/annotations/Annotator.js b/src/lib/annotations/Annotator.js index 2bfa807d6..3a7807373 100644 --- a/src/lib/annotations/Annotator.js +++ b/src/lib/annotations/Annotator.js @@ -547,16 +547,15 @@ class Annotator extends EventEmitter { * @return {void} */ bindPointModeListeners() { - const pointFunc = this.pointClickHandler.bind(this.annotatedElement); const handlers = [ { type: 'mousedown', - func: pointFunc, + func: this.pointClickHandler, eventObj: this.annotatedElement }, { type: 'touchstart', - func: pointFunc, + func: this.pointClickHandler, eventObj: this.annotatedElement } ]; @@ -618,26 +617,23 @@ class Annotator extends EventEmitter { return; } - const startCallback = drawingThread.handleStart.bind(drawingThread); - const stopCallback = drawingThread.handleStop.bind(drawingThread); - const moveCallback = drawingThread.handleMove.bind(drawingThread); /* eslint-disable require-jsdoc */ const locationFunction = (event) => this.getLocationFromEvent(event, TYPES.point); /* eslint-enable require-jsdoc */ const handlers = [ { type: 'mousemove', - func: annotatorUtil.eventToLocationHandler(locationFunction, moveCallback), + func: annotatorUtil.eventToLocationHandler(locationFunction, drawingThread.handleMove), eventObj: this.annotatedElement }, { type: 'mousedown', - func: annotatorUtil.eventToLocationHandler(locationFunction, startCallback), + func: annotatorUtil.eventToLocationHandler(locationFunction, drawingThread.handleStart), eventObj: this.annotatedElement }, { type: 'mouseup', - func: annotatorUtil.eventToLocationHandler(locationFunction, stopCallback), + func: annotatorUtil.eventToLocationHandler(locationFunction, drawingThread.handleStop), eventObj: this.annotatedElement } ]; diff --git a/src/lib/annotations/BoxAnnotations.js b/src/lib/annotations/BoxAnnotations.js index b9bdf6fac..96b9e36fa 100644 --- a/src/lib/annotations/BoxAnnotations.js +++ b/src/lib/annotations/BoxAnnotations.js @@ -7,7 +7,7 @@ const ANNOTATORS = [ NAME: 'Document', CONSTRUCTOR: DocAnnotator, VIEWER: ['Document', 'Presentation'], - TYPE: [TYPES.point, TYPES.highlight] + TYPE: [TYPES.point, TYPES.highlight, TYPES.draw] }, { NAME: 'Image', diff --git a/src/lib/annotations/__tests__/Annotator-test.js b/src/lib/annotations/__tests__/Annotator-test.js index 117d739b0..562ecdea5 100644 --- a/src/lib/annotations/__tests__/Annotator-test.js +++ b/src/lib/annotations/__tests__/Annotator-test.js @@ -503,10 +503,8 @@ describe('lib/annotations/Annotator', () => { it('should bind point mode click handler', () => { sandbox.stub(annotator.annotatedElement, 'addEventListener'); sandbox.stub(annotator.annotatedElement, 'removeEventListener'); - sandbox.stub(annotator.pointClickHandler, 'bind', () => annotator.pointClickHandler); annotator.bindPointModeListeners(); - expect(annotator.pointClickHandler.bind).to.be.called; expect(annotator.annotatedElement.addEventListener).to.be.calledWith( 'mousedown', annotator.pointClickHandler @@ -521,11 +519,9 @@ describe('lib/annotations/Annotator', () => { describe('unbindModeListeners()', () => { it('should unbind point mode click handler', () => { sandbox.stub(annotator.annotatedElement, 'removeEventListener'); - sandbox.stub(annotator.pointClickHandler, 'bind', () => annotator.pointClickHandler); annotator.bindPointModeListeners(); annotator.unbindModeListeners(); - expect(annotator.pointClickHandler.bind).to.be.called; expect(annotator.annotatedElement.removeEventListener).to.be.calledWith( 'mousedown', annotator.pointClickHandler @@ -669,16 +665,10 @@ describe('lib/annotations/Annotator', () => { sandbox.stub(annotator.annotatedElement, 'addEventListener'); sandbox.stub(annotator.annotatedElement, 'removeEventListener'); sandbox.stub(annotator, 'isInDrawMode').returns(true); - sandbox.stub(drawingThread.handleStart, 'bind', () => drawingThread.pointClickHandler); - sandbox.stub(drawingThread.handleStop, 'bind', () => drawingThread.pointClickHandler); - sandbox.stub(drawingThread.handleMove, 'bind', () => drawingThread.pointClickHandler); sandbox.stub(annotatorUtil, 'eventToLocationHandler').returns(locationHandler); annotator.bindDrawModeListeners(drawingThread, postButtonEl); - expect(drawingThread.handleStart.bind).to.be.called; - expect(drawingThread.handleStop.bind).to.be.called; - expect(drawingThread.handleMove.bind).to.be.called; expect(annotator.annotatedElement.addEventListener).to.be.calledWith( sinon.match.string, locationHandler diff --git a/src/lib/annotations/drawing/DrawingThread.js b/src/lib/annotations/drawing/DrawingThread.js index 97a01d180..0aeec7b19 100644 --- a/src/lib/annotations/drawing/DrawingThread.js +++ b/src/lib/annotations/drawing/DrawingThread.js @@ -38,7 +38,11 @@ class DrawingThread extends AnnotationThread { */ constructor(data) { super(data); + this.render = this.render.bind(this); + this.handleStart = this.handleStart.bind(this); + this.handleMove = this.handleMove.bind(this); + this.handleStop = this.handleStop.bind(this); } /** From dd91573a29754af1a10102fe8d30ebffcc0289aa Mon Sep 17 00:00:00 2001 From: Minh Nguyen Date: Thu, 10 Aug 2017 15:24:32 -0700 Subject: [PATCH 2/2] Fix: remove drawing annotation type --- src/lib/annotations/BoxAnnotations.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/annotations/BoxAnnotations.js b/src/lib/annotations/BoxAnnotations.js index 96b9e36fa..b9bdf6fac 100644 --- a/src/lib/annotations/BoxAnnotations.js +++ b/src/lib/annotations/BoxAnnotations.js @@ -7,7 +7,7 @@ const ANNOTATORS = [ NAME: 'Document', CONSTRUCTOR: DocAnnotator, VIEWER: ['Document', 'Presentation'], - TYPE: [TYPES.point, TYPES.highlight, TYPES.draw] + TYPE: [TYPES.point, TYPES.highlight] }, { NAME: 'Image',