From e4e98979fff54564f20e451bfdf7b05a7da4f11a Mon Sep 17 00:00:00 2001 From: silverwind Date: Mon, 29 May 2023 14:10:00 +0200 Subject: Add PDF rendering via PDFObject (#24086) Use [PDFObject](https://pdfobject.com/) to embed PDFs, replacing our outdated PDF.js copy we vendor (the last non-webpack vendoring). [Commit 1](https://github.com/go-gitea/gitea/pull/24086/commits/673e0263da64b72565ff59b990ab1b8e87271872) is the PDFObject integration [Commit 2](https://github.com/go-gitea/gitea/pull/24086/commits/9336f5769d54445bba0e16776164f6a2fe2c32ac) is the removal of PDF.js Screenshot 2023-05-27 at 09 57 52 Screenshot 2023-05-27 at 10 12 50 Fallback for unsupporting browsers (most mobile ones, except Firefox Mobile): Screenshot 2023-05-27 at 09 43 34 --------- Co-authored-by: Giteabot --- web_src/js/index.js | 2 ++ web_src/js/render/pdf.js | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 web_src/js/render/pdf.js (limited to 'web_src/js') diff --git a/web_src/js/index.js b/web_src/js/index.js index a837375b4e..8f4d379893 100644 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -21,6 +21,7 @@ import {initRepoIssueContentHistory} from './features/repo-issue-content.js'; import {initStopwatch} from './features/stopwatch.js'; import {initFindFileInRepo} from './features/repo-findfile.js'; import {initCommentContent, initMarkupContent} from './markup/content.js'; +import {initPdfViewer} from './render/pdf.js'; import {initUserAuthLinkAccountView, initUserAuthOauth2} from './features/user-auth.js'; import { @@ -177,4 +178,5 @@ onDomReady(() => { initUserAuthWebAuthnRegister(); initUserSettings(); initRepoDiffView(); + initPdfViewer(); }); diff --git a/web_src/js/render/pdf.js b/web_src/js/render/pdf.js new file mode 100644 index 0000000000..f31f161e6e --- /dev/null +++ b/web_src/js/render/pdf.js @@ -0,0 +1,19 @@ +import {htmlEscape} from 'escape-goat'; + +export async function initPdfViewer() { + const els = document.querySelectorAll('.pdf-content'); + if (!els.length) return; + + const pdfobject = await import(/* webpackChunkName: "pdfobject" */'pdfobject'); + + for (const el of els) { + const src = el.getAttribute('data-src'); + const fallbackText = el.getAttribute('data-fallback-button-text'); + pdfobject.embed(src, el, { + fallbackLink: htmlEscape` + ${fallbackText} + `, + }); + el.classList.remove('is-loading'); + } +} -- cgit v1.2.3