feature(cloudcmd) add ability to sort by name, size and date (#101)

This commit is contained in:
coderaiser 2017-01-24 12:24:53 +02:00
parent d6616c8b76
commit 8d81ed3baa
4 changed files with 101 additions and 45 deletions

View file

@ -1,4 +1,5 @@
/* global itype */
/* global rendy */
var Util, DOM, CloudFunc, join;
@ -34,6 +35,9 @@ var Util, DOM, CloudFunc, join;
this.TITLE = 'Cloud Commander';
this.sort = 'name';
this.order = 'asc';
TITLE = this.TITLE;
log.enable = function() {
@ -100,7 +104,7 @@ var Util, DOM, CloudFunc, join;
function loadModule(params) {
var name, path, func, doBefore,
funcName, isContain;
if (params) {
name = params.name,
path = params.path,
@ -406,12 +410,20 @@ var Util, DOM, CloudFunc, join;
if (!isRefresh && json)
return createFileTable(obj, panel, options, callback);
RESTful.read(path, 'json', function(error, obj) {
var query = rendy('?sort={{ sort }}&order={{ order }}', {
sort: CloudCmd.sort,
order: CloudCmd.order
});
RESTful.read(path + query, 'json', function(error, obj) {
if (error)
return;
Storage.set(path, obj);
options.sort = CloudCmd.sort;
options.order = CloudCmd.order;
createFileTable(obj, panel, options, function() {
if (isRefresh && !noCurrent) {
DOM.setCurrentByName(name);
@ -456,43 +468,44 @@ var Util, DOM, CloudFunc, join;
dir = Info.dir,
name = Info.name;
if (error) {
Dialog.alert(TITLE, error.responseText);
} else {
childNodes = panel.childNodes;
i = childNodes.length;
if (error)
return Dialog.alert(TITLE, error.responseText);
while (i--)
panel.removeChild(panel.lastChild);
panel.innerHTML = CloudFunc.buildFromJSON({
data : json,
id : panel.id,
prefix : CloudCmd.PREFIX,
template : {
file : templFile,
path : templPath,
pathLink : templPathLink,
link : templLink
}
});
Listeners.setOnPanel(panel);
if (!noCurrent) {
if (name === '..' && dir !== '/')
current = DOM.getCurrentByName(dir);
if (!current)
current = DOM.getFiles(panel)[0];
DOM.setCurrentFile(current, {
history: history
});
childNodes = panel.childNodes;
i = childNodes.length;
while (i--)
panel.removeChild(panel.lastChild);
panel.innerHTML = CloudFunc.buildFromJSON({
sort : options.sort,
order : options.order,
data : json,
id : panel.id,
prefix : CloudCmd.PREFIX,
template : {
file : templFile,
path : templPath,
pathLink : templPathLink,
link : templLink
}
});
Listeners.setOnPanel(panel);
if (!noCurrent) {
if (name === '..' && dir !== '/')
current = DOM.getCurrentByName(dir);
Util.exec(callback);
if (!current)
current = DOM.getFiles(panel)[0];
DOM.setCurrentFile(current, {
history: history
});
}
Util.exec(callback);
});
}

View file

@ -26,8 +26,37 @@ var Util, DOM, CloudFunc, CloudCmd;
pop();
resize();
config();
header();
};
function header() {
var fm = DOM.getFM();
Events.addClick(fm, function(event) {
var el = event.target;
var parent = el.parentElement;
if (parent.dataset.name !== 'js-fm-header')
return;
var name = (el.dataset.name || '')
.replace('js-', '');
if (!/^(name|size|date)$/.test(name))
return;
if (name === CloudCmd.sort) {
if (CloudCmd.order === 'asc')
CloudCmd.order = 'desc';
else
CloudCmd.order = 'asc';
}
CloudCmd.sort = name;
CloudCmd.refresh();
});
}
function config() {
DOM.Files.get('config', function(e, config) {
var type = config && config.packer;

View file

@ -137,7 +137,7 @@
*
*/
this.buildFromJSON = function(params) {
var attribute, size, date, owner, mode,
var attribute,
dotDot, link, dataName,
linkResult,
prefix = params.prefix,
@ -148,6 +148,9 @@
files = json.files,
path = json.path,
sort = params.sort || 'name',
order = params.order || 'asc',
/*
* Строим путь каталога в котором мы находимся
* со всеми подкаталогами
@ -160,14 +163,26 @@
path : htmlPath
});
var name = 'name';
var size = 'size';
var date = 'date';
var arrow = order === 'asc' ? '↑' : '↓';
if (sort === 'name' && order !== 'asc')
name += arrow;
else if (sort === 'size')
size += arrow;
else if (sort === 'date')
date += arrow;
var header = rendy(templateFile, {
tag : 'div',
attribute : '',
attribute : 'data-name="js-fm-header" ',
className : 'fm-header',
type : '',
name : 'name',
size : 'size',
date : 'date',
name : name,
size : size,
date : date,
owner : 'owner',
mode : 'mode'
});
@ -214,7 +229,6 @@
var link = prefix + FS + path + file.name;
var type = getType(file.size);
var attribute = getAttribute(file.size);
var size = getSize(file.size);
var date = file.date || '--.--.----';
@ -225,7 +239,7 @@
link : link,
title : file.name,
name : Entity.encode(file.name),
attribute : attribute
attribute : getAttribute(file.size)
});
var dataName = 'data-name="js-file-' + file.name + '" ';
@ -253,8 +267,8 @@
if (size === 'dir')
return 'directory';
return 'text-file'
};
return 'text-file';
}
function getAttribute(size) {
if (size === 'dir')

View file

@ -1,4 +1,4 @@
<div class="fm-header">
<div data-name="js-fm-header" class="fm-header">
<span data-name="js-type" class="mini-icon "></span>
<span data-name="js-name" class="name reduce-text">name</span>
<span data-name="js-size" class="size reduce-text">size</span>