You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.7 KiB
JavaScript
79 lines
2.7 KiB
JavaScript
import { openDB } from 'indexed-pdb'
|
|
import * as tic from './ticparse.js'
|
|
import * as filesize from 'filesize';
|
|
import {select, selectAll} from "d3-selection";
|
|
import * as CodeMirror from 'codemirror';
|
|
import 'codemirror/mode/lua/lua.js';
|
|
//require('codemirror/addon/fold/foldcode.js');
|
|
//require('codemirror/addon/fold/foldgutter.js');
|
|
//require('codemirror/addon/fold/markdown-fold.js')
|
|
//require("codemirror/theme/monokai.css")
|
|
|
|
|
|
// console.log("codemirror", codemirror);
|
|
|
|
const DB_NAME = "/com.nesbox.tic/TIC-80",
|
|
DB_STORE = "FILE_DATA",
|
|
table = select("#listing").append("table"),
|
|
thead = table.append("thead").append("tr"),
|
|
tbody = table.append("tbody"),
|
|
code = CodeMirror(document.getElementById("code"), {"mode": "lua", "theme": "default"});
|
|
|
|
thead.selectAll("th").data(["name", "size", "time"]).enter().append("th").html(d => d);
|
|
|
|
|
|
(async () => {
|
|
try {
|
|
const db = await openDB(DB_NAME);
|
|
var objectStore = db.transaction([DB_STORE], "readonly").objectStore(DB_STORE);
|
|
var files = [];
|
|
|
|
await objectStore.openCursor().then(function push_item(cursor) {
|
|
if (!cursor) { return }
|
|
// console.log("cursor.value", cursor.value);
|
|
var filename = cursor.key.substr("/com.nesbox.tic/TIC-80/".length);
|
|
if (!filename.startsWith(".")) {
|
|
// console.log(cursor.value.contents);
|
|
files.push({
|
|
key: cursor.key,
|
|
filename: filename,
|
|
size: cursor.value.contents.length,
|
|
timestamp: cursor.value.timestamp
|
|
});
|
|
}
|
|
return cursor.continue().then(push_item)
|
|
})
|
|
|
|
// console.log("files", files);
|
|
let tr = tbody.selectAll("tr").data(files).enter().append("tr");
|
|
tr.append("td").append("a").attr("href", "#").html(d => d.filename).on("click", (e, d) => {
|
|
e.preventDefault();
|
|
load_key(d.key);
|
|
});
|
|
tr.append("td").html(d => filesize(d.size));
|
|
tr.append("td").html(d => d.timestamp.toLocaleString());
|
|
|
|
} catch (error) {
|
|
console.log(error, 'any error during the process');
|
|
}
|
|
|
|
})()
|
|
|
|
var cart;
|
|
|
|
async function load_key (key) {
|
|
const db = await openDB(DB_NAME)
|
|
var objectStore = db.transaction([DB_STORE], "readonly").objectStore(DB_STORE);
|
|
var files = [];
|
|
|
|
await objectStore.get(key).then((cursor) => {
|
|
// console.log("load_key", cursor);
|
|
window.cart = cursor.contents;
|
|
var cart = tic.parsetic(cursor.contents);
|
|
// console.log("code_textarea", code_textarea);
|
|
code.setValue(cart.chunks_by_type[tic.CHUNK_CODE].text);
|
|
});
|
|
|
|
}
|
|
|