| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 | <!--SPDX-License-Identifier: MITThis shortcut was originally taken from: https://github.com/anvithks/hugo-embed-pdf-shortcode,where it is available under the MIT License, where it was originally created by https://github.com/anvithksSince the project seems discontinued, it has been re-created here--><!-- Load the PDF-JS from the local folder (should be updated over time) --><script src= '/js/pdf-js/build/pdf.js'></script><!-- Set the navigation menu --><div id="paginator">    <button id="prev">Previous</button>    <button id="next">Next</button>           <span>Page: <span id="page_num"></span> / <span id="page_count"></span></span></div><!-- And the canvas where the PDF will load --><div id="embed-pdf-container">    <div id="loadingWrapper">      <div id="loading"></div>    </div>    <canvas id="the-canvas"></canvas></div><!-- This script gets the PDF, sets it and passes it on to the already-loaded pdf-js --><script type="text/javascript">window.onload = function() {// If absolute URL from the remote server is provided, configure the CORS// header on that server.var url = "{{.Site.BaseURL}}" + '{{ .Get "src" }}';var hidePaginator = "{{ .Get "hidePaginator" }}" === "true";var hideLoader = "{{ .Get "hideLoader" }}" === "true";var selectedPageNum = parseInt("{{ .Get "renderPageNum" }}") || 1;// Loaded via <script> tag, create shortcut to access PDF.js exports.var pdfjsLib = window['pdfjs-dist/build/pdf'];// The workerSrc property shall be specified.pdfjsLib.GlobalWorkerOptions.workerSrc = "{{.Site.BaseURL}}" + '/js/pdf-js/build/pdf.worker.js';// Change the Scale value for lower or higher resolution.var pdfDoc = null,    pageNum = selectedPageNum,    pageRendering = false,    pageNumPending = null,    scale = 3,    canvas = document.getElementById('the-canvas'),    ctx = canvas.getContext('2d'),    paginator = document.getElementById("paginator"),    loadingWrapper = document.getElementById('loadingWrapper');// Attempt to show paginator and loader if enabledshowPaginator();showLoader();/** * Get page info from document, resize canvas accordingly, and render page. * @param num Page number. */function renderPage(num) {  pageRendering = true;  // Using promise to fetch the page  pdfDoc.getPage(num).then(function(page) {    var viewport = page.getViewport({scale: scale});    canvas.height = viewport.height;    canvas.width = viewport.width;    // Render PDF page into canvas context    var renderContext = {      canvasContext: ctx,      viewport: viewport    };    var renderTask = page.render(renderContext);    // Wait for rendering to finish    renderTask.promise.then(function() {      pageRendering = false;      showContent();      if (pageNumPending !== null) {        // New page rendering is pending        renderPage(pageNumPending);        pageNumPending = null;      }    });  });  // Update page counters  document.getElementById('page_num').textContent = num;}/** * Hides loader and shows canvas */function showContent() {  loadingWrapper.style.display = 'none';  canvas.style.display = 'block';}/** * If we haven't disabled the loader, show loader and hide canvas */function showLoader() {  if(hideLoader) return  loadingWrapper.style.display = 'flex';  canvas.style.display = 'none';}/** * If we haven't disabled the paginator, show paginator */function showPaginator() {  if(hidePaginator) return  paginator.style.display = 'block';}/** * If another page rendering in progress, waits until the rendering is * finished. Otherwise, executes rendering immediately. */function queueRenderPage(num) {  if (pageRendering) {    pageNumPending = num;  } else {    renderPage(num);  }}/** * Displays previous page. */function onPrevPage() {  if (pageNum <= 1) {    return;  }  pageNum--;  queueRenderPage(pageNum);}document.getElementById('prev').addEventListener('click', onPrevPage);/** * Displays next page. */function onNextPage() {  if (pageNum >= pdfDoc.numPages) {    return;  }  pageNum++;  queueRenderPage(pageNum);}document.getElementById('next').addEventListener('click', onNextPage);/** * Asynchronously downloads PDF. */pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {  pdfDoc = pdfDoc_;  var numPages = pdfDoc.numPages;  document.getElementById('page_count').textContent = numPages;  // If the user passed in a number that is out of range, render the last page.  if(pageNum > numPages) {    pageNum = numPages  }  // Initial/first page rendering  renderPage(pageNum);});}</script><!-- Finally, make the canvas more beautiful --><style>#the-canvas {  border: 1px solid black;  direction: ltr;  width: 100%;  height: auto;  display: none;}#paginator {  display: none;  text-align: center;  margin-bottom: 10px;}#loadingWrapper {  display: none;  justify-content: center;  align-items: center;  width: 100%;  height: 350px;}#loading {  display: inline-block;  width: 50px;  height: 50px;  border: 3px solid #d2d0d0;;  border-radius: 50%;  border-top-color: #383838;  animation: spin 1s ease-in-out infinite;  -webkit-animation: spin 1s ease-in-out infinite;}@keyframes spin {  to { -webkit-transform: rotate(360deg); }}@-webkit-keyframes spin {  to { -webkit-transform: rotate(360deg); }}</style>
 |