diff --git a/server/public/assets/admin/authenticated/js/main.js b/server/public/assets/admin/authenticated/js/main.js
index 6cf7d61b..fc85248c 100644
--- a/server/public/assets/admin/authenticated/js/main.js
+++ b/server/public/assets/admin/authenticated/js/main.js
@@ -136,6 +136,10 @@ function loaded() {
type: "GET",
url: "/api/lists",
success: function(response){
+ response = response.sort(predicate({
+ name: '_id',
+ reverse: false
+ }));
var output_pinned = '';
var output_delete = '';
for(var x = 0; x < response.length; x++){
@@ -600,4 +604,63 @@ $(document).on("submit", "#delete_userpass", function(e){
})
});
+function predicate() {
+ var fields = [],
+ n_fields = arguments.length,
+ field, name, cmp;
+
+ var default_cmp = function (a, b) {
+ if(a == undefined) a = 0;
+ if(b == undefined) b = 0;
+ if (a === b) return 0;
+ return a < b ? -1 : 1;
+ },
+ getCmpFunc = function (primer, reverse) {
+ var dfc = default_cmp,
+ // closer in scope
+ cmp = default_cmp;
+ if (primer) {
+ cmp = function (a, b) {
+ return dfc(primer(a), primer(b));
+ };
+ }
+ if (reverse) {
+ return function (a, b) {
+ return -1 * cmp(a, b);
+ };
+ }
+ return cmp;
+ };
+
+ // preprocess sorting options
+ for (var i = 0; i < n_fields; i++) {
+ field = arguments[i];
+ if (typeof field === 'string') {
+ name = field;
+ cmp = default_cmp;
+ } else {
+ name = field.name;
+ cmp = getCmpFunc(field.primer, field.reverse);
+ }
+ fields.push({
+ name: name,
+ cmp: cmp
+ });
+ }
+
+ // final comparison function
+ return function (A, B) {
+ var name, result;
+ for (var i = 0; i < n_fields; i++) {
+ result = 0;
+ field = fields[i];
+ name = field.name;
+
+ result = field.cmp(A[name], B[name]);
+ if (result !== 0) break;
+ }
+ return result;
+ };
+}
+
socket.emit("get_spread");