basic ui, some filters

This commit is contained in:
2019-01-21 20:39:56 +01:00
parent e76aafc35a
commit 6394f2a869
30 changed files with 974 additions and 111 deletions

60
ui/persistent.js Normal file
View File

@@ -0,0 +1,60 @@
import * as nodes from '../src/nodes';
import defaultValues from './defaultGraph';
export const createNode = ({name, options, id}) => {
try {
const node = new nodes[name](options);
node.deserialize({id, options});
return node;
} catch (err) {
console.error('Failed to create node', name, err)
}
}
export const createNodes = (nodes) => {
nodes = nodes.map(({node, x, y}) => {
const nodeInstance = createNode(node);
return ({
node: nodeInstance,
x, y,
connect(outputs) {
try {
nodeInstance.reconnect(node, outputs);
} catch(err) {
console.error('Can\'t recoonect', nodeInstance, err);
}
}
});
}).filter(({node}) => node);
const outputsById = nodes
.map(({node}) => Object.values(node.out.__values))
.reduce((acc, nxt) => acc.concat(nxt), [])
.reduce((acc, nxt) => {
acc[nxt.id] = nxt;
return acc;
}, {});
return nodes.map(({node, x, y, connect}) => {
connect(outputsById);
return {node,x,y};
})
}
export const serializeNodes = (nodes) =>
nodes.map(({node, x, y}) => ({
node: node.serialize(),
x, y,
}));
export const load = (name) => {
try {
return createNodes(JSON.parse(localStorage.getItem(`IFP_GRAPH_${name}`)) || defaultValues);
} catch (err) {
return createNodes(defaultValues);
}
};
export const save = (name, graph) => localStorage.setItem(`IFP_GRAPH_${name}`, JSON.stringify(serializeNodes(graph)));