From 5bd8712f71d5f5c62bb278da32e3f175ed96de36 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Thu, 21 Nov 2013 07:10:25 -0500
Subject: [PATCH] Fix folders sorting procedure. Fixes the issue where after creating a folder with name 'Abc abc' it were added before existing subfolders of folder 'Abc' and after 'Abc'.

---
 program/js/app.js |   24 +++++++++++++++++-------
 1 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index f36a3ca..1f8efde 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -5732,7 +5732,7 @@
     if (!this.gui_objects.subscriptionlist)
       return false;
 
-    var row, n, i, tmp, tmp_name, folders, rowid, list = [], slist = [],
+    var row, n, i, tmp, tmp_name, rowid, folders = [], list = [], slist = [],
       tbody = this.gui_objects.subscriptionlist.tBodies[0],
       refrow = $('tr', tbody).get(1),
       id = 'rcmrow'+((new Date).getTime());
@@ -5747,8 +5747,7 @@
     row = $(refrow).clone(true);
 
     // set ID, reset css class
-    row.attr('id', id);
-    row.attr('class', class_name);
+    row.attr({id: id, 'class': class_name});
 
     // set folder name
     row.find('td:first').html(display_name);
@@ -5760,10 +5759,21 @@
     // add to folder/row-ID map
     this.env.subscriptionrows[id] = [name, display_name, 0];
 
-    // sort folders, to find a place where to insert the row
-    folders = [];
-    $.each(this.env.subscriptionrows, function(k,v){ folders.push(v) });
-    folders.sort(function(a,b){ return a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0) });
+    // sort folders (to find a place where to insert the row)
+    // replace delimiter with \0 character to fix sorting
+    // issue where 'Abc Abc' would be placed before 'Abc/def'
+    var replace_from = RegExp(RegExp.escape(this.env.delimiter), 'g'),
+      replace_to = String.fromCharCode(0);
+    $.each(this.env.subscriptionrows, function(k,v) {
+      var n = v[0];
+      n = n.replace(replace_from, replace_to);
+      v.push(n);
+      folders.push(v);
+    });
+    folders.sort(function(a, b) {
+      var len = a.length - 1; n1 = a[len], n2 = b[len];
+      return n1 < n2 ? -1 : 1;
+    });
 
     for (n in folders) {
       // protected folder

--
Gitblit v1.9.1