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

Commit dda1830

Browse files
committed
Fix and improve various sorting aspects.
Deselect everything on blur in search engine and fetchedresultpane, otherwise further click on the same item does nothing.
1 parent ce80ce6 commit dda1830

File tree

7 files changed

+75
-111
lines changed

7 files changed

+75
-111
lines changed

core/src/plugins/gui.ajax/res/js/ajaxplorer.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/src/plugins/gui.ajax/res/js/lib/prototype/webfx.selectable.js

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -537,11 +537,11 @@ SelectableElements = Class.create({
537537
}
538538
}
539539
},
540-
540+
541541
isItem: function (node) {
542542
return node != null && node.up('#' + this._htmlElement.id);
543543
},
544-
544+
545545
findSelectableParent : function(el, setSelected){
546546
while (el != null && !this.isItem(el)){
547547
el = el.parentNode;
@@ -596,15 +596,7 @@ SelectableElements = Class.create({
596596
/* Indexable Collection Interface */
597597

598598
getItems: function () {
599-
var tmp = [];
600-
var j = 0;
601-
var cs = this._htmlElement.select('.ajxpNodeProvider');
602-
var l = cs.length;
603-
for (var i = 0; i < l; i++) {
604-
if (cs[i].nodeType == 1)
605-
tmp[j++] = cs[i] ;
606-
}
607-
return tmp;
599+
return this._htmlElement.select('.ajxpNodeProvider');
608600
},
609601

610602
getItem: function (nIndex) {

core/src/plugins/gui.ajax/res/js/lib/webfx/ajxptree.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ AJXPTree.prototype.setAjxpRootNode = function(rootNode){
105105

106106
AJXPTree.prototype.attachListeners = function(jsNode, ajxpNode){
107107
ajxpNode.observe("child_added", function(childPath){
108-
if(ajxpNode.getMetadata().get('paginationData')){
108+
if(ajxpNode.getMetadata().get('paginationData') && parseInt(ajxpNode.getMetadata().get('paginationData').get('total')) > 1){
109109
var pData = ajxpNode.getMetadata().get('paginationData');
110110
if(!this.paginated){
111111
this.paginated = true;

core/src/plugins/gui.ajax/res/js/pydio/ui/class.AjxpSortable.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ Class.create("AjxpSortable", SortableTable, {
8080
var column = this.columnsDefs[cellColumn];
8181
params.set('order_column', column['attributeName'] || cellColumn);
8282
params.set('order_direction', (this.descending?'desc':'asc'));
83-
this.paginationLoaderFunc(params);
83+
this.sortColumn = cellColumn;
84+
this.paginationLoaderFunc(params);
8485
}else{
8586
this.sort(cellColumn);
8687
}

core/src/plugins/gui.ajax/res/js/pydio/ui/class.FetchedResultPane.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,11 @@ Class.create("FetchedResultPane", FilesList, {
198198
}
199199
},
200200

201+
blur: function($super){
202+
$super();
203+
this._dataModel.setSelectedNodes([]);
204+
},
205+
201206
getActions : function(){
202207
return $H();
203208
}

core/src/plugins/gui.ajax/res/js/pydio/ui/class.FilesList.js

Lines changed: 59 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -617,10 +617,25 @@ Class.create("FilesList", SelectableElements, {
617617
icon_class:(isSorted?'icon-caret-'+(this._sortableTable.descending?'down':'up'):''),
618618
isDefault:false,
619619
callback:function(e){
620+
var sortable = this._sortableTable;
620621
var clickIndex = this.columnsDef.indexOf(column);
621-
var sorted = (this._sortableTable.sortColumn == clickIndex);
622-
if(sorted) this._sortableTable.descending = !this._sortableTable.descending;
623-
this._sortableTable.sort(clickIndex, this._sortableTable.descending);
622+
if(sortable.paginationLoaderFunc){
623+
var params = $H({});
624+
if (sortable.sortColumn != clickIndex){
625+
sortable.descending = sortable.defaultDescending;
626+
}else{
627+
sortable.descending = !sortable.descending;
628+
}
629+
var columnData = this.columnsDef[clickIndex];
630+
params.set('order_column', columnData['attributeName'] || clickIndex);
631+
params.set('order_direction', (sortable.descending?'desc':'asc'));
632+
sortable.paginationLoaderFunc(params);
633+
}else{
634+
var sorted = (sortable.sortColumn == clickIndex);
635+
if(sorted) sortable.descending = !sortable.descending;
636+
sortable.sort(clickIndex, sortable.descending);
637+
}
638+
624639
}.bind(this)
625640
});
626641
index++;
@@ -660,7 +675,7 @@ Class.create("FilesList", SelectableElements, {
660675
this.htmlElement.removeClassName('fl-displayMode-' + f);
661676
}
662677
}.bind(this));
663-
var scrollElement, buffer;
678+
var scrollElement, buffer, sortContainer, sortTypes, metaSortTypes, sortHeader;
664679
if(this._displayMode == "list")
665680
{
666681
this.hiddenColumns = $A();
@@ -762,25 +777,10 @@ Class.create("FilesList", SelectableElements, {
762777
if(event.metaValue) this.addMetadataFilter(event.metaName, event.metaValue+'*');
763778
else this.removeMetadataFilter(event.metaName);
764779
}.bind(this));
765-
this._sortableTable = new AjxpSortable(oElement, this.getVisibleSortTypes(), this.htmlElement.down('div.sort-table'));
766-
if(this.options.groupByData) this._sortableTable.setGroupByData(this.options.groupByData);
767-
this._sortableTable.onsort = function(){
768-
this.redistributeBackgrounds();
769-
var ctxt = this.getCurrentContextNode();
770-
ctxt.getMetadata().set("filesList.sortColumn", ''+this._sortableTable.sortColumn);
771-
ctxt.getMetadata().set("filesList.descending", this._sortableTable.descending);
772-
}.bind(this);
773-
if(this.paginationData && this.paginationData.get('remote_order') && parseInt(this.paginationData.get('total')) > 1){
774-
this._sortableTable.setPaginationBehaviour(function(params){
775-
this.getCurrentContextNode().getMetadata().set("remote_order", params);
776-
var oThis = this;
777-
this.crtContext.observeOnce("loaded", function(){
778-
oThis.crtContext = this ;
779-
oThis.fill(oThis.crtContext);
780-
});
781-
this.getCurrentContextNode().reload();
782-
}.bind(this), this.getVisibleColumns(), this.paginationData.get('currentOrderCol')||-1, this.paginationData.get('currentOrderDir') );
783-
}
780+
781+
sortContainer = oElement;
782+
sortTypes = this.getVisibleSortTypes();
783+
sortHeader = this.htmlElement.down('div.sort-table');
784784

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

863-
this._sortableTable = new AjxpSortable(scrollElement, null, null);
864-
this._sortableTable.setMetaSortType(this.columnsDef);
865-
if(this.options.groupByData) this._sortableTable.setGroupByData(this.options.groupByData);
866-
this._sortableTable.onsort = function(){
867-
var ctxt = this.getCurrentContextNode();
868-
ctxt.getMetadata().set("filesList.sortColumn", ''+this._sortableTable.sortColumn);
869-
ctxt.getMetadata().set("filesList.descending", this._sortableTable.descending);
870-
}.bind(this);
871-
if(!this.options.noContextualMenu){
872-
if(this.headerMenu){
873-
this.headerMenu.destroy();
874-
delete this.headerMenu;
875-
}
876-
this.headerMenu = new Proto.Menu({
877-
selector: '#content_pane div.panelHeader',
878-
className: 'menu desktop',
879-
menuItems: [],
880-
fade:true,
881-
zIndex:2000,
882-
beforeShow : function(){
883-
var items = $A([]);
884-
var index = 0;
885-
this.columnsDef.each(function(column){
886-
var isSorted = this._sortableTable.sortColumn == index;
887-
items.push({
888-
name:(column.messageId?MessageHash[column.messageId]:column.messageString),
889-
alt:(column.messageId?MessageHash[column.messageId]:column.messageString),
890-
image:resolveImageSource((isSorted?"column-visible":"transp")+".png", '/images/actions/ICON_SIZE', 16),
891-
isDefault:false,
892-
callback:function(e){
893-
var clickIndex = this.columnsDef.indexOf(column);
894-
var sorted = (this._sortableTable.sortColumn == clickIndex);
895-
if(sorted) this._sortableTable.descending = !this._sortableTable.descending;
896-
this._sortableTable.sort(clickIndex, this._sortableTable.descending);
897-
}.bind(this)
898-
});
899-
index++;
900-
}.bind(this) );
901-
this.headerMenu.options.menuItems = items;
902-
this.headerMenu.refreshList();
903-
}.bind(this)
904-
});
905-
}
863+
sortContainer = scrollElement;
864+
metaSortTypes = this.columnsDef;
906865

907866
if(this._displayMode == 'thumb'){
908867
if(this.slider){
@@ -927,14 +886,40 @@ Class.create("FilesList", SelectableElements, {
927886
});
928887
}
929888

930-
//this.disableTextSelection(scrollElement, true);
931889
if(this.options.selectable == undefined || this.options.selectable === true){
932890
this.initSelectableItems(scrollElement, true, scrollElement, true);
933891
}else{
934892
this.initNonSelectableItems(scrollElement);
935893
}
936894
}
937895

896+
this._sortableTable = new AjxpSortable(sortContainer, sortTypes, sortHeader);
897+
if(metaSortTypes){
898+
this._sortableTable.setMetaSortType(metaSortTypes);
899+
}
900+
if(this.options.groupByData) this._sortableTable.setGroupByData(this.options.groupByData);
901+
this._sortableTable.onsort = function(){
902+
if(this._displayMode == 'list') {
903+
this.redistributeBackgrounds();
904+
}
905+
var ctxt = this.getCurrentContextNode();
906+
ctxt.getMetadata().set("filesList.sortColumn", ''+this._sortableTable.sortColumn);
907+
ctxt.getMetadata().set("filesList.descending", this._sortableTable.descending);
908+
}.bind(this);
909+
if(this.paginationData && this.paginationData.get('remote_order')){
910+
this._sortableTable.setPaginationBehaviour(function(params){
911+
this.getCurrentContextNode().getMetadata().set("remote_order", params);
912+
var oThis = this;
913+
this.crtContext.observeOnce("loaded", function(){
914+
oThis.crtContext = this ;
915+
oThis.fill(oThis.crtContext);
916+
});
917+
this.getCurrentContextNode().reload();
918+
}.bind(this), this.getVisibleColumns(), this.paginationData.get('currentOrderCol')||-1, this.paginationData.get('currentOrderDir') );
919+
if(parseInt(this.paginationData.get('total')) == 1) this._sortableTable.paginationLoaderFunc = null;
920+
}
921+
922+
938923
if(this.options.replaceScroller){
939924
this.scroller = new Element('div', {id:'filelist_scroller'+this.__currentInstanceIndex, className:'scroller_track', style:"right:0px"});
940925
this.scroller.insert('<div id="filelist_scrollbar_handle'+this.__currentInstanceIndex+'" class="scroller_handle"></div>');
@@ -1484,7 +1469,7 @@ Class.create("FilesList", SelectableElements, {
14841469
this._sortableTable.sortColumn = -1;
14851470
this._sortableTable.updateHeaderArrows();
14861471
}
1487-
if(this.options.fixedSortColumn && this.options.fixedSortDirection){
1472+
if(this.options.fixedSortColumn && this.options.fixedSortDirection && !contextNode.getMetadata().get("filesList.sortColumn") && !this.paginationData){
14881473
var col = this.columnsDef.detect(function(c){
14891474
return c.attributeName == this.options.fixedSortColumn;
14901475
}.bind(this));
@@ -2707,8 +2692,8 @@ Class.create("FilesList", SelectableElements, {
27072692
}
27082693
return null;
27092694
}
2710-
},
2711-
2695+
},
2696+
27122697
/**
27132698
* Check if a domnode is indeed an item of the list
27142699
* @param node DOMNode
@@ -2727,30 +2712,8 @@ Class.create("FilesList", SelectableElements, {
27272712
node.parentNode == this._htmlElement;
27282713
}
27292714
},
2730-
2715+
27312716
/* Indexable Collection Interface */
2732-
/**
2733-
* Get all items
2734-
* @returns Array
2735-
*/
2736-
getItems: function () {
2737-
if(this._displayMode == "list")
2738-
{
2739-
return this._htmlElement.rows || [];
2740-
}
2741-
else
2742-
{
2743-
var tmp = [];
2744-
var j = 0;
2745-
var cs = this._htmlElement.childNodes;
2746-
var l = cs.length;
2747-
for (var i = 0; i < l; i++) {
2748-
if (cs[i].nodeType == 1)
2749-
tmp[j++] = cs[i];
2750-
}
2751-
return tmp;
2752-
}
2753-
},
27542717
/**
27552718
* Find an item index
27562719
* @param el HTMLElement
@@ -2764,15 +2727,15 @@ Class.create("FilesList", SelectableElements, {
27642727
else
27652728
{
27662729
var j = 0;
2767-
var cs = this._htmlElement.childNodes;
2730+
var cs = this._htmlElement.select('.ajxpNodeProvider');
27682731
var l = cs.length;
27692732
for (var i = 0; i < l; i++) {
27702733
if (cs[i] == el)
27712734
return j;
27722735
if (cs[i].nodeType == 1)
27732736
j++;
27742737
}
2775-
return -1;
2738+
return -1;
27762739
}
27772740
},
27782741
/**
@@ -2788,7 +2751,7 @@ Class.create("FilesList", SelectableElements, {
27882751
else
27892752
{
27902753
var j = 0;
2791-
var cs = this._htmlElement.childNodes;
2754+
var cs = this._htmlElement.select('.ajxpNodeProvider');
27922755
var l = cs.length;
27932756
for (var i = 0; i < l; i++) {
27942757
if (cs[i].nodeType == 1) {

core/src/plugins/gui.ajax/res/js/pydio/ui/class.SearchEngine.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ Class.create("SearchEngine", AjxpPane, {
464464
},
465465

466466
openSearchInput: function(withResult){
467+
if(this.searchInputIsOpen()) return;
467468
var container = this.htmlElement;
468469
container.absolutize();
469470
var leftPos = 285;
@@ -512,6 +513,7 @@ Class.create("SearchEngine", AjxpPane, {
512513
}
513514
if(this._fileList) {
514515
this._fileList.showElement(show);
516+
this._dataModel.setSelectedNodes([]);
515517
}
516518
},
517519

@@ -747,7 +749,8 @@ Class.create("SearchEngine", AjxpPane, {
747749
});
748750
}
749751
if($(this._ajxpOptions.toggleResultsVisibility).down("span.close_results")){
750-
$(this._ajxpOptions.toggleResultsVisibility).down("span.close_results").observe("click", function(){
752+
$(this._ajxpOptions.toggleResultsVisibility).down("span.close_results").observe("click", function(e){
753+
Event.stop(e);
751754
if(this._ajxpOptions.openSearchInput) this.closeSearchInput();
752755
else this.showToggleResult(false);
753756
if(this._closeAdvancedPanel) this._closeAdvancedPanel();

0 commit comments

Comments
 (0)