mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 02:35:49 +00:00
feature: client: user-menu: navigate: add support of \D + [JK] to speed up vim navigation
This commit is contained in:
parent
40f17bb670
commit
5b5889dcf7
2 changed files with 105 additions and 26 deletions
|
|
@ -1,5 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
const fullstore = require('fullstore');
|
||||
|
||||
const {
|
||||
J,
|
||||
K,
|
||||
|
|
@ -7,29 +9,50 @@ const {
|
|||
DOWN,
|
||||
} = require('../../key/key.js');
|
||||
|
||||
module.exports = (el, {keyCode}) => {
|
||||
if (keyCode === DOWN || keyCode === J)
|
||||
return down(el);
|
||||
|
||||
if (keyCode === UP || keyCode === K)
|
||||
return up(el);
|
||||
const store = fullstore(1);
|
||||
const isDigit = (a) => /^\d+$/.test(a);
|
||||
|
||||
module.exports = (el, {key, keyCode}) => {
|
||||
if (isDigit(key)) {
|
||||
store(Number(key));
|
||||
}
|
||||
|
||||
if (keyCode === DOWN || keyCode === J) {
|
||||
const count = store();
|
||||
store(1);
|
||||
|
||||
return down(el, count);
|
||||
}
|
||||
|
||||
if (keyCode === UP || keyCode === K) {
|
||||
const count = store();
|
||||
store(1);
|
||||
|
||||
return up(el, count);
|
||||
}
|
||||
};
|
||||
|
||||
function down(el) {
|
||||
function down(el, count) {
|
||||
const {length} = el;
|
||||
|
||||
|
||||
if (el.selectedIndex === length - 1)
|
||||
el.selectedIndex = 0;
|
||||
else
|
||||
++el.selectedIndex;
|
||||
el.selectedIndex += count;
|
||||
|
||||
if (el.selectedIndex < 0)
|
||||
el.selectedIndex = length - 1;
|
||||
}
|
||||
|
||||
function up(el) {
|
||||
function up(el, count) {
|
||||
const {length} = el;
|
||||
|
||||
|
||||
if (!el.selectedIndex)
|
||||
el.selectedIndex = length - 1;
|
||||
else
|
||||
--el.selectedIndex;
|
||||
el.selectedIndex -= count;
|
||||
|
||||
if (el.selectedIndex < 0)
|
||||
el.selectedIndex = 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,11 +15,11 @@ test('cloudcmd: user-menu: navigate: DOWN', (t) => {
|
|||
length: 3,
|
||||
selectedIndex: 0,
|
||||
};
|
||||
|
||||
|
||||
navigate(el, {
|
||||
keyCode: DOWN,
|
||||
});
|
||||
|
||||
|
||||
t.equal(el.selectedIndex, 1);
|
||||
t.end();
|
||||
});
|
||||
|
|
@ -29,11 +29,11 @@ test('cloudcmd: user-menu: navigate: J', (t) => {
|
|||
length: 3,
|
||||
selectedIndex: 0,
|
||||
};
|
||||
|
||||
|
||||
navigate(el, {
|
||||
keyCode: J,
|
||||
});
|
||||
|
||||
|
||||
t.equal(el.selectedIndex, 1);
|
||||
t.end();
|
||||
});
|
||||
|
|
@ -43,11 +43,11 @@ test('cloudcmd: user-menu: navigate: DOWN: bottom', (t) => {
|
|||
length: 3,
|
||||
selectedIndex: 2,
|
||||
};
|
||||
|
||||
|
||||
navigate(el, {
|
||||
keyCode: DOWN,
|
||||
});
|
||||
|
||||
|
||||
t.equal(el.selectedIndex, 0);
|
||||
t.end();
|
||||
});
|
||||
|
|
@ -57,11 +57,11 @@ test('cloudcmd: user-menu: navigate: K', (t) => {
|
|||
length: 3,
|
||||
selectedIndex: 2,
|
||||
};
|
||||
|
||||
|
||||
navigate(el, {
|
||||
keyCode: K,
|
||||
});
|
||||
|
||||
|
||||
t.equal(el.selectedIndex, 1);
|
||||
t.end();
|
||||
});
|
||||
|
|
@ -71,11 +71,11 @@ test('cloudcmd: user-menu: navigate: UP', (t) => {
|
|||
length: 3,
|
||||
selectedIndex: 2,
|
||||
};
|
||||
|
||||
|
||||
navigate(el, {
|
||||
keyCode: UP,
|
||||
});
|
||||
|
||||
|
||||
t.equal(el.selectedIndex, 1);
|
||||
t.end();
|
||||
});
|
||||
|
|
@ -85,11 +85,11 @@ test('cloudcmd: user-menu: navigate: UP: top', (t) => {
|
|||
length: 3,
|
||||
selectedIndex: 0,
|
||||
};
|
||||
|
||||
|
||||
navigate(el, {
|
||||
keyCode: UP,
|
||||
});
|
||||
|
||||
|
||||
t.equal(el.selectedIndex, 2);
|
||||
t.end();
|
||||
});
|
||||
|
|
@ -99,12 +99,68 @@ test('cloudcmd: user-menu: navigate', (t) => {
|
|||
length: 3,
|
||||
selectedIndex: 0,
|
||||
};
|
||||
|
||||
|
||||
navigate(el, {
|
||||
keyCode: 0,
|
||||
});
|
||||
|
||||
|
||||
t.equal(el.selectedIndex, 0, 'should not change');
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('cloudcmd: user-menu: navigate: DOWN: count', (t) => {
|
||||
const el = {
|
||||
length: 3,
|
||||
selectedIndex: 0,
|
||||
};
|
||||
|
||||
navigate(el, {
|
||||
keyCode: 53,
|
||||
key: '5',
|
||||
});
|
||||
|
||||
navigate(el, {
|
||||
keyCode: DOWN,
|
||||
});
|
||||
|
||||
t.equal(el.selectedIndex, 5);
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('cloudcmd: user-menu: navigate: J: count: to big', (t) => {
|
||||
const el = {
|
||||
length: 3,
|
||||
selectedIndex: -Infinity,
|
||||
};
|
||||
|
||||
navigate(el, {
|
||||
keyCode: 53,
|
||||
key: '5',
|
||||
});
|
||||
|
||||
navigate(el, {
|
||||
keyCode: J,
|
||||
});
|
||||
|
||||
t.equal(el.selectedIndex, 2);
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('cloudcmd: user-menu: navigate: K: count: to small', (t) => {
|
||||
const el = {
|
||||
length: 3,
|
||||
selectedIndex: -Infinity,
|
||||
};
|
||||
|
||||
navigate(el, {
|
||||
keyCode: 53,
|
||||
key: '5',
|
||||
});
|
||||
|
||||
navigate(el, {
|
||||
keyCode: K,
|
||||
});
|
||||
|
||||
t.equal(el.selectedIndex, 0);
|
||||
t.end();
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue