diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..a4730cbf --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Space indentation +[*] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +# The indent size used in the `package.json` file cannot be changed +# https://github.com/npm/npm/pull/3180#issuecomment-16336516 +[{*.yml,*.yaml,package.json}] +indent_style = space +indent_size = 2 diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index f16cc53c..d81ce39d 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -24,7 +24,6 @@ export default class CodeEditor extends React.Component { constructor (props) { super(props) - this.state = { isReady: false } this.scrollHandler = _.debounce(this.handleScroll.bind(this), 100, { leading: false, trailing: true @@ -215,7 +214,7 @@ export default class CodeEditor extends React.Component { CodeMirror.Vim.defineEx('wq', 'wq', this.quitEditor) CodeMirror.Vim.defineEx('qw', 'qw', this.quitEditor) CodeMirror.Vim.map('ZZ', ':q', 'normal') - this.setState({ isReady: true }) + this.tableEditor = new TableEditor(new TextEditorInterface(this.editor)) eventEmitter.on('code:format-table', this.formatTable) } @@ -582,8 +581,7 @@ export default class CodeEditor extends React.Component { style={{ fontFamily, fontSize: fontSize, - width: width, - opacity: this.state.isReady ? '1' : '0' + width: width }} onDrop={e => this.handleDropImage(e)} /> diff --git a/browser/components/MarkdownEditor.js b/browser/components/MarkdownEditor.js index 2b388f90..ee80c887 100644 --- a/browser/components/MarkdownEditor.js +++ b/browser/components/MarkdownEditor.js @@ -6,7 +6,6 @@ import CodeEditor from 'browser/components/CodeEditor' import MarkdownPreview from 'browser/components/MarkdownPreview' import eventEmitter from 'browser/main/lib/eventEmitter' import { findStorage } from 'browser/lib/findStorage' -import debounceRender from 'react-debounce-render' class MarkdownEditor extends React.Component { constructor (props) { @@ -313,4 +312,4 @@ MarkdownEditor.propTypes = { ignorePreviewPointerEvents: PropTypes.bool } -export default debounceRender(CSSModules(MarkdownEditor, styles)) +export default CSSModules(MarkdownEditor, styles) diff --git a/browser/components/MarkdownPreview.js b/browser/components/MarkdownPreview.js index 610585ba..5376a773 100755 --- a/browser/components/MarkdownPreview.js +++ b/browser/components/MarkdownPreview.js @@ -180,9 +180,7 @@ const defaultCodeBlockFontFamily = [ export default class MarkdownPreview extends React.Component { constructor (props) { super(props) - this.state = { - isReady: false - } + this.contextMenuHandler = e => this.handleContextMenu(e) this.mouseDownHandler = e => this.handleMouseDown(e) this.mouseUpHandler = e => this.handleMouseUp(e) @@ -457,7 +455,6 @@ export default class MarkdownPreview extends React.Component { eventEmitter.on('export:save-md', this.saveAsMdHandler) eventEmitter.on('export:save-html', this.saveAsHtmlHandler) eventEmitter.on('print', this.printHandler) - setTimeout(() => this.setState({ isReady: true })) } componentWillUnmount () { @@ -850,11 +847,7 @@ export default class MarkdownPreview extends React.Component { className={ className != null ? 'MarkdownPreview ' + className : 'MarkdownPreview' } - style={ - this.state.isReady - ? Object.assign(style, { opacity: '1' }) - : Object.assign(style, { opacity: '0' }) - } + style={style} tabIndex={tabIndex} ref='root' /> diff --git a/browser/components/SnippetTab.styl b/browser/components/SnippetTab.styl index 0cf4ce49..02f88f8c 100644 --- a/browser/components/SnippetTab.styl +++ b/browser/components/SnippetTab.styl @@ -136,4 +136,48 @@ body[data-theme="solarized-dark"] color $ui-solarized-dark-text-color .deleteButton - color alpha($ui-solarized-dark-text-color, 30%) \ No newline at end of file + color alpha($ui-solarized-dark-text-color, 30%) + +body[data-theme="monokai"] + .root + color $ui-monokai-text-color + border-color $ui-dark-borderColor + &:hover + background-color $ui-monokai-noteDetail-backgroundColor + .deleteButton + color $ui-monokai-text-color + &:hover + background-color darken($ui-monokai-noteDetail-backgroundColor, 15%) + &:active + color $ui-monokai-text-color + background-color $ui-dark-button--active-backgroundColor + + .root--active + color $ui-monokai-text-color + border-color $ui-monokai-borderColor + &:hover + background-color $ui-monokai-noteDetail-backgroundColor + .deleteButton + color $ui-monokai-text-color + &:hover + background-color darken($ui-monokai-noteDetail-backgroundColor, 15%) + &:active + color $ui-monokai-text-color + background-color $ui-dark-button--active-backgroundColor + + .button + border none + color $ui-monokai-text-color + background-color transparent + transition color background-color 0.15s + border-left 4px solid transparent + &:hover + color $ui-monokai-text-color + background-color $ui-monokai-noteDetail-backgroundColor + + .input + background-color $ui-monokai-noteDetail-backgroundColor + color $ui-monokai-text-color + + .deleteButton + color alpha($ui-monokai-text-color, 30%) \ No newline at end of file diff --git a/browser/components/markdown.styl b/browser/components/markdown.styl index 4f326e08..d6b541d7 100644 --- a/browser/components/markdown.styl +++ b/browser/components/markdown.styl @@ -257,6 +257,7 @@ table display block width 100% margin 0 0 1em + overflow-x auto thead tr background-color tableHeadBgColor diff --git a/browser/main/Detail/SnippetNoteDetail.js b/browser/main/Detail/SnippetNoteDetail.js index 652d1f53..6220b5a4 100644 --- a/browser/main/Detail/SnippetNoteDetail.js +++ b/browser/main/Detail/SnippetNoteDetail.js @@ -573,11 +573,12 @@ class SnippetNoteDetail extends React.Component { } addSnippet () { + const { config } = this.props const { note } = this.state note.snippets = note.snippets.concat([{ name: '', - mode: 'Plain Text', + mode: config.editor.snippetDefaultLanguage || 'text', content: '' }]) const snippetIndex = note.snippets.length - 1 diff --git a/browser/main/NewNoteButton/index.js b/browser/main/NewNoteButton/index.js index a9b8de58..85dc7f40 100644 --- a/browser/main/NewNoteButton/index.js +++ b/browser/main/NewNoteButton/index.js @@ -34,14 +34,15 @@ class NewNoteButton extends React.Component { } handleNewNoteButtonClick (e) { - const { location, dispatch } = this.props + const { location, dispatch, config } = this.props const { storage, folder } = this.resolveTargetFolder() modal.open(NewNoteModal, { storage: storage.key, folder: folder.key, dispatch, - location + location, + config }) } diff --git a/browser/main/modals/NewNoteModal.js b/browser/main/modals/NewNoteModal.js index b748587c..f6aa2c67 100644 --- a/browser/main/modals/NewNoteModal.js +++ b/browser/main/modals/NewNoteModal.js @@ -61,7 +61,7 @@ class NewNoteModal extends React.Component { handleSnippetNoteButtonClick (e) { AwsMobileAnalyticsConfig.recordDynamicCustomEvent('ADD_SNIPPET') AwsMobileAnalyticsConfig.recordDynamicCustomEvent('ADD_ALLNOTE') - const { storage, folder, dispatch, location } = this.props + const { storage, folder, dispatch, location, config } = this.props dataApi .createNote(storage, { @@ -72,7 +72,7 @@ class NewNoteModal extends React.Component { snippets: [ { name: '', - mode: 'text', + mode: config.editor.snippetDefaultLanguage || 'text', content: '' } ] diff --git a/browser/main/modals/PreferencesModal/ConfigTab.styl b/browser/main/modals/PreferencesModal/ConfigTab.styl index 0e5f81fb..31994d97 100644 --- a/browser/main/modals/PreferencesModal/ConfigTab.styl +++ b/browser/main/modals/PreferencesModal/ConfigTab.styl @@ -24,7 +24,7 @@ line-height 30px .group-section-label - width 150px + width 200px text-align left margin-right 10px font-size 14px diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index aa3568e7..74047d44 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -85,6 +85,7 @@ class UiTab extends React.Component { displayLineNumbers: this.refs.editorDisplayLineNumbers.checked, switchPreview: this.refs.editorSwitchPreview.value, keyMap: this.refs.editorKeyMap.value, + snippetDefaultLanguage: this.refs.editorSnippetDefaultLanguage.value, scrollPastEnd: this.refs.scrollPastEnd.checked, fetchUrlTitle: this.refs.editorFetchUrlTitle.checked }, @@ -387,6 +388,22 @@ class UiTab extends React.Component { +
+
+ {i18n.__('Snippet Default Language')} +
+
+ +
+
+