Next/previous note shortcut
This commit is contained in:
@@ -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(() => {
|
||||
|
||||
@@ -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()};
|
||||
}
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();"} ✕
|
||||
|
||||
Reference in New Issue
Block a user