cloudcmd/client/buffer.js

142 lines
4 KiB
JavaScript

/* global Util */
/* global DOM */
/* global CloudCmd */
(function(Util, DOM, CloudCmd) {
'use strict';
var DOMProto = Object.getPrototypeOf(DOM);
DOMProto.Buffer = new BufferProto(Util, DOM, CloudCmd);
function BufferProto(Util, DOM, CloudCmd) {
var Storage = DOM.Storage,
Info = DOM.CurrentInfo,
json = Util.json,
CLASS = 'cut-file',
COPY = 'copy',
CUT = 'cut',
TITLE = 'Buffer',
Buffer = {
cut : callIfEnabled.bind(null, cut),
copy : callIfEnabled.bind(null, copy),
clear : callIfEnabled.bind(null, clear),
paste : callIfEnabled.bind(null, paste)
};
function showMessage(msg) {
DOM.Dialog.alert(TITLE, msg);
}
function getNames() {
var files = DOM.getActiveFiles(),
names = DOM.getFilenames(files);
return names;
}
function addCutClass() {
var files = DOM.getActiveFiles();
files.forEach(function(element) {
element.classList.add(CLASS);
});
}
function rmCutClass() {
var files = DOM.getByClassAll(CLASS);
[]
.slice.call(files)
.forEach(function(element) {
element.classList.remove(CLASS);
});
}
function callIfEnabled(callback) {
var is = CloudCmd.config('buffer');
if (is)
return callback();
showMessage('Buffer disabled in config!');
}
function copy() {
var Storage = DOM.Storage,
names = getNames(),
from = Info.dirPath;
clear();
if (names.length)
Storage.remove(CUT)
.set(COPY, {
from : from,
names: names
});
}
function cut() {
var Storage = DOM.Storage,
names = getNames(),
from = Info.dirPath;
clear();
if (names.length) {
addCutClass();
Storage
.set(CUT, {
from : from,
names: names
});
}
}
function clear() {
Storage.remove(COPY)
.remove(CUT);
rmCutClass();
}
function paste() {
var copy = Storage.get.bind(Storage, COPY),
cut = Storage.get.bind(Storage, CUT);
Util.exec.parallel([copy, cut], function(error, cp, ct) {
var opStr = cp ? 'copy' : 'move',
opData = cp || ct,
data = {},
Operation = CloudCmd.Operation,
msg = 'Path is same!',
path = Info.dirPath;
if (!error && !cp && !ct)
error = 'Buffer is empty!';
if (error) {
showMessage(error);
} else {
data = json.parse(opData);
data.to = path;
if (data.from === path) {
showMessage(msg);
} else {
Operation.show(opStr, data);
clear();
}
}
});
}
return Buffer;
}
})(Util, DOM, CloudCmd);