all repos — snow-editor @ 24ce9e9ef60be3233adb8eaa03f5a936c1ef4acd

small and cozy markdown, and orgmode editor

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
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 = `* Snow Journal

Welcome to your quiet Org-mode writing nook.

** TODO Ideas
- Write notes
- Create documents
- Organize thoughts

** DONE First draft

#+BEGIN_QUOTE
A clean space to think calmly.
#+END_QUOTE

#+BEGIN_SRC js
console.log("writing in peace");
#+END_SRC

** Example link

[[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);
}