]> git.parisson.com Git - pdf.js.git/commitdiff
Merge branch 'master' into new-ui
authorArtur Adib <arturadib@gmail.com>
Wed, 18 Apr 2012 19:02:49 +0000 (15:02 -0400)
committerArtur Adib <arturadib@gmail.com>
Wed, 18 Apr 2012 19:02:49 +0000 (15:02 -0400)
Conflicts:
web/viewer.html
web/viewer.js

1  2 
web/viewer.html
web/viewer.js

diff --cc web/viewer.html
index ff9c01ae297740cef3d61522c7bc7cff8baf0cc2,ef61ce697c82c27d32a4614867ac1396bf2106cf..4fd0bded485388a95182196634f4f6521c725a80
 -<!DOCTYPE html>
  <html>
 -    <head>
 -        <title>Simple pdf.js page viewer</title>
 -        <!-- PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION -->
 -
 -        <link rel="stylesheet" href="viewer.css"/>
 -
 -        <script type="text/javascript" src="compatibility.js"></script> <!-- PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION -->
 -
 -        <!-- PDFJSSCRIPT_INCLUDE_BUILD -->
 -        <script type="text/javascript" src="../src/core.js"></script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/util.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/api.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/metadata.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/canvas.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/obj.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/function.js"></script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/charsets.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/cidmaps.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/colorspace.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/crypto.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/evaluator.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/fonts.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/glyphlist.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/image.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/metrics.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/parser.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/pattern.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/stream.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/worker.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../external/jpgjs/jpg.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/jpx.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="../src/bidi.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript">PDFJS.workerSrc = '../src/worker_loader.js';</script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 -        <script type="text/javascript" src="debugger.js"></script>
 -        <script type="text/javascript" src="viewer.js"></script>
 -
 -
 -    </head>
 +  <head>
-     <title>PDF viewer</title>
++    <title>PDF.js viewer</title>
 +    <!-- PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION -->
 +
 +    <link rel="stylesheet" href="viewer.css"/>
 +
 +    <script type="text/javascript" src="compatibility.js"></script> <!-- PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION -->
 +
 +    <!-- PDFJSSCRIPT_INCLUDE_BUILD -->
 +    <script type="text/javascript" src="../src/core.js"></script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/util.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
++    <script type="text/javascript" src="../src/api.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/metadata.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/canvas.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/obj.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/function.js"></script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/charsets.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/cidmaps.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/colorspace.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/crypto.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/evaluator.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/fonts.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/glyphlist.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/image.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/metrics.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/parser.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/pattern.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/stream.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/worker.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../external/jpgjs/jpg.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/jpx.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="../src/bidi.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript">PDFJS.workerSrc = '../src/worker_loader.js';</script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 +    <script type="text/javascript" src="debugger.js"></script>
 +    <script type="text/javascript" src="viewer.js"></script>
 +  </head>
-   
    <body>
