diff --git a/client/client.js b/client/client.js index 8466cdb2..3072d40b 100644 --- a/client/client.js +++ b/client/client.js @@ -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) { diff --git a/client/dom.js b/client/dom.js index 11c905b0..c1842d09 100644 --- a/client/dom.js +++ b/client/dom.js @@ -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'); diff --git a/client/listeners.js b/client/listeners.js index b8cc283a..756d19f9 100644 --- a/client/listeners.js +++ b/client/listeners.js @@ -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 + }); }); }