feature(listeners) add ability to select files with shift+click

This commit is contained in:
coderaiser 2015-07-23 09:05:11 -04:00
parent 5547094315
commit 46cc5c2326

View file

@ -145,23 +145,27 @@ var Util, DOM, CloudFunc, CloudCmd;
}
function onClick(event) {
var ctrl = event.ctrlKey,
meta = event.metaKey;
var ctrl = event.ctrlKey;
if (!ctrl && !meta)
if (!ctrl)
event.preventDefault();
else
toggleSelect(ctrl, meta);
changePanel(event.target);
}
function toggleSelect(ctrl, meta) {
var Info = DOM.CurrentInfo,
isMac = /Mac/.test(window.navigator.platform);
function toggleSelect(key, files) {
var isMac = /Mac/.test(window.navigator.platform);
if (isMac && meta || ctrl)
DOM.toggleSelectedFile(Info.element);
if (!key)
throw Error('key should not be undefined!');
if (isMac && key.meta || key.ctrl)
DOM.toggleSelectedFile(files[0]);
else if (key.shift)
files.forEach(function(current) {
if (!DOM.isSelected(current))
DOM.toggleSelectedFile(current);
});
}
function changePanel(element) {
@ -247,8 +251,56 @@ var Util, DOM, CloudFunc, CloudCmd;
}
function setCurrentFileByEvent(event) {
var element = getLIElement(event.target);
var fromName,
toName,
files = [],
key = {
ctrl: event.ctrlKey,
meta: event.metaKey,
shift: event.shiftKey
},
element = getLIElement(event.target);
fromName = Info.name;
DOM.setCurrentFile(element);
toName = Info.name;
if (key.shift)
files = getFilesRange(fromName, toName);
else
files.push(Info.element);
toggleSelect(key, files);
}
function getFilesRange(from, to) {
var i = 0,
delta = 0,
result = [],
files = [].slice.call(DOM.getFiles()),
names = DOM.getSelectedNames(files),
indexFrom,
indexTo;
if (names[0] === '..') {
names.shift();
delta = 1;
}
indexFrom = names.indexOf(from);
indexTo = names.indexOf(to);
if (indexFrom < indexTo)
for (i = indexFrom; i <= indexTo; i++)
result.push(files[i + delta]);
else if (indexFrom > indexTo)
for (i = indexFrom; i >= indexTo; i--)
result.push(files[i + delta]);
else
result.push(to);
return result;
}
function contextMenu() {