From d47ff96b13d8e0271193b9ce4e16a0b6649efd1a Mon Sep 17 00:00:00 2001 From: asmsuechan Date: Thu, 9 Mar 2017 17:16:14 -0800 Subject: [PATCH 01/10] Enable to set configs in ~/.boostnoterc --- browser/main/lib/ConfigManager.js | 26 ++++++++++++++++++++++---- browser/main/lib/RcParser.js | 12 ++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 browser/main/lib/RcParser.js diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index 6752fc14..b8acb324 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -1,10 +1,14 @@ import _ from 'lodash' +import RcParser from 'browser/main/lib/RcParser' const OSX = global.process.platform === 'darwin' const win = global.process.platform === 'win32' const electron = require('electron') const { ipcRenderer } = electron const consts = require('browser/lib/consts') +const path = require('path') +const fs = require('fs') +const BOOSTNOTERC = '.boostnoterc' let isInitialized = false @@ -60,11 +64,25 @@ function get () { let config = window.localStorage.getItem('config') try { + const homePath = global.process.env.HOME || global.process.env.USERPROFILE + const boostnotercPath = path.join(homePath, BOOSTNOTERC) + const boostnotercConfig = RcParser.parse(boostnotercPath) + config = Object.assign({}, DEFAULT_CONFIG, JSON.parse(config)) - config.hotkey = Object.assign({}, DEFAULT_CONFIG.hotkey, config.hotkey) - config.ui = Object.assign({}, DEFAULT_CONFIG.ui, config.ui) - config.editor = Object.assign({}, DEFAULT_CONFIG.editor, config.editor) - config.preview = Object.assign({}, DEFAULT_CONFIG.preview, config.preview) + + if (boostnotercConfig !== undefined) { + config.hotkey = Object.assign({}, DEFAULT_CONFIG.hotkey, boostnotercConfig.hotkey) + config.ui = Object.assign({}, DEFAULT_CONFIG.ui, boostnotercConfig.ui) + config.editor = Object.assign({}, DEFAULT_CONFIG.editor, boostnotercConfig.editor) + config.preview = Object.assign({}, DEFAULT_CONFIG.preview, boostnotercConfig.preview) + } + + config = Object.assign(config, DEFAULT_CONFIG, config) + config.hotkey = Object.assign(config, DEFAULT_CONFIG.hotkey, config.hotkey) + config.ui = Object.assign(config, DEFAULT_CONFIG.ui, config.ui) + config.editor = Object.assign(config, DEFAULT_CONFIG.editor, config.editor) + config.preview = Object.assign(config, DEFAULT_CONFIG.preview, config.preview) + if (!validate(config)) throw new Error('INVALID CONFIG') } catch (err) { console.warn('Boostnote resets the malformed configuration.') diff --git a/browser/main/lib/RcParser.js b/browser/main/lib/RcParser.js new file mode 100644 index 00000000..aac42fe8 --- /dev/null +++ b/browser/main/lib/RcParser.js @@ -0,0 +1,12 @@ +const path = require('path') +const sander = require('sander') + +function parse (boostnotercPath) { + if (!sander.existsSync(boostnotercPath)) return + let config = JSON.parse(sander.readFileSync(boostnotercPath).toString()) + return config +} + +export default { + parse +} From a6fe3c27d4f0e090f2e44a2957a68ed86e5cb568 Mon Sep 17 00:00:00 2001 From: asmsuechan Date: Sun, 12 Mar 2017 17:40:57 -0700 Subject: [PATCH 02/10] Fix a cyclic object value error --- browser/main/lib/ConfigManager.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index b8acb324..8069ce0a 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -71,17 +71,17 @@ function get () { config = Object.assign({}, DEFAULT_CONFIG, JSON.parse(config)) if (boostnotercConfig !== undefined) { + config = Object.assign({}, DEFAULT_CONFIG, boostnotercConfig) config.hotkey = Object.assign({}, DEFAULT_CONFIG.hotkey, boostnotercConfig.hotkey) config.ui = Object.assign({}, DEFAULT_CONFIG.ui, boostnotercConfig.ui) config.editor = Object.assign({}, DEFAULT_CONFIG.editor, boostnotercConfig.editor) config.preview = Object.assign({}, DEFAULT_CONFIG.preview, boostnotercConfig.preview) } - config = Object.assign(config, DEFAULT_CONFIG, config) - config.hotkey = Object.assign(config, DEFAULT_CONFIG.hotkey, config.hotkey) - config.ui = Object.assign(config, DEFAULT_CONFIG.ui, config.ui) - config.editor = Object.assign(config, DEFAULT_CONFIG.editor, config.editor) - config.preview = Object.assign(config, DEFAULT_CONFIG.preview, config.preview) + config.hotkey = Object.assign({}, DEFAULT_CONFIG.hotkey, config.hotkey) + config.ui = Object.assign({}, DEFAULT_CONFIG.ui, config.ui) + config.editor = Object.assign({}, DEFAULT_CONFIG.editor, config.editor) + config.preview = Object.assign({}, DEFAULT_CONFIG.preview, config.preview) if (!validate(config)) throw new Error('INVALID CONFIG') } catch (err) { From 6c43fb232502d45f3a3568cf713207f1bb6d84d4 Mon Sep 17 00:00:00 2001 From: asmsuechan Date: Thu, 10 Aug 2017 09:43:50 +0900 Subject: [PATCH 03/10] Enable to set configs in ~/.boostnoterc --- browser/main/Main.js | 8 ++++++++ browser/main/lib/RcParser.js | 15 +++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/browser/main/Main.js b/browser/main/Main.js index 7557d2ae..06463452 100644 --- a/browser/main/Main.js +++ b/browser/main/Main.js @@ -14,6 +14,10 @@ import InitModal from 'browser/main/modals/InitModal' import mixpanel from 'browser/main/lib/mixpanel' import mobileAnalytics from 'browser/main/lib/AwsMobileAnalyticsConfig' import eventEmitter from 'browser/main/lib/eventEmitter' +import RcParser from 'browser/main/lib/RcParser' +import path from 'path' + +const BOOSTNOTERC = '.boostnoterc' function focused () { mixpanel.track('MAIN_FOCUSED') @@ -76,6 +80,10 @@ class Main extends React.Component { eventEmitter.on('editor:fullscreen', this.toggleFullScreen) window.addEventListener('focus', focused) + + const homePath = global.process.env.HOME || global.process.env.USERPROFILE + const boostnotercPath = path.join(homePath, BOOSTNOTERC) + RcParser.exec(boostnotercPath) } componentWillUnmount () { diff --git a/browser/main/lib/RcParser.js b/browser/main/lib/RcParser.js index aac42fe8..031b3a1d 100644 --- a/browser/main/lib/RcParser.js +++ b/browser/main/lib/RcParser.js @@ -1,3 +1,5 @@ +import _ from 'lodash' + const path = require('path') const sander = require('sander') @@ -7,6 +9,15 @@ function parse (boostnotercPath) { return config } -export default { - parse +function exec (boostnotercPath) { + const config = this.parse(boostnotercPath) + if (config.execs === undefined) return + _.forEach(config.execs, (exec) => { + eval(exec) + }) +} + +export default { + parse, + exec } From b7b715ba3dd45ae16ee6026f9ce7b81425c3a380 Mon Sep 17 00:00:00 2001 From: asmsuechan Date: Thu, 10 Aug 2017 09:43:04 +0900 Subject: [PATCH 04/10] Fix a return value of RcParser.parse --- browser/main/lib/ConfigManager.js | 26 +++++++++++--------------- browser/main/lib/RcParser.js | 15 ++++++++------- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index 8069ce0a..53a93a72 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -64,24 +64,12 @@ function get () { let config = window.localStorage.getItem('config') try { - const homePath = global.process.env.HOME || global.process.env.USERPROFILE - const boostnotercPath = path.join(homePath, BOOSTNOTERC) - const boostnotercConfig = RcParser.parse(boostnotercPath) + const boostnotercConfig = RcParser.parse() config = Object.assign({}, DEFAULT_CONFIG, JSON.parse(config)) - if (boostnotercConfig !== undefined) { - config = Object.assign({}, DEFAULT_CONFIG, boostnotercConfig) - config.hotkey = Object.assign({}, DEFAULT_CONFIG.hotkey, boostnotercConfig.hotkey) - config.ui = Object.assign({}, DEFAULT_CONFIG.ui, boostnotercConfig.ui) - config.editor = Object.assign({}, DEFAULT_CONFIG.editor, boostnotercConfig.editor) - config.preview = Object.assign({}, DEFAULT_CONFIG.preview, boostnotercConfig.preview) - } - - config.hotkey = Object.assign({}, DEFAULT_CONFIG.hotkey, config.hotkey) - config.ui = Object.assign({}, DEFAULT_CONFIG.ui, config.ui) - config.editor = Object.assign({}, DEFAULT_CONFIG.editor, config.editor) - config.preview = Object.assign({}, DEFAULT_CONFIG.preview, config.preview) + config = Object.assign({}, DEFAULT_CONFIG, boostnotercConfig) + config = assignConfigValues(config, boostnotercConfig, config) if (!validate(config)) throw new Error('INVALID CONFIG') } catch (err) { @@ -144,6 +132,14 @@ function set (updates) { }) } +function assignConfigValues (config, rcConfig, originalConfig) { + config.hotkey = Object.assign({}, DEFAULT_CONFIG.hotkey, rcConfig, originalConfig.hotkey) + config.ui = Object.assign({}, DEFAULT_CONFIG.ui, rcConfig, originalConfig.ui) + config.editor = Object.assign({}, DEFAULT_CONFIG.editor, rcConfig, originalConfig.editor) + config.preview = Object.assign({}, DEFAULT_CONFIG.preview, rcConfig, originalConfig.preview) + return config +} + export default { get, set, diff --git a/browser/main/lib/RcParser.js b/browser/main/lib/RcParser.js index 031b3a1d..6653847f 100644 --- a/browser/main/lib/RcParser.js +++ b/browser/main/lib/RcParser.js @@ -1,12 +1,13 @@ -import _ from 'lodash' +import path from 'path' +import sander from 'sander' -const path = require('path') -const sander = require('sander') +function parse () { + const BOOSTNOTERC = '.boostnoterc' + const homePath = global.process.env.HOME || global.process.env.USERPROFILE + const boostnotercPath = path.join(homePath, BOOSTNOTERC) -function parse (boostnotercPath) { - if (!sander.existsSync(boostnotercPath)) return - let config = JSON.parse(sander.readFileSync(boostnotercPath).toString()) - return config + if (!sander.existsSync(boostnotercPath)) return {} + return JSON.parse(sander.readFileSync(boostnotercPath).toString()) } function exec (boostnotercPath) { From 2247c0835d6dd50c6462e21c211f1734bab734be Mon Sep 17 00:00:00 2001 From: asmsuechan Date: Thu, 10 Aug 2017 09:54:56 +0900 Subject: [PATCH 05/10] Ignore any errors in ~/.boostnoterc --- browser/main/lib/RcParser.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/browser/main/lib/RcParser.js b/browser/main/lib/RcParser.js index 6653847f..bd3eb425 100644 --- a/browser/main/lib/RcParser.js +++ b/browser/main/lib/RcParser.js @@ -14,7 +14,12 @@ function exec (boostnotercPath) { const config = this.parse(boostnotercPath) if (config.execs === undefined) return _.forEach(config.execs, (exec) => { - eval(exec) + try { + eval(exec) + } catch (e) { + // Ignore any errors in ~/.boostnoterc + console.log(e) + } }) } From 473b80710d213edcf1d39ab3a3b92eb4187c0549 Mon Sep 17 00:00:00 2001 From: asmsuechan Date: Thu, 10 Aug 2017 11:14:42 +0900 Subject: [PATCH 06/10] Remove RcParser.exec --- browser/main/Main.js | 6 ------ browser/main/lib/RcParser.js | 16 +--------------- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/browser/main/Main.js b/browser/main/Main.js index 06463452..81216715 100644 --- a/browser/main/Main.js +++ b/browser/main/Main.js @@ -14,8 +14,6 @@ import InitModal from 'browser/main/modals/InitModal' import mixpanel from 'browser/main/lib/mixpanel' import mobileAnalytics from 'browser/main/lib/AwsMobileAnalyticsConfig' import eventEmitter from 'browser/main/lib/eventEmitter' -import RcParser from 'browser/main/lib/RcParser' -import path from 'path' const BOOSTNOTERC = '.boostnoterc' @@ -80,10 +78,6 @@ class Main extends React.Component { eventEmitter.on('editor:fullscreen', this.toggleFullScreen) window.addEventListener('focus', focused) - - const homePath = global.process.env.HOME || global.process.env.USERPROFILE - const boostnotercPath = path.join(homePath, BOOSTNOTERC) - RcParser.exec(boostnotercPath) } componentWillUnmount () { diff --git a/browser/main/lib/RcParser.js b/browser/main/lib/RcParser.js index bd3eb425..2bb7f6a6 100644 --- a/browser/main/lib/RcParser.js +++ b/browser/main/lib/RcParser.js @@ -10,20 +10,6 @@ function parse () { return JSON.parse(sander.readFileSync(boostnotercPath).toString()) } -function exec (boostnotercPath) { - const config = this.parse(boostnotercPath) - if (config.execs === undefined) return - _.forEach(config.execs, (exec) => { - try { - eval(exec) - } catch (e) { - // Ignore any errors in ~/.boostnoterc - console.log(e) - } - }) -} - export default { - parse, - exec + parse } From 9cb443dc2f953e9e21dbba4b37f6747acb5ad8ff Mon Sep 17 00:00:00 2001 From: asmsuechan Date: Thu, 10 Aug 2017 15:18:55 +0900 Subject: [PATCH 07/10] Remove unused variable --- browser/main/Main.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/browser/main/Main.js b/browser/main/Main.js index 81216715..7557d2ae 100644 --- a/browser/main/Main.js +++ b/browser/main/Main.js @@ -15,8 +15,6 @@ import mixpanel from 'browser/main/lib/mixpanel' import mobileAnalytics from 'browser/main/lib/AwsMobileAnalyticsConfig' import eventEmitter from 'browser/main/lib/eventEmitter' -const BOOSTNOTERC = '.boostnoterc' - function focused () { mixpanel.track('MAIN_FOCUSED') } From d02b740300f1a6b31cabeb862d53b6708f3ff8cc Mon Sep 17 00:00:00 2001 From: asmsuechan Date: Thu, 10 Aug 2017 16:37:31 +0900 Subject: [PATCH 08/10] Fix assignConfigValues because it didn't return proper hash object --- browser/main/lib/ConfigManager.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index 53a93a72..affba4b4 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -133,10 +133,11 @@ function set (updates) { } function assignConfigValues (config, rcConfig, originalConfig) { - config.hotkey = Object.assign({}, DEFAULT_CONFIG.hotkey, rcConfig, originalConfig.hotkey) - config.ui = Object.assign({}, DEFAULT_CONFIG.ui, rcConfig, originalConfig.ui) - config.editor = Object.assign({}, DEFAULT_CONFIG.editor, rcConfig, originalConfig.editor) - config.preview = Object.assign({}, DEFAULT_CONFIG.preview, rcConfig, originalConfig.preview) + config = Object.assign({}, DEFAULT_CONFIG, rcConfig, originalConfig) + config.hotkey = Object.assign({}, DEFAULT_CONFIG.hotkey, rcConfig.hotkey, originalConfig.hotkey) + config.ui = Object.assign({}, DEFAULT_CONFIG.ui, rcConfig.ui, originalConfig.ui) + config.editor = Object.assign({}, DEFAULT_CONFIG.editor, rcConfig.editor, originalConfig.editor) + config.preview = Object.assign({}, DEFAULT_CONFIG.preview, rcConfig.preview, originalConfig.preview) return config } From 4940ad6825a73d38727f1e1a649dc3800bd95ae9 Mon Sep 17 00:00:00 2001 From: asmsuechan Date: Thu, 10 Aug 2017 16:38:20 +0900 Subject: [PATCH 09/10] Add .boostnoterc.sample --- .boostnoterc.sample | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .boostnoterc.sample diff --git a/.boostnoterc.sample b/.boostnoterc.sample new file mode 100644 index 00000000..10ef26d1 --- /dev/null +++ b/.boostnoterc.sample @@ -0,0 +1,32 @@ +{ + "editor": { + "fontFamily": "Monaco, Consolas", + "fontSize": "14", + "indentSize": "2", + "indentType": "space", + "keyMap": "vim", + "switchPreview": "BLUR", + "theme": "monokai" + }, + "hotkey": { + "toggleFinder": "Cmd + Alt + S", + "toggleMain": "Cmd + Alt + L" + }, + "isSideNavFolded": false, + "listStyle": "DEFAULT", + "listWidth": 174, + "navWidth": 200, + "preview": { + "codeBlockTheme": "dracula", + "fontFamily": "Lato", + "fontSize": "14", + "lineNumber": true, + }, + "sortBy": "UPDATED_AT", + "ui": { + "defaultNote": "ALWAYS_ASK", + "disableDirectWrite": false, + "theme": "default" + }, + "zoom": 1 +} From af91c404067826cf4ad2dd2f9f954d82baa9ef8e Mon Sep 17 00:00:00 2001 From: asmsuechan Date: Thu, 10 Aug 2017 16:42:14 +0900 Subject: [PATCH 10/10] Remove unused variable --- browser/main/lib/ConfigManager.js | 1 - 1 file changed, 1 deletion(-) diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index affba4b4..505e7abd 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -8,7 +8,6 @@ const { ipcRenderer } = electron const consts = require('browser/lib/consts') const path = require('path') const fs = require('fs') -const BOOSTNOTERC = '.boostnoterc' let isInitialized = false