-     
 -    <div id="controls">
 -      <button id="previous" onclick="PDFView.page--;" oncontextmenu="return false;">
 -        <img src="images/go-up.svg" align="top" height="16"/>
 -        Previous
 -      </button>
 -
 -      <button id="next" onclick="PDFView.page++;" oncontextmenu="return false;">
 -        <img src="images/go-down.svg" align="top" height="16"/>
 -        Next
 -      </button>
 -
 -      <div class="separator"></div>
 -
 -      <input type="number" id="pageNumber" onchange="PDFView.page = this.value;" value="1" size="4" min="1" />
 -
 -      <span>/</span>
 -      <span id="numPages">--</span>
 -
 -      <div class="separator"></div>
 -
 -      <button id="zoomOut" title="Zoom Out" onclick="PDFView.zoomOut();" oncontextmenu="return false;">
 -        <img src="images/zoom-out.svg" align="top" height="16"/>
 -      </button>
 -      <button id="zoomIn" title="Zoom In" onclick="PDFView.zoomIn();" oncontextmenu="return false;">
 -        <img src="images/zoom-in.svg" align="top" height="16"/>
 -      </button>
 -
 -      <div class="separator"></div>
 -
 -      <select id="scaleSelect" onchange="PDFView.parseScale(this.value);" oncontextmenu="return false;">
 -        <option id="customScaleOption" value="custom"></option>
 -        <option value="0.5">50%</option>
 -        <option value="0.75">75%</option>
 -        <option value="1">100%</option>
 -        <option value="1.25">125%</option>
 -        <option value="1.5">150%</option>
 -        <option value="2">200%</option>
 -        <option id="pageWidthOption" value="page-width">Page Width</option>
 -        <option id="pageFitOption" value="page-fit">Page Fit</option>
 -        <option id="pageAutoOption" value="auto" selected="selected">Auto</option>
 -      </select>
 -
 -      <div class="separator"></div>
 -
 -      <button id="print" onclick="window.print();" oncontextmenu="return false;">
 -        <img src="images/document-print.svg" align="top" height="16"/>
 -        Print
 -      </button>
 +    <div id="outerContainer">
 +
 +      <div class="toolbar">
 +        <div id="toolbarContainer">
 +          <div id="toolbarSidebar" class="hidden">
 +            <div class="splitToolbarButton toggled">
 +              <div id="viewThumbnail" class="toolbarButton toggled" title="Show Thumbnails" onclick="PDFView.switchSidebarView('thumbs')"></div>
 +              <div class="splitToolbarButtonSeparator"></div>
 +              <div id="viewOutline" class="toolbarButton" title="Show Document Outline" onclick="PDFView.switchSidebarView('outline')" disabled></div>
 +            </div>
 +          </div>
 +          <div id="toolbarViewer">
 +            <div id="sidebarToggle" class="toolbarButton" title="Toggle Sidebar"></div>
 +            <div class="toolbarButtonSpacer"></div>
 +            <div class="splitToolbarButton">
 +              <div class="toolbarButton pageUp" title="Previous Page" onclick="PDFView.page--"></div>
 +              <div class="splitToolbarButtonSeparator"></div>
 +              <div class="toolbarButton pageDown" title="Next Page" onclick="PDFView.page++"></div>
 +            </div>
 +            <input type="number" id="pageNumber" class="toolbarField" onchange="PDFView.page = this.value;" value="1" size="4" min="1">
 +            </input>
 +            <div id="numPages" class="toolbarLabel"></div>
 +            <div class="toolbarButtonFlexibleSpacer"></div>
 +            <div class="splitToolbarButton">
 +              <div class="toolbarButton zoomOut" title="Zoom Out" onclick="PDFView.zoomOut();"></div>
 +              <div class="splitToolbarButtonSeparator"></div>
 +              <div class="toolbarButton zoomIn" title="Zoom In" onclick="PDFView.zoomIn();"></div>
 +            </div>
 +            <div class="dropdownToolbarButton">
 +               <select id="scaleSelect" onchange="PDFView.parseScale(this.value);" oncontextmenu="return false;">
 +                <option id="customScaleOption" value="custom"></option>
 +                <option value="0.5">50%</option>
 +                <option value="0.75">75%</option>
 +                <option value="1">100%</option>
 +                <option value="1.25">125%</option>
 +                <option value="1.5">150%</option>
 +                <option value="2">200%</option>
 +                <option id="pageWidthOption" value="page-width">Page Width</option>
 +                <option id="pageFitOption" value="page-fit">Page Fit</option>
 +                <option id="pageAutoOption" value="auto" selected="selected">Auto</option>
 +              </select>
 +            </div>
 +
 +            <div class="toolbarButtonFlexibleSpacer"></div>
 +
 +            <input id="fileInput" class="toolbarButton fileInput" type="file" oncontextmenu="return false;"/>
 +
 +            <div class="toolbarButtonSpacer"></div>
 +
 +            <!-- <div class="toolbarButton print" title="Print"></div> -->
 +            <div id="download" class="toolbarButton download" title="Download" onclick="PDFView.download();"></div>
 +            <a href="#" id="viewBookmark" class="toolbarButton bookmark" title="Bookmark (or copy) current location">
 +            </a>
 +          </div>
 +        </div>
 +      </div>
  
 -      <button id="download" title="Download" onclick="PDFView.download();" oncontextmenu="return false;">
 -        <img src="images/download.svg" align="top" height="16"/>
 -        Download
 -      </button>
 +      <div id="sidebarContainer" class="hidden">
 +        <div id="thumbnailView">
 +        </div>
  
 -      <div class="separator"></div>
 +        <div id="outlineView" class="hidden">
 +        </div>
 +      </div>
  
 -      <input id="fileInput" type="file" oncontextmenu="return false;"/>
 +      <div id="viewerContainer">
 +        <div id="viewer" />
 +      </div>
  
 -      <div id="fileInputSeperator" class="separator"></div>
 +      <div id="loadingBox">
 +          <div id="loading">Loading... 0%</div>
 +          <div id="loadingBar"><div class="progress"></div></div>
 +      </div>
  
 -      <a href="#" id="viewBookmark" title="Bookmark (or copy) current location">
 -        <img src="images/bookmark.svg" alt="Bookmark" align="top" height="16"/>
 -      </a>
 +    </div> <!-- outerContainer -->
  
 -    </div>
      <div id="errorWrapper" hidden='true'>
        <div id="errorMessageLeft">
          <span id="errorMessage"></span>
