From 504d9f12c189049a103cb204e4e0f43f92f28831 Mon Sep 17 00:00:00 2001
From: Artur Adib <arturadib@gmail.com>
Date: Thu, 12 Jan 2012 09:16:03 -0500
Subject: [PATCH] Using addEventListener/removeEventListener

---
 web/viewer.js | 33 ++++++++++++++++-----------------
 1 file changed, 16 insertions(+), 17 deletions(-)

diff --git a/web/viewer.js b/web/viewer.js
index 359b9d3da..bde05418b 100644
--- a/web/viewer.js
+++ b/web/viewer.js
@@ -962,9 +962,11 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
     var textLayerDiv = this.textLayerDiv;
     var renderTimer = null;
     var renderingDone = false;
+    var renderInterval = 0;
+    var resumeInterval = 500; // in ms
 
     // Render the text layer, one div at a time
-    var renderTextLayer = function textLayerRender() {
+    function renderTextLayer() {
       if (textDivs.length === 0) {
         clearInterval(renderTimer);
         renderingDone = true;
@@ -980,21 +982,16 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
             (textDiv.dataset.textLength - 1)) + 'px';
       }
     }
-    renderTimer = setInterval(renderTextLayer, 0);
-
-    var scrollTimer = null;
-    if (window.onscroll)
-      var oldScrollHandler = window.onscroll;
+    renderTimer = setInterval(renderTextLayer, renderInterval);
 
     // Stop rendering when user scrolls. Resume after XXX milliseconds
     // of no scroll events
-    window.onscroll = function textLayerOnScroll() {
-      if (oldScrollHandler)
-        oldScrollHandler.apply(window, arguments);
-
-      // This avoids handler wrapper bloat
-      if (renderingDone)
-        window.onscroll = oldScrollHandler;
+    var scrollTimer = null;
+    function textLayerOnScroll() {
+      if (renderingDone) {
+        window.removeEventListener('scroll', textLayerOnScroll, false);
+        return;
+      }
 
       // Immediately pause rendering
       clearInterval(renderTimer);
@@ -1002,10 +999,12 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
       clearTimeout(scrollTimer);
       scrollTimer = setTimeout(function() {
         // Resume rendering
-        renderTimer = setInterval(renderTextLayer, 0);
-      }, 500);
-    }
-  };
+        renderTimer = setInterval(renderTextLayer, renderInterval);
+      }, resumeInterval);
+    }; // textLayerOnScroll
+
+    window.addEventListener('scroll', textLayerOnScroll, false);
+  }; // endLayout
 
   this.appendText = function textLayerBuilderAppendText(text,
                                                         fontName, fontSize) {