aboutsummaryrefslogtreecommitdiff
path: root/static/dist/js/pdf-view.js
diff options
context:
space:
mode:
Diffstat (limited to 'static/dist/js/pdf-view.js')
-rw-r--r--static/dist/js/pdf-view.js108
1 files changed, 108 insertions, 0 deletions
diff --git a/static/dist/js/pdf-view.js b/static/dist/js/pdf-view.js
new file mode 100644
index 00000000..7fd6567e
--- /dev/null
+++ b/static/dist/js/pdf-view.js
@@ -0,0 +1,108 @@
1/** This code is under the Apache License Version 2.0, January 2004
2 * http://www.apache.org/licenses/, as it is heavily based on
3 * documentation of pdf.js (which is under Apache License v2.0)
4 */
5
6PDFJS.workerSrc = '/dist/js/pdf.worker.min.js';
7
8var url = '/presentations/investors2017.pdf';
9
10var pdfDoc = null,
11 pageNum = 1,
12 pageRendering = false,
13 pageNumPending = null,
14 scale = 1,
15 canvasLeft = document.getElementById('the-canvas-left'),
16 canvasRight = document.getElementById('the-canvas-right');
17
18/**
19 * Get page info from document, resize canvas accordingly, and render page.
20 * @param num Page number.
21 */
22function renderPage(canvas,num) {
23 pageRendering = true;
24 // Using promise to fetch the page
25 pdfDoc.getPage(num).then(function(page) {
26 var viewport = page.getViewport(scale);
27 canvas.height = viewport.height;
28 canvas.width = viewport.width;
29
30 // Render PDF page into canvas context
31 var renderContext = {
32 canvasContext: canvas.getContext('2d'),
33 viewport: viewport
34 };
35 var renderTask = page.render(renderContext);
36
37 // Wait for rendering to finish
38 renderTask.promise.then(function() {
39 pageRendering = false;
40 if (pageNumPending !== null) {
41 // New page rendering is pending
42 renderPage(pageNumPending);
43 pageNumPending = null;
44 }
45 });
46 });
47}
48
49/**
50 * If another page rendering in progress, waits until the rendering is
51 * finised. Otherwise, executes rendering immediately.
52 */
53function queueRenderPage(num) {
54 if (pageRendering) {
55 pageNumPending = num;
56 } else {
57 renderPage(canvasLeft,num);
58 renderPage(canvasRight,num+1);
59 }
60}
61
62/**
63 * Displays previous page.
64 */
65function onPrevPage(event) {
66 event.preventDefault();
67 if (pageNum <= 1) {
68 return;
69 }
70 pageNum--;
71 queueRenderPage(pageNum);
72}
73document.getElementById('canvas-left').addEventListener('click', onPrevPage);
74
75/**
76 * Displays next page.
77 */
78function onNextPage(event) {
79 event.preventDefault();
80 if (pageNum >= pdfDoc.numPages - 1) {
81 return;
82 }
83 pageNum++;
84 queueRenderPage(pageNum);
85}
86document.getElementById('canvas-right').addEventListener('click', onNextPage);
87
88document.getElementById('canvas-left').style.display = 'block';
89document.getElementById('canvas-right').style.display = 'block';
90
91
92function onMouseDown(event) {
93 event.preventDefault();
94}
95
96document.getElementById('canvas-left').addEventListener('mousedown', onMouseDown);
97document.getElementById('canvas-right').addEventListener('mousedown', onMouseDown);
98
99/**
100 * Asynchronously downloads PDF.
101 */
102PDFJS.getDocument(url).then(function(pdfDoc_) {
103 pdfDoc = pdfDoc_;
104
105 // Initial/first page rendering
106 renderPage(canvasLeft,pageNum);
107 renderPage(canvasRight,pageNum + 1);
108});