Skip to content
This repository has been archived by the owner on Nov 25, 2020. It is now read-only.

Commit

Permalink
Fix and improve various sorting aspects.
Browse files Browse the repository at this point in the history
Deselect everything on blur in search engine and fetchedresultpane, otherwise further click on the same item does nothing.
  • Loading branch information
cdujeu committed Jun 25, 2015
1 parent ce80ce6 commit dda1830
Show file tree
Hide file tree
Showing 7 changed files with 75 additions and 111 deletions.
2 changes: 1 addition & 1 deletion core/src/plugins/gui.ajax/res/js/ajaxplorer.js

Large diffs are not rendered by default.

14 changes: 3 additions & 11 deletions core/src/plugins/gui.ajax/res/js/lib/prototype/webfx.selectable.js
Expand Up @@ -537,11 +537,11 @@ SelectableElements = Class.create({
}
}
},

isItem: function (node) {
return node != null && node.up('#' + this._htmlElement.id);
},

findSelectableParent : function(el, setSelected){
while (el != null && !this.isItem(el)){
el = el.parentNode;
Expand Down Expand Up @@ -596,15 +596,7 @@ SelectableElements = Class.create({
/* Indexable Collection Interface */

getItems: function () {
var tmp = [];
var j = 0;
var cs = this._htmlElement.select('.ajxpNodeProvider');
var l = cs.length;
for (var i = 0; i < l; i++) {
if (cs[i].nodeType == 1)
tmp[j++] = cs[i] ;
}
return tmp;
return this._htmlElement.select('.ajxpNodeProvider');
},

getItem: function (nIndex) {
Expand Down
2 changes: 1 addition & 1 deletion core/src/plugins/gui.ajax/res/js/lib/webfx/ajxptree.js
Expand Up @@ -105,7 +105,7 @@ AJXPTree.prototype.setAjxpRootNode = function(rootNode){

AJXPTree.prototype.attachListeners = function(jsNode, ajxpNode){
ajxpNode.observe("child_added", function(childPath){
if(ajxpNode.getMetadata().get('paginationData')){
if(ajxpNode.getMetadata().get('paginationData') && parseInt(ajxpNode.getMetadata().get('paginationData').get('total')) > 1){
var pData = ajxpNode.getMetadata().get('paginationData');
if(!this.paginated){
this.paginated = true;
Expand Down
Expand Up @@ -80,7 +80,8 @@ Class.create("AjxpSortable", SortableTable, {
var column = this.columnsDefs[cellColumn];
params.set('order_column', column['attributeName'] || cellColumn);
params.set('order_direction', (this.descending?'desc':'asc'));
this.paginationLoaderFunc(params);
this.sortColumn = cellColumn;
this.paginationLoaderFunc(params);
}else{
this.sort(cellColumn);
}
Expand Down
Expand Up @@ -198,6 +198,11 @@ Class.create("FetchedResultPane", FilesList, {
}
},

blur: function($super){
$super();
this._dataModel.setSelectedNodes([]);
},

getActions : function(){
return $H();
}
Expand Down
155 changes: 59 additions & 96 deletions core/src/plugins/gui.ajax/res/js/pydio/ui/class.FilesList.js
Expand Up @@ -617,10 +617,25 @@ Class.create("FilesList", SelectableElements, {
icon_class:(isSorted?'icon-caret-'+(this._sortableTable.descending?'down':'up'):''),
isDefault:false,
callback:function(e){
var sortable = this._sortableTable;
var clickIndex = this.columnsDef.indexOf(column);
var sorted = (this._sortableTable.sortColumn == clickIndex);
if(sorted) this._sortableTable.descending = !this._sortableTable.descending;
this._sortableTable.sort(clickIndex, this._sortableTable.descending);
if(sortable.paginationLoaderFunc){
var params = $H({});
if (sortable.sortColumn != clickIndex){
sortable.descending = sortable.defaultDescending;
}else{
sortable.descending = !sortable.descending;
}
var columnData = this.columnsDef[clickIndex];
params.set('order_column', columnData['attributeName'] || clickIndex);
params.set('order_direction', (sortable.descending?'desc':'asc'));
sortable.paginationLoaderFunc(params);
}else{
var sorted = (sortable.sortColumn == clickIndex);
if(sorted) sortable.descending = !sortable.descending;
sortable.sort(clickIndex, sortable.descending);
}

}.bind(this)
});
index++;
Expand Down Expand Up @@ -660,7 +675,7 @@ Class.create("FilesList", SelectableElements, {
this.htmlElement.removeClassName('fl-displayMode-' + f);
}
}.bind(this));
var scrollElement, buffer;
var scrollElement, buffer, sortContainer, sortTypes, metaSortTypes, sortHeader;
if(this._displayMode == "list")
{
this.hiddenColumns = $A();
Expand Down Expand Up @@ -762,25 +777,10 @@ Class.create("FilesList", SelectableElements, {
if(event.metaValue) this.addMetadataFilter(event.metaName, event.metaValue+'*');
else this.removeMetadataFilter(event.metaName);
}.bind(this));
this._sortableTable = new AjxpSortable(oElement, this.getVisibleSortTypes(), this.htmlElement.down('div.sort-table'));
if(this.options.groupByData) this._sortableTable.setGroupByData(this.options.groupByData);
this._sortableTable.onsort = function(){
this.redistributeBackgrounds();
var ctxt = this.getCurrentContextNode();
ctxt.getMetadata().set("filesList.sortColumn", ''+this._sortableTable.sortColumn);
ctxt.getMetadata().set("filesList.descending", this._sortableTable.descending);
}.bind(this);
if(this.paginationData && this.paginationData.get('remote_order') && parseInt(this.paginationData.get('total')) > 1){
this._sortableTable.setPaginationBehaviour(function(params){
this.getCurrentContextNode().getMetadata().set("remote_order", params);
var oThis = this;
this.crtContext.observeOnce("loaded", function(){
oThis.crtContext = this ;
oThis.fill(oThis.crtContext);
});
this.getCurrentContextNode().reload();
}.bind(this), this.getVisibleColumns(), this.paginationData.get('currentOrderCol')||-1, this.paginationData.get('currentOrderDir') );
}

sortContainer = oElement;
sortTypes = this.getVisibleSortTypes();
sortHeader = this.htmlElement.down('div.sort-table');

this.observer = function(e){
if(this.options.fit && this.options.fit == 'height') fitHeightToBottom(contentContainer, this.htmlElement);
Expand Down Expand Up @@ -860,49 +860,8 @@ Class.create("FilesList", SelectableElements, {
this._thumbSize = parseInt(this._fixedThumbSize);
}

this._sortableTable = new AjxpSortable(scrollElement, null, null);
this._sortableTable.setMetaSortType(this.columnsDef);
if(this.options.groupByData) this._sortableTable.setGroupByData(this.options.groupByData);
this._sortableTable.onsort = function(){
var ctxt = this.getCurrentContextNode();
ctxt.getMetadata().set("filesList.sortColumn", ''+this._sortableTable.sortColumn);
ctxt.getMetadata().set("filesList.descending", this._sortableTable.descending);
}.bind(this);
if(!this.options.noContextualMenu){
if(this.headerMenu){
this.headerMenu.destroy();
delete this.headerMenu;
}
this.headerMenu = new Proto.Menu({
selector: '#content_pane div.panelHeader',
className: 'menu desktop',
menuItems: [],
fade:true,
zIndex:2000,
beforeShow : function(){
var items = $A([]);
var index = 0;
this.columnsDef.each(function(column){
var isSorted = this._sortableTable.sortColumn == index;
items.push({
name:(column.messageId?MessageHash[column.messageId]:column.messageString),
alt:(column.messageId?MessageHash[column.messageId]:column.messageString),
image:resolveImageSource((isSorted?"column-visible":"transp")+".png", '/images/actions/ICON_SIZE', 16),
isDefault:false,
callback:function(e){
var clickIndex = this.columnsDef.indexOf(column);
var sorted = (this._sortableTable.sortColumn == clickIndex);
if(sorted) this._sortableTable.descending = !this._sortableTable.descending;
this._sortableTable.sort(clickIndex, this._sortableTable.descending);
}.bind(this)
});
index++;
}.bind(this) );
this.headerMenu.options.menuItems = items;
this.headerMenu.refreshList();
}.bind(this)
});
}
sortContainer = scrollElement;
metaSortTypes = this.columnsDef;

if(this._displayMode == 'thumb'){
if(this.slider){
Expand All @@ -927,14 +886,40 @@ Class.create("FilesList", SelectableElements, {
});
}

//this.disableTextSelection(scrollElement, true);
if(this.options.selectable == undefined || this.options.selectable === true){
this.initSelectableItems(scrollElement, true, scrollElement, true);
}else{
this.initNonSelectableItems(scrollElement);
}
}

this._sortableTable = new AjxpSortable(sortContainer, sortTypes, sortHeader);
if(metaSortTypes){
this._sortableTable.setMetaSortType(metaSortTypes);
}
if(this.options.groupByData) this._sortableTable.setGroupByData(this.options.groupByData);
this._sortableTable.onsort = function(){
if(this._displayMode == 'list') {
this.redistributeBackgrounds();
}
var ctxt = this.getCurrentContextNode();
ctxt.getMetadata().set("filesList.sortColumn", ''+this._sortableTable.sortColumn);
ctxt.getMetadata().set("filesList.descending", this._sortableTable.descending);
}.bind(this);
if(this.paginationData && this.paginationData.get('remote_order')){
this._sortableTable.setPaginationBehaviour(function(params){
this.getCurrentContextNode().getMetadata().set("remote_order", params);
var oThis = this;
this.crtContext.observeOnce("loaded", function(){
oThis.crtContext = this ;
oThis.fill(oThis.crtContext);
});
this.getCurrentContextNode().reload();
}.bind(this), this.getVisibleColumns(), this.paginationData.get('currentOrderCol')||-1, this.paginationData.get('currentOrderDir') );
if(parseInt(this.paginationData.get('total')) == 1) this._sortableTable.paginationLoaderFunc = null;
}


if(this.options.replaceScroller){
this.scroller = new Element('div', {id:'filelist_scroller'+this.__currentInstanceIndex, className:'scroller_track', style:"right:0px"});
this.scroller.insert('<div id="filelist_scrollbar_handle'+this.__currentInstanceIndex+'" class="scroller_handle"></div>');
Expand Down Expand Up @@ -1484,7 +1469,7 @@ Class.create("FilesList", SelectableElements, {
this._sortableTable.sortColumn = -1;
this._sortableTable.updateHeaderArrows();
}
if(this.options.fixedSortColumn && this.options.fixedSortDirection){
if(this.options.fixedSortColumn && this.options.fixedSortDirection && !contextNode.getMetadata().get("filesList.sortColumn") && !this.paginationData){
var col = this.columnsDef.detect(function(c){
return c.attributeName == this.options.fixedSortColumn;
}.bind(this));
Expand Down Expand Up @@ -2707,8 +2692,8 @@ Class.create("FilesList", SelectableElements, {
}
return null;
}
},
},

/**
* Check if a domnode is indeed an item of the list
* @param node DOMNode
Expand All @@ -2727,30 +2712,8 @@ Class.create("FilesList", SelectableElements, {
node.parentNode == this._htmlElement;
}
},

/* Indexable Collection Interface */
/**
* Get all items
* @returns Array
*/
getItems: function () {
if(this._displayMode == "list")
{
return this._htmlElement.rows || [];
}
else
{
var tmp = [];
var j = 0;
var cs = this._htmlElement.childNodes;
var l = cs.length;
for (var i = 0; i < l; i++) {
if (cs[i].nodeType == 1)
tmp[j++] = cs[i];
}
return tmp;
}
},
/**
* Find an item index
* @param el HTMLElement
Expand All @@ -2764,15 +2727,15 @@ Class.create("FilesList", SelectableElements, {
else
{
var j = 0;
var cs = this._htmlElement.childNodes;
var cs = this._htmlElement.select('.ajxpNodeProvider');
var l = cs.length;
for (var i = 0; i < l; i++) {
if (cs[i] == el)
return j;
if (cs[i].nodeType == 1)
j++;
}
return -1;
return -1;
}
},
/**
Expand All @@ -2788,7 +2751,7 @@ Class.create("FilesList", SelectableElements, {
else
{
var j = 0;
var cs = this._htmlElement.childNodes;
var cs = this._htmlElement.select('.ajxpNodeProvider');
var l = cs.length;
for (var i = 0; i < l; i++) {
if (cs[i].nodeType == 1) {
Expand Down
Expand Up @@ -464,6 +464,7 @@ Class.create("SearchEngine", AjxpPane, {
},

openSearchInput: function(withResult){
if(this.searchInputIsOpen()) return;
var container = this.htmlElement;
container.absolutize();
var leftPos = 285;
Expand Down Expand Up @@ -512,6 +513,7 @@ Class.create("SearchEngine", AjxpPane, {
}
if(this._fileList) {
this._fileList.showElement(show);
this._dataModel.setSelectedNodes([]);
}
},

Expand Down Expand Up @@ -747,7 +749,8 @@ Class.create("SearchEngine", AjxpPane, {
});
}
if($(this._ajxpOptions.toggleResultsVisibility).down("span.close_results")){
$(this._ajxpOptions.toggleResultsVisibility).down("span.close_results").observe("click", function(){
$(this._ajxpOptions.toggleResultsVisibility).down("span.close_results").observe("click", function(e){
Event.stop(e);
if(this._ajxpOptions.openSearchInput) this.closeSearchInput();
else this.showToggleResult(false);
if(this._closeAdvancedPanel) this._closeAdvancedPanel();
Expand Down

0 comments on commit dda1830

Please sign in to comment.