Files
sune/src/keyboard.js

30 lines
1.2 KiB
JavaScript

import { el } from './dom.js';
export function kbUpdate() {
const vv = window.visualViewport;
const overlap = vv ? Math.max(0, (window.innerHeight - (vv.height + vv.offsetTop))) : 0;
document.documentElement.style.setProperty('--kb', overlap + 'px');
const fh = el.footer.getBoundingClientRect().height;
document.documentElement.style.setProperty('--footer-h', fh + 'px');
el.footer.style.transform = 'translateY(' + (-overlap) + 'px)';
el.chat.style.scrollPaddingBottom = (fh + overlap + 16) + 'px';
}
export function kbBind() {
el.input.addEventListener('keydown', e => {
if (e.key !== 'Enter' || e.shiftKey || e.isComposing || e.keyCode === 229 || e.repeat || !matchMedia('(hover: hover) and (pointer: fine)').matches) return;
e.preventDefault();
el.composer.requestSubmit();
});
if (window.visualViewport) {
['resize', 'scroll'].forEach(ev => window.visualViewport.addEventListener(ev, () => kbUpdate(), { passive: true }));
}
window.$(window).on('resize orientationchange', () => setTimeout(kbUpdate, 50));
window.$(el.input).on('focus click', () => {
setTimeout(() => {
kbUpdate();
el.input.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
}, 0);
});
}