Skip to content
This repository was archived by the owner on Jan 14, 2022. It is now read-only.

Commit b9b4642

Browse files
committed
added toggle next and previous snippet in list using keyboard shortcut
1 parent 17f4db6 commit b9b4642

File tree

5 files changed

+89
-21
lines changed

5 files changed

+89
-21
lines changed

browser/core/functions/keyboard.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,18 @@ const actions = [
4040
action: () => {
4141
eventEmitter.emit('snippets:unSave')
4242
}
43+
},
44+
{
45+
name: 'TogglePreviousSnippet',
46+
action: () => {
47+
eventEmitter.emit('snippet-list:previous')
48+
}
49+
},
50+
{
51+
name: 'ToggleNextSnippet',
52+
action: () => {
53+
eventEmitter.emit('snippet-list:next')
54+
}
4355
}
4456
]
4557

browser/lib/config-manager.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ const DEFAULT_CONFIG = {
3737
toggleSidebar: OSX ? 'Cmd + B' : 'Ctrl + B',
3838
closeAllModals: 'Esc',
3939
SaveAllSnippets: OSX ? 'Cmd + S' : 'Ctrl + S',
40-
CancelEditSnippets: 'Esc'
40+
CancelEditSnippets: 'Esc',
41+
TogglePreviousSnippet: OSX ? 'Cmd + pageup' : 'Ctrl + pageup',
42+
ToggleNextSnippet: OSX ? 'Cmd + pagedown' : 'Ctrl + pagedown'
4143
}
4244
}
4345

browser/render/layouts/list-and-detail/snippet-detail-multi-file/index.jsx

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,25 @@ export default class SnippetDetailMultiFile extends React.Component {
2727
}
2828

2929
componentDidMount () {
30-
eventEmitter.on('snippets:saveAll', () => {
31-
if (this.state.isEditing) {
32-
this.handleSaveChangesClick()
33-
}
34-
})
35-
eventEmitter.on('snippets:unSave', () => {
36-
if (this.state.isEditing) {
37-
this.handleDiscardChangesClick()
38-
}
39-
})
30+
eventEmitter.on('snippets:saveAll', this.handleSaveChangesEvent)
31+
eventEmitter.on('snippets:unSave', this.handleDiscardChangesEvent)
32+
}
33+
34+
componentWillUnmount () {
35+
eventEmitter.off('snippets:saveAll', this.handleSaveChangesEvent)
36+
eventEmitter.off('snippets:unSave', this.handleDiscardChangesEvent)
37+
}
38+
39+
handleSaveChangesEvent () {
40+
if (this.state.isEditing) {
41+
this.handleSaveChangesClick()
42+
}
43+
}
44+
45+
handleDiscardChangesEvent () {
46+
if (this.state.isEditing) {
47+
this.handleDiscardChangesClick()
48+
}
4049
}
4150

4251
renderTopBar () {

browser/render/layouts/list-and-detail/snippet-detail/index.jsx

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,25 @@ export default class SnippetDetail extends React.Component {
2525
}
2626

2727
componentDidMount () {
28-
eventEmitter.on('snippets:saveAll', () => {
29-
if (this.state.isEditing) {
30-
this.handleSaveChangesClick()
31-
}
32-
})
33-
eventEmitter.on('snippets:unSave', () => {
34-
if (this.state.isEditing) {
35-
this.handleDiscardChangesClick()
36-
}
37-
})
28+
eventEmitter.on('snippets:saveAll', this.handleSaveChangesEvent)
29+
eventEmitter.on('snippets:unSave', this.handleDiscardChangesEvent)
30+
}
31+
32+
componentWillUnmount () {
33+
eventEmitter.off('snippets:saveAll', this.handleSaveChangesEvent)
34+
eventEmitter.off('snippets:unSave', this.handleDiscardChangesEvent)
35+
}
36+
37+
handleSaveChangesEvent () {
38+
if (this.state.isEditing) {
39+
this.handleSaveChangesClick()
40+
}
41+
}
42+
43+
handleDiscardChangesEvent () {
44+
if (this.state.isEditing) {
45+
this.handleDiscardChangesClick()
46+
}
3847
}
3948

4049
renderTopBar () {

browser/render/layouts/list-and-detail/snippet-list/index.jsx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,42 @@ export default class SnippetList extends React.Component {
1515
eventEmitter.on('snippet-detail:edit-end', () => {
1616
this.refs.wall.style.display = 'none'
1717
})
18+
eventEmitter.on('snippet-list:previous', () => {
19+
const { snippets, selectedSnippet } = this.props.store
20+
if (selectedSnippet) {
21+
for (let i = 0; i < snippets.length; i++) {
22+
if (snippets[i].key === selectedSnippet.key) {
23+
// previous of the i-th snippet is i - 1
24+
let previousIndex = i - 1
25+
if (previousIndex < 0) {
26+
previousIndex = snippets.length - 1
27+
}
28+
this.props.store.selectedSnippet = snippets[previousIndex]
29+
break
30+
}
31+
}
32+
} else {
33+
this.props.store.selectedSnippet = snippets[0]
34+
}
35+
})
36+
eventEmitter.on('snippet-list:next', () => {
37+
const { snippets, selectedSnippet } = this.props.store
38+
if (selectedSnippet) {
39+
for (let i = 0; i < snippets.length; i++) {
40+
if (snippets[i].key === selectedSnippet.key) {
41+
// the next snippet of the i-th snippet is i + 1
42+
let nextIndex = i + 1
43+
if (nextIndex > snippets.length - 1) {
44+
nextIndex = 0
45+
}
46+
this.props.store.selectedSnippet = snippets[nextIndex]
47+
break
48+
}
49+
}
50+
} else {
51+
this.props.store.selectedSnippet = snippets[0]
52+
}
53+
})
1854
}
1955

2056
renderSnippetList () {

0 commit comments

Comments
 (0)