diff --cc web/viewer.js
index b58c3ecc25eee63f6c3ed88c74a260476c00d182,e43a4621ddd9cd13f415cc1b7a4edd9db9919720..fdf8f9fd47af53ce075b6a3874dae238d1dab384
@@@ -489,16 -489,10 +489,10 @@@ var PDFView = 
      while (container.hasChildNodes())
        container.removeChild(container.lastChild);
  
-     var pdf;
-     try {
-       pdf = new PDFJS.PDFDoc(data);
-     } catch (e) {
-       this.error('An error occurred while reading the PDF.', e);
-     }
-     var pagesCount = pdf.numPages;
-     var id = pdf.fingerprint;
+     var pagesCount = pdfDocument.numPages;
+     var id = pdfDocument.fingerprint;
      var storedHash = null;
 -    document.getElementById('numPages').textContent = pagesCount;
 +    document.getElementById('numPages').textContent = '/ ' + pagesCount;
      document.getElementById('pageNumber').max = pagesCount;
      PDFView.documentFingerprint = id;
      var store = PDFView.store = new Settings(id);
      var pages = this.pages = [];
      var pagesRefMap = {};
      var thumbnails = this.thumbnails = [];
-     for (var i = 1; i <= pagesCount; i++) {
-       var page = pdf.getPage(i);
-       var pageView = new PageView(container, page, i, page.width, page.height,
-                                   page.stats, this.navigateTo.bind(this));
-       var thumbnailView = new ThumbnailView(thumbsView, page, i,
-                                             page.width / page.height);
-       bindOnAfterDraw(pageView, thumbnailView);
-       pages.push(pageView);
-       thumbnails.push(thumbnailView);
-       var pageRef = page.ref;
-       pagesRefMap[pageRef.num + ' ' + pageRef.gen + ' R'] = i;
-     }
+     var pagePromises = [];
+     for (var i = 1; i <= pagesCount; i++)
+       pagePromises.push(pdfDocument.getPage(i));
+     var self = this;
+     var pagesPromise = PDFJS.Promise.all(pagePromises);
+     pagesPromise.then(function(promisedPages) {
+       for (var i = 1; i <= pagesCount; i++) {
+         var page = promisedPages[i - 1];
+         var pageView = new PageView(container, page, i, scale,
+                                     page.stats, self.navigateTo.bind(self));
 -        var thumbnailView = new ThumbnailView(sidebar, page, i);
++        var thumbnailView = new ThumbnailView(thumbsView, page, i);
+         bindOnAfterDraw(pageView, thumbnailView);
+         pages.push(pageView);
+         thumbnails.push(thumbnailView);
+         var pageRef = page.ref;
+         pagesRefMap[pageRef.num + ' ' + pageRef.gen + ' R'] = i;
+       }
  
-     this.pagesRefMap = pagesRefMap;
-     this.destinations = pdf.catalog.destinations;
+       self.pagesRefMap = pagesRefMap;
+     });
  
