Convert RenderTask, in src/display/api.js, to an ES6 class

Also deprecates the `then` method, in favour of the `promise` getter.
This commit is contained in:
Jonas Jenwald 2018-11-08 13:46:02 +01:00
parent ef8e5fd77c
commit 2c003a82d5
4 changed files with 63 additions and 79 deletions

View File

@ -73,7 +73,8 @@ loadingTask.promise.then(function(pdfDocument) {
canvasFactory: canvasFactory canvasFactory: canvasFactory
}; };
page.render(renderContext).then(function () { var renderTask = page.render(renderContext);
renderTask.promise.then(function() {
// Convert the canvas to an image buffer. // Convert the canvas to an image buffer.
var image = canvasAndContext.canvas.toBuffer(); var image = canvasAndContext.canvas.toBuffer();
fs.writeFile('output.png', image, function (error) { fs.writeFile('output.png', image, function (error) {

View File

@ -2280,11 +2280,10 @@ class PDFObjects {
/** /**
* Allows controlling of the rendering tasks. * Allows controlling of the rendering tasks.
* @class
* @alias RenderTask * @alias RenderTask
*/ */
var RenderTask = (function RenderTaskClosure() { class RenderTask {
function RenderTask(internalRenderTask) { constructor(internalRenderTask) {
this._internalRenderTask = internalRenderTask; this._internalRenderTask = internalRenderTask;
/** /**
@ -2296,39 +2295,36 @@ var RenderTask = (function RenderTaskClosure() {
this.onContinue = null; this.onContinue = null;
} }
RenderTask.prototype = /** @lends RenderTask.prototype */ { /**
/** * Promise for rendering task completion.
* Promise for rendering task completion. * @return {Promise}
* @return {Promise} */
*/ get promise() {
get promise() { return this._internalRenderTask.capability.promise;
return this._internalRenderTask.capability.promise; }
},
/** /**
* Cancels the rendering task. If the task is currently rendering it will * Cancels the rendering task. If the task is currently rendering it will
* not be cancelled until graphics pauses with a timeout. The promise that * not be cancelled until graphics pauses with a timeout. The promise that
* this object extends will be rejected when cancelled. * this object extends will be rejected when cancelled.
*/ */
cancel: function RenderTask_cancel() { cancel() {
this._internalRenderTask.cancel(); this._internalRenderTask.cancel();
}, }
/** /**
* Registers callbacks to indicate the rendering task completion. * Registers callbacks to indicate the rendering task completion.
* *
* @param {function} onFulfilled The callback for the rendering completion. * @param {function} onFulfilled The callback for the rendering completion.
* @param {function} onRejected The callback for the rendering failure. * @param {function} onRejected The callback for the rendering failure.
* @return {Promise} A promise that is resolved after the onFulfilled or * @return {Promise} A promise that is resolved after the onFulfilled or
* onRejected callback. * onRejected callback.
*/ */
then: function RenderTask_then(onFulfilled, onRejected) { then(onFulfilled, onRejected) {
return this.promise.then.apply(this.promise, arguments); deprecated('RenderTask.then method, use the `promise` getter instead.');
}, return this.promise.then.apply(this.promise, arguments);
}; }
}
return RenderTask;
})();
/** /**
* For internal use only. * For internal use only.

View File

@ -1332,26 +1332,23 @@ describe('api', function() {
// Render the first page of the given PDF file. // Render the first page of the given PDF file.
// Fulfills the promise with the base64-encoded version of the PDF. // Fulfills the promise with the base64-encoded version of the PDF.
function renderPDF(filename) { async function renderPDF(filename) {
var loadingTask = getDocument(filename); const loadingTask = getDocument(filename);
loadingTasks.push(loadingTask); loadingTasks.push(loadingTask);
return loadingTask.promise const pdf = await loadingTask.promise;
.then(function(pdf) { pdfDocuments.push(pdf);
pdfDocuments.push(pdf); const page = await pdf.getPage(1);
return pdf.getPage(1); const viewport = page.getViewport(1.2);
}).then(function(page) { const canvasAndCtx = CanvasFactory.create(viewport.width,
var viewport = page.getViewport(1.2); viewport.height);
var canvasAndCtx = CanvasFactory.create(viewport.width, const renderTask = page.render({
viewport.height); canvasContext: canvasAndCtx.context,
return page.render({ viewport,
canvasContext: canvasAndCtx.context, });
viewport, await renderTask.promise;
}).then(function() { const data = canvasAndCtx.canvas.toDataURL();
var data = canvasAndCtx.canvas.toDataURL(); CanvasFactory.destroy(canvasAndCtx);
CanvasFactory.destroy(canvasAndCtx); return data;
return data;
});
});
} }
afterEach(function(done) { afterEach(function(done) {

View File

@ -48,9 +48,7 @@ describe('custom canvas rendering', function() {
}).then(function(data) { }).then(function(data) {
page = data; page = data;
done(); done();
}).catch(function (reason) { }).catch(done.fail);
done.fail(reason);
});
}); });
afterAll(function(done) { afterAll(function(done) {
@ -66,20 +64,16 @@ describe('custom canvas rendering', function() {
var viewport = page.getViewport(1); var viewport = page.getViewport(1);
var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height); var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
page.render({ const renderTask = page.render({
canvasContext: canvasAndCtx.context, canvasContext: canvasAndCtx.context,
viewport, viewport,
}).then(function() {
var { r, g, b, a, } = getTopLeftPixel(canvasAndCtx.context);
CanvasFactory.destroy(canvasAndCtx);
expect(r).toEqual(255);
expect(g).toEqual(255);
expect(b).toEqual(255);
expect(a).toEqual(255);
done();
}).catch(function (reason) {
done(reason);
}); });
renderTask.promise.then(function() {
expect(getTopLeftPixel(canvasAndCtx.context)).toEqual(
{ r: 255, g: 255, b: 255, a: 255, });
CanvasFactory.destroy(canvasAndCtx);
done();
}).catch(done.fail);
}); });
it('renders to canvas with a custom background', function(done) { it('renders to canvas with a custom background', function(done) {
@ -89,20 +83,16 @@ describe('custom canvas rendering', function() {
var viewport = page.getViewport(1); var viewport = page.getViewport(1);
var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height); var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
page.render({ const renderTask = page.render({
canvasContext: canvasAndCtx.context, canvasContext: canvasAndCtx.context,
viewport, viewport,
background: 'rgba(255,0,0,1.0)', background: 'rgba(255,0,0,1.0)',
}).then(function() {
var { r, g, b, a, } = getTopLeftPixel(canvasAndCtx.context);
CanvasFactory.destroy(canvasAndCtx);
expect(r).toEqual(255);
expect(g).toEqual(0);
expect(b).toEqual(0);
expect(a).toEqual(255);
done();
}).catch(function (reason) {
done(reason);
}); });
renderTask.promise.then(function() {
expect(getTopLeftPixel(canvasAndCtx.context)).toEqual(
{ r: 255, g: 0, b: 0, a: 255, });
CanvasFactory.destroy(canvasAndCtx);
done();
}).catch(done.fail);
}); });
}); });