1
0
mirror of https://github.com/rhysd/Mstdn.git synced 2025-01-22 21:52:09 +01:00
Mstdn/renderer/index.ts

70 lines
2.0 KiB
TypeScript
Raw Normal View History

2017-04-16 04:14:58 +09:00
import * as Mousetrap from 'mousetrap';
2017-04-17 18:40:55 +09:00
import {Config, Account} from '../main/config';
2017-04-16 02:27:06 +09:00
import * as Ipc from './ipc';
import log from './log';
2017-04-16 04:14:58 +09:00
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;
},
2017-04-16 12:44:53 +09:00
} as {[action: string]: () => void};
2017-04-16 02:27:06 +09:00
2017-04-16 04:14:58 +09:00
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();
});
}
}
}
2017-04-16 02:27:06 +09:00
2017-04-17 18:40:55 +09:00
let config: Config | null = null;
Ipc.on('mstdn:config', (c: Config) => {
config = c;
2017-04-16 04:14:58 +09:00
const host = config.accounts[0].host;
setupKeybinds(config.keymaps, host);
});
2017-04-17 18:40:55 +09:00
Ipc.on('mstdn:change-account', (account: Account) => {
if (config === null) {
log.error('FATAL: config is null at receiving mstdn:change-account');
return;
}
setupKeybinds(config.keymaps, account.host);
})