src/lib/editorConstants.js (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
export const STORAGE_MODE = 'editor_mode';
export const STORAGE_MARKDOWN = 'snow_editor_markdown_content';
export const STORAGE_ORG = 'snow_editor_org_content';
export const STORAGE_LEGACY_MARKDOWN = 'cozy-markdown-editor-content';
export const MODES = {
MARKDOWN: 'markdown',
ORG: 'org',
};
const DEFAULT_MARKDOWN = `# Snow Journal
Welcome to your quiet writing nook.
Here you can write in **Markdown** and watch the result appear gently beside you.
## Ideas
- Write notes
- Create documents
- Draft texts
- Organize thoughts
> A clean space to think calmly.
\`\`\`js
console.log("writing in peace");
\`\`\`
`;
const DEFAULT_ORG = `#+TITLE: Snow Journal
#+AUTHOR: Snow Editor
* Welcome :intro:
A quiet Org-mode writing nook with /live preview/.
** TODO Ideas :notes:
- [ ] Write notes
- [X] Try checklist click in the editor
- Nested list
- Inner item
- Another inner item
** DONE First table
| Feature | Status |
|-----------+--------|
| Tables | yes |
| Outline | yes |
#+BEGIN_QUOTE
A clean space to think calmly.
#+END_QUOTE
#+BEGIN_SRC js
console.log("writing in peace");
#+END_SRC
** Links
[[https://orgmode.org][Official Org-mode site]]
`;
function getStorageKey(mode) {
return mode === MODES.ORG ? STORAGE_ORG : STORAGE_MARKDOWN;
}
function getDefaultContent(mode) {
return mode === MODES.ORG ? DEFAULT_ORG : DEFAULT_MARKDOWN;
}
function migrateLegacyStorage() {
try {
const legacy = localStorage.getItem(STORAGE_LEGACY_MARKDOWN);
if (legacy !== null && localStorage.getItem(STORAGE_MARKDOWN) === null) {
localStorage.setItem(STORAGE_MARKDOWN, legacy);
}
} catch {
/* ignore */
}
}
export function initStorage() {
migrateLegacyStorage();
}
export function loadMode() {
initStorage();
try {
const saved = localStorage.getItem(STORAGE_MODE);
if (saved === MODES.ORG || saved === MODES.MARKDOWN) {
return saved;
}
} catch {
/* ignore */
}
return MODES.MARKDOWN;
}
export function loadContent(mode) {
try {
const saved = localStorage.getItem(getStorageKey(mode));
if (saved === null) {
return getDefaultContent(mode);
}
return saved;
} catch {
/* ignore */
}
return getDefaultContent(mode);
}
export function persistContent(mode, content) {
try {
localStorage.setItem(getStorageKey(mode), content);
return true;
} catch (error) {
if (error instanceof DOMException && error.name === 'QuotaExceededError') {
return false;
}
return false;
}
}
export function persistMode(mode) {
try {
localStorage.setItem(STORAGE_MODE, mode);
} catch {
/* ignore */
}
}
export function isDefaultContent(mode, text) {
return text === getDefaultContent(mode);
}
|