diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2018-09-10 18:18:49 +0200 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2018-10-23 17:23:59 +0200 |
commit | 8ebce9c149112d59552ed530361f80372455fdb2 (patch) | |
tree | ebc90eb93345d1b3a77841ed2a92e56a4c1b1baf /platform/wasm/view.html | |
parent | ddd00f62888c908c84932c2a92a0c2d195b26c36 (diff) | |
download | mupdf-8ebce9c149112d59552ed530361f80372455fdb2.tar.xz |
Add Emscripten / WebAssembly build.
Requires Linux (or possibly MacOS X) and an installed emsdk to build.
Diffstat (limited to 'platform/wasm/view.html')
-rw-r--r-- | platform/wasm/view.html | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/platform/wasm/view.html b/platform/wasm/view.html new file mode 100644 index 00000000..0ff34916 --- /dev/null +++ b/platform/wasm/view.html @@ -0,0 +1,84 @@ +<!DOCTYPE html> +<html> +<head> +<title>Loading...</title> +<meta charset="utf-8"> +<style> +body { background-color:gray; margin:0; padding:0; } +#outline { position:fixed; top:0; left:0; width:20em; max-width:20em; height:100%; overflow-y:scroll; background-color:white; } +#outline ul { margin:0; padding-left:1em; font-size:small; } +#outline a { text-decoration:none; } +#outline a:hover { text-decoration:underline; } +#outline + #pages { margin-left:20em; } +#pages img { display:block; margin:1em auto; background-color:white; } +</style> +<script src="libmupdf.js"></script> +<script> + +var currentDocument = null +var blankPages = []; +var DPI = 96; + +var filename = new URL(window.location.href).searchParams.get("file"); +if (!filename) + filename = "pdfref13.pdf"; + +Module.preRun = function () { + FS.createPreloadedFile(".", filename, filename, true, false); +}; + +Module.postRun = function () { + var pagesDiv = document.getElementById("pages"); + + console.log("mupdf: opening", filename); + currentDocument = mupdf.openDocument(filename); + document.title = mupdf.documentTitle(currentDocument); + + var outline = mupdf.documentOutline(currentDocument); + if (outline) { + var outlineDiv = document.createElement("div"); + outlineDiv.id = "outline"; + outlineDiv.appendChild(outline); + document.body.insertBefore(outlineDiv, pagesDiv); + } + + var i, n = mupdf.countPages(currentDocument); + for (i = 1; i <= n; ++i) { + var img = new Image(); + img.id = "page" + i; + img.pageNumber = i; + img.width = mupdf.pageWidth(currentDocument, i, DPI); + img.height = mupdf.pageHeight(currentDocument, i, DPI); + img.useMap = "#map" + i; + var map = document.createElement("map"); + map.name = "map" + i; + map.innerHTML = mupdf.pageLinks(currentDocument, i, DPI); + pagesDiv.appendChild(img); + pagesDiv.appendChild(map); + blankPages[i] = img; + } + + console.log("mupdf: loaded", n, "pages"); + + document.onscroll(); +} + +document.onscroll = function () { + function isVisible(element) { + return ((window.pageYOffset + window.innerHeight) > element.offsetTop) && + (window.pageYOffset < (element.offsetTop + element.scrollHeight)); + } + var i, n = blankPages.length; + for (i = 1; i <= n; ++i) { + if (blankPages[i] && isVisible(blankPages[i])) { + console.log("mupdf: drawing page", i); + blankPages[i].src = mupdf.drawPageAsPNG(currentDocument, i, DPI); + blankPages[i] = undefined; + } + }; +} + +</script> +</head> +<body><div id="pages"></div></body> +</html> |