1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-13 01:36:22 +00:00

Merge pull request #235 from asmsuechan/add-focus-shortcut

Adds shortcuts
This commit is contained in:
Sota Sugiura
2017-01-21 16:12:13 +09:00
committed by GitHub
5 changed files with 77 additions and 2 deletions

View File

@@ -8,9 +8,12 @@ class MarkdownEditor extends React.Component {
constructor (props) { constructor (props) {
super(props) super(props)
this.hotkey = props.config.hotkey
this.state = { this.state = {
status: 'PREVIEW', status: 'PREVIEW',
renderValue: props.value renderValue: props.value,
keyPressed: {}
} }
} }
@@ -142,6 +145,24 @@ class MarkdownEditor extends React.Component {
this.renderPreview(this.props.value) this.renderPreview(this.props.value)
} }
handleKeyDown(e) {
const keyPressed = Object.assign(this.state.keyPressed, {
[e.key]: true
})
this.setState({ keyPressed })
let isNoteHandlerKey = (el) => { return this.state.keyPressed[el] }
if (this.state.status === 'CODE' && this.hotkey.noteHandlerKey.escapeFromEditor.every(isNoteHandlerKey)) {
document.activeElement.blur()
}
}
handleKeyUp (e) {
const keyPressed = Object.assign(this.state.keyPressed, {
[e.key]: false
})
this.setState({ keyPressed })
}
render () { render () {
let { className, value, config } = this.props let { className, value, config } = this.props
@@ -160,6 +181,8 @@ class MarkdownEditor extends React.Component {
} }
onContextMenu={(e) => this.handleContextMenu(e)} onContextMenu={(e) => this.handleContextMenu(e)}
tabIndex='-1' tabIndex='-1'
onKeyDown={(e) => this.handleKeyDown(e)}
onKeyUp={(e) => this.handleKeyUp(e)}
> >
<CodeEditor styleName='codeEditor' <CodeEditor styleName='codeEditor'
ref='code' ref='code'

View File

@@ -24,14 +24,20 @@ class TopBar extends React.Component {
this.newNoteHandler = () => { this.newNoteHandler = () => {
this.handleNewPostButtonClick() this.handleNewPostButtonClick()
} }
this.focusSearchHandler = () => {
this.handleOnSearchFocus()
}
} }
componentDidMount () { componentDidMount () {
ee.on('top:new-note', this.newNoteHandler) ee.on('top:new-note', this.newNoteHandler)
ee.on('top:focus-search', this.focusSearchHandler)
} }
componentWillUnmount () { componentWillUnmount () {
ee.off('top:new-note', this.newNoteHandler) ee.off('top:new-note', this.newNoteHandler)
ee.off('top:focus-search', this.focusSearchHandler)
} }
handleNewPostButtonClick (e) { handleNewPostButtonClick (e) {
@@ -244,6 +250,14 @@ class TopBar extends React.Component {
}) })
} }
handleOnSearchFocus () {
if (this.state.searchPopupOpen) {
this.refs.search.childNodes[0].blur()
} else {
this.refs.search.childNodes[0].focus()
}
}
render () { render () {
let { config, style, data } = this.props let { config, style, data } = this.props
let searchOptionList = this.getOptions() let searchOptionList = this.getOptions()

View File

@@ -16,7 +16,10 @@ export const DEFAULT_CONFIG = {
listStyle: 'DEFAULT', // 'DEFAULT', 'SMALL' listStyle: 'DEFAULT', // 'DEFAULT', 'SMALL'
hotkey: { hotkey: {
toggleFinder: OSX ? 'Cmd + Alt + S' : 'Super + Alt + S', toggleFinder: OSX ? 'Cmd + Alt + S' : 'Super + Alt + S',
toggleMain: OSX ? 'Cmd + Alt + L' : 'Super + Alt + E' toggleMain: OSX ? 'Cmd + Alt + L' : 'Super + Alt + E',
noteHandlerKey: {
escapeFromEditor: ['Control', 'e']
}
}, },
ui: { ui: {
theme: 'default', theme: 'default',

View File

@@ -138,6 +138,7 @@ class HotkeyTab extends React.Component {
<li><code>Escape</code> (or <code>Esc</code> for short)</li> <li><code>Escape</code> (or <code>Esc</code> for short)</li>
<li><code>VolumeUp</code>, <code>VolumeDown</code> and <code>VolumeMute</code></li> <li><code>VolumeUp</code>, <code>VolumeDown</code> and <code>VolumeMute</code></li>
<li><code>MediaNextTrack</code>, <code>MediaPreviousTrack</code>, <code>MediaStop</code> and <code>MediaPlayPause</code></li> <li><code>MediaNextTrack</code>, <code>MediaPreviousTrack</code>, <code>MediaStop</code> and <code>MediaPlayPause</code></li>
<li><code>Control</code> (or <code>Ctrl</code> for short)</li>
</ul> </ul>
</div> </div>
} }

View File

@@ -59,6 +59,13 @@ var file = {
mainWindow.webContents.send('top:new-note') mainWindow.webContents.send('top:new-note')
} }
}, },
{
label: 'Focus Note',
accelerator: 'Control + E',
click () {
mainWindow.webContents.send('detail:focus')
}
},
{ {
type: 'separator' type: 'separator'
}, },
@@ -158,6 +165,33 @@ var view = {
click: function () { click: function () {
BrowserWindow.getFocusedWindow().toggleDevTools() BrowserWindow.getFocusedWindow().toggleDevTools()
} }
},
{
type: 'separator'
},
{
label: 'Next Note',
accelerator: 'Control + J',
click () {
mainWindow.webContents.send('list:next')
}
},
{
label: 'Previous Note',
accelerator: 'Control + U',
click () {
mainWindow.webContents.send('list:prior')
}
},
{
type: 'separator'
},
{
label: 'Focus Search',
accelerator: 'Control + S',
click () {
mainWindow.webContents.send('top:focus-search')
}
} }
] ]
} }