From 2c003a82d57b5ad778fbf221a86f1d1408c02952 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 8 Nov 2018 13:46:02 +0100 Subject: [PATCH] Convert `RenderTask`, in `src/display/api.js`, to an ES6 class Also deprecates the `then` method, in favour of the `promise` getter. --- examples/node/pdf2png/pdf2png.js | 3 +- src/display/api.js | 64 +++++++++++++++----------------- test/unit/api_spec.js | 35 ++++++++--------- test/unit/custom_spec.js | 40 ++++++++------------ 4 files changed, 63 insertions(+), 79 deletions(-) diff --git a/examples/node/pdf2png/pdf2png.js b/examples/node/pdf2png/pdf2png.js index 08e06aea3..fe0cc74af 100644 --- a/examples/node/pdf2png/pdf2png.js +++ b/examples/node/pdf2png/pdf2png.js @@ -73,7 +73,8 @@ loadingTask.promise.then(function(pdfDocument) { canvasFactory: canvasFactory }; - page.render(renderContext).then(function () { + var renderTask = page.render(renderContext); + renderTask.promise.then(function() { // Convert the canvas to an image buffer. var image = canvasAndContext.canvas.toBuffer(); fs.writeFile('output.png', image, function (error) { diff --git a/src/display/api.js b/src/display/api.js index 57ee38f99..0e4213af4 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -2280,11 +2280,10 @@ class PDFObjects { /** * Allows controlling of the rendering tasks. - * @class * @alias RenderTask */ -var RenderTask = (function RenderTaskClosure() { - function RenderTask(internalRenderTask) { +class RenderTask { + constructor(internalRenderTask) { this._internalRenderTask = internalRenderTask; /** @@ -2296,39 +2295,36 @@ var RenderTask = (function RenderTaskClosure() { this.onContinue = null; } - RenderTask.prototype = /** @lends RenderTask.prototype */ { - /** - * Promise for rendering task completion. - * @return {Promise} - */ - get promise() { - return this._internalRenderTask.capability.promise; - }, + /** + * Promise for rendering task completion. + * @return {Promise} + */ + get promise() { + return this._internalRenderTask.capability.promise; + } - /** - * Cancels the rendering task. If the task is currently rendering it will - * not be cancelled until graphics pauses with a timeout. The promise that - * this object extends will be rejected when cancelled. - */ - cancel: function RenderTask_cancel() { - this._internalRenderTask.cancel(); - }, + /** + * Cancels the rendering task. If the task is currently rendering it will + * not be cancelled until graphics pauses with a timeout. The promise that + * this object extends will be rejected when cancelled. + */ + cancel() { + this._internalRenderTask.cancel(); + } - /** - * Registers callbacks to indicate the rendering task completion. - * - * @param {function} onFulfilled The callback for the rendering completion. - * @param {function} onRejected The callback for the rendering failure. - * @return {Promise} A promise that is resolved after the onFulfilled or - * onRejected callback. - */ - then: function RenderTask_then(onFulfilled, onRejected) { - return this.promise.then.apply(this.promise, arguments); - }, - }; - - return RenderTask; -})(); + /** + * Registers callbacks to indicate the rendering task completion. + * + * @param {function} onFulfilled The callback for the rendering completion. + * @param {function} onRejected The callback for the rendering failure. + * @return {Promise} A promise that is resolved after the onFulfilled or + * onRejected callback. + */ + then(onFulfilled, onRejected) { + deprecated('RenderTask.then method, use the `promise` getter instead.'); + return this.promise.then.apply(this.promise, arguments); + } +} /** * For internal use only. diff --git a/test/unit/api_spec.js b/test/unit/api_spec.js index 42a287263..ead5e5d79 100644 --- a/test/unit/api_spec.js +++ b/test/unit/api_spec.js @@ -1332,26 +1332,23 @@ describe('api', function() { // Render the first page of the given PDF file. // Fulfills the promise with the base64-encoded version of the PDF. - function renderPDF(filename) { - var loadingTask = getDocument(filename); + async function renderPDF(filename) { + const loadingTask = getDocument(filename); loadingTasks.push(loadingTask); - return loadingTask.promise - .then(function(pdf) { - pdfDocuments.push(pdf); - return pdf.getPage(1); - }).then(function(page) { - var viewport = page.getViewport(1.2); - var canvasAndCtx = CanvasFactory.create(viewport.width, - viewport.height); - return page.render({ - canvasContext: canvasAndCtx.context, - viewport, - }).then(function() { - var data = canvasAndCtx.canvas.toDataURL(); - CanvasFactory.destroy(canvasAndCtx); - return data; - }); - }); + const pdf = await loadingTask.promise; + pdfDocuments.push(pdf); + const page = await pdf.getPage(1); + const viewport = page.getViewport(1.2); + const canvasAndCtx = CanvasFactory.create(viewport.width, + viewport.height); + const renderTask = page.render({ + canvasContext: canvasAndCtx.context, + viewport, + }); + await renderTask.promise; + const data = canvasAndCtx.canvas.toDataURL(); + CanvasFactory.destroy(canvasAndCtx); + return data; } afterEach(function(done) { diff --git a/test/unit/custom_spec.js b/test/unit/custom_spec.js index 40ad3e62b..83bfca554 100644 --- a/test/unit/custom_spec.js +++ b/test/unit/custom_spec.js @@ -48,9 +48,7 @@ describe('custom canvas rendering', function() { }).then(function(data) { page = data; done(); - }).catch(function (reason) { - done.fail(reason); - }); + }).catch(done.fail); }); afterAll(function(done) { @@ -66,20 +64,16 @@ describe('custom canvas rendering', function() { var viewport = page.getViewport(1); var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height); - page.render({ + const renderTask = page.render({ canvasContext: canvasAndCtx.context, 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) { @@ -89,20 +83,16 @@ describe('custom canvas rendering', function() { var viewport = page.getViewport(1); var canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height); - page.render({ + const renderTask = page.render({ canvasContext: canvasAndCtx.context, viewport, 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); }); });