deleted accidental file
This commit is contained in:
parent
0a0c9da3af
commit
a6f0f43683
95
;
95
;
@ -1,95 +0,0 @@
|
|||||||
import {TOOL_INFO_CLASSNAME, WIDE_CLASSNAME} from '../config.js';
|
|
||||||
import {hash} from '../helper.js';
|
|
||||||
import {Tool} from '../tool.js';
|
|
||||||
|
|
||||||
export class StateTool extends Tool {
|
|
||||||
stored = [];
|
|
||||||
|
|
||||||
setContainer(container) {
|
|
||||||
super.setContainer(container);
|
|
||||||
|
|
||||||
const buttons = document.createElement('div');
|
|
||||||
const save = document.createElement('button');
|
|
||||||
const list = document.createElement('div');
|
|
||||||
|
|
||||||
save.innerHTML = 'Save';
|
|
||||||
|
|
||||||
save.classList.add(WIDE_CLASSNAME);
|
|
||||||
buttons.style.display = 'flex';
|
|
||||||
buttons.style.flexDirection = 'row';
|
|
||||||
buttons.appendChild(save);
|
|
||||||
list.style.display = 'flex';
|
|
||||||
list.style.flexDirection = 'column';
|
|
||||||
this.div.appendChild(buttons);
|
|
||||||
this.div.appendChild(list);
|
|
||||||
|
|
||||||
save.addEventListener('click', async () => {
|
|
||||||
const state = this.sim.toJSON();
|
|
||||||
this.stored.push(state);
|
|
||||||
const item = await this.createItem(state);
|
|
||||||
list.appendChild(item);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Check url query parameter, and load specified state if found
|
|
||||||
const paramsString = window.location.search;
|
|
||||||
const searchParams = new URLSearchParams(paramsString);
|
|
||||||
const stateEnc = searchParams.get("state"); // a
|
|
||||||
if (stateEnc) {
|
|
||||||
const stateText = decodeURI(stateEnc);
|
|
||||||
const state = JSON.parse(stateText);
|
|
||||||
// Tools in this system can be very powerful
|
|
||||||
this.sim.fromJSON(state);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getStateDescription(state) {
|
|
||||||
const d = new Date(state.dateSaved);
|
|
||||||
return `${d.toLocaleDateString()} ${d.toLocaleTimeString()}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
async createItem(state) {
|
|
||||||
const item = document.createElement('div');
|
|
||||||
item.style.display = 'flex';
|
|
||||||
item.style.flexDirection = 'row';
|
|
||||||
item.style.flexWrap = 'wrap';
|
|
||||||
|
|
||||||
const description = document.createElement('button');
|
|
||||||
description.style.flex = '2';
|
|
||||||
description.classList.add(TOOL_INFO_CLASSNAME);
|
|
||||||
description.innerHTML = this.getStateDescription(state);
|
|
||||||
|
|
||||||
const load = document.createElement('button');
|
|
||||||
load.style.flex = '1';
|
|
||||||
load.innerHTML = 'Load';
|
|
||||||
|
|
||||||
const link = document.createElement('a');
|
|
||||||
const {url, digest} = await this.toUrl(state);
|
|
||||||
link.classList.add(TOOL_INFO_CLASSNAME);
|
|
||||||
link.classList.add(WIDE_CLASSNAME);
|
|
||||||
link.href = url;
|
|
||||||
link.innerHTML = digest.slice(0, 6);
|
|
||||||
|
|
||||||
load.appendChild(link);
|
|
||||||
|
|
||||||
item.appendChild(description);
|
|
||||||
item.appendChild(load);
|
|
||||||
|
|
||||||
load.addEventListener('click', (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
// Tools in this system can wield great power
|
|
||||||
this.sim.fromJSON(state);
|
|
||||||
});
|
|
||||||
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
async toUrl(state) {
|
|
||||||
const stateText = JSON.stringify(state);
|
|
||||||
// const stateB64 = window.btoa(stateText);
|
|
||||||
const rawUrl = `./?state=${stateText}`;
|
|
||||||
const url = encodeURI(rawUrl);
|
|
||||||
const digest = await hash(stateText);
|
|
||||||
return {url, digest};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user