Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions app/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,18 @@
</head>
<body>
<h1>H5Web Web Component Test</h1>
<input type="file" id="fileInput" />
<h5web-viewer id="viewer"></h5web-viewer>

<script src="../dist/h5web.bundle.js"></script>
<script>
document.getElementById('fileInput').addEventListener('change', (event) => {
const file = event.target.files[0];
if (file) {
document.getElementById('viewer').file = file;
}
});
fetch('http://backend.localhost/api/v3/datasets/PID.SAMPLE.PREFIX%2Fukri_ds3/attachments')
.then(response => {
if (!response.ok) throw new Error('Network response was not ok');
return response.json();
})
.then(buffer => {
document.getElementById('viewer').base64Data = buffer[0].thumbnail;
})
</script>
</body>
</html>
26 changes: 23 additions & 3 deletions app/src/h5-element.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export class H5WebViewer extends HTMLElement {
private shadow?: ShadowRoot;
private container?: HTMLDivElement;
private _file?: File;
private _fileName?: string

static get observedAttributes() {
return [];
Expand All @@ -34,9 +35,28 @@ export class H5WebViewer extends HTMLElement {
this.unmount();
}

set file(file: File) {
this._file = file;
this.mount();
set base64Data(base64Data: string) {
this._file = this.base64ToFile(base64Data);
if (this.container && this.isConnected) {
this.mount();
}
}

set fileName(name: string) {
this._fileName = name;
if (this.container && this.isConnected) {
this.mount();
}
}

private base64ToFile(base64Data: string, filename = this._fileName, mimeType = ''): File {
const base64 = base64Data.split(',')[1]
const binary = atob(base64);
const bytes = new Uint8Array(binary.length);
for (let i = 0; i < binary.length; i++) {
bytes[i] = binary.charCodeAt(i);
}
return new File([bytes], filename as string, { type: mimeType });
}

private mount() {
Expand Down
2 changes: 1 addition & 1 deletion app/src/h5-wrapper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ function H5Wrapper({ file }: Props) {
}

return (
<div style={{ height: '100vh' }}>
<div style={{ width: '800px', height: '600px' }}>
<H5WasmLocalFileProvider file={file}>
<App />
</H5WasmLocalFileProvider>
Expand Down
4 changes: 3 additions & 1 deletion app/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { H5WebViewer } from "./h5-element";

customElements.define('h5web-viewer', H5WebViewer);
if (!customElements.get('h5web-viewer')) {
customElements.define('h5web-viewer', H5WebViewer);
}