50 lines
1.9 KiB
TypeScript
50 lines
1.9 KiB
TypeScript
import {Controller} from "./main";
|
|
import {SaveInfo} from "./api";
|
|
|
|
export class FileView {
|
|
readonly fileListView: HTMLElement;
|
|
readonly controller: Controller;
|
|
|
|
constructor(controller: Controller) {
|
|
(document.getElementById("fileview") as HTMLElement).innerHTML = require('./fileview.html') as string;
|
|
this.fileListView = document.getElementById("fileList") as HTMLElement;
|
|
this.controller = controller;
|
|
}
|
|
|
|
setSaveList(saves: SaveInfo[], public_url: string) {
|
|
// Sort newest first (highest index = most recently written slot)
|
|
const sorted = saves.slice().sort((a, b) => b.idx - a.idx);
|
|
|
|
this.fileListView.textContent = "";
|
|
for (let i = 0; i < sorted.length; i++) {
|
|
new SaveEntry(this.controller, i, sorted[i], this.fileListView, public_url);
|
|
}
|
|
}
|
|
}
|
|
|
|
class SaveEntry {
|
|
view: HTMLElement;
|
|
constructor(controller: Controller, fileid: number, saveinfo: SaveInfo, parent: HTMLElement, public_url: string) {
|
|
this.view = document.createElement("div") as HTMLElement;
|
|
parent.appendChild(this.view);
|
|
this.view.classList.add("fileentryouter");
|
|
|
|
const template = require('./fileviewentry.html') as string;
|
|
this.view.innerHTML = template.replaceAll("${fileid}", String(fileid));
|
|
|
|
let name = document.getElementById("file_" + fileid + "_name") as HTMLElement;
|
|
let size = document.getElementById("file_" + fileid + "_size") as HTMLElement;
|
|
let deleteBtn = document.getElementById("file_" + fileid + "_delete") as HTMLButtonElement;
|
|
deleteBtn.onclick = () => {
|
|
controller.deleteSlot(saveinfo.idx);
|
|
};
|
|
|
|
let downloadBtn = document.getElementById("file_" + fileid + "_download") as HTMLAnchorElement;
|
|
downloadBtn.href = public_url + "/get_config?saveidx=" + saveinfo.idx;
|
|
downloadBtn.download = "config_slot_" + saveinfo.idx + ".json";
|
|
|
|
name.innerText = "Slot " + saveinfo.idx;
|
|
size.innerText = saveinfo.len + " bytes";
|
|
}
|
|
}
|