Use createPromiseCapability
in /web
files
In various viewer files, there's a number of cases where we basically duplicate the functionality of `createPromiseCapability` manually. As far as I can tell, a couple of these cases have existed for a very long time, and notable even before the `createPromiseCapability` utility function existed. Also, since we can write ES6 code now, the patch also replaces a couple of `bind` usages with arrow functions in code that's touched in the patch.
This commit is contained in:
parent
c6e8ca863e
commit
b0a4f6de8f
@ -138,7 +138,7 @@
|
||||
}],
|
||||
|
||||
// ECMAScript 6
|
||||
"arrow-body-style": ["error", "as-needed"],
|
||||
"arrow-body-style": ["error", "always"],
|
||||
"arrow-parens": ["error", "always"],
|
||||
"arrow-spacing": ["error", {
|
||||
"before": true,
|
||||
|
@ -14,6 +14,7 @@
|
||||
*/
|
||||
|
||||
import { getPDFFileNameFromURL, mozL10n } from './ui_utils';
|
||||
import { createPromiseCapability } from './pdfjs';
|
||||
import { OverlayManager } from './overlay_manager';
|
||||
|
||||
/**
|
||||
@ -44,10 +45,7 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
|
||||
if (options.closeButton) {
|
||||
options.closeButton.addEventListener('click', this.close.bind(this));
|
||||
}
|
||||
|
||||
this.dataAvailablePromise = new Promise(function (resolve) {
|
||||
this.resolveDataAvailable = resolve;
|
||||
}.bind(this));
|
||||
this._dataAvailableCapability = createPromiseCapability();
|
||||
|
||||
OverlayManager.register(this.overlayName, this.container,
|
||||
this.close.bind(this));
|
||||
@ -59,9 +57,9 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
|
||||
*/
|
||||
open: function PDFDocumentProperties_open() {
|
||||
Promise.all([OverlayManager.open(this.overlayName),
|
||||
this.dataAvailablePromise]).then(function () {
|
||||
this._dataAvailableCapability.promise]).then(() => {
|
||||
this._getProperties();
|
||||
}.bind(this));
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
@ -97,7 +95,7 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
|
||||
function PDFDocumentProperties_setDocumentAndUrl(pdfDocument, url) {
|
||||
this.pdfDocument = pdfDocument;
|
||||
this.url = url;
|
||||
this.resolveDataAvailable();
|
||||
this._dataAvailableCapability.resolve();
|
||||
},
|
||||
|
||||
/**
|
||||
@ -110,16 +108,16 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
|
||||
return;
|
||||
}
|
||||
// Get the file size (if it hasn't already been set).
|
||||
this.pdfDocument.getDownloadInfo().then(function(data) {
|
||||
this.pdfDocument.getDownloadInfo().then((data) => {
|
||||
if (data.length === this.rawFileSize) {
|
||||
return;
|
||||
}
|
||||
this.setFileSize(data.length);
|
||||
this._updateUI(this.fields['fileSize'], this._parseFileSize());
|
||||
}.bind(this));
|
||||
});
|
||||
|
||||
// Get the document properties.
|
||||
this.pdfDocument.getMetadata().then(function(data) {
|
||||
this.pdfDocument.getMetadata().then((data) => {
|
||||
var content = {
|
||||
'fileName': getPDFFileNameFromURL(this.url),
|
||||
'fileSize': this._parseFileSize(),
|
||||
@ -139,7 +137,7 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
|
||||
for (var identifier in content) {
|
||||
this._updateUI(this.fields[identifier], content[identifier]);
|
||||
}
|
||||
}.bind(this));
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -81,9 +81,9 @@ var PDFFindController = (function PDFFindControllerClosure() {
|
||||
this.dirtyMatch = false;
|
||||
this.findTimeout = null;
|
||||
|
||||
this.firstPagePromise = new Promise(function (resolve) {
|
||||
this._firstPagePromise = new Promise((resolve) => {
|
||||
this.resolveFirstPage = resolve;
|
||||
}.bind(this));
|
||||
});
|
||||
},
|
||||
|
||||
normalize: function PDFFindController_normalize(text) {
|
||||
@ -277,7 +277,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
|
||||
this.state = state;
|
||||
this.updateUIState(FindStates.FIND_PENDING);
|
||||
|
||||
this.firstPagePromise.then(function() {
|
||||
this._firstPagePromise.then(function() {
|
||||
this.extractText();
|
||||
|
||||
clearTimeout(this.findTimeout);
|
||||
|
@ -18,7 +18,8 @@ import {
|
||||
roundToDivide
|
||||
} from './ui_utils';
|
||||
import {
|
||||
CustomStyle, PDFJS, RenderingCancelledException, SVGGraphics
|
||||
createPromiseCapability, CustomStyle, PDFJS, RenderingCancelledException,
|
||||
SVGGraphics
|
||||
} from './pdfjs';
|
||||
import { domEvents } from './dom_events';
|
||||
import { RenderingStates } from './pdf_rendering_queue';
|
||||
@ -493,14 +494,10 @@ var PDFPageView = (function PDFPageViewClosure() {
|
||||
},
|
||||
|
||||
paintOnCanvas: function (canvasWrapper) {
|
||||
var resolveRenderPromise, rejectRenderPromise;
|
||||
var promise = new Promise(function (resolve, reject) {
|
||||
resolveRenderPromise = resolve;
|
||||
rejectRenderPromise = reject;
|
||||
});
|
||||
var renderCapability = createPromiseCapability();
|
||||
|
||||
var result = {
|
||||
promise: promise,
|
||||
promise: renderCapability.promise,
|
||||
onRenderContinue: function (cont) {
|
||||
cont();
|
||||
},
|
||||
@ -589,11 +586,11 @@ var PDFPageView = (function PDFPageViewClosure() {
|
||||
renderTask.promise.then(
|
||||
function pdfPageRenderCallback() {
|
||||
showCanvas();
|
||||
resolveRenderPromise(undefined);
|
||||
renderCapability.resolve(undefined);
|
||||
},
|
||||
function pdfPageRenderError(error) {
|
||||
showCanvas();
|
||||
rejectRenderPromise(error);
|
||||
renderCapability.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -13,8 +13,8 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { createPromiseCapability, RenderingCancelledException } from './pdfjs';
|
||||
import { getOutputScale, mozL10n } from './ui_utils';
|
||||
import { RenderingCancelledException } from './pdfjs';
|
||||
import { RenderingStates } from './pdf_rendering_queue';
|
||||
|
||||
var THUMBNAIL_WIDTH = 98; // px
|
||||
@ -275,11 +275,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
|
||||
|
||||
this.renderingState = RenderingStates.RUNNING;
|
||||
|
||||
var resolveRenderPromise, rejectRenderPromise;
|
||||
var promise = new Promise(function (resolve, reject) {
|
||||
resolveRenderPromise = resolve;
|
||||
rejectRenderPromise = reject;
|
||||
});
|
||||
var renderCapability = createPromiseCapability();
|
||||
|
||||
var self = this;
|
||||
function thumbnailDrawCallback(error) {
|
||||
@ -293,7 +289,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
|
||||
if (((typeof PDFJSDev === 'undefined' ||
|
||||
!PDFJSDev.test('PDFJS_NEXT')) && error === 'cancelled') ||
|
||||
error instanceof RenderingCancelledException) {
|
||||
resolveRenderPromise(undefined);
|
||||
renderCapability.resolve(undefined);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -301,9 +297,9 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
|
||||
self._convertCanvasToImage();
|
||||
|
||||
if (!error) {
|
||||
resolveRenderPromise(undefined);
|
||||
renderCapability.resolve(undefined);
|
||||
} else {
|
||||
rejectRenderPromise(error);
|
||||
renderCapability.reject(error);
|
||||
}
|
||||
}
|
||||
|
||||
@ -336,7 +332,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
|
||||
thumbnailDrawCallback(error);
|
||||
}
|
||||
);
|
||||
return promise;
|
||||
return renderCapability.promise;
|
||||
},
|
||||
|
||||
setImage: function PDFThumbnailView_setImage(pageView) {
|
||||
|
@ -13,17 +13,15 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { createPromiseCapability, PDFJS } from './pdfjs';
|
||||
import {
|
||||
CSS_UNITS, DEFAULT_SCALE, DEFAULT_SCALE_VALUE, getVisibleElements,
|
||||
MAX_AUTO_SCALE, RendererType, SCROLLBAR_PADDING, scrollIntoView,
|
||||
UNKNOWN_SCALE, VERTICAL_PADDING, watchScroll
|
||||
} from './ui_utils';
|
||||
import {
|
||||
PDFRenderingQueue, RenderingStates,
|
||||
} from './pdf_rendering_queue';
|
||||
import { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue';
|
||||
import { AnnotationLayerBuilder } from './annotation_layer_builder';
|
||||
import { domEvents } from './dom_events';
|
||||
import { PDFJS } from './pdfjs';
|
||||
import { PDFPageView } from './pdf_page_view';
|
||||
import { SimpleLinkService } from './pdf_link_service';
|
||||
import { TextLayerBuilder } from './text_layer_builder';
|
||||
@ -313,41 +311,34 @@ var PDFViewer = (function pdfViewer() {
|
||||
if (!pdfDocument) {
|
||||
return;
|
||||
}
|
||||
|
||||
var pagesCount = pdfDocument.numPages;
|
||||
var self = this;
|
||||
|
||||
var resolvePagesPromise;
|
||||
var pagesPromise = new Promise(function (resolve) {
|
||||
resolvePagesPromise = resolve;
|
||||
});
|
||||
this.pagesPromise = pagesPromise;
|
||||
pagesPromise.then(function () {
|
||||
self._pageViewsReady = true;
|
||||
self.eventBus.dispatch('pagesloaded', {
|
||||
source: self,
|
||||
pagesCount: pagesCount
|
||||
var pagesCapability = createPromiseCapability();
|
||||
this.pagesPromise = pagesCapability.promise;
|
||||
|
||||
pagesCapability.promise.then(() => {
|
||||
this._pageViewsReady = true;
|
||||
this.eventBus.dispatch('pagesloaded', {
|
||||
source: this,
|
||||
pagesCount,
|
||||
});
|
||||
});
|
||||
|
||||
var isOnePageRenderedResolved = false;
|
||||
var resolveOnePageRendered = null;
|
||||
var onePageRendered = new Promise(function (resolve) {
|
||||
resolveOnePageRendered = resolve;
|
||||
});
|
||||
this.onePageRendered = onePageRendered;
|
||||
var onePageRenderedCapability = createPromiseCapability();
|
||||
this.onePageRendered = onePageRenderedCapability.promise;
|
||||
|
||||
var bindOnAfterAndBeforeDraw = function (pageView) {
|
||||
pageView.onBeforeDraw = function pdfViewLoadOnBeforeDraw() {
|
||||
var bindOnAfterAndBeforeDraw = (pageView) => {
|
||||
pageView.onBeforeDraw = () => {
|
||||
// Add the page to the buffer at the start of drawing. That way it can
|
||||
// be evicted from the buffer and destroyed even if we pause its
|
||||
// rendering.
|
||||
self._buffer.push(this);
|
||||
this._buffer.push(pageView);
|
||||
};
|
||||
pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() {
|
||||
pageView.onAfterDraw = () => {
|
||||
if (!isOnePageRenderedResolved) {
|
||||
isOnePageRenderedResolved = true;
|
||||
resolveOnePageRendered();
|
||||
onePageRenderedCapability.resolve();
|
||||
}
|
||||
};
|
||||
};
|
||||
@ -357,7 +348,7 @@ var PDFViewer = (function pdfViewer() {
|
||||
|
||||
// Fetch a single page so we can get a viewport that will be the default
|
||||
// viewport for all pages
|
||||
return firstPagePromise.then(function(pdfPage) {
|
||||
return firstPagePromise.then((pdfPage) => {
|
||||
var scale = this.currentScale;
|
||||
var viewport = pdfPage.getViewport(scale * CSS_UNITS);
|
||||
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
|
||||
@ -382,34 +373,31 @@ var PDFViewer = (function pdfViewer() {
|
||||
this._pages.push(pageView);
|
||||
}
|
||||
|
||||
var linkService = this.linkService;
|
||||
|
||||
// Fetch all the pages since the viewport is needed before printing
|
||||
// starts to create the correct size canvas. Wait until one page is
|
||||
// rendered so we don't tie up too many resources early on.
|
||||
onePageRendered.then(function () {
|
||||
if (!PDFJS.disableAutoFetch) {
|
||||
var getPagesLeft = pagesCount;
|
||||
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
|
||||
pdfDocument.getPage(pageNum).then(function (pageNum, pdfPage) {
|
||||
var pageView = self._pages[pageNum - 1];
|
||||
if (!pageView.pdfPage) {
|
||||
pageView.setPdfPage(pdfPage);
|
||||
}
|
||||
linkService.cachePageRef(pageNum, pdfPage.ref);
|
||||
getPagesLeft--;
|
||||
if (!getPagesLeft) {
|
||||
resolvePagesPromise();
|
||||
}
|
||||
}.bind(null, pageNum));
|
||||
}
|
||||
} else {
|
||||
onePageRenderedCapability.promise.then(() => {
|
||||
if (PDFJS.disableAutoFetch) {
|
||||
// XXX: Printing is semi-broken with auto fetch disabled.
|
||||
resolvePagesPromise();
|
||||
pagesCapability.resolve();
|
||||
return;
|
||||
}
|
||||
var getPagesLeft = pagesCount;
|
||||
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
|
||||
pdfDocument.getPage(pageNum).then(function(pageNum, pdfPage) {
|
||||
var pageView = this._pages[pageNum - 1];
|
||||
if (!pageView.pdfPage) {
|
||||
pageView.setPdfPage(pdfPage);
|
||||
}
|
||||
this.linkService.cachePageRef(pageNum, pdfPage.ref);
|
||||
if (--getPagesLeft === 0) {
|
||||
pagesCapability.resolve();
|
||||
}
|
||||
}.bind(this, pageNum));
|
||||
}
|
||||
});
|
||||
|
||||
self.eventBus.dispatch('pagesinit', {source: self});
|
||||
this.eventBus.dispatch('pagesinit', { source: this });
|
||||
|
||||
if (this.defaultRenderingQueue) {
|
||||
this.update();
|
||||
@ -418,7 +406,7 @@ var PDFViewer = (function pdfViewer() {
|
||||
if (this.findController) {
|
||||
this.findController.resolveFirstPage();
|
||||
}
|
||||
}.bind(this));
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user