Next/previous note shortcut

This commit is contained in:
Mo Bitar
2019-05-12 12:35:35 -05:00
parent ff47f0065d
commit 6b03a4cdeb
4 changed files with 71 additions and 5 deletions

View File

@@ -827,8 +827,7 @@ angular.module('app')
this.deleteKeyObserver = keyboardManager.addKeyObserver({
key: KeyboardManager.KeyBackspace,
notElementIds: ["note-text-editor", "note-title-editor"],
modifiers: [KeyboardManager.KeyModifierMeta, KeyboardManager.KeyModifierShift],
modifiers: [KeyboardManager.KeyModifierMeta, KeyboardManager.KeyModifierShift, KeyboardManager.KeyModifierAlt],
onKeyDown: (event) => {
event.preventDefault();
$timeout(() => {

View File

@@ -335,6 +335,25 @@ angular.module('app')
}
}
this.selectNextNote = function() {
var visibleNotes = this.visibleNotes();
let currentIndex = visibleNotes.indexOf(this.selectedNote);
if(currentIndex + 1 < visibleNotes.length) {
this.selectNote(visibleNotes[currentIndex + 1]);
}
}
this.selectPreviousNote = function() {
var visibleNotes = this.visibleNotes();
let currentIndex = visibleNotes.indexOf(this.selectedNote);
if(currentIndex - 1 >= 0) {
this.selectNote(visibleNotes[currentIndex - 1]);
return true;
} else {
return false;
}
}
this.selectNote = async function(note, viaClick = false) {
if(!note) {
return;
@@ -565,6 +584,11 @@ angular.module('app')
return result;
};
/*
Keyboard Shortcuts
*/
// In the browser we're not allowed to override cmd/ctrl + n, so we have to use Control modifier as well.
// These rules don't apply to desktop, but probably better to be consistent.
this.newNoteKeyObserver = keyboardManager.addKeyObserver({
@@ -578,4 +602,41 @@ angular.module('app')
}
})
this.getSearchBar = function() {
return document.getElementById("search-bar");
}
this.nextNoteKeyObserver = keyboardManager.addKeyObserver({
key: KeyboardManager.KeyDown,
elements: [document.body, this.getSearchBar()],
onKeyDown: (event) => {
let searchBar = this.getSearchBar();
if(searchBar == document.activeElement) {
searchBar.blur()
}
$timeout(() => {
this.selectNextNote();
});
}
})
this.nextNoteKeyObserver = keyboardManager.addKeyObserver({
key: KeyboardManager.KeyUp,
element: document.body,
onKeyDown: (event) => {
$timeout(() => {
this.selectPreviousNote();
});
}
});
this.searchKeyObserver = keyboardManager.addKeyObserver({
key: "f",
modifiers: [KeyboardManager.KeyModifierMeta, KeyboardManager.KeyModifierShift],
onKeyDown: (event) => {
let searchBar = this.getSearchBar();
if(searchBar) {searchBar.focus()};
}
})
});

View File

@@ -5,6 +5,8 @@ class KeyboardManager {
KeyboardManager.KeyTab = "Tab";
KeyboardManager.KeyBackspace = "Backspace";
KeyboardManager.KeyUp = "ArrowUp";
KeyboardManager.KeyDown = "ArrowDown";
KeyboardManager.KeyModifierShift = "Shift";
KeyboardManager.KeyModifierCtrl = "Control";
@@ -70,6 +72,10 @@ class KeyboardManager {
continue;
}
if(observer.elements && !observer.elements.includes(event.target)) {
continue;
}
if(observer.notElement && observer.notElement == event.target) {
continue;
}
@@ -95,8 +101,8 @@ class KeyboardManager {
this.notifyObserver(event, KeyboardManager.KeyEventUp);
}
addKeyObserver({key, modifiers, onKeyDown, onKeyUp, element, notElement, notElementIds}) {
let observer = {key, modifiers, onKeyDown, onKeyUp, element, notElement, notElementIds};
addKeyObserver({key, modifiers, onKeyDown, onKeyUp, element, elements, notElement, notElementIds}) {
let observer = {key, modifiers, onKeyDown, onKeyUp, element, elements, notElement, notElementIds};
this.observers.push(observer);
return observer;
}

View File

@@ -8,7 +8,7 @@
.sk-label
%i.icon.ion-plus.add-button
.filter-section{"role" => "search"}
%input.filter-bar#search-bar.mousetrap{"select-on-click" => "true", "ng-model" => "ctrl.noteFilter.text", "placeholder" => "Search",
%input.filter-bar#search-bar{"select-on-click" => "true", "ng-model" => "ctrl.noteFilter.text", "placeholder" => "Search",
"ng-change" => "ctrl.filterTextChanged()", "lowercase" => "true", "ng-blur" => "ctrl.onFilterEnter()", "ng-keyup" => "$event.keyCode == 13 && ctrl.onFilterEnter();",
"title" => "Searches notes in the currently selected tag"}
#search-clear-button{"ng-show" => "ctrl.noteFilter.text", "ng-click" => "ctrl.clearFilterText();"} ✕