fix(cloucmd) sort: handle click on header of passive panel

This commit is contained in:
coderaiser 2017-01-24 20:40:12 +02:00
parent c121fad03f
commit ce7210ea8b
3 changed files with 73 additions and 31 deletions

View file

@ -35,8 +35,15 @@ var Util, DOM, CloudFunc, join;
this.TITLE = 'Cloud Commander';
this.sort = 'name';
this.order = 'asc';
this.sort = {
left: 'name',
right: 'name',
};
this.order = {
left: 'asc',
right: 'asc',
};
TITLE = this.TITLE;
@ -65,18 +72,12 @@ var Util, DOM, CloudFunc, join;
this.loadDir = function(params, callback) {
var imgPosition;
var panelChanged;
var noCurrent;
var isRefresh;
var panel;
var history;
var p = params;
if (params) {
isRefresh = p.isRefresh;
panel = p.panel;
history = p.history;
noCurrent = p.noCurrent;
}
var isRefresh = p.isRefresh;
var panel = p.panel;
var history = p.history;
var noCurrent = p.noCurrent;
if (!noCurrent)
if (panel && panel !== Info.panel) {
@ -91,9 +92,9 @@ var Util, DOM, CloudFunc, join;
/* загружаем содержимое каталога */
ajaxLoad(p.path, {
refresh : isRefresh,
history : history,
noCurrent : noCurrent
refresh: isRefresh,
history: history,
noCurrent: noCurrent
}, panel, callback);
};
@ -366,11 +367,11 @@ var Util, DOM, CloudFunc, join;
}, obj);
};
this.refresh = function(panelParam, options, callback) {
var panel = panelParam || Info.panel,
noCurrent,
NEEDREFRESH = true,
path = DOM.getCurrentDirPath(panel);
this.refresh = function(panelParam, options, callback) {
var panel = panelParam || Info.panel;
var NEEDREFRESH = true;
var path = DOM.getCurrentDirPath(panel);
var noCurrent;
if (options)
noCurrent = options.noCurrent;
@ -410,9 +411,13 @@ var Util, DOM, CloudFunc, join;
if (!isRefresh && json)
return createFileTable(obj, panel, options, callback);
var position = DOM.getPanelPosition(panel);
var sort = CloudCmd.sort[position];
var order = CloudCmd.order[position];
var query = rendy('?sort={{ sort }}&order={{ order }}', {
sort: CloudCmd.sort,
order: CloudCmd.order
sort: sort,
order: order,
});
RESTful.read(path + query, 'json', function(error, obj) {
@ -421,8 +426,8 @@ var Util, DOM, CloudFunc, join;
Storage.set(path, obj);
options.sort = CloudCmd.sort;
options.order = CloudCmd.order;
options.sort = sort;
options.order = order;
createFileTable(obj, panel, options, function() {
if (isRefresh && !noCurrent) {

View file

@ -1240,10 +1240,16 @@ var CloudCmd, Util, DOM, CloudFunc;
return this.getPanel().parentElement;
};
this.getPanelPosition = function(panel) {
panel = panel || DOM.getPanel();
return panel.dataset.name.replace('js-', '');
};
/** function getting panel active, or passive
* @param options = {active: true}
*/
this.getPanel = function(options) {
this.getPanel = function(options) {
var files, panel, isLeft,
dataName = 'js-',
current = this.getCurrentFile();
@ -1621,6 +1627,7 @@ var CloudCmd, Util, DOM, CloudFunc;
info.size = Cmd.getCurrentSize(current);
info.isDir = Cmd.isCurrentIsDir();
info.isSelected = Cmd.isSelected(current);
info.panelPosition = Cmd.getPanel().dataset.name.replace('js-', '');
info.isOnePanel =
info.panel.getAttribute('data-name') ===
info.panelPassive.getAttribute('data-name');

View file

@ -32,6 +32,20 @@ var Util, DOM, CloudFunc, CloudCmd;
function header() {
var fm = DOM.getFM();
var position = Info.panelPosition;
var sortPrevious = CloudCmd.sort[position];
var sort = CloudCmd.sort;
var order = CloudCmd.order;
var isDataset = function(el) {
return el.dataset;
};
var isPanel = function(el) {
return /^js-(left|right)$/.test(el.dataset.name);
};
Events.addClick(fm, function(event) {
var el = event.target;
var parent = el.parentElement;
@ -45,15 +59,31 @@ var Util, DOM, CloudFunc, CloudCmd;
if (!/^(name|size|date)$/.test(name))
return;
if (name === CloudCmd.sort) {
if (CloudCmd.order === 'asc')
CloudCmd.order = 'desc';
var panel = event.path
.filter(isDataset)
.filter(isPanel)
.pop();
var position = panel
.dataset
.name
.replace('js-', '');
if (name !== sortPrevious) {
order[position] = 'asc';
} else {
if (order[position] === 'asc')
order[position] = 'desc';
else
CloudCmd.order = 'asc';
order[position] = 'asc';
}
CloudCmd.sort = name;
CloudCmd.refresh();
sortPrevious =
sort[position] = name;
CloudCmd.refresh(panel, {
noCurrent: position !== Info.panelPosition
});
});
}