133 lines
3.2 KiB
JavaScript
133 lines
3.2 KiB
JavaScript
|
|
let def = document.getElementById('definition');
|
||
|
|
|
||
|
|
document.addEventListener('keydown', e => {
|
||
|
|
console.log(e.key);
|
||
|
|
|
||
|
|
let sel = def.getElementsByClassName('selected').item(0);
|
||
|
|
|
||
|
|
switch (e.key) {
|
||
|
|
case 'd':
|
||
|
|
if (sel) {
|
||
|
|
let newSel = sel.nextElementSibling || sel.previousElementSibling;
|
||
|
|
if (newSel) {
|
||
|
|
newSel.classList.add('selected');
|
||
|
|
}
|
||
|
|
sel.remove();
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 'D':
|
||
|
|
while (sel.nextElementSibling) {
|
||
|
|
sel.nextElementSibling.remove();
|
||
|
|
}
|
||
|
|
if (sel.previousElementSibling) {
|
||
|
|
sel.previousElementSiblist.classList.add('selected');
|
||
|
|
}
|
||
|
|
sel.remove();
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 'j':
|
||
|
|
case 'ArrowDown':
|
||
|
|
if (sel) {
|
||
|
|
let newSel = sel.nextElementSibling || def.firstElementChild;
|
||
|
|
sel.classList.remove('selected');
|
||
|
|
newSel.classList.add('selected');
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 'k':
|
||
|
|
case 'ArrowUp':
|
||
|
|
if (sel) {
|
||
|
|
let newSel = sel.previousElementSibling || def.lastElementChild;
|
||
|
|
sel.classList.remove('selected');
|
||
|
|
newSel.classList.add('selected');
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 'PageUp':
|
||
|
|
if (sel) {
|
||
|
|
let pageCount = Math.floor(def.clientHeight / sel.clientHeight) - 1;
|
||
|
|
let newSel = sel;
|
||
|
|
for (let i = 0; i < pageCount; ++i) {
|
||
|
|
newSel = newSel.previousElementSibling || def.firstElementChild;
|
||
|
|
}
|
||
|
|
sel.classList.remove('selected');
|
||
|
|
newSel.classList.add('selected');
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 'PageDown':
|
||
|
|
if (sel) {
|
||
|
|
let pageCount = Math.floor(def.clientHeight / sel.clientHeight) - 1;
|
||
|
|
let newSel = sel;
|
||
|
|
for (let i = 0; i < pageCount; ++i) {
|
||
|
|
newSel = newSel.nextElementSibling || def.lastElementChild;
|
||
|
|
}
|
||
|
|
sel.classList.remove('selected');
|
||
|
|
newSel.classList.add('selected');
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 'Home':
|
||
|
|
if (sel) {
|
||
|
|
sel.classList.remove('selected');
|
||
|
|
def.firstElementChild.classList.add('selected');
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 'G': // vi compat
|
||
|
|
case 'End':
|
||
|
|
if (sel) {
|
||
|
|
sel.classList.remove('selected');
|
||
|
|
def.lastElementChild.classList.add('selected');
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 'n':
|
||
|
|
{
|
||
|
|
let node = document.createElement('li');
|
||
|
|
node.innerText = 'Node: ';
|
||
|
|
|
||
|
|
let input = document.createElement('input');
|
||
|
|
input.type = 'text';
|
||
|
|
node.appendChild(input);
|
||
|
|
|
||
|
|
node.classList.add('node');
|
||
|
|
def.insertBefore(node, sel ? sel.nextSibling : null);
|
||
|
|
|
||
|
|
if (sel) {
|
||
|
|
sel.classList.remove('selected');
|
||
|
|
}
|
||
|
|
node.classList.add('selected');
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 'N':
|
||
|
|
{
|
||
|
|
let node = document.createElement('li');
|
||
|
|
node.innerText = 'Node: ';
|
||
|
|
|
||
|
|
let input = document.createElement('input');
|
||
|
|
input.type = 'text';
|
||
|
|
node.appendChild(input);
|
||
|
|
|
||
|
|
node.classList.add('node');
|
||
|
|
def.insertBefore(node, sel);
|
||
|
|
|
||
|
|
if (sel) {
|
||
|
|
sel.classList.remove('selected');
|
||
|
|
}
|
||
|
|
node.classList.add('selected');
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
sel = def.getElementsByClassName('selected').item(0);
|
||
|
|
|
||
|
|
if (sel) {
|
||
|
|
sel.scrollIntoView({
|
||
|
|
block: 'center',
|
||
|
|
});
|
||
|
|
}
|
||
|
|
});
|