From 788900e31aa9ea5c82248036769921fa6d1e9947 Mon Sep 17 00:00:00 2001 From: roottool Date: Mon, 29 Apr 2019 03:23:25 +0900 Subject: [PATCH 01/44] Added markdownlint rules form --- browser/components/CodeEditor.js | 6 ++++- browser/main/lib/ConfigManager.js | 3 ++- browser/main/modals/PreferencesModal/UiTab.js | 24 ++++++++++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index 2f2b1551..667708a4 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -26,6 +26,7 @@ import {languageMaps} from '../lib/CMLanguageList' import snippetManager from '../lib/SnippetManager' import {generateInEditor, tocExistsInEditor} from 'browser/lib/markdown-toc-generator' import markdownlint from 'markdownlint' +import ConfigManager from '../main/lib/ConfigManager' CodeMirror.modeURL = '../node_modules/codemirror/mode/%N/%N.js' @@ -39,11 +40,14 @@ function translateHotkey (hotkey) { } const validatorOfMarkdown = (text, updateLinting) => { + const config = ConfigManager.get() const lintOptions = { 'strings': { 'content': text - } + }, + 'config': JSON.parse(config.editor.customMarkdownLintConfig) } + console.log(config.editor.customMarkdownLintConfig) return markdownlint(lintOptions, (err, result) => { if (!err) { diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index 05f3d822..616fdc88 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -59,7 +59,8 @@ export const DEFAULT_CONFIG = { enableFrontMatterTitle: true, frontMatterTitleField: 'title', spellcheck: false, - enableSmartPaste: false + enableSmartPaste: false, + customMarkdownLintConfig: '' }, preview: { fontSize: '14', diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index 316b7f9d..310e1e59 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -30,7 +30,9 @@ class UiTab extends React.Component { componentDidMount () { CodeMirror.autoLoadMode(this.codeMirrorInstance.getCodeMirror(), 'javascript') CodeMirror.autoLoadMode(this.customCSSCM.getCodeMirror(), 'css') + CodeMirror.autoLoadMode(this.customMarkdownLintConfigCM.getCodeMirror(), 'json') this.customCSSCM.getCodeMirror().setSize('400px', '400px') + this.customMarkdownLintConfigCM.getCodeMirror().setSize('400px', '400px') this.handleSettingDone = () => { this.setState({UiAlert: { type: 'success', @@ -101,7 +103,8 @@ class UiTab extends React.Component { matchingTriples: this.refs.matchingTriples.value, explodingPairs: this.refs.explodingPairs.value, spellcheck: this.refs.spellcheck.checked, - enableSmartPaste: this.refs.enableSmartPaste.checked + enableSmartPaste: this.refs.enableSmartPaste.checked, + customMarkdownLintConfig: this.customMarkdownLintConfigCM.getCodeMirror().getValue() }, preview: { fontSize: this.refs.previewFontSize.value, @@ -632,6 +635,25 @@ class UiTab extends React.Component { /> +
+
+ {i18n.__('Custom MarkdownLint Rules')} +
+
+
+ this.handleUIChange(e)} + ref={e => (this.customMarkdownLintConfigCM = e)} + value={config.editor.customMarkdownLintConfig} + options={{ + lineNumbers: true, + theme: codemirrorTheme + }} /> +
+
+
{i18n.__('Preview')}
From 7fb22f3f079a6090611252b55266721ce6605f52 Mon Sep 17 00:00:00 2001 From: roottool Date: Mon, 29 Apr 2019 03:24:16 +0900 Subject: [PATCH 02/44] Translated from English to Japanese --- locales/ja.json | 1 + 1 file changed, 1 insertion(+) diff --git a/locales/ja.json b/locales/ja.json index 087bce36..e1dc553b 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -79,6 +79,7 @@ "Matching character pairs": "自動補完する括弧ペアの列記", "Matching character triples": "自動補完する3文字括弧の列記", "Exploding character pairs": "改行時に空行を挿入する括弧ペアの列記", + "Custom MarkdownLint Rules": "カスタムMarkdownLintルール", "Preview": "プレビュー", "Preview Font Size": "プレビュー時フォントサイズ", "Preview Font Family": "プレビュー時フォント", From 11bed72bed0d39aee9f9c5f53ce1e9e0cc372be6 Mon Sep 17 00:00:00 2001 From: roottool Date: Mon, 29 Apr 2019 08:49:19 +0900 Subject: [PATCH 03/44] Introduced jsonlint-mod --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index f00fb095..14d2da6d 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "immutable": "^3.8.1", "invert-color": "^2.0.0", "js-yaml": "^3.12.0", + "jsonlint-mod": "^1.7.4", "katex": "^0.9.0", "lodash": "^4.11.1", "lodash-move": "^1.1.1", From 4ba4e68833f038931db5fbf0be0d946e82899aa6 Mon Sep 17 00:00:00 2001 From: roottool Date: Mon, 29 Apr 2019 08:54:28 +0900 Subject: [PATCH 04/44] Added markdownlint rules form --- browser/components/CodeEditor.js | 13 ++++++++++--- browser/main/lib/ConfigManager.js | 4 +++- browser/main/modals/PreferencesModal/UiTab.js | 7 +++++-- lib/main.html | 2 ++ 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index 667708a4..af546fbf 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -25,8 +25,9 @@ import TurndownService from 'turndown' import {languageMaps} from '../lib/CMLanguageList' import snippetManager from '../lib/SnippetManager' import {generateInEditor, tocExistsInEditor} from 'browser/lib/markdown-toc-generator' +import Jsonlint from 'jsonlint-mod' import markdownlint from 'markdownlint' -import ConfigManager from '../main/lib/ConfigManager' +import ConfigManager, {DEFAULT_CONFIG} from '../main/lib/ConfigManager' CodeMirror.modeURL = '../node_modules/codemirror/mode/%N/%N.js' @@ -41,13 +42,19 @@ function translateHotkey (hotkey) { const validatorOfMarkdown = (text, updateLinting) => { const config = ConfigManager.get() + let markdownlintRules = config.editor.customMarkdownLintConfig + try { + Jsonlint.parse(markdownlintRules) + } catch (error) { + markdownlintRules = DEFAULT_CONFIG.editor.customMarkdownLintConfig + } + const lintOptions = { 'strings': { 'content': text }, - 'config': JSON.parse(config.editor.customMarkdownLintConfig) + 'config': JSON.parse(markdownlintRules) } - console.log(config.editor.customMarkdownLintConfig) return markdownlint(lintOptions, (err, result) => { if (!err) { diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index 616fdc88..1d59d41d 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -60,7 +60,9 @@ export const DEFAULT_CONFIG = { frontMatterTitleField: 'title', spellcheck: false, enableSmartPaste: false, - customMarkdownLintConfig: '' + customMarkdownLintConfig: `{ + "default": true + }` }, preview: { fontSize: '14', diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index 310e1e59..d0b2026d 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -30,7 +30,7 @@ class UiTab extends React.Component { componentDidMount () { CodeMirror.autoLoadMode(this.codeMirrorInstance.getCodeMirror(), 'javascript') CodeMirror.autoLoadMode(this.customCSSCM.getCodeMirror(), 'css') - CodeMirror.autoLoadMode(this.customMarkdownLintConfigCM.getCodeMirror(), 'json') + CodeMirror.autoLoadMode(this.customMarkdownLintConfigCM.getCodeMirror(), 'javascript') this.customCSSCM.getCodeMirror().setSize('400px', '400px') this.customMarkdownLintConfigCM.getCodeMirror().setSize('400px', '400px') this.handleSettingDone = () => { @@ -649,7 +649,10 @@ class UiTab extends React.Component { value={config.editor.customMarkdownLintConfig} options={{ lineNumbers: true, - theme: codemirrorTheme + mode: 'application/json', + theme: codemirrorTheme, + lint: true, + gutters: ['CodeMirror-lint-markers'] }} />
diff --git a/lib/main.html b/lib/main.html index 87a88e2d..c389956b 100644 --- a/lib/main.html +++ b/lib/main.html @@ -126,7 +126,9 @@ + + From 8b3beb45c61df5f7362e74be91d632788632ed18 Mon Sep 17 00:00:00 2001 From: roottool Date: Mon, 29 Apr 2019 09:17:25 +0900 Subject: [PATCH 05/44] Added a caution of the custom markdownlint rules --- browser/main/modals/PreferencesModal/UiTab.js | 1 + locales/ja.json | 1 + 2 files changed, 2 insertions(+) diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index d0b2026d..ee1b892f 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -654,6 +654,7 @@ class UiTab extends React.Component { lint: true, gutters: ['CodeMirror-lint-markers'] }} /> +

{i18n.__(`⚠️ Please reload boostnote after you change the Custom MarkdownLint rules`)}

diff --git a/locales/ja.json b/locales/ja.json index e1dc553b..42e7644c 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -80,6 +80,7 @@ "Matching character triples": "自動補完する3文字括弧の列記", "Exploding character pairs": "改行時に空行を挿入する括弧ペアの列記", "Custom MarkdownLint Rules": "カスタムMarkdownLintルール", + "⚠️ Please reload boostnote after you change the Custom MarkdownLint rules": "⚠️ カスタムMarkdownLintルール変更後は Boostnote をリロードしてください", "Preview": "プレビュー", "Preview Font Size": "プレビュー時フォントサイズ", "Preview Font Family": "プレビュー時フォント", From 33d1700548002d1aad4d66514c5d06420cd9ea33 Mon Sep 17 00:00:00 2001 From: roottool Date: Mon, 29 Apr 2019 10:01:55 +0900 Subject: [PATCH 06/44] Change styleName of caution --- browser/main/modals/PreferencesModal/ConfigTab.styl | 3 ++- browser/main/modals/PreferencesModal/UiTab.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/browser/main/modals/PreferencesModal/ConfigTab.styl b/browser/main/modals/PreferencesModal/ConfigTab.styl index 0e22833d..e1c867ff 100644 --- a/browser/main/modals/PreferencesModal/ConfigTab.styl +++ b/browser/main/modals/PreferencesModal/ConfigTab.styl @@ -123,6 +123,7 @@ line-height 1.2 .note-for-keymap +.note-for-markdownlint-rules font-size: 12px .code-mirror @@ -266,4 +267,4 @@ body[data-theme="dracula"] colorDraculaControl() .group-section-control select, .group-section-control-input - colorDraculaControl() \ No newline at end of file + colorDraculaControl() diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index ee1b892f..9e1b3f6d 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -654,7 +654,7 @@ class UiTab extends React.Component { lint: true, gutters: ['CodeMirror-lint-markers'] }} /> -

{i18n.__(`⚠️ Please reload boostnote after you change the Custom MarkdownLint rules`)}

+

{i18n.__(`⚠️ Please reload boostnote after you change the Custom MarkdownLint rules`)}

From a162bab5915d4d1baab0733dd79c97d2ff15dd41 Mon Sep 17 00:00:00 2001 From: roottool Date: Tue, 7 May 2019 00:42:55 +0900 Subject: [PATCH 07/44] Fix: Improved for the app not to need to reload --- browser/components/CodeEditor.js | 118 ++++++++++++---------- browser/components/MarkdownEditor.js | 1 + browser/components/MarkdownSplitEditor.js | 1 + 3 files changed, 69 insertions(+), 51 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index af546fbf..d5f9164f 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -25,9 +25,9 @@ import TurndownService from 'turndown' import {languageMaps} from '../lib/CMLanguageList' import snippetManager from '../lib/SnippetManager' import {generateInEditor, tocExistsInEditor} from 'browser/lib/markdown-toc-generator' -import Jsonlint from 'jsonlint-mod' import markdownlint from 'markdownlint' -import ConfigManager, {DEFAULT_CONFIG} from '../main/lib/ConfigManager' +import Jsonlint from 'jsonlint-mod' +import { DEFAULT_CONFIG } from '../main/lib/ConfigManager' CodeMirror.modeURL = '../node_modules/codemirror/mode/%N/%N.js' @@ -40,47 +40,6 @@ function translateHotkey (hotkey) { return hotkey.replace(/\s*\+\s*/g, '-').replace(/Command/g, 'Cmd').replace(/Control/g, 'Ctrl') } -const validatorOfMarkdown = (text, updateLinting) => { - const config = ConfigManager.get() - let markdownlintRules = config.editor.customMarkdownLintConfig - try { - Jsonlint.parse(markdownlintRules) - } catch (error) { - markdownlintRules = DEFAULT_CONFIG.editor.customMarkdownLintConfig - } - - const lintOptions = { - 'strings': { - 'content': text - }, - 'config': JSON.parse(markdownlintRules) - } - - return markdownlint(lintOptions, (err, result) => { - if (!err) { - const foundIssues = [] - result.content.map(item => { - let ruleNames = '' - item.ruleNames.map((ruleName, index) => { - ruleNames += ruleName - if (index === item.ruleNames.length - 1) { - ruleNames += ': ' - } else { - ruleNames += '/' - } - }) - foundIssues.push({ - from: CodeMirror.Pos(item.lineNumber, 0), - to: CodeMirror.Pos(item.lineNumber, 1), - message: ruleNames + item.ruleDescription, - severity: 'warning' - }) - }) - updateLinting(foundIssues) - } - }) -} - export default class CodeEditor extends React.Component { constructor (props) { super(props) @@ -127,6 +86,8 @@ export default class CodeEditor extends React.Component { this.searchHandler = (e, msg) => this.handleSearch(msg) this.searchState = null this.scrollToLineHandeler = this.scrollToLine.bind(this) + this.setCodeEditorLintConfig = this.setCodeEditorLintConfig.bind(this) + this.validatorOfMarkdown = this.validatorOfMarkdown.bind(this) this.formatTable = () => this.handleFormatTable() @@ -300,7 +261,6 @@ export default class CodeEditor extends React.Component { snippetManager.init() this.updateDefaultKeyMap() - const checkMarkdownNoteIsOpening = this.props.mode === 'Boost Flavored Markdown' this.value = this.props.value this.editor = CodeMirror(this.refs.root, { rulers: buildCMRulers(rulers, enableRulers), @@ -317,10 +277,7 @@ export default class CodeEditor extends React.Component { inputStyle: 'textarea', dragDrop: false, foldGutter: true, - lint: checkMarkdownNoteIsOpening ? { - 'getAnnotations': validatorOfMarkdown, - 'async': true - } : false, + lint: this.setCodeEditorLintConfig(), gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter', 'CodeMirror-lint-markers'], autoCloseBrackets: { pairs: this.props.matchingPairs, @@ -557,7 +514,8 @@ export default class CodeEditor extends React.Component { let needRefresh = false const { rulers, - enableRulers + enableRulers, + customMarkdownLintConfig } = this.props if (prevProps.mode !== this.props.mode) { this.setMode(this.props.mode) @@ -575,6 +533,11 @@ export default class CodeEditor extends React.Component { if (prevProps.keyMap !== this.props.keyMap) { needRefresh = true } + if (!needRefresh && prevProps.customMarkdownLintConfig !== customMarkdownLintConfig) { + this.setCodeEditorLintConfig() + + needRefresh = true + } if ( prevProps.enableRulers !== enableRulers || @@ -655,6 +618,57 @@ export default class CodeEditor extends React.Component { } } + setCodeEditorLintConfig () { + const { mode } = this.props + const checkMarkdownNoteIsOpening = mode === 'Boost Flavored Markdown' + + return checkMarkdownNoteIsOpening ? { + 'getAnnotations': this.validatorOfMarkdown, + 'async': true + } : false + } + + validatorOfMarkdown (text, updateLinting) { + const { customMarkdownLintConfig } = this.props + let lintConfigJson + try { + Jsonlint.parse(customMarkdownLintConfig) + lintConfigJson = JSON.parse(customMarkdownLintConfig) + } catch (err) { + throw err + } + const lintOptions = { + 'strings': { + 'content': text + }, + 'config': lintConfigJson + } + + return markdownlint(lintOptions, (err, result) => { + if (!err) { + const foundIssues = [] + result.content.map(item => { + let ruleNames = '' + item.ruleNames.map((ruleName, index) => { + ruleNames += ruleName + if (index === item.ruleNames.length - 1) { + ruleNames += ': ' + } else { + ruleNames += '/' + } + }) + foundIssues.push({ + from: CodeMirror.Pos(item.lineNumber, 0), + to: CodeMirror.Pos(item.lineNumber, 1), + message: ruleNames + item.ruleDescription, + severity: 'warning' + }) + }) + updateLinting(foundIssues) + } + }) + } + setMode (mode) { let syntax = CodeMirror.findModeByName(convertModeName(mode || 'text')) if (syntax == null) syntax = CodeMirror.findModeByName('Plain Text') @@ -1160,7 +1174,8 @@ CodeEditor.propTypes = { onChange: PropTypes.func, readOnly: PropTypes.bool, autoDetect: PropTypes.bool, - spellCheck: PropTypes.bool + spellCheck: PropTypes.bool, + customMarkdownLintConfig: PropTypes.string } CodeEditor.defaultProps = { @@ -1172,5 +1187,6 @@ CodeEditor.defaultProps = { indentSize: 4, indentType: 'space', autoDetect: false, - spellCheck: false + spellCheck: false, + customMarkdownLintConfig: DEFAULT_CONFIG.editor.customMarkdownLintConfig } diff --git a/browser/components/MarkdownEditor.js b/browser/components/MarkdownEditor.js index 593f7d99..022553fb 100644 --- a/browser/components/MarkdownEditor.js +++ b/browser/components/MarkdownEditor.js @@ -319,6 +319,7 @@ class MarkdownEditor extends React.Component { enableSmartPaste={config.editor.enableSmartPaste} hotkey={config.hotkey} switchPreview={config.editor.switchPreview} + customMarkdownLintConfig={config.editor.customMarkdownLintConfig} />
this.handleMouseDown(e)} >
From ecfeedeff3a784d2f0769331dd89d5c808415f51 Mon Sep 17 00:00:00 2001 From: roottool Date: Tue, 7 May 2019 00:44:27 +0900 Subject: [PATCH 08/44] Fix: Removed unnecessary caution --- browser/main/modals/PreferencesModal/UiTab.js | 1 - locales/ja.json | 1 - 2 files changed, 2 deletions(-) diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index 0fe4fbbb..d8bb8ab5 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -659,7 +659,6 @@ class UiTab extends React.Component { lint: true, gutters: ['CodeMirror-lint-markers'] }} /> -

{i18n.__(`⚠️ Please reload boostnote after you change the Custom MarkdownLint rules`)}

diff --git a/locales/ja.json b/locales/ja.json index 42e7644c..e1dc553b 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -80,7 +80,6 @@ "Matching character triples": "自動補完する3文字括弧の列記", "Exploding character pairs": "改行時に空行を挿入する括弧ペアの列記", "Custom MarkdownLint Rules": "カスタムMarkdownLintルール", - "⚠️ Please reload boostnote after you change the Custom MarkdownLint rules": "⚠️ カスタムMarkdownLintルール変更後は Boostnote をリロードしてください", "Preview": "プレビュー", "Preview Font Size": "プレビュー時フォントサイズ", "Preview Font Family": "プレビュー時フォント", From f3ca893aea176c27705e875a1a74e50e0db0e360 Mon Sep 17 00:00:00 2001 From: roottool Date: Tue, 7 May 2019 02:30:41 +0900 Subject: [PATCH 09/44] Ajusted markdownlint config editor to code editor --- browser/main/modals/PreferencesModal/UiTab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index d8bb8ab5..1f914209 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -657,7 +657,7 @@ class UiTab extends React.Component { mode: 'application/json', theme: codemirrorTheme, lint: true, - gutters: ['CodeMirror-lint-markers'] + gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter', 'CodeMirror-lint-markers'] }} /> From f1597f8e84e5347e023030e9f98734b64fa75f9a Mon Sep 17 00:00:00 2001 From: roottool Date: Tue, 7 May 2019 03:26:47 +0900 Subject: [PATCH 10/44] Fix: Poped up the lint tooptip --- lib/main.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/main.html b/lib/main.html index c389956b..0d9feade 100644 --- a/lib/main.html +++ b/lib/main.html @@ -72,6 +72,10 @@ border-left-color: rgba(142, 142, 142, 0.5); mix-blend-mode: difference; } + + .CodeMirror-lint-tooltip { + z-index: 1003; + } From 0a5c4c092a2bf769f814b2b22d8be55914043bbf Mon Sep 17 00:00:00 2001 From: roottool Date: Tue, 7 May 2019 04:22:03 +0900 Subject: [PATCH 11/44] Fix: Improved for the app not to need to reload --- browser/components/CodeEditor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index d5f9164f..c8789a53 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -533,8 +533,8 @@ export default class CodeEditor extends React.Component { if (prevProps.keyMap !== this.props.keyMap) { needRefresh = true } - if (!needRefresh && prevProps.customMarkdownLintConfig !== customMarkdownLintConfig) { - this.setCodeEditorLintConfig() + if (prevProps.customMarkdownLintConfig !== customMarkdownLintConfig) { + this.editor.setOption('lint', this.setCodeEditorLintConfig()) needRefresh = true } From 61e054024beda9bffb5927fd2b684a7b76f8740b Mon Sep 17 00:00:00 2001 From: roottool Date: Tue, 7 May 2019 04:44:23 +0900 Subject: [PATCH 12/44] Fix: Removed unnecessary css code --- browser/main/modals/PreferencesModal/ConfigTab.styl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/browser/main/modals/PreferencesModal/ConfigTab.styl b/browser/main/modals/PreferencesModal/ConfigTab.styl index e1c867ff..0e22833d 100644 --- a/browser/main/modals/PreferencesModal/ConfigTab.styl +++ b/browser/main/modals/PreferencesModal/ConfigTab.styl @@ -123,7 +123,6 @@ line-height 1.2 .note-for-keymap -.note-for-markdownlint-rules font-size: 12px .code-mirror @@ -267,4 +266,4 @@ body[data-theme="dracula"] colorDraculaControl() .group-section-control select, .group-section-control-input - colorDraculaControl() + colorDraculaControl() \ No newline at end of file From 69a62d1b73d0741e7de8ae06d09434a5aed858f8 Mon Sep 17 00:00:00 2001 From: roottool Date: Thu, 9 May 2019 04:06:27 +0900 Subject: [PATCH 13/44] Fix: Changed variable name --- browser/components/CodeEditor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index c8789a53..b8380f2b 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -620,9 +620,9 @@ export default class CodeEditor extends React.Component { setCodeEditorLintConfig () { const { mode } = this.props - const checkMarkdownNoteIsOpening = mode === 'Boost Flavored Markdown' + const checkMarkdownNoteIsOpen = mode === 'Boost Flavored Markdown' - return checkMarkdownNoteIsOpening ? { + return checkMarkdownNoteIsOpen ? { 'getAnnotations': this.validatorOfMarkdown, 'async': true } : false From 2da4f1df327e703bd80c9218bcdd9a98151e335f Mon Sep 17 00:00:00 2001 From: roottool Date: Thu, 9 May 2019 04:11:05 +0900 Subject: [PATCH 14/44] Fix: Rewrote the code to inline --- browser/components/CodeEditor.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index b8380f2b..6b3cbf02 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -651,11 +651,7 @@ export default class CodeEditor extends React.Component { let ruleNames = '' item.ruleNames.map((ruleName, index) => { ruleNames += ruleName - if (index === item.ruleNames.length - 1) { - ruleNames += ': ' - } else { - ruleNames += '/' - } + ruleNames += (index === item.ruleNames.length - 1) ? ': ' : '/' }) foundIssues.push({ from: CodeMirror.Pos(item.lineNumber, 0), From c42eb41fb313c1ab171dbed2379a485543940ac1 Mon Sep 17 00:00:00 2001 From: roottool Date: Thu, 9 May 2019 05:29:43 +0900 Subject: [PATCH 15/44] Fix: Fixed that default rule was shifted by indent --- browser/main/lib/ConfigManager.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index be6422b4..54fce3e9 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -10,6 +10,9 @@ const { ipcRenderer } = electron const consts = require('browser/lib/consts') let isInitialized = false +const DEFAULT_MARKDOWN_LINT_CONFIG = `{ + "default": true +}` export const DEFAULT_CONFIG = { zoom: 1, @@ -60,9 +63,7 @@ export const DEFAULT_CONFIG = { frontMatterTitleField: 'title', spellcheck: false, enableSmartPaste: false, - customMarkdownLintConfig: `{ - "default": true - }` + customMarkdownLintConfig: DEFAULT_MARKDOWN_LINT_CONFIG }, preview: { fontSize: '14', @@ -138,7 +139,7 @@ function get () { const theme = consts.THEMES.find(theme => theme.name === config.editor.theme) if (theme) { - editorTheme.setAttribute('href', `../${theme.path}`) + editorTheme.setAttribute('href', `${theme.path}`) } else { config.editor.theme = 'default' } @@ -180,7 +181,7 @@ function set (updates) { const newTheme = consts.THEMES.find(theme => theme.name === newConfig.editor.theme) if (newTheme) { - editorTheme.setAttribute('href', `../${newTheme.path}`) + editorTheme.setAttribute('href', `${newTheme.path}`) } ipcRenderer.send('config-renew', { From 0d6c95272112cf041dd0a06f5dee5339c9cf71c3 Mon Sep 17 00:00:00 2001 From: roottool Date: Thu, 9 May 2019 05:30:46 +0900 Subject: [PATCH 16/44] Added a newline --- browser/main/lib/ConfigManager.js | 1 + 1 file changed, 1 insertion(+) diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index 54fce3e9..324403aa 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -10,6 +10,7 @@ const { ipcRenderer } = electron const consts = require('browser/lib/consts') let isInitialized = false + const DEFAULT_MARKDOWN_LINT_CONFIG = `{ "default": true }` From c82dbddc748624cc40758e7f8725a5e2dfabd734 Mon Sep 17 00:00:00 2001 From: roottool Date: Sun, 12 May 2019 13:13:32 +0900 Subject: [PATCH 17/44] Fix markdownlint result desplay works properly --- browser/components/CodeEditor.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index 6b3cbf02..99695cdb 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -647,15 +647,17 @@ export default class CodeEditor extends React.Component { return markdownlint(lintOptions, (err, result) => { if (!err) { const foundIssues = [] + const splitText = text.split('\n') result.content.map(item => { let ruleNames = '' item.ruleNames.map((ruleName, index) => { ruleNames += ruleName ruleNames += (index === item.ruleNames.length - 1) ? ': ' : '/' }) + const lineNumber = item.lineNumber - 1 foundIssues.push({ - from: CodeMirror.Pos(item.lineNumber, 0), - to: CodeMirror.Pos(item.lineNumber, 1), + from: CodeMirror.Pos(lineNumber, 0), + to: CodeMirror.Pos(lineNumber, splitText[lineNumber].length), message: ruleNames + item.ruleDescription, severity: 'warning' }) From 1601292db73a31fabd433191a6c8d7d6305b6ec3 Mon Sep 17 00:00:00 2001 From: AWolf81 Date: Fri, 10 May 2019 07:30:48 +0200 Subject: [PATCH 18/44] add react hooks section --- docs/code_style.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/code_style.md b/docs/code_style.md index d8f458d7..c0416216 100644 --- a/docs/code_style.md +++ b/docs/code_style.md @@ -79,4 +79,11 @@ class MyComponent extends React.Component { // code goes here... } } -``` \ No newline at end of file +``` + +## React Hooks +Existing code will be kept class-based and will only be changed to functional components with hooks if it improves readability or makes things more reusable. + +For new components it's OK to use hooks with functional components but don't mix hooks & class-based components within a feature - just for code style / readability reasons. + +Read more about hooks in the [React hooks introduction](https://reactjs.org/docs/hooks-intro.html). From 079aaec21e5a1f510312c2103a81a737a9c8859e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Here=C3=B1=C3=BA?= Date: Thu, 4 Apr 2019 08:28:47 -0300 Subject: [PATCH 19/44] Fixed typo on string 137 * plus some translations added --- locales/es-ES.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/locales/es-ES.json b/locales/es-ES.json index a42e6bb4..f8003088 100644 --- a/locales/es-ES.json +++ b/locales/es-ES.json @@ -134,7 +134,7 @@ "Successfully applied!": "¡Aplicado con éxito!", "Albanian": "Albanés", "Chinese (zh-CN)": "Chino - China", - "Chinese (zh-TW)": "Chino - Taiwan", + "Chinese (zh-TW)": "Chino - Taiwán", "Danish": "Danés", "Japanese": "Japonés", "Korean": "Coreano", @@ -155,8 +155,8 @@ "Allow dangerous html tags": "Permitir etiquetas html peligrosas", "⚠ You have pasted a link referring an attachment that could not be found in the location of this note. Pasting links referring attachments is only supported if the source and destination location is the same storage. Please Drag&Drop the attachment instead! ⚠": "⚠ Ha pegado un enlace a un archivo adjunto que no se puede encontrar en el almacenamiento de esta nota. Pegar enlaces a archivos adjuntos solo está soportado si el origen y el destino son el mismo almacenamiento. ¡Por favor, mejor arrastre el archivo! ⚠", "Convert textual arrows to beautiful signs. ⚠ This will interfere with using HTML comments in your Markdown.": "Convertir flechas textuales a símbolos bonitos. ⚠ Esto interferirá cuando use comentarios HTML en Markdown.", - "Spellcheck disabled": "Spellcheck disabled", - "Show menu bar": "Show menu bar", - "Auto Detect": "Auto Detect", + "Spellcheck disabled": "Deshabilitar corrector ortográfico", + "Show menu bar": "Mostrar barra del menú", + "Auto Detect": "Detección automática", "Snippet Default Language": "Lenguaje por defecto de los fragmentos de código" } From 49e48f7adc6524d280f4957d79d9dda9f2f6c820 Mon Sep 17 00:00:00 2001 From: Junyoung Choi Date: Wed, 22 May 2019 12:23:28 +0900 Subject: [PATCH 20/44] Update yarn.lock --- yarn.lock | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/yarn.lock b/yarn.lock index 8fa53631..d3509bf1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5685,6 +5685,13 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +linkify-it@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.1.0.tgz#c4caf38a6cd7ac2212ef3c7d2bde30a91561f9db" + integrity sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg== + dependencies: + uc.micro "^1.0.1" + linkify-it@~1.2.0, linkify-it@~1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-1.2.4.tgz#0773526c317c8fd13bd534ee1d180ff88abf881a" @@ -5968,6 +5975,17 @@ markdown-it-sup@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/markdown-it-sup/-/markdown-it-sup-1.0.0.tgz#cb9c9ff91a5255ac08f3fd3d63286e15df0a1fc3" +markdown-it@8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" + integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ== + dependencies: + argparse "^1.0.7" + entities "~1.1.1" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + markdown-it@^5.0.3: version "5.1.0" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-5.1.0.tgz#25286b8465bac496f3f1b77eed544643e9bd718d" @@ -6009,6 +6027,13 @@ markdown-toc@^1.2.0: repeat-string "^1.6.1" strip-color "^0.1.0" +markdownlint@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/markdownlint/-/markdownlint-0.11.0.tgz#3858bbdbc1ab78abf0c098d841c72b63dd3206a0" + integrity sha512-wE5WdKD6zW2DQaPQ5TFBTXh5j76DnWd/IFffnDQgHmi6Y61DJXBDfLftZ/suJHuv6cwPjM6gKw2GaRLJMOR+Mg== + dependencies: + markdown-it "8.4.2" + match-at@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/match-at/-/match-at-0.1.1.tgz#25d040d291777704d5e6556bbb79230ec2de0540" @@ -9048,6 +9073,11 @@ uc.micro@^1.0.0, uc.micro@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376" +uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + uglify-js@^2.6: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" From d5d564f789fc7b59abf9f253102297f6cfaf363d Mon Sep 17 00:00:00 2001 From: Junyoung Choi Date: Wed, 22 May 2019 15:20:34 +0900 Subject: [PATCH 21/44] v0.11.16 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f00fb095..32f96c7c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "boost", "productName": "Boostnote", - "version": "0.11.15", + "version": "0.11.16", "main": "index.js", "description": "Boostnote", "license": "GPL-3.0", From 2497bdb124468ca1d82251aecd6c13e5b44d0168 Mon Sep 17 00:00:00 2001 From: roottool Date: Wed, 22 May 2019 22:45:09 +0900 Subject: [PATCH 22/44] Fix: Removed changes to debug the app --- browser/main/lib/ConfigManager.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index 324403aa..78c91aa1 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -140,7 +140,7 @@ function get () { const theme = consts.THEMES.find(theme => theme.name === config.editor.theme) if (theme) { - editorTheme.setAttribute('href', `${theme.path}`) + editorTheme.setAttribute('href', `../${theme.path}`) } else { config.editor.theme = 'default' } @@ -182,7 +182,7 @@ function set (updates) { const newTheme = consts.THEMES.find(theme => theme.name === newConfig.editor.theme) if (newTheme) { - editorTheme.setAttribute('href', `${newTheme.path}`) + editorTheme.setAttribute('href', `../${newTheme.path}`) } ipcRenderer.send('config-renew', { From b0f269474527d7166f719f6a3649c5823a5e227a Mon Sep 17 00:00:00 2001 From: KZ Date: Fri, 24 May 2019 02:50:07 +0900 Subject: [PATCH 23/44] Create FUNDING.yml --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..817261cb --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +issuehunt: https://issuehunt.io/r/BoostIo/Boostnote From f02125e411cc59c327f298def3f13fec923136f1 Mon Sep 17 00:00:00 2001 From: Junyoung Choi Date: Fri, 24 May 2019 10:10:29 +0900 Subject: [PATCH 24/44] Update FUNDING.yml --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 817261cb..4ec9b5bf 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1 @@ -issuehunt: https://issuehunt.io/r/BoostIo/Boostnote +custom: https://issuehunt.io/r/BoostIo/Boostnote From 270a015514d64feddbe8bdcb75e1150fae381a94 Mon Sep 17 00:00:00 2001 From: AWolf81 Date: Fri, 24 May 2019 19:06:15 +0200 Subject: [PATCH 25/44] WIP: Add MarkdownLint enable setting. Gutter toggle not working as expected. --- browser/components/CodeEditor.js | 27 ++++++---- browser/components/MarkdownEditor.js | 1 + browser/components/MarkdownSplitEditor.js | 1 + browser/main/lib/ConfigManager.js | 1 + browser/main/modals/PreferencesModal/UiTab.js | 12 +++++ yarn.lock | 54 ++++++++++++++++++- 6 files changed, 86 insertions(+), 10 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index 99695cdb..95e1ed7c 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -40,6 +40,8 @@ function translateHotkey (hotkey) { return hotkey.replace(/\s*\+\s*/g, '-').replace(/Command/g, 'Cmd').replace(/Control/g, 'Ctrl') } +const DEFAULT_GUTTERS = ['CodeMirror-linenumbers', 'CodeMirror-foldgutter'] + export default class CodeEditor extends React.Component { constructor (props) { super(props) @@ -255,7 +257,7 @@ export default class CodeEditor extends React.Component { } componentDidMount () { - const { rulers, enableRulers } = this.props + const { rulers, enableRulers, enableMarkdownLint } = this.props eventEmitter.on('line:jump', this.scrollToLineHandeler) snippetManager.init() @@ -277,8 +279,8 @@ export default class CodeEditor extends React.Component { inputStyle: 'textarea', dragDrop: false, foldGutter: true, - lint: this.setCodeEditorLintConfig(), - gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter', 'CodeMirror-lint-markers'], + lint: enableMarkdownLint ? this.setCodeEditorLintConfig() : false, + gutters: [...DEFAULT_GUTTERS, enableMarkdownLint && 'CodeMirror-lint-markers'], autoCloseBrackets: { pairs: this.props.matchingPairs, triples: this.props.matchingTriples, @@ -515,6 +517,7 @@ export default class CodeEditor extends React.Component { const { rulers, enableRulers, + enableMarkdownLint, customMarkdownLintConfig } = this.props if (prevProps.mode !== this.props.mode) { @@ -533,8 +536,14 @@ export default class CodeEditor extends React.Component { if (prevProps.keyMap !== this.props.keyMap) { needRefresh = true } - if (prevProps.customMarkdownLintConfig !== customMarkdownLintConfig) { - this.editor.setOption('lint', this.setCodeEditorLintConfig()) + if (prevProps.enableMarkdownLint !== enableMarkdownLint || prevProps.customMarkdownLintConfig !== customMarkdownLintConfig) { + if (!enableMarkdownLint) { + this.editor.setOption('lint', {default: false}) + this.editor.setOption('gutters', DEFAULT_GUTTERS) + } else { + this.editor.setOption('lint', this.setCodeEditorLintConfig()) + this.editor.setOption('gutters', [...DEFAULT_GUTTERS, 'CodeMirror-lint-markers']) + } needRefresh = true } @@ -1128,13 +1137,11 @@ export default class CodeEditor extends React.Component { } ref='root' tabIndex='-1' - style={ - { + style={{ fontFamily, fontSize: fontSize, width: width - } - } + }} onDrop={ e => this.handleDropImage(e) } @@ -1173,6 +1180,7 @@ CodeEditor.propTypes = { readOnly: PropTypes.bool, autoDetect: PropTypes.bool, spellCheck: PropTypes.bool, + enableMarkdownLint: PropTypes.bool, customMarkdownLintConfig: PropTypes.string } @@ -1186,5 +1194,6 @@ CodeEditor.defaultProps = { indentType: 'space', autoDetect: false, spellCheck: false, + enableMarkdownLint: DEFAULT_CONFIG.editor.enableMarkdownLint, customMarkdownLintConfig: DEFAULT_CONFIG.editor.customMarkdownLintConfig } diff --git a/browser/components/MarkdownEditor.js b/browser/components/MarkdownEditor.js index 022553fb..526ecb39 100644 --- a/browser/components/MarkdownEditor.js +++ b/browser/components/MarkdownEditor.js @@ -319,6 +319,7 @@ class MarkdownEditor extends React.Component { enableSmartPaste={config.editor.enableSmartPaste} hotkey={config.hotkey} switchPreview={config.editor.switchPreview} + enableMarkdownLint={config.editor.enableMarkdownLint} customMarkdownLintConfig={config.editor.customMarkdownLintConfig} />
this.handleMouseDown(e)} > diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index 78c91aa1..bea019fa 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -64,6 +64,7 @@ export const DEFAULT_CONFIG = { frontMatterTitleField: 'title', spellcheck: false, enableSmartPaste: false, + enableMarkdownLint: false, customMarkdownLintConfig: DEFAULT_MARKDOWN_LINT_CONFIG }, preview: { diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index 1f914209..3e062e9f 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -104,6 +104,7 @@ class UiTab extends React.Component { explodingPairs: this.refs.explodingPairs.value, spellcheck: this.refs.spellcheck.checked, enableSmartPaste: this.refs.enableSmartPaste.checked, + enableMarkdownLint: this.refs.enableMarkdownLint.checked, customMarkdownLintConfig: this.customMarkdownLintConfigCM.getCodeMirror().getValue() }, preview: { @@ -599,6 +600,17 @@ class UiTab extends React.Component {
+
+ +
+
{i18n.__('Matching character pairs')} diff --git a/yarn.lock b/yarn.lock index 8fa53631..a5c507eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -101,6 +101,11 @@ version "8.10.17" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.17.tgz#d48cf10f0dc6dcf59f827f5a3fc7a4a6004318d3" +"JSV@>= 4.0.x": + version "4.0.2" + resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" + integrity sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c= + abab@^1.0.3, abab@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" @@ -1620,9 +1625,10 @@ chalk@0.5.1: strip-ansi "^0.3.0" supports-color "^0.2.0" -chalk@^0.4.0: +chalk@^0.4.0, chalk@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= dependencies: ansi-styles "~1.0.0" has-color "~0.1.0" @@ -5587,6 +5593,14 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" +jsonlint-mod@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/jsonlint-mod/-/jsonlint-mod-1.7.4.tgz#310390e1a6a85cef99f45f200e662ef23b48f7a6" + integrity sha512-FYOkwHqiuBbdVCHgXYlmtL+iUOz9AxCgjotzXl+edI0Hc1km1qK6TrBEAyPpO+5R0/IX3XENRp66mfob4jwxow== + dependencies: + JSV ">= 4.0.x" + nomnom ">= 1.5.x" + jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" @@ -5685,6 +5699,13 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +linkify-it@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.1.0.tgz#c4caf38a6cd7ac2212ef3c7d2bde30a91561f9db" + integrity sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg== + dependencies: + uc.micro "^1.0.1" + linkify-it@~1.2.0, linkify-it@~1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-1.2.4.tgz#0773526c317c8fd13bd534ee1d180ff88abf881a" @@ -5968,6 +5989,17 @@ markdown-it-sup@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/markdown-it-sup/-/markdown-it-sup-1.0.0.tgz#cb9c9ff91a5255ac08f3fd3d63286e15df0a1fc3" +markdown-it@8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" + integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ== + dependencies: + argparse "^1.0.7" + entities "~1.1.1" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + markdown-it@^5.0.3: version "5.1.0" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-5.1.0.tgz#25286b8465bac496f3f1b77eed544643e9bd718d" @@ -6009,6 +6041,13 @@ markdown-toc@^1.2.0: repeat-string "^1.6.1" strip-color "^0.1.0" +markdownlint@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/markdownlint/-/markdownlint-0.11.0.tgz#3858bbdbc1ab78abf0c098d841c72b63dd3206a0" + integrity sha512-wE5WdKD6zW2DQaPQ5TFBTXh5j76DnWd/IFffnDQgHmi6Y61DJXBDfLftZ/suJHuv6cwPjM6gKw2GaRLJMOR+Mg== + dependencies: + markdown-it "8.4.2" + match-at@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/match-at/-/match-at-0.1.1.tgz#25d040d291777704d5e6556bbb79230ec2de0540" @@ -6470,6 +6509,14 @@ nodeify@^1.0.1: is-promise "~1.0.0" promise "~1.3.0" +"nomnom@>= 1.5.x": + version "1.8.1" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" + integrity sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc= + dependencies: + chalk "~0.4.0" + underscore "~1.6.0" + nopt@^3.0.1: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -9048,6 +9095,11 @@ uc.micro@^1.0.0, uc.micro@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376" +uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + uglify-js@^2.6: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" From 8b82c448af970ddfab4fc22baf80e9ce16e68ffc Mon Sep 17 00:00:00 2001 From: tool root Date: Sat, 25 May 2019 07:58:43 +0900 Subject: [PATCH 26/44] Fix: Changed the function name --- browser/components/CodeEditor.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index 99695cdb..f4e1da65 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -86,7 +86,7 @@ export default class CodeEditor extends React.Component { this.searchHandler = (e, msg) => this.handleSearch(msg) this.searchState = null this.scrollToLineHandeler = this.scrollToLine.bind(this) - this.setCodeEditorLintConfig = this.setCodeEditorLintConfig.bind(this) + this.setCodeEditorLintConfig = this.getCodeEditorLintConfig.bind(this) this.validatorOfMarkdown = this.validatorOfMarkdown.bind(this) this.formatTable = () => this.handleFormatTable() @@ -277,7 +277,7 @@ export default class CodeEditor extends React.Component { inputStyle: 'textarea', dragDrop: false, foldGutter: true, - lint: this.setCodeEditorLintConfig(), + lint: this.getCodeEditorLintConfig(), gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter', 'CodeMirror-lint-markers'], autoCloseBrackets: { pairs: this.props.matchingPairs, @@ -534,7 +534,7 @@ export default class CodeEditor extends React.Component { needRefresh = true } if (prevProps.customMarkdownLintConfig !== customMarkdownLintConfig) { - this.editor.setOption('lint', this.setCodeEditorLintConfig()) + this.editor.setOption('lint', this.getCodeEditorLintConfig()) needRefresh = true } @@ -618,7 +618,7 @@ export default class CodeEditor extends React.Component { } } - setCodeEditorLintConfig () { + getCodeEditorLintConfig () { const { mode } = this.props const checkMarkdownNoteIsOpen = mode === 'Boost Flavored Markdown' From 3b473a5f7a66178cfae1511f0a0ef3fbac46c213 Mon Sep 17 00:00:00 2001 From: tool root Date: Sat, 25 May 2019 08:04:40 +0900 Subject: [PATCH 27/44] Fix: Changed the function name --- browser/components/CodeEditor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index f4e1da65..20de5d41 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -86,7 +86,7 @@ export default class CodeEditor extends React.Component { this.searchHandler = (e, msg) => this.handleSearch(msg) this.searchState = null this.scrollToLineHandeler = this.scrollToLine.bind(this) - this.setCodeEditorLintConfig = this.getCodeEditorLintConfig.bind(this) + this.getCodeEditorLintConfig = this.getCodeEditorLintConfig.bind(this) this.validatorOfMarkdown = this.validatorOfMarkdown.bind(this) this.formatTable = () => this.handleFormatTable() From 2cffb50884e3b131ed85b9b1f7806aa3116b2ae3 Mon Sep 17 00:00:00 2001 From: tool root Date: Sat, 25 May 2019 08:16:25 +0900 Subject: [PATCH 28/44] Fix: Changed height of form --- browser/main/modals/PreferencesModal/UiTab.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index 1f914209..0601dc23 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -32,7 +32,7 @@ class UiTab extends React.Component { CodeMirror.autoLoadMode(this.customCSSCM.getCodeMirror(), 'css') CodeMirror.autoLoadMode(this.customMarkdownLintConfigCM.getCodeMirror(), 'javascript') this.customCSSCM.getCodeMirror().setSize('400px', '400px') - this.customMarkdownLintConfigCM.getCodeMirror().setSize('400px', '400px') + this.customMarkdownLintConfigCM.getCodeMirror().setSize('400px', '200px') this.handleSettingDone = () => { this.setState({UiAlert: { type: 'success', @@ -648,7 +648,7 @@ class UiTab extends React.Component {
this.handleUIChange(e)} ref={e => (this.customMarkdownLintConfigCM = e)} value={config.editor.customMarkdownLintConfig} From b68b367b3ca870c650c1bcf3809f1ee043f16e33 Mon Sep 17 00:00:00 2001 From: AWolf81 Date: Sat, 25 May 2019 07:16:03 +0200 Subject: [PATCH 29/44] Toggle linting gutter with document.querySelector and style.display --- browser/components/CodeEditor.js | 11 +++++------ browser/components/MarkdownEditor.js | 3 ++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index 95e1ed7c..eaf049f4 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -40,8 +40,6 @@ function translateHotkey (hotkey) { return hotkey.replace(/\s*\+\s*/g, '-').replace(/Command/g, 'Cmd').replace(/Control/g, 'Ctrl') } -const DEFAULT_GUTTERS = ['CodeMirror-linenumbers', 'CodeMirror-foldgutter'] - export default class CodeEditor extends React.Component { constructor (props) { super(props) @@ -280,7 +278,7 @@ export default class CodeEditor extends React.Component { dragDrop: false, foldGutter: true, lint: enableMarkdownLint ? this.setCodeEditorLintConfig() : false, - gutters: [...DEFAULT_GUTTERS, enableMarkdownLint && 'CodeMirror-lint-markers'], + gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter', 'CodeMirror-lint-markers'], autoCloseBrackets: { pairs: this.props.matchingPairs, triples: this.props.matchingTriples, @@ -290,6 +288,8 @@ export default class CodeEditor extends React.Component { extraKeys: this.defaultKeyMap }) + document.querySelector('.CodeMirror-lint-markers').style.display = enableMarkdownLint ? 'inline-block' : 'none' + if (!this.props.mode && this.props.value && this.props.autoDetect) { this.autoDetectLanguage(this.props.value) } else { @@ -539,12 +539,11 @@ export default class CodeEditor extends React.Component { if (prevProps.enableMarkdownLint !== enableMarkdownLint || prevProps.customMarkdownLintConfig !== customMarkdownLintConfig) { if (!enableMarkdownLint) { this.editor.setOption('lint', {default: false}) - this.editor.setOption('gutters', DEFAULT_GUTTERS) + document.querySelector('.CodeMirror-lint-markers').style.display = 'none' } else { this.editor.setOption('lint', this.setCodeEditorLintConfig()) - this.editor.setOption('gutters', [...DEFAULT_GUTTERS, 'CodeMirror-lint-markers']) + document.querySelector('.CodeMirror-lint-markers').style.display = 'inline-block' } - needRefresh = true } diff --git a/browser/components/MarkdownEditor.js b/browser/components/MarkdownEditor.js index 526ecb39..95cd7d7f 100644 --- a/browser/components/MarkdownEditor.js +++ b/browser/components/MarkdownEditor.js @@ -194,6 +194,7 @@ class MarkdownEditor extends React.Component { } reload () { + console.log('reloading editor...') this.refs.code.reload() this.cancelQueue() this.renderPreview(this.props.value) @@ -277,7 +278,7 @@ class MarkdownEditor extends React.Component { if (this.props.ignorePreviewPointerEvents) previewStyle.pointerEvents = 'none' const storage = findStorage(storageKey) - + console.log('render editor', config) return (
Date: Sat, 25 May 2019 07:31:21 +0200 Subject: [PATCH 30/44] move enableMarkdownLint checkbox to customMarkdownLintConfig area (like at allow custom css) --- browser/main/modals/PreferencesModal/UiTab.js | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index c8bfe8d1..da67bbf7 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -600,17 +600,6 @@ class UiTab extends React.Component {
-
- -
-
{i18n.__('Matching character pairs')} @@ -657,6 +646,12 @@ class UiTab extends React.Component { {i18n.__('Custom MarkdownLint Rules')}
+ this.handleUIChange(e)} + checked={this.state.config.editor.enableMarkdownLint} + ref='enableMarkdownLint' + type='checkbox' + />  + {i18n.__('Enable MarkdownLint')}
Date: Sun, 26 May 2019 09:57:40 +0200 Subject: [PATCH 31/44] remove console.logs & improve error handling --- browser/components/CodeEditor.js | 4 +++- browser/components/MarkdownEditor.js | 3 +-- browser/main/modals/PreferencesModal/UiTab.js | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index 9eed4054..61b33de1 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -642,8 +642,10 @@ export default class CodeEditor extends React.Component { try { Jsonlint.parse(customMarkdownLintConfig) lintConfigJson = JSON.parse(customMarkdownLintConfig) + console.log(customMarkdownLintConfig, lintConfigJson) } catch (err) { - throw err + eventEmitter.emit('APP_SETTING_ERROR') + return } const lintOptions = { 'strings': { diff --git a/browser/components/MarkdownEditor.js b/browser/components/MarkdownEditor.js index 95cd7d7f..526ecb39 100644 --- a/browser/components/MarkdownEditor.js +++ b/browser/components/MarkdownEditor.js @@ -194,7 +194,6 @@ class MarkdownEditor extends React.Component { } reload () { - console.log('reloading editor...') this.refs.code.reload() this.cancelQueue() this.renderPreview(this.props.value) @@ -278,7 +277,7 @@ class MarkdownEditor extends React.Component { if (this.props.ignorePreviewPointerEvents) previewStyle.pointerEvents = 'none' const storage = findStorage(storageKey) - console.log('render editor', config) + return (
{ + console.log('handle err', err) this.setState({UiAlert: { type: 'error', message: err.message != null ? err.message : i18n.__('An error occurred!') From c70cca277604af0fd04f2647c5a22b4a04b7d7fe Mon Sep 17 00:00:00 2001 From: AWolf81 Date: Sun, 26 May 2019 10:06:13 +0200 Subject: [PATCH 32/44] remove console.log --- browser/components/CodeEditor.js | 1 - browser/main/modals/PreferencesModal/UiTab.js | 1 - 2 files changed, 2 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index 61b33de1..180aca75 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -642,7 +642,6 @@ export default class CodeEditor extends React.Component { try { Jsonlint.parse(customMarkdownLintConfig) lintConfigJson = JSON.parse(customMarkdownLintConfig) - console.log(customMarkdownLintConfig, lintConfigJson) } catch (err) { eventEmitter.emit('APP_SETTING_ERROR') return diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index 5b2cf762..da67bbf7 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -40,7 +40,6 @@ class UiTab extends React.Component { }}) } this.handleSettingError = (err) => { - console.log('handle err', err) this.setState({UiAlert: { type: 'error', message: err.message != null ? err.message : i18n.__('An error occurred!') From aa4d06fb1eac8c84bc36516b4f95c223498bc013 Mon Sep 17 00:00:00 2001 From: Zubata SMRTKA Date: Fri, 24 May 2019 17:21:19 +0200 Subject: [PATCH 33/44] formatting --- browser/lib/Languages.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/browser/lib/Languages.js b/browser/lib/Languages.js index 8c3747a9..435747a9 100644 --- a/browser/lib/Languages.js +++ b/browser/lib/Languages.js @@ -62,10 +62,12 @@ const languages = [ { name: 'Spanish', locale: 'es-ES' - }, { + }, + { name: 'Turkish', locale: 'tr' - }, { + }, + { name: 'Thai', locale: 'th' } @@ -82,4 +84,3 @@ module.exports = { return languages } } - From 63eb8584e7520288332d515a5f13c11e40a70116 Mon Sep 17 00:00:00 2001 From: Junyoung Choi Date: Sun, 26 May 2019 18:32:24 +0900 Subject: [PATCH 34/44] Hide markdown lint settings when markdown lint is disabled --- browser/main/modals/PreferencesModal/UiTab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index da67bbf7..5de4b12b 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -652,7 +652,7 @@ class UiTab extends React.Component { type='checkbox' />  {i18n.__('Enable MarkdownLint')} -
+
Date: Sun, 26 May 2019 18:49:44 +0900 Subject: [PATCH 35/44] v0.11.17 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 84deed58..aa52ed53 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "boost", "productName": "Boostnote", - "version": "0.11.16", + "version": "0.11.17", "main": "index.js", "description": "Boostnote", "license": "GPL-3.0", From b6212f4bfeb5ba65e882c3cf91291a550eb60bd5 Mon Sep 17 00:00:00 2001 From: AWolf81 Date: Fri, 3 May 2019 23:53:00 +0200 Subject: [PATCH 36/44] Update dependencies & change to React-router v5 --- .babelrc | 2 +- browser/lib/CSSModules.js | 2 +- browser/lib/newNote.js | 12 +- browser/main/Detail/MarkdownNoteDetail.js | 12 +- browser/main/Detail/SnippetNoteDetail.js | 13 +- browser/main/Detail/index.js | 7 +- browser/main/Main.js | 14 +- browser/main/NewNoteButton/index.js | 11 +- browser/main/NoteList/index.js | 112 ++-- browser/main/SideNav/StorageItem.js | 7 +- browser/main/SideNav/index.js | 34 +- browser/main/TopBar/index.js | 19 +- browser/main/index.js | 52 +- browser/main/lib/modal.js | 2 +- browser/main/modals/CreateFolderModal.js | 2 +- browser/main/modals/NewNoteModal.js | 7 +- browser/main/modals/PreferencesModal/Blog.js | 2 +- .../modals/PreferencesModal/FolderItem.js | 2 +- .../modals/PreferencesModal/FolderList.js | 2 +- .../main/modals/PreferencesModal/HotkeyTab.js | 2 +- .../main/modals/PreferencesModal/InfoTab.js | 2 +- .../modals/PreferencesModal/StorageItem.js | 2 +- browser/main/modals/PreferencesModal/UiTab.js | 2 +- browser/main/modals/RenameFolderModal.js | 2 +- browser/main/store.js | 20 +- lib/main-window.js | 27 + lib/main.html | 4 +- package.json | 30 +- yarn.lock | 534 ++++++++++++++---- 29 files changed, 668 insertions(+), 271 deletions(-) diff --git a/.babelrc b/.babelrc index 270349d2..3a366286 100644 --- a/.babelrc +++ b/.babelrc @@ -7,7 +7,7 @@ "test": { "presets": ["env" ,"react", "es2015"], "plugins": [ - [ "babel-plugin-webpack-alias", { "config": "${PWD}/webpack.config.js" } ] + [ "babel-plugin-webpack-alias", { "config": "/webpack.config.js" } ] ] } } diff --git a/browser/lib/CSSModules.js b/browser/lib/CSSModules.js index 181274f4..691b44d2 100644 --- a/browser/lib/CSSModules.js +++ b/browser/lib/CSSModules.js @@ -1,5 +1,5 @@ import CSSModules from 'react-css-modules' export default function (component, styles) { - return CSSModules(component, styles, {errorWhenNotFound: false}) + return CSSModules(component, styles, {handleNotFoundStyleName: 'log'}) } diff --git a/browser/lib/newNote.js b/browser/lib/newNote.js index d8ef196f..149961d2 100644 --- a/browser/lib/newNote.js +++ b/browser/lib/newNote.js @@ -1,7 +1,9 @@ -import { hashHistory } from 'react-router' +// import { hashHistory } from 'react-router' +import { history } from 'browser/main/store' import dataApi from 'browser/main/lib/dataApi' import ee from 'browser/main/lib/eventEmitter' import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' +import queryString from 'query-string' export function createMarkdownNote (storage, folder, dispatch, location, params, config) { AwsMobileAnalyticsConfig.recordDynamicCustomEvent('ADD_MARKDOWN') @@ -28,9 +30,9 @@ export function createMarkdownNote (storage, folder, dispatch, location, params, note: note }) - hashHistory.push({ + history.push({ pathname: location.pathname, - query: { key: noteHash } + search: queryString.stringify({ key: noteHash }) }) ee.emit('list:jump', noteHash) ee.emit('detail:focus') @@ -70,9 +72,9 @@ export function createSnippetNote (storage, folder, dispatch, location, params, type: 'UPDATE_NOTE', note: note }) - hashHistory.push({ + history.push({ pathname: location.pathname, - query: { key: noteHash } + search: queryString.stringify({ key: noteHash }) }) ee.emit('list:jump', noteHash) ee.emit('detail:focus') diff --git a/browser/main/Detail/MarkdownNoteDetail.js b/browser/main/Detail/MarkdownNoteDetail.js index cf3be072..5bd67d72 100755 --- a/browser/main/Detail/MarkdownNoteDetail.js +++ b/browser/main/Detail/MarkdownNoteDetail.js @@ -9,7 +9,8 @@ import StarButton from './StarButton' import TagSelect from './TagSelect' import FolderSelect from './FolderSelect' import dataApi from 'browser/main/lib/dataApi' -import { hashHistory } from 'react-router' +// import { hashHistory } from 'react-router' +import { history } from 'browser/main/store' import ee from 'browser/main/lib/eventEmitter' import markdown from 'browser/lib/markdownTextHelper' import StatusBar from '../StatusBar' @@ -30,6 +31,7 @@ import { getTodoPercentageOfCompleted } from 'browser/lib/getTodoStatus' import striptags from 'striptags' import { confirmDeleteNote } from 'browser/lib/confirmDeleteNote' import markdownToc from 'browser/lib/markdown-toc-generator' +import queryString from 'query-string' class MarkdownNoteDetail extends React.Component { constructor (props) { @@ -159,11 +161,11 @@ class MarkdownNoteDetail extends React.Component { originNote: note, note: newNote }) - hashHistory.replace({ + history.replace({ pathname: location.pathname, - query: { + search: queryString.stringify({ key: newNote.key - } + }) }) this.setState({ isMovingNote: false @@ -491,7 +493,7 @@ class MarkdownNoteDetail extends React.Component { note) const trashedNotes = data.trashedSet.toJS().map(uniqueKey => data.noteMap.get(uniqueKey)) let displayedNotes = allNotes diff --git a/browser/main/Main.js b/browser/main/Main.js index 26fc8377..0742cd03 100644 --- a/browser/main/Main.js +++ b/browser/main/Main.js @@ -12,8 +12,8 @@ import _ from 'lodash' import ConfigManager from 'browser/main/lib/ConfigManager' import mobileAnalytics from 'browser/main/lib/AwsMobileAnalyticsConfig' import eventEmitter from 'browser/main/lib/eventEmitter' -import { hashHistory } from 'react-router' -import store from 'browser/main/store' +// import { hashHistory } from 'react-router' +import { store, history } from 'browser/main/store' import i18n from 'browser/lib/i18n' import { getLocales } from 'browser/lib/Languages' import applyShortcuts from 'browser/main/lib/shortcutManager' @@ -132,7 +132,7 @@ class Main extends React.Component { .then(() => data.storage) }) .then(storage => { - hashHistory.push('/storages/' + storage.key) + history.push('/storages/' + storage.key) }) .catch(err => { throw err @@ -311,7 +311,7 @@ class Main extends React.Component { onMouseUp={e => this.handleMouseUp(e)} > {!config.isSideNavFolded && @@ -341,7 +341,7 @@ class Main extends React.Component { 'dispatch', 'config', 'data', - 'params', + 'match', 'location' ])} /> @@ -351,7 +351,7 @@ class Main extends React.Component { 'dispatch', 'data', 'config', - 'params', + 'match', 'location' ])} /> @@ -373,7 +373,7 @@ class Main extends React.Component { 'dispatch', 'data', 'config', - 'params', + 'match', 'location' ])} ignorePreviewPointerEvents={this.state.isRightSliderFocused} diff --git a/browser/main/NewNoteButton/index.js b/browser/main/NewNoteButton/index.js index c34443be..63dab8d1 100644 --- a/browser/main/NewNoteButton/index.js +++ b/browser/main/NewNoteButton/index.js @@ -21,6 +21,9 @@ class NewNoteButton extends React.Component { this.state = { } + this.handleNewNoteButtonClick = this.handleNewNoteButtonClick.bind(this) + + // why is there a newNoteHandler?! this.newNoteHandler = () => { this.handleNewNoteButtonClick() } @@ -35,9 +38,8 @@ class NewNoteButton extends React.Component { } handleNewNoteButtonClick (e) { - const { location, params, dispatch, config } = this.props + const { location, dispatch, match: { params }, config } = this.props const { storage, folder } = this.resolveTargetFolder() - if (config.ui.defaultNote === 'MARKDOWN_NOTE') { createMarkdownNote(storage.key, folder.key, dispatch, location, params, config) } else if (config.ui.defaultNote === 'SNIPPET_NOTE') { @@ -55,9 +57,8 @@ class NewNoteButton extends React.Component { } resolveTargetFolder () { - const { data, params } = this.props + const { data, match: { params } } = this.props let storage = data.storageMap.get(params.storageKey) - // Find first storage if (storage == null) { for (const kv of data.storageMap) { @@ -93,7 +94,7 @@ class NewNoteButton extends React.Component { >
diff --git a/browser/main/index.js b/browser/main/index.js index 6e8bdcc5..b3a909e5 100644 --- a/browser/main/index.js +++ b/browser/main/index.js @@ -1,11 +1,13 @@ import { Provider } from 'react-redux' import Main from './Main' -import store from './store' -import React from 'react' +import { store, history } from './store' +import React, { Fragment } from 'react' import ReactDOM from 'react-dom' require('!!style!css!stylus?sourceMap!./global.styl') -import { Router, Route, IndexRoute, IndexRedirect, hashHistory } from 'react-router' -import { syncHistoryWithStore } from 'react-router-redux' +import { Route, Switch, Redirect } from 'react-router-dom' +import { ConnectedRouter } from 'connected-react-router' +import DevTools from './DevTools' + require('./lib/ipcClient') require('../lib/customMeta') import i18n from 'browser/lib/i18n' @@ -77,7 +79,6 @@ document.addEventListener('click', function (e) { }) const el = document.getElementById('content') -const history = syncHistoryWithStore(hashHistory, store) function notify (...args) { return new window.Notification(...args) @@ -98,29 +99,24 @@ function updateApp () { ReactDOM.render(( - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + {/* storages */} + + + + + + + ), el, function () { const loadingCover = document.getElementById('loadingCover') diff --git a/browser/main/lib/modal.js b/browser/main/lib/modal.js index 7a7a9c8c..955cb5c8 100644 --- a/browser/main/lib/modal.js +++ b/browser/main/lib/modal.js @@ -1,7 +1,7 @@ import React from 'react' import { Provider } from 'react-redux' import ReactDOM from 'react-dom' -import store from '../store' +import { store } from '../store' class ModalBase extends React.Component { constructor (props) { diff --git a/browser/main/modals/CreateFolderModal.js b/browser/main/modals/CreateFolderModal.js index b061b0f3..b48d6e42 100644 --- a/browser/main/modals/CreateFolderModal.js +++ b/browser/main/modals/CreateFolderModal.js @@ -3,7 +3,7 @@ import React from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './CreateFolderModal.styl' import dataApi from 'browser/main/lib/dataApi' -import store from 'browser/main/store' +import { store } from 'browser/main/store' import consts from 'browser/lib/consts' import ModalEscButton from 'browser/components/ModalEscButton' import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' diff --git a/browser/main/modals/NewNoteModal.js b/browser/main/modals/NewNoteModal.js index 41c174cb..a17a36cd 100644 --- a/browser/main/modals/NewNoteModal.js +++ b/browser/main/modals/NewNoteModal.js @@ -4,6 +4,7 @@ import styles from './NewNoteModal.styl' import ModalEscButton from 'browser/components/ModalEscButton' import i18n from 'browser/lib/i18n' import { createMarkdownNote, createSnippetNote } from 'browser/lib/newNote' +import queryString from 'query-string' class NewNoteModal extends React.Component { constructor (props) { @@ -21,7 +22,8 @@ class NewNoteModal extends React.Component { } handleMarkdownNoteButtonClick (e) { - const { storage, folder, dispatch, location, params, config } = this.props + const { storage, folder, dispatch, location, config } = this.props + const params = location.search !== '' && queryString.parse(location.search) if (!this.lock) { this.lock = true createMarkdownNote(storage, folder, dispatch, location, params, config).then(() => { @@ -38,7 +40,8 @@ class NewNoteModal extends React.Component { } handleSnippetNoteButtonClick (e) { - const { storage, folder, dispatch, location, params, config } = this.props + const { storage, folder, dispatch, location, config } = this.props + const params = location.search !== '' && queryString.parse(location.search) if (!this.lock) { this.lock = true createSnippetNote(storage, folder, dispatch, location, params, config).then(() => { diff --git a/browser/main/modals/PreferencesModal/Blog.js b/browser/main/modals/PreferencesModal/Blog.js index 2c93fb29..4d59bea1 100644 --- a/browser/main/modals/PreferencesModal/Blog.js +++ b/browser/main/modals/PreferencesModal/Blog.js @@ -2,7 +2,7 @@ import React from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './ConfigTab.styl' import ConfigManager from 'browser/main/lib/ConfigManager' -import store from 'browser/main/store' +import { store } from 'browser/main/store' import PropTypes from 'prop-types' import _ from 'lodash' import i18n from 'browser/lib/i18n' diff --git a/browser/main/modals/PreferencesModal/FolderItem.js b/browser/main/modals/PreferencesModal/FolderItem.js index dc9082b9..e6bd1e37 100644 --- a/browser/main/modals/PreferencesModal/FolderItem.js +++ b/browser/main/modals/PreferencesModal/FolderItem.js @@ -4,7 +4,7 @@ import CSSModules from 'browser/lib/CSSModules' import ReactDOM from 'react-dom' import styles from './FolderItem.styl' import dataApi from 'browser/main/lib/dataApi' -import store from 'browser/main/store' +import { store } from 'browser/main/store' import { SketchPicker } from 'react-color' import { SortableElement, SortableHandle } from 'react-sortable-hoc' import i18n from 'browser/lib/i18n' diff --git a/browser/main/modals/PreferencesModal/FolderList.js b/browser/main/modals/PreferencesModal/FolderList.js index e7cc6f94..02f5cee9 100644 --- a/browser/main/modals/PreferencesModal/FolderList.js +++ b/browser/main/modals/PreferencesModal/FolderList.js @@ -3,7 +3,7 @@ import React from 'react' import CSSModules from 'browser/lib/CSSModules' import dataApi from 'browser/main/lib/dataApi' import styles from './FolderList.styl' -import store from 'browser/main/store' +import { store } from 'browser/main/store' import FolderItem from './FolderItem' import { SortableContainer } from 'react-sortable-hoc' import i18n from 'browser/lib/i18n' diff --git a/browser/main/modals/PreferencesModal/HotkeyTab.js b/browser/main/modals/PreferencesModal/HotkeyTab.js index 218a68f6..713f6a65 100644 --- a/browser/main/modals/PreferencesModal/HotkeyTab.js +++ b/browser/main/modals/PreferencesModal/HotkeyTab.js @@ -3,7 +3,7 @@ import React from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './ConfigTab.styl' import ConfigManager from 'browser/main/lib/ConfigManager' -import store from 'browser/main/store' +import { store } from 'browser/main/store' import _ from 'lodash' import i18n from 'browser/lib/i18n' diff --git a/browser/main/modals/PreferencesModal/InfoTab.js b/browser/main/modals/PreferencesModal/InfoTab.js index 8682f62d..71e99da9 100644 --- a/browser/main/modals/PreferencesModal/InfoTab.js +++ b/browser/main/modals/PreferencesModal/InfoTab.js @@ -2,7 +2,7 @@ import React from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './InfoTab.styl' import ConfigManager from 'browser/main/lib/ConfigManager' -import store from 'browser/main/store' +import { store } from 'browser/main/store' import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' import _ from 'lodash' import i18n from 'browser/lib/i18n' diff --git a/browser/main/modals/PreferencesModal/StorageItem.js b/browser/main/modals/PreferencesModal/StorageItem.js index 3a2b075c..9af02962 100644 --- a/browser/main/modals/PreferencesModal/StorageItem.js +++ b/browser/main/modals/PreferencesModal/StorageItem.js @@ -4,7 +4,7 @@ import CSSModules from 'browser/lib/CSSModules' import styles from './StorageItem.styl' import consts from 'browser/lib/consts' import dataApi from 'browser/main/lib/dataApi' -import store from 'browser/main/store' +import { store } from 'browser/main/store' import FolderList from './FolderList' import i18n from 'browser/lib/i18n' diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index 5de4b12b..f74dbda5 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -3,7 +3,7 @@ import React from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './ConfigTab.styl' import ConfigManager from 'browser/main/lib/ConfigManager' -import store from 'browser/main/store' +import { store } from 'browser/main/store' import consts from 'browser/lib/consts' import ReactCodeMirror from 'react-codemirror' import CodeMirror from 'codemirror' diff --git a/browser/main/modals/RenameFolderModal.js b/browser/main/modals/RenameFolderModal.js index edbcee67..9fdd70c8 100644 --- a/browser/main/modals/RenameFolderModal.js +++ b/browser/main/modals/RenameFolderModal.js @@ -3,7 +3,7 @@ import React from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './RenameFolderModal.styl' import dataApi from 'browser/main/lib/dataApi' -import store from 'browser/main/store' +import { store } from 'browser/main/store' import ModalEscButton from 'browser/components/ModalEscButton' import i18n from 'browser/lib/i18n' diff --git a/browser/main/store.js b/browser/main/store.js index 5edc115f..91152aff 100644 --- a/browser/main/store.js +++ b/browser/main/store.js @@ -1,8 +1,10 @@ -import { combineReducers, createStore } from 'redux' -import { routerReducer } from 'react-router-redux' +import { combineReducers, createStore, compose, applyMiddleware } from 'redux' +import { connectRouter, routerMiddleware } from 'connected-react-router' +import { createHashHistory as createHistory } from 'history' import ConfigManager from 'browser/main/lib/ConfigManager' import { Map, Set } from 'browser/lib/Mutable' import _ from 'lodash' +import DevTools from './DevTools' function defaultDataMap () { return { @@ -465,13 +467,21 @@ function getOrInitItem (target, key) { return results } +const history = createHistory() + +// Query not available in HashHistory with ReactRouter >= v4 +// Relevant Issue https://github.com/ReactTraining/react-router/issues/4410#issuecomment-293772446 +// --> moved from query to search - so we only need query-string parsing/stringify for noteKey. +// (No need to add query to history with a listener) + const reducer = combineReducers({ data, config, status, - routing: routerReducer + router: connectRouter(history) // I think we could also go with-out connected-router as we're using history with imports directly }) -const store = createStore(reducer) +const store = createStore(reducer, undefined, compose( + applyMiddleware(routerMiddleware(history)), DevTools.instrument())) -export default store +export { store, history } diff --git a/lib/main-window.js b/lib/main-window.js index 418fd442..614127e1 100644 --- a/lib/main-window.js +++ b/lib/main-window.js @@ -6,6 +6,33 @@ const Config = require('electron-config') const config = new Config() const _ = require('lodash') +// set up some chrome extensions +if (process.env.NODE_ENV === 'development') { + const { + default: installExtension, + REACT_DEVELOPER_TOOLS, + REACT_PERF + } = require('electron-devtools-installer') + + require('electron-debug')({ showDevTools: false }) + + const ChromeLens = { + // ID of the extension (https://chrome.google.com/webstore/detail/chromelens/idikgljglpfilbhaboonnpnnincjhjkd) + id: 'idikgljglpfilbhaboonnpnnincjhjkd', + electron: '>=1.2.1' + } + + const extensions = [REACT_DEVELOPER_TOOLS, REACT_PERF, ChromeLens] + + for (const extension of extensions) { + try { + installExtension(extension) + } catch (e) { + console.error(`[ELECTRON] Extension installation failed`, e) + } + } +} + const windowSize = config.get('windowsize') || { x: null, y: null, diff --git a/lib/main.html b/lib/main.html index 0d9feade..38e2cea9 100644 --- a/lib/main.html +++ b/lib/main.html @@ -141,8 +141,8 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 7e8f46c4f318a25b8850d4f02328287401c49837 Mon Sep 17 00:00:00 2001 From: AWolf81 Date: Wed, 8 May 2019 08:53:29 +0200 Subject: [PATCH 40/44] remove commented imports --- browser/lib/newNote.js | 1 - browser/main/Detail/MarkdownNoteDetail.js | 1 - browser/main/SideNav/StorageItem.js | 1 - 3 files changed, 3 deletions(-) diff --git a/browser/lib/newNote.js b/browser/lib/newNote.js index 149961d2..5b5699f5 100644 --- a/browser/lib/newNote.js +++ b/browser/lib/newNote.js @@ -1,4 +1,3 @@ -// import { hashHistory } from 'react-router' import { history } from 'browser/main/store' import dataApi from 'browser/main/lib/dataApi' import ee from 'browser/main/lib/eventEmitter' diff --git a/browser/main/Detail/MarkdownNoteDetail.js b/browser/main/Detail/MarkdownNoteDetail.js index 5bd67d72..dbf51f97 100755 --- a/browser/main/Detail/MarkdownNoteDetail.js +++ b/browser/main/Detail/MarkdownNoteDetail.js @@ -9,7 +9,6 @@ import StarButton from './StarButton' import TagSelect from './TagSelect' import FolderSelect from './FolderSelect' import dataApi from 'browser/main/lib/dataApi' -// import { hashHistory } from 'react-router' import { history } from 'browser/main/store' import ee from 'browser/main/lib/eventEmitter' import markdown from 'browser/lib/markdownTextHelper' diff --git a/browser/main/SideNav/StorageItem.js b/browser/main/SideNav/StorageItem.js index bf04f1cf..8d148cfa 100644 --- a/browser/main/SideNav/StorageItem.js +++ b/browser/main/SideNav/StorageItem.js @@ -2,7 +2,6 @@ import PropTypes from 'prop-types' import React from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './StorageItem.styl' -// import { hashHistory } from 'react-router' import { history } from 'browser/main/store' import modal from 'browser/main/lib/modal' import CreateFolderModal from 'browser/main/modals/CreateFolderModal' From 3c39dc3cec075a032e3bdd3b813377a32a04ed9d Mon Sep 17 00:00:00 2001 From: AWolf81 Date: Thu, 9 May 2019 07:45:21 +0200 Subject: [PATCH 41/44] change redirecting to connected-react-router --- browser/lib/newNote.js | 10 +++++----- browser/main/Detail/MarkdownNoteDetail.js | 7 ++++--- browser/main/Detail/SnippetNoteDetail.js | 6 +++--- browser/main/Main.js | 5 +++-- browser/main/NoteList/index.js | 11 ++++------- browser/main/SideNav/StorageItem.js | 10 +++++----- 6 files changed, 24 insertions(+), 25 deletions(-) diff --git a/browser/lib/newNote.js b/browser/lib/newNote.js index 5b5699f5..4eec24f1 100644 --- a/browser/lib/newNote.js +++ b/browser/lib/newNote.js @@ -1,8 +1,8 @@ -import { history } from 'browser/main/store' import dataApi from 'browser/main/lib/dataApi' import ee from 'browser/main/lib/eventEmitter' import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' import queryString from 'query-string' +import { push } from 'connected-react-router' export function createMarkdownNote (storage, folder, dispatch, location, params, config) { AwsMobileAnalyticsConfig.recordDynamicCustomEvent('ADD_MARKDOWN') @@ -29,10 +29,10 @@ export function createMarkdownNote (storage, folder, dispatch, location, params, note: note }) - history.push({ + dispatch(push({ pathname: location.pathname, search: queryString.stringify({ key: noteHash }) - }) + })) ee.emit('list:jump', noteHash) ee.emit('detail:focus') }) @@ -71,10 +71,10 @@ export function createSnippetNote (storage, folder, dispatch, location, params, type: 'UPDATE_NOTE', note: note }) - history.push({ + dispatch(push({ pathname: location.pathname, search: queryString.stringify({ key: noteHash }) - }) + })) ee.emit('list:jump', noteHash) ee.emit('detail:focus') }) diff --git a/browser/main/Detail/MarkdownNoteDetail.js b/browser/main/Detail/MarkdownNoteDetail.js index dbf51f97..06fb91a5 100755 --- a/browser/main/Detail/MarkdownNoteDetail.js +++ b/browser/main/Detail/MarkdownNoteDetail.js @@ -9,7 +9,6 @@ import StarButton from './StarButton' import TagSelect from './TagSelect' import FolderSelect from './FolderSelect' import dataApi from 'browser/main/lib/dataApi' -import { history } from 'browser/main/store' import ee from 'browser/main/lib/eventEmitter' import markdown from 'browser/lib/markdownTextHelper' import StatusBar from '../StatusBar' @@ -31,6 +30,7 @@ import striptags from 'striptags' import { confirmDeleteNote } from 'browser/lib/confirmDeleteNote' import markdownToc from 'browser/lib/markdown-toc-generator' import queryString from 'query-string' +import { replace } from 'connected-react-router' class MarkdownNoteDetail extends React.Component { constructor (props) { @@ -141,6 +141,7 @@ class MarkdownNoteDetail extends React.Component { } handleFolderChange (e) { + const { dispatch } = this.props const { note } = this.state const value = this.refs.folder.value const splitted = value.split('-') @@ -160,12 +161,12 @@ class MarkdownNoteDetail extends React.Component { originNote: note, note: newNote }) - history.replace({ + dispatch(replace({ pathname: location.pathname, search: queryString.stringify({ key: newNote.key }) - }) + })) this.setState({ isMovingNote: false }) diff --git a/browser/main/Detail/SnippetNoteDetail.js b/browser/main/Detail/SnippetNoteDetail.js index 31c6e174..7503addb 100644 --- a/browser/main/Detail/SnippetNoteDetail.js +++ b/browser/main/Detail/SnippetNoteDetail.js @@ -8,7 +8,6 @@ import StarButton from './StarButton' import TagSelect from './TagSelect' import FolderSelect from './FolderSelect' import dataApi from 'browser/main/lib/dataApi' -import { history } from 'browser/main/store' import ee from 'browser/main/lib/eventEmitter' import CodeMirror from 'codemirror' import 'codemirror-mode-elixir' @@ -31,6 +30,7 @@ import i18n from 'browser/lib/i18n' import { confirmDeleteNote } from 'browser/lib/confirmDeleteNote' import markdownToc from 'browser/lib/markdown-toc-generator' import queryString from 'query-string' +import { replace } from 'connected-react-router' const electron = require('electron') const { remote } = electron @@ -166,12 +166,12 @@ class SnippetNoteDetail extends React.Component { originNote: note, note: newNote }) - history.replace({ + dispatch(replace({ pathname: location.pathname, search: queryString.stringify({ key: newNote.key }) - }) + })) this.setState({ isMovingNote: false }) diff --git a/browser/main/Main.js b/browser/main/Main.js index 45e9b795..30bf8e8a 100644 --- a/browser/main/Main.js +++ b/browser/main/Main.js @@ -12,10 +12,11 @@ import _ from 'lodash' import ConfigManager from 'browser/main/lib/ConfigManager' import mobileAnalytics from 'browser/main/lib/AwsMobileAnalyticsConfig' import eventEmitter from 'browser/main/lib/eventEmitter' -import { store, history } from 'browser/main/store' +import { store } from 'browser/main/store' import i18n from 'browser/lib/i18n' import { getLocales } from 'browser/lib/Languages' import applyShortcuts from 'browser/main/lib/shortcutManager' +import { push } from 'connected-react-router' const path = require('path') const electron = require('electron') const { remote } = electron @@ -131,7 +132,7 @@ class Main extends React.Component { .then(() => data.storage) }) .then(storage => { - history.push('/storages/' + storage.key) + store.dispatch(push('/storages/' + storage.key)) }) .catch(err => { throw err diff --git a/browser/main/NoteList/index.js b/browser/main/NoteList/index.js index 16b4ea88..a146cb6c 100644 --- a/browser/main/NoteList/index.js +++ b/browser/main/NoteList/index.js @@ -14,7 +14,6 @@ import NoteItemSimple from 'browser/components/NoteItemSimple' import searchFromNotes from 'browser/lib/search' import fs from 'fs' import path from 'path' -import { history } from 'browser/main/store' import { push, replace } from 'connected-react-router' import copy from 'copy-to-clipboard' import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' @@ -764,10 +763,10 @@ class NoteList extends React.Component { selectedNoteKeys: [note.key] }) - history.push({ + dispatch(push({ pathname: location.pathname, search: queryString.stringify({key: note.key}) - }) + })) }) } @@ -776,9 +775,7 @@ class NoteList extends React.Component { return copy(noteLink) } - // Navigate seems unused navigate (sender, pathname) { - // const { router } = this.context const { dispatch } = this.props dispatch(push({ pathname, @@ -949,10 +946,10 @@ class NoteList extends React.Component { type: 'UPDATE_NOTE', note: note }) - history.push({ + dispatch(push({ pathname: location.pathname, search: queryString.stringify({key: getNoteKey(note)}) - }) + })) }) }) }) diff --git a/browser/main/SideNav/StorageItem.js b/browser/main/SideNav/StorageItem.js index 8d148cfa..74881b9e 100644 --- a/browser/main/SideNav/StorageItem.js +++ b/browser/main/SideNav/StorageItem.js @@ -2,7 +2,6 @@ import PropTypes from 'prop-types' import React from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './StorageItem.styl' -import { history } from 'browser/main/store' import modal from 'browser/main/lib/modal' import CreateFolderModal from 'browser/main/modals/CreateFolderModal' import RenameFolderModal from 'browser/main/modals/RenameFolderModal' @@ -12,6 +11,7 @@ import _ from 'lodash' import { SortableElement } from 'react-sortable-hoc' import i18n from 'browser/lib/i18n' import context from 'browser/lib/context' +import { push } from 'connected-react-router' const { remote } = require('electron') const { dialog } = remote @@ -134,14 +134,14 @@ class StorageItem extends React.Component { } handleHeaderInfoClick (e) { - const { storage } = this.props - history.push('/storages/' + storage.key) + const { storage, dispatch } = this.props + dispatch(push('/storages/' + storage.key)) } handleFolderButtonClick (folderKey) { return (e) => { - const { storage } = this.props - history.push('/storages/' + storage.key + '/folders/' + folderKey) + const { storage, dispatch } = this.props + dispatch(push('/storages/' + storage.key + '/folders/' + folderKey)) } } From 1afa02bbb3e7f7639e8d87e28592afe6d5aab99d Mon Sep 17 00:00:00 2001 From: AWolf81 Date: Sat, 11 May 2019 00:17:41 +0200 Subject: [PATCH 42/44] fix local link detection by creating a link tag to parse the input string --- browser/components/MarkdownPreview.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/browser/components/MarkdownPreview.js b/browser/components/MarkdownPreview.js index 4be33c51..bb663c5e 100755 --- a/browser/components/MarkdownPreview.js +++ b/browser/components/MarkdownPreview.js @@ -1015,16 +1015,19 @@ export default class MarkdownPreview extends React.Component { e.preventDefault() e.stopPropagation() - const href = e.target.getAttribute('href') - const linkHash = href.split('/').pop() + const rawHref = e.target.getAttribute('href') + const parser = document.createElement('a') + parser.href = e.target.getAttribute('href') + const { href, hash } = parser + const linkHash = hash === '' ? rawHref : hash // needed because we're having special link formats that are removed by parser e.g. :line:10 - if (!href) return + if (!rawHref) return // not checked href because parser will create file://... string for [empty link]() - const regexNoteInternalLink = process.env.NODE_ENV === 'production' ? /main.production.html#(.+)/ : /main.development.html#(.+)/ + const regexNoteInternalLink = /.*[main.\w]*.html#/ - if (regexNoteInternalLink.test(linkHash)) { - const targetId = mdurl.encode(linkHash.match(regexNoteInternalLink)[1]) - const targetElement = this.refs.root.contentWindow.document.getElementById( + if (regexNoteInternalLink.test(href)) { + const targetId = mdurl.encode(linkHash) + const targetElement = this.refs.root.contentWindow.document.querySelector( targetId ) From 929f475354e54fa2f1c4a252ecd94bd919fe9fbd Mon Sep 17 00:00:00 2001 From: Morten Lautrup <44033709+MortenLautrup@users.noreply.github.com> Date: Tue, 21 May 2019 19:44:06 +0200 Subject: [PATCH 43/44] Make buttons undraggable --- browser/main/Detail/MarkdownNoteDetail.styl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/browser/main/Detail/MarkdownNoteDetail.styl b/browser/main/Detail/MarkdownNoteDetail.styl index cdfeaf3a..f8f5c8a8 100644 --- a/browser/main/Detail/MarkdownNoteDetail.styl +++ b/browser/main/Detail/MarkdownNoteDetail.styl @@ -80,4 +80,8 @@ body[data-theme="monokai"] body[data-theme="dracula"] .root border-left 1px solid $ui-dracula-borderColor - background-color $ui-dracula-noteDetail-backgroundColor \ No newline at end of file + background-color $ui-dracula-noteDetail-backgroundColor + +img, span, div + -webkit-user-drag none + user-select none From 052fb3df5bb16955873f4cabe40a9337cc34caae Mon Sep 17 00:00:00 2001 From: Morten Lautrup <44033709+MortenLautrup@users.noreply.github.com> Date: Fri, 24 May 2019 09:09:42 +0200 Subject: [PATCH 44/44] Specify wich images should not be draggable Make only images and spans inside buttons undraggable --- browser/main/Detail/MarkdownNoteDetail.styl | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/browser/main/Detail/MarkdownNoteDetail.styl b/browser/main/Detail/MarkdownNoteDetail.styl index f8f5c8a8..819bef2e 100644 --- a/browser/main/Detail/MarkdownNoteDetail.styl +++ b/browser/main/Detail/MarkdownNoteDetail.styl @@ -82,6 +82,10 @@ body[data-theme="dracula"] border-left 1px solid $ui-dracula-borderColor background-color $ui-dracula-noteDetail-backgroundColor -img, span, div - -webkit-user-drag none - user-select none +div + > button, div + -webkit-user-drag none + user-select none + > img, span + -webkit-user-drag none + user-select none