text: /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
  
  //
  // See README for overview
  //
  
  'use strict';
  
  // Parse query string to extract some parameters (it can fail for some input)
  var query = document.location.href.replace(/^[^?]*(\?([^#]*))?(#.*)?/, '$2');
  var queryParams = query ? JSON.parse('{' + query.split('&').map(function (a) {
    return a.split('=').map(decodeURIComponent).map(JSON.stringify).join(': ');
  }).join(',') + '}') : {};
  
  var url = queryParams.file || '../../test/pdfs/liveprogramming.pdf';
  var scale = +queryParams.scale || 1.5;
  
  //
  // Fetch the PDF document from the URL using promises
  //
  PDFJS.getDocument(url).then(function(pdf) {
    var numPages = pdf.numPages;
    // Using promise to fetch the page
  
    // For testing only.
    var MAX_NUM_PAGES = 50;
    var ii = Math.min(MAX_NUM_PAGES, numPages);
  
    var promise = Promise.resolve();
    for (var i = 1; i <= ii; i++) {
      var anchor = document.createElement('a');
      anchor.setAttribute('name', 'page=' + i);
      anchor.setAttribute('title', 'Page ' + i);
      document.body.appendChild(anchor);
  
      // Using promise to fetch and render the next page
      promise = promise.then(function (pageNum, anchor) {
        return pdf.getPage(pageNum).then(function (page) {
          var viewport = page.getViewport(scale);
  
          var container = document.createElement('div');
          container.id = 'pageContainer' + pageNum;
          container.className = 'pageContainer';
          container.style.width = viewport.width + 'px';
          container.style.height = viewport.height + 'px';
          anchor.appendChild(container);
  
          return page.getOperatorList().then(function (opList) {
            var svgGfx = new PDFJS.SVGGraphics(page.commonObjs, page.objs);
            return svgGfx.getSVG(opList, viewport).then(function (svg) {
              container.appendChild(svg);
            });
          });
        });
      }.bind(null, i, anchor));
    }
  });
  