Skip to content

Commit 24d7bab

Browse files
committed
fix
1 parent 2f45268 commit 24d7bab

File tree

4 files changed

+16
-34
lines changed

4 files changed

+16
-34
lines changed

templates/shared/repo/fileviewrender.tmpl

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
<div class="file-view-render-container" data-global-init="initFileViewRender"
2-
data-raw-file-link="{{$.RawFileLink}}"
3-
data-fallback-text="{{ctx.Locale.Tr "repo.file_view_raw"}}"
4-
data-error-header="{{ctx.Locale.Tr "repo.file_render_failed"}}">
1+
<div class="file-view-render-container" data-global-init="initFileViewRender" data-raw-file-link="{{$.RawFileLink}}">
52
<div class="file-view-raw-prompt tw-p-4">
63
<a href="{{$.RawFileLink}}" rel="nofollow">{{ctx.Locale.Tr "repo.file_view_raw"}}</a>
74
</div>

web_src/css/file-view.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
/* TODO: add more styles? */
2-
.file-view-render-container {
1+
.file-view-render-container :last-child {
2+
border-radius: 0 0 var(--border-radius) var(--border-radius); /* to match the "ui segment" bottom radius */
33
}

web_src/js/features/file-view.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import {applyRenderPlugin} from '../modules/file-render-plugin.ts';
1+
import {findFileRenderPlugin} from '../modules/file-render-plugin.ts';
22
import {registerGlobalInitFunc} from '../modules/observer.ts';
33
import {createElementFromHTML} from '../utils/dom.ts';
44
import {register3DViewerPlugin} from '../render/plugins/3d-viewer.ts';
55
import {registerPdfViewerPlugin} from '../render/plugins/pdf-viewer.ts';
66
import {htmlEscape} from 'escape-goat';
7+
import {basename} from '../utils.ts';
78

89
export function initFileViewRender(): void {
910
let pluginRegistered = false;
@@ -16,14 +17,23 @@ export function initFileViewRender(): void {
1617
}
1718

1819
const rawFileLink = container.getAttribute('data-raw-file-link');
20+
const mimeType = container.getAttribute('data-mime-type') || ''; // not used yet
1921
const elViewRawPrompt = container.querySelector('.file-view-raw-prompt');
2022
if (!rawFileLink || !elViewRawPrompt) throw new Error('unexpected file view container');
2123

2224
let rendered = false, errorMsg = '';
2325
try {
24-
rendered = await applyRenderPlugin(container, rawFileLink);
26+
const plugin = findFileRenderPlugin(basename(rawFileLink), mimeType);
27+
if (plugin) {
28+
container.classList.add('is-loading');
29+
container.setAttribute('data-render-name', plugin.name); // not used yet
30+
await plugin.render(container, rawFileLink);
31+
rendered = true;
32+
}
2533
} catch (e) {
2634
errorMsg = `${e}`;
35+
} finally {
36+
container.classList.remove('is-loading');
2737
}
2838

2939
if (rendered) {

web_src/js/modules/file-render-plugin.ts

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,12 @@ export type FileRenderPlugin = {
1515
render: (container: HTMLElement, fileUrl: string, options?: any) => Promise<void>;
1616
}
1717

18-
// store registered render plugins
1918
const plugins: FileRenderPlugin[] = [];
2019

21-
/**
22-
* register a file render plugin
23-
*/
2420
export function registerFileRenderPlugin(plugin: FileRenderPlugin): void {
2521
plugins.push(plugin);
2622
}
2723

28-
/**
29-
* find suitable render plugin by filename and mime type
30-
*/
31-
function findPlugin(filename: string, mimeType: string): FileRenderPlugin | null {
24+
export function findFileRenderPlugin(filename: string, mimeType: string): FileRenderPlugin | null {
3225
return plugins.find((plugin) => plugin.canHandle(filename, mimeType)) || null;
3326
}
34-
35-
/**
36-
* apply render plugin to specified container
37-
*/
38-
export async function applyRenderPlugin(container: HTMLElement, rawFileLink: string): Promise<boolean> {
39-
try {
40-
const mimeType = container.getAttribute('data-mime-type') || '';
41-
const plugin = findPlugin(rawFileLink, mimeType);
42-
if (!plugin) return false;
43-
44-
container.classList.add('is-loading');
45-
container.setAttribute('data-render-name', plugin.name);
46-
await plugin.render(container, rawFileLink);
47-
return true;
48-
} finally {
49-
container.classList.remove('is-loading');
50-
}
51-
}

0 commit comments

Comments
 (0)