Skip to content

Commit 2f45268

Browse files
committed
fix
1 parent f54fecf commit 2f45268

File tree

7 files changed

+23
-100
lines changed

7 files changed

+23
-100
lines changed

templates/shared/repo/fileviewrender.tmpl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@
22
data-raw-file-link="{{$.RawFileLink}}"
33
data-fallback-text="{{ctx.Locale.Tr "repo.file_view_raw"}}"
44
data-error-header="{{ctx.Locale.Tr "repo.file_render_failed"}}">
5-
<a class="file-view-raw-prompt" href="{{$.RawFileLink}}" rel="nofollow" class="tw-p-4">{{ctx.Locale.Tr "repo.file_view_raw"}}</a>
5+
<div class="file-view-raw-prompt tw-p-4">
6+
<a href="{{$.RawFileLink}}" rel="nofollow">{{ctx.Locale.Tr "repo.file_view_raw"}}</a>
7+
</div>
68
</div>

web_src/css/file-view.css

Lines changed: 2 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,3 @@
1-
/**
2-
* File View & Render Plugin Styles
3-
*/
4-
5-
/* file view container */
6-
.file-view-container {
7-
position: relative;
8-
width: 100%;
9-
min-height: 200px;
10-
display: flex;
11-
align-items: center;
12-
justify-content: center;
1+
/* TODO: add more styles? */
2+
.file-view-render-container {
133
}
14-
15-
.view-raw-fallback {
16-
padding: 16px;
17-
text-align: center;
18-
}
19-
20-
/* 3D model viewer */
21-
.model3d-content {
22-
width: 100% !important;
23-
min-height: 400px !important;
24-
border: none !important;
25-
display: flex;
26-
align-items: center;
27-
justify-content: center;
28-
}
29-
30-
/* PDF viewer */
31-
.pdf-view-content {
32-
width: 100%;
33-
height: 600px;
34-
border: none !important;
35-
display: flex;
36-
align-items: center;
37-
justify-content: center;
38-
}
39-
40-
.pdf-view-content .pdf-fallback-button {
41-
margin: 50px auto;
42-
}
43-
44-
.file-view-container .pdfobject {
45-
border-radius: 0 0 var(--border-radius) var(--border-radius);
46-
}
47-
48-
.pdf-view-content.is-loading {
49-
height: var(--height-loading);
50-
}
51-
52-
/* error message */
53-
.file-view-container .ui.error.message {
54-
margin: 1em 0;
55-
width: 100%;
56-
}
57-
58-
.file-view-container .ui.error.message pre {
59-
margin-top: 0.5em;
60-
font-size: 12px;
61-
max-height: 150px;
62-
overflow: auto;
63-
background-color: rgba(255, 255, 255, 0.1);
64-
padding: 0.5em;
65-
}

web_src/css/repo.css

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,6 @@ td .commit-summary {
183183
cursor: default;
184184
}
185185

186-
.view-raw {
187-
display: flex;
188-
justify-content: center;
189-
align-items: center;
190-
}
191-
192186
.view-raw > * {
193187
max-width: 100%;
194188
}

web_src/js/features/file-view.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export function initFileViewRender(): void {
2121

2222
let rendered = false, errorMsg = '';
2323
try {
24-
rendered = await applyRenderPlugin(container);
24+
rendered = await applyRenderPlugin(container, rawFileLink);
2525
} catch (e) {
2626
errorMsg = `${e}`;
2727
}
@@ -36,7 +36,7 @@ export function initFileViewRender(): void {
3636

3737
if (errorMsg) {
3838
const elErrorMessage = createElementFromHTML(htmlEscape`<div class="ui error message">${errorMsg}</div>`);
39-
container.insertBefore(elErrorMessage, elViewRawPrompt);
39+
elViewRawPrompt.insertAdjacentElement('afterbegin', elErrorMessage);
4040
}
4141
});
4242
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export async function applyRenderPlugin(container: HTMLElement, rawFileLink: str
4242
if (!plugin) return false;
4343

4444
container.classList.add('is-loading');
45+
container.setAttribute('data-render-name', plugin.name);
4546
await plugin.render(container, rawFileLink);
4647
return true;
4748
} finally {

web_src/js/render/plugins/3d-viewer.ts

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,31 +19,24 @@ export function register3DViewerPlugin(): void {
1919
const plugin: FileRenderPlugin = {
2020
name: '3d-model-viewer',
2121

22-
// check if file extension is supported 3D file
22+
// check if file extension is a supported 3D file
2323
canHandle(filename: string, _mimeType: string): boolean {
2424
const ext = filename.substring(filename.lastIndexOf('.')).toLowerCase();
25-
const canHandle = SUPPORTED_EXTENSIONS.includes(ext);
26-
return canHandle;
25+
return SUPPORTED_EXTENSIONS.includes(ext);
2726
},
2827

2928
// render 3D model
3029
async render(container: HTMLElement, fileUrl: string): Promise<void> {
31-
try {
32-
const OV = await import(/* webpackChunkName: "online-3d-viewer" */'online-3d-viewer');
33-
container.classList.add('model3d-content');
34-
const viewer = new OV.EmbeddedViewer(container, {
35-
backgroundColor: new OV.RGBAColor(59, 68, 76, 0),
36-
defaultColor: new OV.RGBColor(65, 131, 196),
37-
edgeSettings: new OV.EdgeSettings(false, new OV.RGBColor(0, 0, 0), 1),
38-
});
39-
viewer.LoadModelFromUrlList([fileUrl]);
40-
} catch (error) {
41-
console.error('error rendering 3D model:', error);
42-
throw error;
43-
}
30+
const OV = await import(/* webpackChunkName: "online-3d-viewer" */'online-3d-viewer');
31+
container.classList.add('model3d-content');
32+
const viewer = new OV.EmbeddedViewer(container, {
33+
backgroundColor: new OV.RGBAColor(59, 68, 76, 0),
34+
defaultColor: new OV.RGBColor(65, 131, 196),
35+
edgeSettings: new OV.EdgeSettings(false, new OV.RGBColor(0, 0, 0), 1),
36+
});
37+
viewer.LoadModelFromUrlList([fileUrl]);
4438
},
4539
};
4640

47-
// register plugin
4841
registerFileRenderPlugin(plugin);
4942
}

web_src/js/render/plugins/pdf-viewer.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,11 @@ export function registerPdfViewerPlugin(): void {
88
return filename.toLowerCase().endsWith('.pdf');
99
},
1010
async render(container: HTMLElement, fileUrl: string): Promise<void> {
11-
try {
12-
const PDFObject = await import(/* webpackChunkName: "pdfobject" */'pdfobject');
13-
container.classList.add('pdf-view-content');
14-
const fallbackText = container.getAttribute('data-fallback-text');
15-
PDFObject.default.embed(fileUrl, container, {
16-
fallbackLink: `<a role="button" class="ui basic button pdf-fallback-button" href="${fileUrl}" target="_blank">${fallbackText}</a>`,
17-
});
18-
} catch (error) {
19-
console.error('error rendering PDF:', error);
20-
throw error;
11+
const PDFObject = await import(/* webpackChunkName: "pdfobject" */'pdfobject');
12+
// TODO: the PDFObject library does not support dynamic height adjustment,
13+
container.style.height = `${window.innerHeight - 100}px`;
14+
if (!PDFObject.default.embed(fileUrl, container)) {
15+
throw new Error('Unable to render the PDF file');
2116
}
2217
},
2318
};

0 commit comments

Comments
 (0)