Files
architype/architype.js

133 lines
3.2 KiB
JavaScript
Raw Normal View History

2019-05-25 00:03:19 +00:00
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',
});
}
});