66 lines
2.3 KiB
JavaScript
66 lines
2.3 KiB
JavaScript
function exportToJson() {
|
|
const _states = JSON.parse(JSON.stringify(states));
|
|
const _connections = JSON.parse(JSON.stringify(connections)).map((conn, index) => {
|
|
conn.type = connections[index].constructor.name;
|
|
return conn;
|
|
});
|
|
const data = {
|
|
states: _states,
|
|
connections: _connections.filter(conn => conn.type === 'Connection').map(conn => {
|
|
conn.stateA = conn.stateA.id;
|
|
conn.stateB = conn.stateB.id;
|
|
return conn;
|
|
}),
|
|
startConnections: _connections.filter(conn => conn.type === 'StartConnection').map(conn => {
|
|
conn.state = conn.state.id;
|
|
return conn;
|
|
}),
|
|
selfConnections: _connections.filter(conn => conn.type === 'SelfConnection').map(conn => {
|
|
conn.state = conn.state.id;
|
|
return conn;
|
|
}),
|
|
settings,
|
|
};
|
|
return JSON.stringify(data);
|
|
}
|
|
|
|
function importFromJson(json) {
|
|
const data = JSON.parse(json);
|
|
|
|
states.push(...data.states.map(state => Object.setPrototypeOf(state, State.prototype)));
|
|
connections.push(...data.connections.map(conn => Object.setPrototypeOf(conn, Connection.prototype)).map(conn => {
|
|
conn.stateA = states.find(state => state.id === conn.stateA);
|
|
conn.stateB = states.find(state => state.id === conn.stateB);
|
|
return conn;
|
|
}));
|
|
connections.push(...data.startConnections.map(conn => Object.setPrototypeOf(conn, StartConnection.prototype)).map(conn => {
|
|
conn.state = states.find(state => state.id === conn.state);
|
|
return conn;
|
|
}));
|
|
connections.push(...data.selfConnections.map(conn => Object.setPrototypeOf(conn, SelfConnection.prototype)).map(conn => {
|
|
conn.state = states.find(state => state.id === conn.state);
|
|
return conn;
|
|
}));
|
|
}
|
|
|
|
function exportToFile() {
|
|
const name = 'placeholder.fsm';
|
|
const json = exportToJson();
|
|
console.log(json);
|
|
downloadFile(name, json, 'application/json');
|
|
}
|
|
|
|
function downloadFile(name, content, type) {
|
|
const element = document.createElement('a');
|
|
|
|
element.setAttribute('href', `data:${type},charset=utf-8,${content}`);
|
|
element.setAttribute('download', name);
|
|
|
|
element.style.display = 'none';
|
|
document.body.appendChild(element);
|
|
|
|
element.click();
|
|
document.body.removeChild(element);
|
|
}
|
|
|