Merge pull request #8525 from curiosity26/master

Allow for unbinding of events in web application
This commit is contained in:
Tim van der Meij 2017-06-17 22:32:17 +02:00 committed by GitHub
commit 7215e9c52e

View File

@ -151,6 +151,7 @@ var PDFViewerApplication = {
url: '', url: '',
baseUrl: '', baseUrl: '',
externalServices: DefaultExternalServices, externalServices: DefaultExternalServices,
_boundEvents: {},
// called once when the document is loaded // called once when the document is loaded
initialize: function pdfViewInitialize(appConfig) { initialize: function pdfViewInitialize(appConfig) {
@ -1259,13 +1260,16 @@ var PDFViewerApplication = {
this.pdfPresentationMode.request(); this.pdfPresentationMode.request();
}, },
bindEvents: function pdfViewBindEvents() { bindEvents() {
var eventBus = this.eventBus; let eventBus = this.eventBus;
this._boundEvents.beforePrint = this.beforePrint.bind(this);
this._boundEvents.afterPrint = this.afterPrint.bind(this);
eventBus.on('resize', webViewerResize); eventBus.on('resize', webViewerResize);
eventBus.on('hashchange', webViewerHashchange); eventBus.on('hashchange', webViewerHashchange);
eventBus.on('beforeprint', this.beforePrint.bind(this)); eventBus.on('beforeprint', this._boundEvents.beforePrint);
eventBus.on('afterprint', this.afterPrint.bind(this)); eventBus.on('afterprint', this._boundEvents.afterPrint);
eventBus.on('pagerendered', webViewerPageRendered); eventBus.on('pagerendered', webViewerPageRendered);
eventBus.on('textlayerrendered', webViewerTextLayerRendered); eventBus.on('textlayerrendered', webViewerTextLayerRendered);
eventBus.on('updateviewarea', webViewerUpdateViewarea); eventBus.on('updateviewarea', webViewerUpdateViewarea);
@ -1297,39 +1301,109 @@ var PDFViewerApplication = {
} }
}, },
bindWindowEvents: function pdfViewBindWindowEvents() { bindWindowEvents() {
var eventBus = this.eventBus; let eventBus = this.eventBus;
this._boundEvents.windowResize = () => {
eventBus.dispatch('resize');
};
this._boundEvents.windowHashChange = () => {
eventBus.dispatch('hashchange', {
hash: document.location.hash.substring(1),
});
};
this._boundEvents.windowBeforePrint = () => {
eventBus.dispatch('beforeprint');
};
this._boundEvents.windowAfterPrint = () => {
eventBus.dispatch('afterprint');
};
window.addEventListener('wheel', webViewerWheel); window.addEventListener('wheel', webViewerWheel);
window.addEventListener('click', webViewerClick); window.addEventListener('click', webViewerClick);
window.addEventListener('keydown', webViewerKeyDown); window.addEventListener('keydown', webViewerKeyDown);
window.addEventListener('resize', this._boundEvents.windowResize);
window.addEventListener('resize', function windowResize() { window.addEventListener('hashchange', this._boundEvents.windowHashChange);
eventBus.dispatch('resize'); window.addEventListener('beforeprint', this._boundEvents.windowBeforePrint);
}); window.addEventListener('afterprint', this._boundEvents.windowAfterPrint);
window.addEventListener('hashchange', function windowHashChange() {
eventBus.dispatch('hashchange', {
hash: document.location.hash.substring(1),
});
});
window.addEventListener('beforeprint', function windowBeforePrint() {
eventBus.dispatch('beforeprint');
});
window.addEventListener('afterprint', function windowAfterPrint() {
eventBus.dispatch('afterprint');
});
if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) { if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {
window.addEventListener('change', function windowChange(evt) { this._boundEvents.windowChange = (evt) => {
var files = evt.target.files; let files = evt.target.files;
if (!files || files.length === 0) { if (!files || files.length === 0) {
return; return;
} }
eventBus.dispatch('fileinputchange', { eventBus.dispatch('fileinputchange', {
fileInput: evt.target, fileInput: evt.target,
}); });
}); };
window.addEventListener('change', this._boundEvents.windowChange);
} }
}, },
unbindEvents() {
let eventBus = this.eventBus;
eventBus.off('resize', webViewerResize);
eventBus.off('hashchange', webViewerHashchange);
eventBus.off('beforeprint', this._boundEvents.beforePrint);
eventBus.off('afterprint', this._boundEvents.afterPrint);
eventBus.off('pagerendered', webViewerPageRendered);
eventBus.off('textlayerrendered', webViewerTextLayerRendered);
eventBus.off('updateviewarea', webViewerUpdateViewarea);
eventBus.off('pagechanging', webViewerPageChanging);
eventBus.off('scalechanging', webViewerScaleChanging);
eventBus.off('sidebarviewchanged', webViewerSidebarViewChanged);
eventBus.off('pagemode', webViewerPageMode);
eventBus.off('namedaction', webViewerNamedAction);
eventBus.off('presentationmodechanged', webViewerPresentationModeChanged);
eventBus.off('presentationmode', webViewerPresentationMode);
eventBus.off('openfile', webViewerOpenFile);
eventBus.off('print', webViewerPrint);
eventBus.off('download', webViewerDownload);
eventBus.off('firstpage', webViewerFirstPage);
eventBus.off('lastpage', webViewerLastPage);
eventBus.off('nextpage', webViewerNextPage);
eventBus.off('previouspage', webViewerPreviousPage);
eventBus.off('zoomin', webViewerZoomIn);
eventBus.off('zoomout', webViewerZoomOut);
eventBus.off('pagenumberchanged', webViewerPageNumberChanged);
eventBus.off('scalechanged', webViewerScaleChanged);
eventBus.off('rotatecw', webViewerRotateCw);
eventBus.off('rotateccw', webViewerRotateCcw);
eventBus.off('documentproperties', webViewerDocumentProperties);
eventBus.off('find', webViewerFind);
eventBus.off('findfromurlhash', webViewerFindFromUrlHash);
if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {
eventBus.off('fileinputchange', webViewerFileInputChange);
}
this._boundEvents.beforePrint = null;
this._boundEvents.afterPrint = null;
},
unbindWindowEvents() {
window.removeEventListener('wheel', webViewerWheel);
window.removeEventListener('click', webViewerClick);
window.removeEventListener('keydown', webViewerKeyDown);
window.removeEventListener('resize',
this._boundEvents.windowResize);
window.removeEventListener('hashchange',
this._boundEvents.windowHashChange);
window.removeEventListener('beforeprint',
this._boundEvents.windowBeforePrint);
window.removeEventListener('afterprint',
this._boundEvents.windowAfterPrint);
if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {
window.removeEventListener('change',
this._boundEvents.windowChange);
this._boundEvents.windowChange = null;
}
this._boundEvents.windowResize = null;
this._boundEvents.windowHashChange = null;
this._boundEvents.windowBeforePrint = null;
this._boundEvents.windowAfterPrint = null;
},
}; };
var validateFileURL; var validateFileURL;