1
0
mirror of https://github.com/rhysd/Mstdn.git synced 2025-01-20 19:52:10 +01:00

enable key shortcuts

This commit is contained in:
rhysd 2017-04-16 04:14:58 +09:00
parent 3b41501656
commit d27a152d3a
4 changed files with 66 additions and 6 deletions

View File

@ -4,7 +4,7 @@ Web-based Desktop Client for [Mastodon][]
Features:
- [x] Small window on your menubar (or isolated window)
- [ ] Desktop notification
- [x] Desktop notification
- [ ] Customizable shortcut keybinds
- [ ] Multi-account

View File

@ -34,7 +34,17 @@ function makeDefaultConfig(): Config {
host: '',
default_page: '/web/timelines/home',
}],
keymaps: {},
keymaps: {
j: 'scroll-down',
k: 'scroll-up',
i: 'scroll-top',
m: 'scroll-bottom',
1: '/web/timelines/home',
2: '/web/notifications',
3: '/web/timelines/public/local',
4: '/web/timelines/public',
5: '/web/getting-started'
},
};
}

View File

@ -5,5 +5,6 @@ if (process.env.NODE_ENV === 'development') {
} else {
log.setLevel('info');
}
log.setLevel('debug');
export default log;

View File

@ -1,10 +1,59 @@
// import * as Mousetrap from 'mousetrap';
import * as Mousetrap from 'mousetrap';
import {Config} from '../main/config';
import * as Ipc from './ipc';
import log from './log';
function scrollable() {
const scrollable = document.querySelector('.scrollable');
if (!scrollable) {
log.error('Scrollable element was not found!');
return {scrollTop: 0};
}
return scrollable;
}
const ShortcutActions = {
'scroll-top': () => {
scrollable().scrollTop = 0;
},
'scroll-bottom': () => {
scrollable().scrollTop = document.body.scrollHeight;
},
'scroll-down': () => {
scrollable().scrollTop += window.innerHeight / 3;
},
'scroll-up': () => {
scrollable().scrollTop -= window.innerHeight / 3;
},
} as {[action: string]: () => void}
function setupKeybinds(keybinds: {[key: string]: string}, host: string) {
for (const key in keybinds) {
const action = keybinds[key];
if (action.startsWith('/')) {
Mousetrap.bind(key, e => {
const url = `https://${host}${action}`;
log.info('URL Shortcut:', url);
e.preventDefault();
window.location.href = url;
});
} else {
const func = ShortcutActions[action];
if (func === undefined) {
log.error('Unknown shortcut action:', action);
continue;
}
Mousetrap.bind(key, e => {
log.info('Shortcut:', action);
e.preventDefault();
func();
});
}
}
}
Ipc.on('mstdn:config', (config: Config) => {
log.info('FOOOOOO', config);
// TODO: Temporary. It should be fixed on supporting multi-account.
const host = config.accounts[0].host;
setupKeybinds(config.keymaps, host);
});