From cc3e2835a4cc3af739f957e0b35097317fac9c50 Mon Sep 17 00:00:00 2001 From: Sumedha Pramod Date: Fri, 14 Apr 2017 14:46:28 -0700 Subject: [PATCH] Chore: Triggering point annotation mode by emitting a message (#77) - This will allow external viewers to trigger entering/exiting point annotation mode without explicitly referring to the annotator (i.e. webapp) * Chore: Updating unit tests --- src/lib/viewers/BaseViewer.js | 5 +++++ .../__tests__/{Base-test.html => BaseViewer-test.html} | 0 src/lib/viewers/__tests__/BaseViewer-test.js | 4 +++- src/lib/viewers/doc/DocBaseViewer.js | 4 +++- src/lib/viewers/doc/__tests__/DocBaseViewer-test.js | 8 ++++++-- src/lib/viewers/image/ImageViewer.js | 4 ++-- .../__tests__/{Image-test.html => ImageViewer-test.html} | 0 src/lib/viewers/image/__tests__/ImageViewer-test.js | 6 ++++-- 8 files changed, 23 insertions(+), 8 deletions(-) rename src/lib/viewers/__tests__/{Base-test.html => BaseViewer-test.html} (100%) rename src/lib/viewers/image/__tests__/{Image-test.html => ImageViewer-test.html} (100%) diff --git a/src/lib/viewers/BaseViewer.js b/src/lib/viewers/BaseViewer.js index 7a500d70f..cfd6127a7 100644 --- a/src/lib/viewers/BaseViewer.js +++ b/src/lib/viewers/BaseViewer.js @@ -250,6 +250,11 @@ class BaseViewer extends EventEmitter { // Add a resize handler for the window document.defaultView.addEventListener('resize', this.debouncedResizeHandler); + + /* istanbul ignore next */ + this.addListener('togglepointannotationmode', () => { + this.annotator.togglePointModeHandler(); + }); } /** diff --git a/src/lib/viewers/__tests__/Base-test.html b/src/lib/viewers/__tests__/BaseViewer-test.html similarity index 100% rename from src/lib/viewers/__tests__/Base-test.html rename to src/lib/viewers/__tests__/BaseViewer-test.html diff --git a/src/lib/viewers/__tests__/BaseViewer-test.js b/src/lib/viewers/__tests__/BaseViewer-test.js index f31bab087..5fec82ae7 100644 --- a/src/lib/viewers/__tests__/BaseViewer-test.js +++ b/src/lib/viewers/__tests__/BaseViewer-test.js @@ -16,7 +16,7 @@ describe('lib/viewers/BaseViewer', () => { }); beforeEach(() => { - fixture.load('viewers/__tests__/Base-test.html'); + fixture.load('viewers/__tests__/BaseViewer-test.html'); containerEl = document.querySelector('.bp-container'); base = new BaseViewer({ @@ -215,6 +215,7 @@ describe('lib/viewers/BaseViewer', () => { describe('addCommonListeners()', () => { it('should append common event listeners', () => { sandbox.stub(fullscreen, 'addListener'); + sandbox.stub(base, 'addListener'); sandbox.stub(document.defaultView, 'addEventListener'); base.addCommonListeners(); @@ -222,6 +223,7 @@ describe('lib/viewers/BaseViewer', () => { expect(fullscreen.addListener).to.be.calledWith('enter', sinon.match.func); expect(fullscreen.addListener).to.be.calledWith('exit', sinon.match.func); expect(document.defaultView.addEventListener).to.be.calledWith('resize', base.debouncedResizeHandler); + expect(base.addListener).to.be.calledWith('togglepointannotationmode', sinon.match.func); }); }); diff --git a/src/lib/viewers/doc/DocBaseViewer.js b/src/lib/viewers/doc/DocBaseViewer.js index 6da09e00f..b4a0d80b6 100644 --- a/src/lib/viewers/doc/DocBaseViewer.js +++ b/src/lib/viewers/doc/DocBaseViewer.js @@ -540,7 +540,9 @@ class DocBaseViewer extends BaseViewer { return null; } - return this.annotator.togglePointModeHandler; + return () => { + this.emit('togglepointannotationmode'); + }; } /** diff --git a/src/lib/viewers/doc/__tests__/DocBaseViewer-test.js b/src/lib/viewers/doc/__tests__/DocBaseViewer-test.js index 96969e1ed..21c06b039 100644 --- a/src/lib/viewers/doc/__tests__/DocBaseViewer-test.js +++ b/src/lib/viewers/doc/__tests__/DocBaseViewer-test.js @@ -884,13 +884,17 @@ describe('src/lib/viewers/doc/DocBaseViewer', () => { it('should return the toggle point mode handler', () => { stubs.isAnnotatable.returns(true); + sandbox.stub(docBase, 'emit'); docBase.annotator = { - togglePointModeHandler: 'handler' + togglePointModeHandler: () => {} }; const handler = docBase.getPointModeClickHandler(); expect(stubs.isAnnotatable).to.be.called; - expect(handler).to.equal('handler'); + expect(handler).to.be.a('function'); + + handler(event); + expect(docBase.emit).to.have.been.calledWith('togglepointannotationmode'); }); }); diff --git a/src/lib/viewers/image/ImageViewer.js b/src/lib/viewers/image/ImageViewer.js index 0162f1714..f6f0485e3 100644 --- a/src/lib/viewers/image/ImageViewer.js +++ b/src/lib/viewers/image/ImageViewer.js @@ -508,10 +508,10 @@ class ImageViewer extends ImageBaseViewer { return null; } - return (event = {}) => { + return () => { this.imageEl.classList.remove(CSS_CLASS_ZOOMABLE); this.imageEl.classList.remove(CSS_CLASS_PANNABLE); - this.annotator.togglePointModeHandler(event); + this.emit('togglepointannotationmode'); }; } } diff --git a/src/lib/viewers/image/__tests__/Image-test.html b/src/lib/viewers/image/__tests__/ImageViewer-test.html similarity index 100% rename from src/lib/viewers/image/__tests__/Image-test.html rename to src/lib/viewers/image/__tests__/ImageViewer-test.html diff --git a/src/lib/viewers/image/__tests__/ImageViewer-test.js b/src/lib/viewers/image/__tests__/ImageViewer-test.js index b773b4d24..2363731d3 100644 --- a/src/lib/viewers/image/__tests__/ImageViewer-test.js +++ b/src/lib/viewers/image/__tests__/ImageViewer-test.js @@ -22,7 +22,7 @@ describe('lib/viewers/image/ImageViewer', () => { beforeEach(() => { clock = sinon.useFakeTimers(); - fixture.load('viewers/image/__tests__/Image-test.html'); + fixture.load('viewers/image/__tests__/ImageViewer-test.html'); containerEl = document.querySelector('.container'); image = new ImageViewer({ container: containerEl, @@ -709,8 +709,9 @@ describe('lib/viewers/image/ImageViewer', () => { it('should return event listener', () => { const event = {}; image.annotator = { - togglePointModeHandler: sandbox.mock().withArgs(event) + togglePointModeHandler: () => {} }; + sandbox.stub(image, 'emit'); image.imageEl.classList.add(CSS_CLASS_ZOOMABLE); image.imageEl.classList.add(CSS_CLASS_PANNABLE); sandbox.stub(image, 'isAnnotatable').returns(true); @@ -721,6 +722,7 @@ describe('lib/viewers/image/ImageViewer', () => { handler(event); expect(image.imageEl).to.not.have.class(CSS_CLASS_ZOOMABLE); expect(image.imageEl).to.not.have.class(CSS_CLASS_PANNABLE); + expect(image.emit).to.have.been.calledWith('togglepointannotationmode'); }); }); });