Files
mermaid-live-editor/src/code-store.js
T

56 lines
1.5 KiB
JavaScript

import { writable, get } from 'svelte/store';
// import mermaid from '@mermaid-js/mermaid';
import mermaid from '@mermaid';
import { Base64 } from 'js-base64'
import {push, pop, replace} from 'svelte-spa-router'
export const codeStore = writable(undefined);
export const fromUrl = data => {
let code;
let state;
const isDarkMode = window.matchMedia("(prefers-color-scheme: dark)").matches && false
try {
let stateStr = Base64.decode(data)
console.log('state from url', stateStr)
state = JSON.parse(stateStr);
if (state.code === undefined) { // not valid json
// state = { code: '', mermaid: { theme: themeFromUrl } }
}
code = state.code;
} catch (e) {
// console.error('Init error', e);
code = `graph TD
A[Christmas] -->|Get money| B(Go shopping)
B --> C{Let me think}
C -->|One| D[Laptop]
C -->|Two| E[iPhone]
C -->|Three| F[fa:fa-car Car]
`;
state = { code, mermaid: { theme: isDarkMode?'dark':'default' } };
}
codeStore.set(state);
};
export const updateCodeStore = newState => {
codeStore.set(newState);
replace('/edit/' + Base64.encodeURI(JSON.stringify(newState)))
};
export const updateCode = (code, updateEditor) => {
const state = get(codeStore);
state.code = code;
state.updateEditor = updateEditor;
codeStore.set(state);
};
export const updateConfig = config => {
const state = get(codeStore);
state.mermaid = config;
codeStore.set(state);
};
const unsubscribe = codeStore.subscribe( state => {
replace('/edit/' + Base64.encodeURI(JSON.stringify(state)))
});