mirror of
https://github.com/wallabag/wallabag.git
synced 2025-05-09 01:54:46 +00:00
141 lines
3.3 KiB
JavaScript
141 lines
3.3 KiB
JavaScript
import { Controller } from '@hotwired/stimulus';
|
|
import Mousetrap from 'mousetrap';
|
|
|
|
export default class extends Controller {
|
|
static targets = ['openOriginal', 'markAsFavorite', 'markAsRead', 'deleteEntry', 'showAddUrl', 'showSearch', 'showActions'];
|
|
|
|
static outlets = ['entries-navigation'];
|
|
|
|
connect() {
|
|
/* Go to */
|
|
Mousetrap.bind('g u', () => {
|
|
window.location.href = Routing.generate('homepage');
|
|
});
|
|
Mousetrap.bind('g s', () => {
|
|
window.location.href = Routing.generate('starred');
|
|
});
|
|
Mousetrap.bind('g r', () => {
|
|
window.location.href = Routing.generate('archive');
|
|
});
|
|
Mousetrap.bind('g a', () => {
|
|
window.location.href = Routing.generate('all');
|
|
});
|
|
Mousetrap.bind('g t', () => {
|
|
window.location.href = Routing.generate('tag');
|
|
});
|
|
Mousetrap.bind('g c', () => {
|
|
window.location.href = Routing.generate('config');
|
|
});
|
|
Mousetrap.bind('g i', () => {
|
|
window.location.href = Routing.generate('import');
|
|
});
|
|
Mousetrap.bind('g d', () => {
|
|
window.location.href = Routing.generate('developer');
|
|
});
|
|
Mousetrap.bind('?', () => {
|
|
window.location.href = Routing.generate('howto');
|
|
});
|
|
Mousetrap.bind('g l', () => {
|
|
window.location.href = Routing.generate('fos_user_security_logout');
|
|
});
|
|
|
|
/* open original article */
|
|
Mousetrap.bind('o', () => {
|
|
if (!this.hasOpenOriginalTarget) {
|
|
return;
|
|
}
|
|
|
|
this.openOriginalTarget.click();
|
|
});
|
|
|
|
/* mark as favorite */
|
|
Mousetrap.bind('f', () => {
|
|
if (!this.hasMarkAsFavoriteTarget) {
|
|
return;
|
|
}
|
|
|
|
this.markAsFavoriteTarget.click();
|
|
});
|
|
|
|
/* mark as read */
|
|
Mousetrap.bind('a', () => {
|
|
if (!this.hasMarkAsReadTarget) {
|
|
return;
|
|
}
|
|
|
|
this.markAsReadTarget.click();
|
|
});
|
|
|
|
/* delete */
|
|
Mousetrap.bind('del', () => {
|
|
if (!this.hasDeleteEntryTarget) {
|
|
return;
|
|
}
|
|
|
|
this.deleteEntryTarget.click();
|
|
});
|
|
|
|
/* Actions */
|
|
Mousetrap.bind('g n', (e) => {
|
|
if (!this.hasShowAddUrlTarget) {
|
|
return;
|
|
}
|
|
|
|
e.preventDefault();
|
|
this.showAddUrlTarget.click();
|
|
});
|
|
|
|
Mousetrap.bind('s', (e) => {
|
|
if (!this.hasShowSearchTarget) {
|
|
return;
|
|
}
|
|
|
|
e.preventDefault();
|
|
this.showSearchTarget.click();
|
|
});
|
|
|
|
Mousetrap.bind('esc', (e) => {
|
|
if (!this.hasShowActionsTarget) {
|
|
return;
|
|
}
|
|
|
|
e.preventDefault();
|
|
this.showActionsTarget.click();
|
|
});
|
|
|
|
const originalStopCallback = Mousetrap.prototype.stopCallback;
|
|
|
|
Mousetrap.prototype.stopCallback = (e, element, combo) => {
|
|
// allow esc key to be used in input fields of topbar
|
|
if (combo === 'esc' && element.dataset.topbarTarget !== undefined) {
|
|
return false;
|
|
}
|
|
|
|
return originalStopCallback(e, element);
|
|
};
|
|
|
|
Mousetrap.bind('right', () => {
|
|
if (!this.hasEntriesNavigationOutlet) {
|
|
return;
|
|
}
|
|
|
|
this.entriesNavigationOutlet.selectRightCard();
|
|
});
|
|
|
|
Mousetrap.bind('left', () => {
|
|
if (!this.hasEntriesNavigationOutlet) {
|
|
return;
|
|
}
|
|
|
|
this.entriesNavigationOutlet.selectLeftCard();
|
|
});
|
|
|
|
Mousetrap.bind('enter', () => {
|
|
if (!this.hasEntriesNavigationOutlet) {
|
|
return;
|
|
}
|
|
|
|
this.entriesNavigationOutlet.selectCurrentCard();
|
|
});
|
|
}
|
|
}
|