User list: Avoid dupes and better sorting. Fix #2420

This commit is contained in:
Thomas Tanghus 2013-03-19 02:48:08 +01:00
parent 63ca84e7bc
commit c13487332a
1 changed files with 67 additions and 17 deletions

View File

@ -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();
}
if (!added) {
$(tr).appendTo('tbody');
}
return tr;
},
// 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;
update: function () {
if (typeof UserList.offset === 'undefined') {
UserList.offset = $('tbody tr').length;
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;
}
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 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 (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);
}
}
}
);