-     if (pdf.catalog.documentOutline) {
-       this.outline = new DocumentOutlineView(pdf.catalog.documentOutline);
-       var outlineSwitchButton = document.getElementById('viewOutline');
-       outlineSwitchButton.removeAttribute('disabled');
-       this.switchSidebarView('outline');
-     }
+     var destinationsPromise = pdfDocument.getDestinations();
+     destinationsPromise.then(function(destinations) {
+       self.destinations = destinations;
+     });
+     // outline and initial view depends on destinations and pagesRefMap
+     PDFJS.Promise.all([pagesPromise, destinationsPromise]).then(function() {
+       pdfDocument.getOutline().then(function(outline) {
+         if (!outline)
+           return;
  
 -        var outlineSwitchButton = document.getElementById('outlineSwitch');
+         self.outline = new DocumentOutlineView(outline);
++        var outlineSwitchButton = document.getElementById('viewOutline');
+         outlineSwitchButton.removeAttribute('disabled');
+         self.switchSidebarView('outline');
+       });
+       self.setInitialView(storedHash, scale);
+     });
+     pdfDocument.getMetadata().then(function(data) {
+       var info = data.info, metadata = data.metadata;
+       self.documentInfo = info;
+       self.metadata = metadata;
+       var pdfTitle;
+       if (metadata) {
+         if (metadata.has('dc:title'))
+           pdfTitle = metadata.get('dc:title');
+       }
+       if (!pdfTitle && info && info['Title'])
+         pdfTitle = info['Title'];
+       if (pdfTitle)
+         document.title = pdfTitle + ' - ' + document.title;
+     });
+   },
+   setInitialView: function pdfViewSetInitialView(storedHash, scale) {
      // Reset the current scale, as otherwise the page's scale might not get
      // updated if the zoom level stayed the same.
      this.currentScale = 0;
      var kBottomMargin = 5;
      var visibleThumbs = [];
  
 -    var view = document.getElementById('sidebarScrollView');
 +    var view = document.getElementById('thumbnailView');
      var currentHeight = kBottomMargin;
--    var top = view.scrollTop;
++    
++    var top = view.scrollTop;    
      for (var i = 1; i <= thumbs.length; ++i) {
        var thumb = thumbs[i - 1];
        var thumbHeight = thumb.height * thumb.scaleY + kBottomMargin;
@@@ -985,15 -1037,19 +1035,16 @@@ var ThumbnailView = function thumbnailV
      return false;
    };
  
-   var view = page.view;
-   this.width = view.width;
-   this.height = view.height;
+   var viewport = pdfPage.getViewport(1);
+   var pageWidth = viewport.width;
+   var pageHeight = viewport.height;
+   var pageRatio = pageWidth / pageHeight;
    this.id = id;
  
 -  var maxThumbSize = 134;
 -  var canvasWidth = this.width = pageRatio >= 1 ? maxThumbSize :
 -    maxThumbSize * pageRatio;
 -  var canvasHeight = this.height = pageRatio <= 1 ? maxThumbSize :
 -    maxThumbSize / pageRatio;
 +  var canvasWidth = 98;
 +  var canvasHeight = canvasWidth / this.width * this.height;
-   var scaleX = this.scaleX = (canvasWidth / this.width);
-   var scaleY = this.scaleY = (canvasHeight / this.height);
+   var scaleX = this.scaleX = (canvasWidth / pageWidth);
+   var scaleY = this.scaleY = (canvasHeight / pageHeight);
  
    var div = document.createElement('div');
    div.id = 'thumbnailContainer' + id;
  
      canvas.width = canvasWidth;
      canvas.height = canvasHeight;
 +    canvas.className = 'thumbnailImage';
  
      div.setAttribute('data-loaded', true);
 -    div.appendChild(canvas);
++    
 +    var ring = document.createElement('div');
 +    ring.className = 'thumbnailSelectionRing';
 +    ring.appendChild(canvas);
 +    div.appendChild(ring);
  
      var ctx = canvas.getContext('2d');
      ctx.save();
@@@ -1263,16 -1321,9 +1319,18 @@@ window.addEventListener('load', functio
      PDFBug.init();
    }
  
 -  var sidebarScrollView = document.getElementById('sidebarScrollView');
 -  sidebarScrollView.addEventListener('scroll', updateThumbViewArea, true);
 +  var thumbsView = document.getElementById('thumbnailView');
 +  thumbsView.addEventListener('scroll', updateThumbViewArea, true);
 +
 +  document.getElementById('sidebarToggle').addEventListener('click',
 +    function() {
 +      this.classList.toggle('toggled');
 +      document.getElementById('toolbarSidebar').classList.toggle('hidden');
 +      document.getElementById('sidebarContainer').classList.toggle('hidden');
 +      updateThumbViewArea();
 +    });
++
+   PDFView.open(file, 0);
  }, true);
  
  /**