Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Tanghus <thomas@tanghus.net>2013-03-19 05:48:08 +0400
committerThomas Tanghus <thomas@tanghus.net>2013-03-19 15:59:32 +0400
commit9e383db75b26828fb577f4c340c7d125618273b7 (patch)
tree737c8576deecc26d5ed551f077c11e71fdc17ddd /settings
parent532e5463db78fb92e9863d6e7bb93f95517e458b (diff)
User list: Avoid dupes and better sorting. Fix #2420
Diffstat (limited to 'settings')
-rw-r--r--settings/js/users.js80
1 files changed, 65 insertions, 15 deletions
diff --git a/settings/js/users.js b/settings/js/users.js
index 9bc7455285a..632136b7ff7 100644
--- a/settings/js/users.js
+++ b/settings/js/users.js
@@ -114,30 +114,71 @@ var UserList = {
quotaSelect.append('<option value="' + escapeHTML(quota) + '" selected="selected">' + escapeHTML(quota) + '</option>');
}
}
- var added = false;
+ $(tr).appendTo('tbody');
if (sort) {
- displayname = displayname.toLowerCase();
- $('tbody tr').each(function () {
- if (displayname < $(this).attr('data-uid').toLowerCase()) {
- $(tr).insertBefore($(this));
- added = true;
- return false;
- }
- });
+ UserList.doSort();
+ }
+ },
+ // From http://my.opera.com/GreyWyvern/blog/show.dml/1671288
+ alphanum: function(a, b) {
+ function chunkify(t) {
+ var tz = [], x = 0, y = -1, n = 0, i, j;
+
+ while (i = (j = t.charAt(x++)).charCodeAt(0)) {
+ var m = (i == 46 || (i >=48 && i <= 57));
+ if (m !== n) {
+ tz[++y] = "";
+ n = m;
+ }
+ tz[y] += j;
+ }
+ return tz;
}
- if (!added) {
- $(tr).appendTo('tbody');
+
+ var aa = chunkify(a.toLowerCase());
+ var bb = chunkify(b.toLowerCase());
+
+ for (x = 0; aa[x] && bb[x]; x++) {
+ if (aa[x] !== bb[x]) {
+ var c = Number(aa[x]), d = Number(bb[x]);
+ if (c == aa[x] && d == bb[x]) {
+ return c - d;
+ } else return (aa[x] > bb[x]) ? 1 : -1;
+ }
}
- return tr;
+ return aa.length - bb.length;
},
+ doSort: function() {
+ var self = this;
+ var rows = $('tbody tr').get();
+
+ rows.sort(function(a, b) {
+ return UserList.alphanum($(a).find('td.name').text(), $(b).find('td.name').text());
+ });
+ var items = [];
+ $.each(rows, function(index, row) {
+ items.push(row);
+ if(items.length === 100) {
+ $('tbody').append(items);
+ items = [];
+ }
+ });
+ if(items.length > 0) {
+ $('tbody').append(items);
+ }
+ },
update: function () {
- if (typeof UserList.offset === 'undefined') {
- UserList.offset = $('tbody tr').length;
+ if (UserList.updating) {
+ return;
}
+ UserList.updating = true;
$.get(OC.Router.generate('settings_ajax_userlist', { offset: UserList.offset }), function (result) {
if (result.status === 'success') {
$.each(result.data, function (index, user) {
+ if($('tr[data-uid="' + user.name + '"]').length > 0) {
+ return true;
+ }
var tr = UserList.add(user.name, user.displayname, user.groups, user.subadmin, user.quota, false);
UserList.offset++;
if (index == 9) {
@@ -147,7 +188,12 @@ var UserList = {
});
}
});
+ console.log('length', result.data.length);
+ if (result.data.length > 0) {
+ UserList.doSort();
+ }
}
+ UserList.updating = false;
});
},
@@ -242,6 +288,8 @@ var UserList = {
$(document).ready(function () {
+ UserList.doSort();
+ UserList.offset = $('tbody tr').length;
$('tbody tr:last').bind('inview', function (event, isInView, visiblePartX, visiblePartY) {
OC.Router.registerLoadedCallback(function () {
UserList.update();
@@ -373,7 +421,9 @@ $(document).ready(function () {
OC.dialogs.alert(result.data.message,
t('settings', 'Error creating user'));
} else {
- UserList.add(username, username, result.data.groups, null, 'default', true);
+ if($('tr[data-uid="' + username + '"]').length === 0) {
+ UserList.add(username, username, result.data.groups, null, 'default', true);
+ }
}
}
);