From a9e5bc91fb841f5b3773b180f7d7b560596ab447 Mon Sep 17 00:00:00 2001
From: Jonas Jenwald <jonas.jenwald@gmail.com>
Date: Sat, 13 May 2017 13:57:21 +0200
Subject: [PATCH] Replace unnecessary `var self = this` statements with arrow
 functions in `web/pdf_page_view.js` and `web/pdf_thumbnail_view.js`

Also replaces `var` with `let` in code that's touched in the patch. Please note that this should be completely safe, for two separate reasons, since trying to access let in a scope where it's not defined is first of all a runtime error and second of all an ESLint error (thanks to the `no-undef` rule).
---
 web/pdf_page_view.js      | 105 ++++++++++++++++++--------------------
 web/pdf_thumbnail_view.js |  48 ++++++++---------
 2 files changed, 71 insertions(+), 82 deletions(-)

diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js
index c0060d672..9a563ce7b 100644
--- a/web/pdf_page_view.js
+++ b/web/pdf_page_view.js
@@ -356,7 +356,7 @@ var PDFPageView = (function PDFPageViewClosure() {
       return this.viewport.convertToPdfPoint(x, y);
     },
 
-    draw: function PDFPageView_draw() {
+    draw() {
       if (this.renderingState !== RenderingStates.INITIAL) {
         console.error('Must be in new state before drawing');
         this.reset(); // Ensure that we reset all state to prevent issues.
@@ -364,12 +364,11 @@ var PDFPageView = (function PDFPageViewClosure() {
 
       this.renderingState = RenderingStates.RUNNING;
 
-      var self = this;
-      var pdfPage = this.pdfPage;
-      var div = this.div;
+      let pdfPage = this.pdfPage;
+      let div = this.div;
       // Wrap the canvas so if it has a css transform for highdpi the overflow
       // will be hidden in FF.
-      var canvasWrapper = document.createElement('div');
+      let canvasWrapper = document.createElement('div');
       canvasWrapper.style.width = div.style.width;
       canvasWrapper.style.height = div.style.height;
       canvasWrapper.classList.add('canvasWrapper');
@@ -381,10 +380,9 @@ var PDFPageView = (function PDFPageViewClosure() {
         div.appendChild(canvasWrapper);
       }
 
-      var textLayerDiv = null;
-      var textLayer = null;
+      let textLayer = null;
       if (this.textLayerFactory) {
-        textLayerDiv = document.createElement('div');
+        let textLayerDiv = document.createElement('div');
         textLayerDiv.className = 'textLayer';
         textLayerDiv.style.width = canvasWrapper.style.width;
         textLayerDiv.style.height = canvasWrapper.style.height;
@@ -401,13 +399,13 @@ var PDFPageView = (function PDFPageViewClosure() {
       }
       this.textLayer = textLayer;
 
-      var renderContinueCallback = null;
+      let renderContinueCallback = null;
       if (this.renderingQueue) {
-        renderContinueCallback = function renderContinueCallback(cont) {
-          if (!self.renderingQueue.isHighestPriority(self)) {
-            self.renderingState = RenderingStates.PAUSED;
-            self.resume = function resumeCallback() {
-              self.renderingState = RenderingStates.RUNNING;
+        renderContinueCallback = (cont) => {
+          if (!this.renderingQueue.isHighestPriority(this)) {
+            this.renderingState = RenderingStates.PAUSED;
+            this.resume = () => {
+              this.renderingState = RenderingStates.RUNNING;
               cont();
             };
             return;
@@ -416,37 +414,37 @@ var PDFPageView = (function PDFPageViewClosure() {
         };
       }
 
-      var finishPaintTask = function finishPaintTask(error) {
+      let finishPaintTask = (error) => {
         // The paintTask may have been replaced by a new one, so only remove
         // the reference to the paintTask if it matches the one that is
         // triggering this callback.
-        if (paintTask === self.paintTask) {
-          self.paintTask = null;
+        if (paintTask === this.paintTask) {
+          this.paintTask = null;
         }
 
         if (((typeof PDFJSDev === 'undefined' ||
               !PDFJSDev.test('PDFJS_NEXT')) && error === 'cancelled') ||
             error instanceof RenderingCancelledException) {
-          self.error = null;
+          this.error = null;
           return Promise.resolve(undefined);
         }
 
-        self.renderingState = RenderingStates.FINISHED;
+        this.renderingState = RenderingStates.FINISHED;
 
-        if (self.loadingIconDiv) {
-          div.removeChild(self.loadingIconDiv);
-          delete self.loadingIconDiv;
+        if (this.loadingIconDiv) {
+          div.removeChild(this.loadingIconDiv);
+          delete this.loadingIconDiv;
         }
-        self._resetZoomLayer(/* removeFromDOM = */ true);
+        this._resetZoomLayer(/* removeFromDOM = */ true);
 
-        self.error = error;
-        self.stats = pdfPage.stats;
-        if (self.onAfterDraw) {
-          self.onAfterDraw();
+        this.error = error;
+        this.stats = pdfPage.stats;
+        if (this.onAfterDraw) {
+          this.onAfterDraw();
         }
-        self.eventBus.dispatch('pagerendered', {
-          source: self,
-          pageNumber: self.id,
+        this.eventBus.dispatch('pagerendered', {
+          source: this,
+          pageNumber: this.id,
           cssTransform: false,
         });
 
@@ -456,13 +454,13 @@ var PDFPageView = (function PDFPageViewClosure() {
         return Promise.resolve(undefined);
       };
 
-      var paintTask = this.renderer === RendererType.SVG ?
+      let paintTask = this.renderer === RendererType.SVG ?
         this.paintOnSvg(canvasWrapper) :
         this.paintOnCanvas(canvasWrapper);
       paintTask.onRenderContinue = renderContinueCallback;
       this.paintTask = paintTask;
 
-      var resultPromise = paintTask.promise.then(function () {
+      let resultPromise = paintTask.promise.then(function() {
         return finishPaintTask(null).then(function () {
           if (textLayer) {
             pdfPage.getTextContent({
@@ -473,7 +471,7 @@ var PDFPageView = (function PDFPageViewClosure() {
             });
           }
         });
-      }, function (reason) {
+      }, function(reason) {
         return finishPaintTask(reason);
       });
 
@@ -583,21 +581,17 @@ var PDFPageView = (function PDFPageViewClosure() {
         }
       };
 
-      renderTask.promise.then(
-        function pdfPageRenderCallback() {
-          showCanvas();
-          renderCapability.resolve(undefined);
-        },
-        function pdfPageRenderError(error) {
-          showCanvas();
-          renderCapability.reject(error);
-        }
-      );
-
+      renderTask.promise.then(function() {
+        showCanvas();
+        renderCapability.resolve(undefined);
+      }, function(error) {
+        showCanvas();
+        renderCapability.reject(error);
+      });
       return result;
     },
 
-    paintOnSvg: function PDFPageView_paintOnSvg(wrapper) {
+    paintOnSvg(wrapper) {
       if (typeof PDFJSDev !== 'undefined' &&
           PDFJSDev.test('FIREFOX || MOZCENTRAL || CHROME')) {
         // Return a mock object, to prevent errors such as e.g.
@@ -609,33 +603,32 @@ var PDFPageView = (function PDFPageViewClosure() {
         };
       }
 
-      var cancelled = false;
-      var ensureNotCancelled = function () {
+      let cancelled = false;
+      let ensureNotCancelled = () => {
         if (cancelled) {
           if ((typeof PDFJSDev !== 'undefined' &&
                PDFJSDev.test('PDFJS_NEXT')) || PDFJS.pdfjsNext) {
             throw new RenderingCancelledException(
-              'Rendering cancelled, page ' + self.id, 'svg');
+              'Rendering cancelled, page ' + this.id, 'svg');
           } else {
             throw 'cancelled'; // eslint-disable-line no-throw-literal
           }
         }
       };
 
-      var self = this;
-      var pdfPage = this.pdfPage;
-      var actualSizeViewport = this.viewport.clone({scale: CSS_UNITS});
-      var promise = pdfPage.getOperatorList().then(function (opList) {
+      let pdfPage = this.pdfPage;
+      let actualSizeViewport = this.viewport.clone({ scale: CSS_UNITS, });
+      let promise = pdfPage.getOperatorList().then((opList) => {
         ensureNotCancelled();
         var svgGfx = new SVGGraphics(pdfPage.commonObjs, pdfPage.objs);
-        return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) {
+        return svgGfx.getSVG(opList, actualSizeViewport).then((svg) => {
           ensureNotCancelled();
-          self.svg = svg;
-          self.paintedViewportMap.set(svg, actualSizeViewport);
+          this.svg = svg;
+          this.paintedViewportMap.set(svg, actualSizeViewport);
 
           svg.style.width = wrapper.style.width;
           svg.style.height = wrapper.style.height;
-          self.renderingState = RenderingStates.FINISHED;
+          this.renderingState = RenderingStates.FINISHED;
           wrapper.appendChild(svg);
         });
       });
diff --git a/web/pdf_thumbnail_view.js b/web/pdf_thumbnail_view.js
index 1a43c2d82..6d4aca892 100644
--- a/web/pdf_thumbnail_view.js
+++ b/web/pdf_thumbnail_view.js
@@ -267,7 +267,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
       delete this.canvas;
     },
 
-    draw: function PDFThumbnailView_draw() {
+    draw() {
       if (this.renderingState !== RenderingStates.INITIAL) {
         console.error('Must be in new state before drawing');
         return Promise.resolve(undefined);
@@ -275,15 +275,14 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
 
       this.renderingState = RenderingStates.RUNNING;
 
-      var renderCapability = createPromiseCapability();
+      let renderCapability = createPromiseCapability();
 
-      var self = this;
-      function thumbnailDrawCallback(error) {
+      let finishRenderTask = (error) => {
         // The renderTask may have been replaced by a new one, so only remove
         // the reference to the renderTask if it matches the one that is
         // triggering this callback.
-        if (renderTask === self.renderTask) {
-          self.renderTask = null;
+        if (renderTask === this.renderTask) {
+          this.renderTask = null;
         }
 
         if (((typeof PDFJSDev === 'undefined' ||
@@ -293,23 +292,23 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
           return;
         }
 
-        self.renderingState = RenderingStates.FINISHED;
-        self._convertCanvasToImage();
+        this.renderingState = RenderingStates.FINISHED;
+        this._convertCanvasToImage();
 
         if (!error) {
           renderCapability.resolve(undefined);
         } else {
           renderCapability.reject(error);
         }
-      }
+      };
 
-      var ctx = this._getPageDrawContext();
-      var drawViewport = this.viewport.clone({ scale: this.scale });
-      var renderContinueCallback = function renderContinueCallback(cont) {
-        if (!self.renderingQueue.isHighestPriority(self)) {
-          self.renderingState = RenderingStates.PAUSED;
-          self.resume = function resumeCallback() {
-            self.renderingState = RenderingStates.RUNNING;
+      let ctx = this._getPageDrawContext();
+      let drawViewport = this.viewport.clone({ scale: this.scale, });
+      let renderContinueCallback = (cont) => {
+        if (!this.renderingQueue.isHighestPriority(this)) {
+          this.renderingState = RenderingStates.PAUSED;
+          this.resume = () => {
+            this.renderingState = RenderingStates.RUNNING;
             cont();
           };
           return;
@@ -317,21 +316,18 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
         cont();
       };
 
-      var renderContext = {
+      let renderContext = {
         canvasContext: ctx,
         viewport: drawViewport
       };
-      var renderTask = this.renderTask = this.pdfPage.render(renderContext);
+      let renderTask = this.renderTask = this.pdfPage.render(renderContext);
       renderTask.onContinue = renderContinueCallback;
 
-      renderTask.promise.then(
-        function pdfPageRenderCallback() {
-          thumbnailDrawCallback(null);
-        },
-        function pdfPageRenderError(error) {
-          thumbnailDrawCallback(error);
-        }
-      );
+      renderTask.promise.then(function() {
+        finishRenderTask(null);
+      }, function(error) {
+        finishRenderTask(error);
+      });
       return renderCapability.promise;
     },