Update index.html
Browse files- index.html +126 -2
index.html
CHANGED
|
@@ -7,6 +7,130 @@
|
|
| 7 |
<link rel="stylesheet" href="style.css" />
|
| 8 |
</head>
|
| 9 |
<body>
|
| 10 |
-
<
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
</html>
|
|
|
|
| 7 |
<link rel="stylesheet" href="style.css" />
|
| 8 |
</head>
|
| 9 |
<body>
|
| 10 |
+
<script>
|
| 11 |
+
toastr.options.progressBar = true;
|
| 12 |
+
|
| 13 |
+
const url = "https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf";
|
| 14 |
+
|
| 15 |
+
const pdfjsLib = window["pdfjs-dist/build/pdf"];
|
| 16 |
+
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
| 17 |
+
"//mozilla.github.io/pdf.js/build/pdf.worker.js";
|
| 18 |
+
|
| 19 |
+
let loggedIn = false,
|
| 20 |
+
pdfDoc = null,
|
| 21 |
+
pageNum = 1,
|
| 22 |
+
pageRendering = false,
|
| 23 |
+
pageNumPending = null,
|
| 24 |
+
scale = 1,
|
| 25 |
+
canvas = document.getElementById("pdfviewer"),
|
| 26 |
+
ctx = canvas.getContext("2d");
|
| 27 |
+
|
| 28 |
+
/**
|
| 29 |
+
* Get page info from document, resize canvas accordingly, and render page.
|
| 30 |
+
* @param num Page number.
|
| 31 |
+
*/
|
| 32 |
+
function renderPage(num) {
|
| 33 |
+
pageRendering = true;
|
| 34 |
+
// Using promise to fetch the page
|
| 35 |
+
pdfDoc.getPage(num).then(function(page) {
|
| 36 |
+
const viewport = page.getViewport({scale});
|
| 37 |
+
canvas.height = viewport.height;
|
| 38 |
+
canvas.width = viewport.width;
|
| 39 |
+
|
| 40 |
+
// Render PDF page into canvas context
|
| 41 |
+
var renderContext = {
|
| 42 |
+
canvasContext: ctx,
|
| 43 |
+
viewport: viewport
|
| 44 |
+
};
|
| 45 |
+
var renderTask = page.render(renderContext);
|
| 46 |
+
|
| 47 |
+
// Wait for rendering to finish
|
| 48 |
+
renderTask.promise.then(function() {
|
| 49 |
+
pageRendering = false;
|
| 50 |
+
if (pageNumPending !== null) {
|
| 51 |
+
// New page rendering is pending
|
| 52 |
+
renderPage(pageNumPending);
|
| 53 |
+
pageNumPending = null;
|
| 54 |
+
}
|
| 55 |
+
});
|
| 56 |
+
});
|
| 57 |
+
|
| 58 |
+
// Update page counters
|
| 59 |
+
document.getElementById("currentPage").textContent = num;
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
/**
|
| 63 |
+
* If another page rendering in progress, waits until the rendering is
|
| 64 |
+
* finised. Otherwise, executes rendering immediately.
|
| 65 |
+
*/
|
| 66 |
+
function queueRenderPage(num) {
|
| 67 |
+
if (pageRendering) {
|
| 68 |
+
pageNumPending = num;
|
| 69 |
+
} else {
|
| 70 |
+
renderPage(num);
|
| 71 |
+
}
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
/**
|
| 75 |
+
* Asynchronously downloads PDF.
|
| 76 |
+
*/
|
| 77 |
+
pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
|
| 78 |
+
pdfDoc = pdfDoc_;
|
| 79 |
+
document.getElementById("totalPages").textContent = pdfDoc.numPages;
|
| 80 |
+
|
| 81 |
+
// Initial/first page rendering
|
| 82 |
+
renderPage(pageNum || 1);
|
| 83 |
+
});
|
| 84 |
+
|
| 85 |
+
function onPrevPage() {
|
| 86 |
+
if (pageNum <= 1) {
|
| 87 |
+
return;
|
| 88 |
+
}
|
| 89 |
+
pageNum--;
|
| 90 |
+
queueRenderPage(pageNum);
|
| 91 |
+
}
|
| 92 |
+
document.getElementById("prev").addEventListener("click", onPrevPage);
|
| 93 |
+
|
| 94 |
+
function onNextPage() {
|
| 95 |
+
if (
|
| 96 |
+
(pageNum < 5) ||
|
| 97 |
+
loggedIn
|
| 98 |
+
) {
|
| 99 |
+
if (pageNum >= pdfDoc.numPages) {
|
| 100 |
+
return;
|
| 101 |
+
}
|
| 102 |
+
pageNum++;
|
| 103 |
+
queueRenderPage(pageNum);
|
| 104 |
+
} else {
|
| 105 |
+
toastr.error("You Must be Logged in to view more pages", "Sorry");
|
| 106 |
+
}
|
| 107 |
+
}
|
| 108 |
+
document.getElementById("next").addEventListener("click", onNextPage);
|
| 109 |
+
|
| 110 |
+
|
| 111 |
+
document.getElementById("download").addEventListener("click", (e) => {
|
| 112 |
+
if (loggedIn) {
|
| 113 |
+
toastr.success('You can download the Document', 'Ok!');
|
| 114 |
+
} else {
|
| 115 |
+
toastr.error("You Must be Logged in to Download this Document", "Sorry");
|
| 116 |
+
}
|
| 117 |
+
});
|
| 118 |
+
|
| 119 |
+
|
| 120 |
+
const loggedInClass = "bg-green-500";
|
| 121 |
+
const loggedOutClass = "bg-red-500";
|
| 122 |
+
$(".nav").prepend($("<a>", {href: "#"})
|
| 123 |
+
.text("Logged In")
|
| 124 |
+
.addClass("border py-2 px-4 rounded " + ((loggedIn)?loggedInClass:loggedOutClass))
|
| 125 |
+
.on("click", function(e) {
|
| 126 |
+
e.preventDefault();
|
| 127 |
+
if (loggedIn) {
|
| 128 |
+
$(this).removeClass(loggedInClass).addClass(loggedOutClass);
|
| 129 |
+
loggedIn = false;
|
| 130 |
+
} else {
|
| 131 |
+
$(this).removeClass(loggedOutClass).addClass(loggedInClass);
|
| 132 |
+
loggedIn = true;
|
| 133 |
+
}
|
| 134 |
+
}))
|
| 135 |
+
; </script></body>
|
| 136 |
</html>
|