From 8d1fdb070e5ed9910a3fce7d649d0a803fd7e73d Mon Sep 17 00:00:00 2001
From: ulrich
Date: Wed, 27 Jan 2021 13:23:27 +0000
Subject: [PATCH] Sortierung Dateiliste

---
 web/ui2/js/app.js |  208 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 208 insertions(+), 0 deletions(-)

diff --git a/web/ui2/js/app.js b/web/ui2/js/app.js
index 003c7e7..595ea4b 100644
--- a/web/ui2/js/app.js
+++ b/web/ui2/js/app.js
@@ -24,6 +24,8 @@
   this.cutCopySrcDir;
   this.cutCopyFiles;
   this.fm_slideshow = false;
+  this.listOrder = 'asc';
+  this.listCol = 'name';
   this.dateien;
   this.cache = {}; // mustache template cache
 
@@ -500,6 +502,7 @@
         var elem = document.querySelector('#dateien');
         elem.innerHTML = html;
         self.addEvtListener('.datei-zeile', 'click', self.fm_dateiwahl);
+        self.addEvtListener('.col-hdr', 'click', self.fm_set_sort);
       });
     }
   };
@@ -790,6 +793,186 @@
     suedDiv.classList.remove('sued-open');
     suedDiv.style.height = '0';
   };
+  
+  /*
+    function descending(a, b) 
+    {
+      if (a < b)
+      {
+        return 1;
+      }
+
+      if (a > b)
+      {
+        return -1;
+      }
+
+      return 0; 
+    }
+  */
+
+  // FileRef Vergleicher
+  
+  this.name_vergleicher_asc = function(a, b) {
+    if (a.fileName() > b.fileName())
+    {
+      return 1;
+    }
+
+    if (a.fileName() < b.fileName())
+    {
+      return -1;
+    }
+
+    return 0; 
+  };
+
+  this.name_vergleicher_desc = function(a, b) {
+    //console.log('name_vergleicher_desc - a.fileName: ' + 
+      //      a.fileName() + ', b.fileName: ' + b.fileName());
+    if (a.fileName() < b.fileName())
+    {
+      return 1;
+    }
+
+    if (a.fileName() > b.fileName())
+    {
+      return -1;
+    }
+
+    return 0; 
+  };
+  
+  // groesse fileSize, art fr.mimetype, geaendert fileDate
+
+  this.type_vergleicher_asc = function(a, b) {
+    if (a.fr.mimetype > b.fr.mimetype)
+    {
+      return 1;
+    }
+
+    if (a.fr.mimetype < b.fr.mimetype)
+    {
+      return -1;
+    }
+
+    return 0; 
+  };
+
+  this.type_vergleicher_desc = function(a, b) {
+    //console.log('name_vergleicher_desc - a.fileName: ' + 
+      //      a.fileName() + ', b.fileName: ' + b.fileName());
+    if (a.fr.mimetype < b.fr.mimetype)
+    {
+      return 1;
+    }
+
+    if (a.fr.mimetype > b.fr.mimetype)
+    {
+      return -1;
+    }
+
+    return 0; 
+  };
+  
+  this.size_vergleicher_asc = function(a, b) {
+    if (a.fileSize() > b.fileSize())
+    {
+      return 1;
+    }
+
+    if (a.fileSize() < b.fileSize())
+    {
+      return -1;
+    }
+
+    return 0; 
+  };
+
+  this.size_vergleicher_desc = function(a, b) {
+    //console.log('name_vergleicher_desc - a.fileName: ' + 
+      //      a.fileName() + ', b.fileName: ' + b.fileName());
+    if (a.fileSize() < b.fileSize())
+    {
+      return 1;
+    }
+
+    if (a.fileSize() > b.fileSize())
+    {
+      return -1;
+    }
+
+    return 0; 
+  };
+  
+  this.date_vergleicher_asc = function(a, b) {
+    if (a.fileDate() > b.fileDate())
+    {
+      return 1;
+    }
+
+    if (a.fileDate() < b.fileDate())
+    {
+      return -1;
+    }
+
+    return 0; 
+  };
+
+  this.date_vergleicher_desc = function(a, b) {
+    //console.log('name_vergleicher_desc - a.fileName: ' + 
+      //      a.fileName() + ', b.fileName: ' + b.fileName());
+    if (a.fileDate() < b.fileDate())
+    {
+      return 1;
+    }
+
+    if (a.fileDate() > b.fileDate())
+    {
+      return -1;
+    }
+
+    return 0; 
+  };
+  
+  this.fm_toggle_order = function () {
+    if(self.listOrder === 'asc') {
+      self.listOrder = 'desc';
+    } else {
+      self.listOrder = 'asc';
+    }
+  };
+  
+  this.fm_set_sort = function(event) {
+    var t = event.target;
+    if(t.classList.contains('col-f-name')) {
+      if(self.listCol === 'name') {
+        self.fm_toggle_order();
+      } else {
+        self.listCol = 'name';
+      }
+    } else if(t.classList.contains('col-f-size')) {
+      if(self.listCol === 'size') {
+        self.fm_toggle_order();
+      } else {
+        self.listCol = 'size';
+      }
+    } else if(t.classList.contains('col-f-type')) {
+      if(self.listCol === 'type') {
+        self.fm_toggle_order();
+      } else {
+        self.listCol = 'type';
+      }
+    } else if(t.classList.contains('col-f-date')) {
+      if(self.listCol === 'date') {
+        self.fm_toggle_order();
+      } else {
+        self.listCol = 'date';
+      }
+    }
+    //console.log('fm_set_sort col ' + self.listCol + ', order ' + self.listOrder);
+    self.fm_get_list(self.pfad);
+  };
 
   /* --------- Dateifunktionen Ende ---------- */
 
@@ -810,8 +993,33 @@
         } else {
           files.push(new FileRef(resp.List[0].FileRef));
         }
+        //console.log('fm_get_list col ' + self.listCol + ', order ' + self.listOrder);
+        if(self.listOrder === 'asc') {
+          //console.log('fm_get_list order asc');
+          if(self.listCol === 'name') {
+            files.sort(self.name_vergleicher_asc);
+          } else if(self.listCol === 'type') {
+            files.sort(self.type_vergleicher_asc);
+          } else if(self.listCol === 'date') {
+            files.sort(self.date_vergleicher_asc);
+          } else if(self.listCol === 'size') {
+            files.sort(self.size_vergleicher_asc);
+          }
+        } else {
+          //console.log('fm_get_list order desc');
+          if(self.listCol === 'name') {
+            files.sort(self.name_vergleicher_desc);
+          } else if(self.listCol === 'type') {
+            files.sort(self.type_vergleicher_desc);
+          } else if(self.listCol === 'date') {
+            files.sort(self.date_vergleicher_desc);
+          } else if(self.listCol === 'size') {
+            files.sort(self.size_vergleicher_desc);
+          }
+        }
         var fl = new FileList(files);
         self.fm_render_list(fl);
+        
       } else {
         // #dateien leeren
         var elem = document.querySelector("#dateien");

--
Gitblit v1.9.3