Skip to content

Commit

Permalink
Chore: Remove autobind from BaseViewer (#502)
Browse files Browse the repository at this point in the history
  • Loading branch information
tonyjin authored Nov 21, 2017
1 parent 79b4576 commit 6d534be
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 18 deletions.
48 changes: 32 additions & 16 deletions src/lib/viewers/BaseViewer.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'box-annotations/lib/Annotator.scss';
import BoxAnnotations from 'box-annotations/lib/BoxAnnotations';
import autobind from 'autobind-decorator';
import EventEmitter from 'events';
import debounce from 'lodash.debounce';
import cloneDeep from 'lodash.clonedeep';
Expand Down Expand Up @@ -54,7 +53,6 @@ const ANNOTATOR_EVENT = {
scale: 'scaleannotations'
};

@autobind
class BaseViewer extends EventEmitter {
/** @property {Controls} - UI used to interact with the document in the viewer */
controls;
Expand Down Expand Up @@ -106,6 +104,18 @@ class BaseViewer extends EventEmitter {
this.repStatuses = [];
this.isMobile = Browser.isMobile();
this.hasTouch = Browser.hasTouch();

// Bind context for callbacks
this.resetLoadTimeout = this.resetLoadTimeout.bind(this);
this.preventDefault = this.preventDefault.bind(this);
this.debouncedResizeHandler = this.debouncedResizeHandler.bind(this);
this.handleAssetError = this.handleAssetError.bind(this);
this.toggleFullscreen = this.toggleFullscreen.bind(this);
this.onFullscreenToggled = this.onFullscreenToggled.bind(this);
this.mobileZoomStartHandler = this.mobileZoomStartHandler.bind(this);
this.mobileZoomChangeHandler = this.mobileZoomChangeHandler.bind(this);
this.mobileZoomEndHandler = this.mobileZoomEndHandler.bind(this);
this.handleAnnotatorEvents = this.handleAnnotatorEvents.bind(this);
}

/**
Expand Down Expand Up @@ -176,15 +186,10 @@ class BaseViewer extends EventEmitter {

fullscreen.removeAllListeners();
document.defaultView.removeEventListener('resize', this.debouncedResizeHandler);

if (this.preventDefault) {
this.containerEl.removeEventListener('contextmenu', this.preventDefault);
this.preventDefault = null;
}

this.removeAllListeners();

if (this.containerEl) {
this.containerEl.removeEventListener('contextmenu', this.preventDefault);
this.containerEl.innerHTML = '';
}

Expand All @@ -204,9 +209,11 @@ class BaseViewer extends EventEmitter {
* @private
* @return {Function} debounced resize handler
*/
debouncedResizeHandler = debounce(() => {
this.resize();
}, RESIZE_WAIT_TIME_IN_MILLIS);
debouncedResizeHandler() {
return debounce(() => {
this.resize();
}, RESIZE_WAIT_TIME_IN_MILLIS);
}

/**
* Loads content.
Expand All @@ -225,7 +232,7 @@ class BaseViewer extends EventEmitter {
* @emits Error
* @return {void}
*/
resetLoadTimeout = () => {
resetLoadTimeout() {
clearTimeout(this.loadTimeoutId);
/* istanbul ignore next */
this.loadTimeoutId = setTimeout(() => {
Expand All @@ -237,18 +244,18 @@ class BaseViewer extends EventEmitter {
this.triggerError();
}
}, this.loadTimeout);
};
}

/**
* Triggers an error when an asset (static or representation) fails to load.
*
* @param {string} [err] - Optional error message
* @return {void}
*/
handleAssetError = (err) => {
handleAssetError(err) {
this.triggerError(err);
this.destroyed = true;
};
}

/**
* Emits error event with refresh message.
Expand Down Expand Up @@ -356,7 +363,6 @@ class BaseViewer extends EventEmitter {

const { permissions } = this.options.file;
if (permissions && !permissions.can_download) {
this.preventDefault = (event) => event.preventDefault();
this.containerEl.addEventListener('contextmenu', this.preventDefault);
}

Expand All @@ -371,6 +377,16 @@ class BaseViewer extends EventEmitter {
});
}

/**
* Prevents default behavior.
*
* @param {Event} event - Some event
* @return {void}
*/
preventDefault(event) {
event.preventDefault();
}

/**
* Enters or exits fullscreen
*
Expand Down
3 changes: 1 addition & 2 deletions src/lib/viewers/__tests__/BaseViewer-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -446,8 +446,7 @@ describe('lib/viewers/BaseViewer', () => {

base.destroy();

expect(base.containerEl.removeEventListener).to.be.calledWith('contextmenu', sinon.match.func)
expect(base.preventDefault).to.be.null;
expect(base.containerEl.removeEventListener).to.be.calledWith('contextmenu', sinon.match.func);
});
});

Expand Down

0 comments on commit 6d534be

Please sign in to comment.