Skip to content

Commit 673e026

Browse files
committed
Add PDF rendering via PDFObject
1 parent 0d54395 commit 673e026

File tree

8 files changed

+47
-5
lines changed

8 files changed

+47
-5
lines changed

package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
"minimatch": "9.0.0",
3838
"monaco-editor": "0.38.0",
3939
"monaco-editor-webpack-plugin": "7.0.1",
40+
"pdfobject": "2.2.11",
4041
"pretty-ms": "8.0.0",
4142
"sortablejs": "1.15.0",
4243
"swagger-ui-dist": "4.18.3",

templates/repo/settings/lfs_file.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
{{else if .IsPlainText}}
2020
<pre>{{if .FileContent}}{{.FileContent | Safe}}{{end}}</pre>
2121
{{else if not .IsTextFile}}
22-
<div class="view-raw ui center">
22+
<div class="view-raw ui center{{if .IsPDFFile}} gt-p-0{{end}}">
2323
{{if .IsImageFile}}
2424
<img src="{{$.RawFileLink}}">
2525
{{else if .IsVideoFile}}
@@ -31,7 +31,7 @@
3131
<strong>{{.locale.Tr "repo.audio_not_supported_in_browser"}}</strong>
3232
</audio>
3333
{{else if .IsPDFFile}}
34-
<iframe width="100%" height="600px" src="{{AssetUrlPrefix}}/vendor/plugins/pdfjs/web/viewer.html?file={{$.RawFileLink}}"></iframe>
34+
<div class="pdf-content is-loading" data-src="{{$.RawFileLink}}" data-fallback-button-text="{{.locale.Tr "diff.view_file"}}"></div>
3535
{{else}}
3636
<a href="{{$.RawFileLink}}" rel="nofollow" class="btn btn-gray btn-radius">{{.locale.Tr "repo.file_view_raw"}}</a>
3737
{{end}}

templates/repo/view_file.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
{{else if .IsPlainText}}
7474
<pre>{{if .FileContent}}{{.FileContent | Safe}}{{end}}</pre>
7575
{{else if not .IsTextSource}}
76-
<div class="view-raw ui center">
76+
<div class="view-raw ui center{{if .IsPDFFile}} gt-p-0{{end}}">
7777
{{if .IsImageFile}}
7878
<img src="{{$.RawFileLink}}">
7979
{{else if .IsVideoFile}}
@@ -85,7 +85,7 @@
8585
<strong>{{.locale.Tr "repo.audio_not_supported_in_browser"}}</strong>
8686
</audio>
8787
{{else if .IsPDFFile}}
88-
<iframe width="100%" height="600px" src="{{AssetUrlPrefix}}/vendor/plugins/pdfjs/web/viewer.html?file={{$.RawFileLink}}"></iframe>
88+
<div class="pdf-content is-loading" data-src="{{$.RawFileLink}}" data-fallback-button-text="{{.locale.Tr "repo.diff.view_file"}}"></div>
8989
{{else}}
9090
<a href="{{$.RawFileLink}}" rel="nofollow" class="btn btn-gray btn-radius">{{.locale.Tr "repo.file_view_raw"}}</a>
9191
{{end}}

web_src/css/modules/animations.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
}
3030

3131
.markup pre.is-loading,
32-
.editor-loading.is-loading {
32+
.editor-loading.is-loading,
33+
.pdf-content.is-loading {
3334
height: var(--height-loading);
3435
}
3536

web_src/css/repo.css

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,19 @@
413413
max-width: 600px !important;
414414
}
415415

416+
.pdf-content {
417+
width: 100%;
418+
height: 600px;
419+
border: none !important;
420+
display: flex;
421+
align-items: center;
422+
justify-content: center;
423+
}
424+
425+
.pdf-content:has(.pdf-fallback-button) {
426+
height: 100px;
427+
}
428+
416429
.repository.file.list .non-diff-file-content .plain-text {
417430
padding: 1em 2em;
418431
}

web_src/js/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {initRepoIssueContentHistory} from './features/repo-issue-content.js';
2121
import {initStopwatch} from './features/stopwatch.js';
2222
import {initFindFileInRepo} from './features/repo-findfile.js';
2323
import {initCommentContent, initMarkupContent} from './markup/content.js';
24+
import {initPdfViewer} from './render/pdf.js';
2425

2526
import {initUserAuthLinkAccountView, initUserAuthOauth2} from './features/user-auth.js';
2627
import {
@@ -177,4 +178,5 @@ onDomReady(() => {
177178
initUserAuthWebAuthnRegister();
178179
initUserSettings();
179180
initRepoDiffView();
181+
initPdfViewer();
180182
});

web_src/js/render/pdf.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import {htmlEscape} from 'escape-goat';
2+
3+
export async function initPdfViewer() {
4+
const els = document.querySelectorAll('.pdf-content');
5+
if (!els.length) return;
6+
7+
const pdfobject = await import(/* webpackChunkName: "pdfobject" */'pdfobject');
8+
9+
for (const el of els) {
10+
const src = el.getAttribute('data-src');
11+
const fallbackText = el.getAttribute('data-fallback-button-text');
12+
pdfobject.embed(src, el, {
13+
fallbackLink: htmlEscape`
14+
<a role="button" class="ui basic button pdf-fallback-button" href="[url]">${fallbackText}</a>
15+
`,
16+
});
17+
el.classList.remove('is-loading');
18+
}
19+
}

0 commit comments

Comments
 (0)