]> source.dussan.org Git - nextcloud-server.git/commitdiff
More specific selectors, javascript cleanup.
authorringmaster <epithet@gmail.com>
Tue, 6 May 2014 02:41:54 +0000 (22:41 -0400)
committerArthur Schiwon <blizzz@owncloud.com>
Mon, 2 Jun 2014 10:53:58 +0000 (12:53 +0200)
* Assigned jQuery selector results to variables for speed.
* Moved all .attr('data') calls to .data() calls.
* Added :data(uid) selector.
* Split the multiselect checkhandlers into separate functions.
* De-duped click event on password change/img.
* Used fluent interface on jQuery object for event binding.
* Removed redundant tag names in class selectors.
* Fixed incorrect date display for last login.
* Added Userlist.has() to search for uid.
* General code convention compliance fixes.

to-do: Group dropdowns currently don't add the admin group after the search result, not sure why yet.

settings/js/users/users.js
settings/templates/users/part.setquota.php
settings/templates/users/part.userlist.php

index b9654e774ba1c48d24790f53d91f21e792fedc56..f40854cf6374c47429fb2efc6874316961a566a5 100644 (file)
@@ -6,6 +6,10 @@
  * See the COPYING-README file.
  */
 
+var $userList;
+var $userListBody;
+var filter;
+
 var UserList = {
        availableGroups: [],
        offset: 30, //The first 30 users are there. No prob, if less in total.
@@ -15,29 +19,30 @@ var UserList = {
        currentGid: '',
 
        add: function (username, displayname, groups, subadmin, quota, storageLocation, lastLogin, sort) {
-               var tr = $('tbody tr').first().clone();
+               var $tr = $userListBody.find('tr:first-child').clone();
                var subadminsEl;
                var subadminSelect;
                var groupsSelect;
-               if (tr.find('div.avatardiv').length){
-                       $('div.avatardiv', tr).avatar(username, 32);
+               if ($tr.find('div.avatardiv').length){
+                       $tr.find('.avatardiv').imageplaceholder(username, displayname);
+                       $('div.avatardiv', $tr).avatar(username, 32);
                }
-               tr.attr('data-uid', username);
-               tr.attr('data-displayName', displayname);
-               tr.find('td.name').text(username);
-               tr.find('td.displayName > span').text(displayname);
+               $tr.data('uid', username);
+               $tr.data('displayname', displayname);
+               $tr.find('td.name').text(username);
+               $tr.find('td.displayName > span').text(displayname);
 
                // make them look like the multiselect buttons
                // until they get time to really get initialized
                groupsSelect = $('<select multiple="multiple" class="groupsselect multiselect button" data-placehoder="Groups" title="' + t('settings', 'Groups') + '"></select>')
-                       .attr('data-username', username)
+                       .data('username', username)
                        .data('user-groups', groups);
-               if (tr.find('td.subadmins').length > 0) {
+               if ($tr.find('td.subadmins').length > 0) {
                        subadminSelect = $('<select multiple="multiple" class="subadminsselect multiselect button" data-placehoder="subadmins" title="' + t('settings', 'Group Admin') + '">')
-                               .attr('data-username', username)
+                               .data('username', username)
                                .data('user-groups', groups)
                                .data('subadmin', subadmin);
-                       tr.find('td.subadmins').empty();
+                       $tr.find('td.subadmins').empty();
                }
                $.each(this.availableGroups, function (i, group) {
                        groupsSelect.append($('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>'));
@@ -45,48 +50,49 @@ var UserList = {
                                subadminSelect.append($('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>'));
                        }
                });
-               tr.find('td.groups').empty().append(groupsSelect);
-               subadminsEl = tr.find('td.subadmins');
+               $tr.find('td.groups').empty().append(groupsSelect);
+               subadminsEl = $tr.find('td.subadmins');
                if (subadminsEl.length > 0) {
                        subadminsEl.append(subadminSelect);
                }
-               if (tr.find('td.remove img').length === 0 && OC.currentUser !== username) {
+               if ($tr.find('td.remove img').length === 0 && OC.currentUser !== username) {
                        var deleteImage = $('<img class="svg action">').attr({
                                src: OC.imagePath('core', 'actions/delete')
                        });
                        var deleteLink = $('<a class="action delete">')
                                .attr({ href: '#', 'original-title': t('settings', 'Delete')})
                                .append(deleteImage);
-                       tr.find('td.remove').append(deleteLink);
+                       $tr.find('td.remove').append(deleteLink);
                } else if (OC.currentUser === username) {
-                       tr.find('td.remove a').remove();
+                       $tr.find('td.remove a').remove();
                }
-               var quotaSelect = tr.find('select.quota-user');
+               var $quotaSelect = $tr.find('.quota-user');
                if (quota === 'default') {
-                       quotaSelect.find('option').attr('selected', null);
-                       quotaSelect.find('option').first().attr('selected', 'selected');
-                       quotaSelect.data('previous', 'default');
+                       $quotaSelect
+                               .data('previous', 'default')
+                               .find('option').attr('selected', null)
+                               .first().attr('selected', 'selected');
                } else {
-                       if (quotaSelect.find('option[value="' + quota + '"]').length > 0) {
-                               quotaSelect.find('option[value="' + quota + '"]').attr('selected', 'selected');
+                       if ($quotaSelect.find('option[value="' + quota + '"]').length > 0) {
+                               $quotaSelect.find('option[value="' + quota + '"]').attr('selected', 'selected');
                        } else {
-                               quotaSelect.append('<option value="' + escapeHTML(quota) + '" selected="selected">' + escapeHTML(quota) + '</option>');
+                               $quotaSelect.append('<option value="' + escapeHTML(quota) + '" selected="selected">' + escapeHTML(quota) + '</option>');
                        }
                }
-               tr.find('td.storageLocation').text(storageLocation);
+               $tr.find('td.storageLocation').text(storageLocation);
                if(lastLogin === 0) {
                        lastLogin = t('settings', 'never');
                } else {
-                       lastLogin = new Date(lastLogin);
+                       lastLogin = new Date(lastLogin * 1000);
                        lastLogin = relative_modified_date(lastLogin.getTime() / 1000);
                }
-               tr.find('td.lastLogin').text(lastLogin);
-               $(tr).appendTo('tbody');
+               $tr.find('td.lastLogin').text(lastLogin);
+               $tr.appendTo($userList);
                if(UserList.isEmpty === true) {
                        //when the list was emptied, one row was left, necessary to keep
                        //add working and the layout unbroken. We need to remove this item
-                       tr.show();
-                       $('tbody tr').first().remove();
+                       $tr.show();
+                       $userListBody.find('tr:first').remove();
                        UserList.isEmpty = false;
                        UserList.checkUsersToLoad();
                }
@@ -94,25 +100,25 @@ var UserList = {
                        UserList.doSort();
                }
 
-               quotaSelect.on('change', function () {
-                       var uid = $(this).parent().parent().attr('data-uid');
+               $quotaSelect.on('change', function () {
+                       var uid = $(this).closest('tr').data('uid');
                        var quota = $(this).val();
                        setQuota(uid, quota, function(returnedQuota){
                                if (quota !== returnedQuota) {
-                                       $(quotaSelect).find(':selected').text(returnedQuota);
+                                       $($quotaSelect).find(':selected').text(returnedQuota);
                                }
                        });
                });
 
                // defer init so the user first sees the list appear more quickly
                window.setTimeout(function(){
-                       quotaSelect.singleSelect();
-                       UserList.applyMultiplySelect(groupsSelect);
+                       $quotaSelect.singleSelect();
+                       UserList.applyGroupSelect(groupsSelect);
                        if (subadminSelect) {
-                               UserList.applyMultiplySelect(subadminSelect);
+                               UserList.applySubadminSelect(subadminSelect);
                        }
                }, 0);
-               return tr;
+               return $tr;
        },
        // From http://my.opera.com/GreyWyvern/blog/show.dml/1671288
        alphanum: function(a, b) {
@@ -171,8 +177,7 @@ var UserList = {
                }
        },
        doSort: function() {
-               var self = this;
-               var rows = $('tbody tr').get();
+               var rows = $userListBody.find('tr').get();
 
                rows.sort(function(a, b) {
                        a = $(a).find('td.name').text();
@@ -188,12 +193,12 @@ var UserList = {
                $.each(rows, function(index, row) {
                        items.push(row);
                        if(items.length === 100) {
-                               $('tbody').append(items);
+                               $userListBody.append(items);
                                items = [];
                        }
                });
                if(items.length > 0) {
-                       $('tbody').append(items);
+                       $userListBody.append(items);
                }
        },
        checkUsersToLoad: function() {
@@ -206,24 +211,27 @@ var UserList = {
        },
        empty: function() {
                //one row needs to be kept, because it is cloned to add new rows
-               $('tbody tr:not(:first)').remove();
-               var tr = $('tbody tr').first();
-               tr.hide();
+               $userListBody.find('tr:not(:first)').remove();
+               var $tr = $userListBody.find('tr:first');
+               $tr.hide();
                //on an update a user may be missing when the username matches with that
                //of the hidden row. So change this to a random string.
-               tr.attr('data-uid', Math.random().toString(36).substring(2));
+               $tr.data('uid', Math.random().toString(36).substring(2));
                UserList.isEmpty = true;
                UserList.offset = 0;
                UserList.checkUsersToLoad();
        },
        hide: function(uid) {
-               $('tr[data-uid="' + uid + '"]').hide();
+               $('tr:data(' + uid + ')').hide();
        },
        show: function(uid) {
-               $('tr[data-uid="' + uid + '"]').show();
+               $('tr:data(' + uid + ')').show();
        },
        remove: function(uid) {
-               $('tr').filterAttr('data-uid', uid).remove();
+               $('tr:data(' + uid + ')').remove();
+       },
+       has: function(uid) {
+               return $('tr:data(' + uid + ')').length > 0;
        },
        initDeleteHandling: function() {
                //set up handler
@@ -238,9 +246,9 @@ var UserList = {
                                                                                UserList.show);
 
                //when to mark user for delete
-               $('table').on('click', 'td.remove>a', function (event) {
+               $userListBody.on('click', '.delete', function () {
                        // Call function for handling delete/undo
-                       var uid = $(this).parent().parent().attr('data-uid');
+                       var uid = $(this).closest('tr').data('uid');
                        UserDeleteHandler.mark(uid);
                });
 
@@ -254,147 +262,153 @@ var UserList = {
                if (UserList.updating) {
                        return;
                }
-               $('table+.loading').css('visibility', 'visible');
+               $userList.siblings('.loading').css('visibility', 'visible');
                UserList.updating = true;
                if(gid === undefined) {
                        gid = '';
                }
                UserList.currentGid = gid;
-               pattern = filter.getPattern();
-               var query = $.param({ offset: UserList.offset, limit: UserList.usersToLoad, gid: gid, pattern: pattern });
-               $.get(OC.generateUrl('/settings/ajax/userlist') + '?' + query, function (result) {
-                       var loadedUsers = 0;
-                       var trs = [];
-                       if (result.status === 'success') {
-                               //The offset does not mirror the amount of users available,
-                               //because it is backend-dependent. For correct retrieval,
-                               //always the limit(requested amount of users) needs to be added.
-                               $.each(result.data, function (index, user) {
-                                       if($('tr[data-uid="' + user.name + '"]').length > 0) {
-                                               return true;
+               var pattern = filter.getPattern();
+               $.get(
+                       OC.generateUrl('/settings/ajax/userlist'),
+                       { offset: UserList.offset, limit: UserList.usersToLoad, gid: gid, pattern: pattern },
+                       function (result) {
+                               var loadedUsers = 0;
+                               var trs = [];
+                               if (result.status === 'success') {
+                                       //The offset does not mirror the amount of users available,
+                                       //because it is backend-dependent. For correct retrieval,
+                                       //always the limit(requested amount of users) needs to be added.
+                                       $.each(result.data, function (index, user) {
+                                               if($('tr:data(' + user.name + ')').length > 0) {
+                                                       return true;
+                                               }
+                                               var $tr = UserList.add(user.name, user.displayname, user.groups, user.subadmin, user.quota, user.storageLocation, user.lastLogin, false);
+                                               $tr.addClass('appear transparent');
+                                               trs.push($tr);
+                                               loadedUsers++;
+                                       });
+                                       if (result.data.length > 0) {
+                                               UserList.doSort();
+                                               $userList.siblings('.loading').css('visibility', 'hidden');
                                        }
-                                       var tr = UserList.add(user.name, user.displayname, user.groups, user.subadmin, user.quota, user.storageLocation, user.lastLogin, false);
-                                       tr.addClass('appear transparent');
-                                       trs.push(tr);
-                                       loadedUsers++;
-                               });
-                               if (result.data.length > 0) {
-                                       UserList.doSort();
-                                       $('table+.loading').css('visibility', 'hidden');
-                               }
-                               else {
-                                       UserList.noMoreEntries = true;
-                                       $('table+.loading').remove();
-                               }
-                               UserList.offset += loadedUsers;
-                               // animate
-                               setTimeout(function() {
-                                       for (var i = 0; i < trs.length; i++) {
-                                               trs[i].removeClass('transparent');
+                                       else {
+                                               UserList.noMoreEntries = true;
+                                               $userList.siblings('.loading').remove();
                                        }
-                               }, 0);
-                       }
-                       UserList.updating = false;
+                                       UserList.offset += loadedUsers;
+                                       // animate
+                                       setTimeout(function() {
+                                               for (var i = 0; i < trs.length; i++) {
+                                                       trs[i].removeClass('transparent');
+                                               }
+                                       }, 0);
+                               }
+                               UserList.updating = false;
                });
        },
 
-       applyMultiplySelect: function (element) {
+       applyGroupSelect: function (element) {
                var checked = [];
-               var user = element.attr('data-username');
-               if ($(element).hasClass('groupsselect')) {
-                       if (element.data('userGroups')) {
-                               checked = element.data('userGroups');
+               var $element = $(element);
+               var user = $element.data('username');
+
+               if ($element.data('user-groups')) {
+                       checked = $element.data('user-groups');
+               }
+               var checkHandler = function (group) {
+                       if (user === OC.currentUser && group === 'admin') {
+                               return false;
                        }
-                       if (user) {
-                               var checkHandeler = function (group) {
-                                       if (user === OC.currentUser && group === 'admin') {
-                                               return false;
-                                       }
-                                       if (!oc_isadmin && checked.length === 1 && checked[0] === group) {
-                                               return false;
-                                       }
-                                       $.post(
-                                               OC.filePath('settings', 'ajax', 'togglegroups.php'),
-                                               {
-                                                       username: user,
-                                                       group: group
-                                               },
-                                               function (response) {
-                                                       if(response.status === 'success') {
-                                                               GroupList.update();
-                                                               if(UserList.availableGroups.indexOf(response.data.groupname) === -1
-                                                                               && response.data.action === 'add') {
-                                                                       UserList.availableGroups.push(response.data.groupname);
-                                                               }
-                                                       }
-                                                       if(response.data.message) {
-                                                               OC.Notification.show(response.data.message);
-                                                       }
-                                               }
-                                       );
-                               };
-                       } else {
-                               checkHandeler = false;
+                       if (!oc_isadmin && checked.length === 1 && checked[0] === group) {
+                               return false;
                        }
-                       var addGroup = function (select, group) {
-                               $('select[multiple]').each(function (index, element) {
-                                       if ($(element).find('option[value="' + group + '"]').length === 0 && select.data('msid') !== $(element).data('msid')) {
-                                               $(element).append('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>');
+                       $.post(
+                               OC.filePath('settings', 'ajax', 'togglegroups.php'),
+                               {
+                                       username: user,
+                                       group: group
+                               },
+                               function (response) {
+                                       if (response.status === 'success') {
+                                               GroupList.update();
+                                               if (UserList.availableGroups.indexOf(response.data.groupname) === -1 &&
+                                                       response.data.action === 'add'
+                                               ) {
+                                                       UserList.availableGroups.push(response.data.groupname);
+                                               }
                                        }
-                               });
-                               GroupList.addGroup(escapeHTML(group));
-                       };
-                       var label;
-                       if (oc_isadmin) {
-                               label = t('settings', 'add group');
-                       } else {
-                               label = null;
-                       }
-                       element.multiSelect({
-                               createCallback: addGroup,
-                               createText: label,
-                               selectedFirst: true,
-                               checked: checked,
-                               oncheck: checkHandeler,
-                               onuncheck: checkHandeler,
-                               minWidth: 100
+                                       if (response.data.message) {
+                                               OC.Notification.show(response.data.message);
+                                       }
+                               }
+                       );
+               };
+               var addGroup = function (select, group) {
+                       $('select[multiple]').each(function (index, element) {
+                               $element = $(element);
+                               if ($element.find('option[value="' + group + '"]').length === 0 && select.data('msid') !== $element.data('msid')) {
+                                       $element.append('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>');
+                               }
                        });
+                       GroupList.addGroup(escapeHTML(group));
+               };
+               var label;
+               if (oc_isadmin) {
+                       label = t('settings', 'add group');
+               }
+               else {
+                       label = null;
+               }
+               $element.multiSelect({
+                       createCallback: addGroup,
+                       createText: label,
+                       selectedFirst: true,
+                       checked: checked,
+                       oncheck: checkHandler,
+                       onuncheck: checkHandler,
+                       minWidth: 100
+               });
+       },
+
+       applySubadminSelect: function (element) {
+               var checked = [];
+               var $element = $(element);
+               var user = $element.data('username');
+
+               if ($element.data('subadmin')) {
+                       checked = $element.data('subadmin');
                }
-               if ($(element).hasClass('subadminsselect')) {
-                       if (element.data('subadmin')) {
-                               checked = element.data('subadmin');
+               var checkHandler = function (group) {
+                       if (group === 'admin') {
+                               return false;
                        }
-                       var checkHandeler = function (group) {
-                               if (group === 'admin') {
-                                       return false;
+                       $.post(
+                               OC.filePath('settings', 'ajax', 'togglesubadmins.php'),
+                               {
+                                       username: user,
+                                       group: group
+                               },
+                               function () {
                                }
-                               $.post(
-                                       OC.filePath('settings', 'ajax', 'togglesubadmins.php'),
-                                       {
-                                               username: user,
-                                               group: group
-                                       },
-                                       function () {
-                                       }
-                               );
-                       };
+                       );
+               };
 
-                       var addSubAdmin = function (group) {
-                               $('select[multiple]').each(function (index, element) {
-                                       if ($(element).find('option[value="' + group + '"]').length === 0) {
-                                               $(element).append('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>');
-                                       }
-                               });
-                       };
-                       element.multiSelect({
-                               createCallback: addSubAdmin,
-                               createText: null,
-                               checked: checked,
-                               oncheck: checkHandeler,
-                               onuncheck: checkHandeler,
-                               minWidth: 100
+               var addSubAdmin = function (group) {
+                       $('select[multiple]').each(function (index, element) {
+                               if ($(element).find('option[value="' + group + '"]').length === 0) {
+                                       $(element).append('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>');
+                               }
                        });
-               }
+               };
+               $element.multiSelect({
+                       createCallback: addSubAdmin,
+                       createText: null,
+                       checked: checked,
+                       oncheck: checkHandler,
+                       onuncheck: checkHandler,
+                       minWidth: 100
+               });
        },
 
        _onScroll: function(e) {
@@ -420,112 +434,122 @@ function setQuota (uid, quota, ready) {
 }
 
 $(document).ready(function () {
+       $userList = $('#userlist');
+       $userListBody = $userList.find('tbody');
+
+       // This adds a custom :data(value) jQuery selector, to select elements having data-uid="value":
+       jQuery.expr[':'].uid = function(elem, index, match) {
+               // if the requested value's set, compare it, otherwise return whether the element has the uid data element
+               return match[3] ? jQuery(elem).data('uid') === match[3] : !!jQuery(elem).data('uid');
+       };
+
        UserList.initDeleteHandling();
 
        // Implements User Search
-       filter = new UserManagementFilter(
-               $('#usersearchform input'), UserList, GroupList);
+       filter = new UserManagementFilter($('#usersearchform input'), UserList, GroupList);
+       filter.addResetButton($('.userFilterReset').first());
 
        UserList.doSort();
-       UserList.availableGroups = $('#content table').data('groups');
+       UserList.availableGroups = $userList.data('groups');
 
 
        UserList.scrollArea = $('#app-content');
        UserList.scrollArea.scroll(function(e) {UserList._onScroll(e);});
 
 
-       $('table').after($('<div class="loading" style="height: 200px; visibility: hidden;"></div>'));
+       $userList.after($('<div class="loading" style="height: 200px; visibility: hidden;"></div>'));
 
-       $('select[multiple]').each(function (index, element) {
-               UserList.applyMultiplySelect($(element));
+       $('.groupsselect').each(function (index, element) {
+               UserList.applyGroupSelect(element);
+       });
+       $('.subadminsselect').each(function (index, element) {
+               UserList.applySubadminSelect(element);
        });
 
-       $('table').on('click', 'td.password>img', function (event) {
+       $userListBody.on('click', '.password', function (event) {
                event.stopPropagation();
-               var img = $(this);
-               var uid = img.parent().parent().attr('data-uid');
-               var input = $('<input type="password">');
-               img.css('display', 'none');
-               img.parent().children('span').replaceWith(input);
-               input.focus();
-               input.keypress(function (event) {
-                       if (event.keyCode === 13) {
-                               if ($(this).val().length > 0) {
-                                       var recoveryPasswordVal = $('input:password[id="recoveryPassword"]').val();
-                                       $.post(
-                                               OC.generateUrl('/settings/users/changepassword'),
-                                               {username: uid, password: $(this).val(), recoveryPassword: recoveryPasswordVal},
-                                               function (result) {
-                                                       if (result.status != 'success') {
-                                                               OC.Notification.show(t('admin', result.data.message));
+
+               var $td = $(this).closest('td');
+               var $tr = $td.closest('tr');
+               var uid = $tr.data('uid');
+               var $input = $('<input type="password">');
+               $td.find('img').hide();
+               $td.children('span').replaceWith($input);
+               $input
+                       .focus()
+                       .keypress(function (event) {
+                               if (event.keyCode === 13) {
+                                       if ($(this).val().length > 0) {
+                                               var recoveryPasswordVal = $('input:password[id="recoveryPassword"]').val();
+                                               $.post(
+                                                       OC.generateUrl('/settings/users/changepassword'),
+                                                       {username: uid, password: $(this).val(), recoveryPassword: recoveryPasswordVal},
+                                                       function (result) {
+                                                               if (result.status != 'success') {
+                                                                       OC.Notification.show(t('admin', result.data.message));
+                                                               }
                                                        }
-                                               }
-                                       );
-                                       input.blur();
-                               } else {
-                                       input.blur();
+                                               );
+                                               $input.blur();
+                                       } else {
+                                               $input.blur();
+                                       }
                                }
-                       }
-               });
-               input.blur(function () {
-                       $(this).replaceWith($('<span>●●●●●●●</span>'));
-                       img.css('display', '');
-               });
+                       })
+                       .blur(function () {
+                               $(this).replaceWith($('<span>●●●●●●●</span>'));
+                               $td.find('img').show();
+                       });
        });
-       $('input:password[id="recoveryPassword"]').keyup(function(event) {
+       $('input:password[id="recoveryPassword"]').keyup(function() {
                OC.Notification.hide();
        });
 
-       $('table').on('click', 'td.password', function (event) {
-               $(this).children('img').click();
-       });
-
-       $('table').on('click', 'td.displayName>img', function (event) {
+       $userListBody.on('click', '.displayName', function (event) {
                event.stopPropagation();
-               var img = $(this);
-               var uid = img.parent().parent().attr('data-uid');
-               var displayName = escapeHTML(img.parent().parent().attr('data-displayName'));
-               var input = $('<input type="text" value="' + displayName + '">');
-               img.css('display', 'none');
-               img.parent().children('span').replaceWith(input);
-               input.focus();
-               input.keypress(function (event) {
-                       if (event.keyCode === 13) {
-                               if ($(this).val().length > 0) {
-                                       $.post(
-                                               OC.filePath('settings', 'ajax', 'changedisplayname.php'),
-                                               {username: uid, displayName: $(this).val()},
-                                               function (result) {
-                                                       if (result && result.status==='success'){
-                                                               img.parent().parent().find('div.avatardiv').avatar(result.data.username, 32);
+               var $td = $(this).closest('td');
+               var $tr = $td.closest('tr');
+               var uid = $tr.data('uid');
+               var displayName = escapeHTML($tr.data('displayname'));
+               var $input = $('<input type="text" value="' + displayName + '">');
+               $td.find('img').hide();
+               $td.children('span').replaceWith($input);
+               $input
+                       .focus()
+                       .keypress(function (event) {
+                               if (event.keyCode === 13) {
+                                       if ($(this).val().length > 0) {
+                                               $tr.find('.avatardiv').imageplaceholder(uid, displayName);
+                                               $.post(
+                                                       OC.filePath('settings', 'ajax', 'changedisplayname.php'),
+                                                       {username: uid, displayName: $(this).val()},
+                                                       function (result) {
+                                                               if (result && result.status==='success'){
+                                                                       $tr.find('.avatardiv').avatar(result.data.username, 32);
+                                                               }
                                                        }
-                                               }
-                                       );
-                                       input.blur();
-                               } else {
-                                       input.blur();
+                                               );
+                                               $input.blur();
+                                       } else {
+                                               $input.blur();
+                                       }
                                }
-                       }
-               });
-               input.blur(function () {
-                       var input = $(this),
-                               displayName = input.val();
-                       input.closest('tr').attr('data-displayName', displayName);
-                       input.replaceWith('<span>' + escapeHTML(displayName) + '</span>');
-                       img.css('display', '');
-               });
-       });
-       $('table').on('click', 'td.displayName', function (event) {
-               $(this).children('img').click();
+                       })
+                       .blur(function () {
+                               var displayName = $input.val();
+                               $tr.data('displayname', displayName);
+                               $input.replaceWith('<span>' + escapeHTML(displayName) + '</span>');
+                               $td.find('img').show();
+                       });
        });
 
-       $('select.quota, select.quota-user').singleSelect().on('change', function () {
-               var select = $(this);
-               var uid = $(this).parent().parent().attr('data-uid');
+       $('#default_quota, .quota-user').singleSelect().on('change', function () {
+               var $select = $(this);
+               var uid = $select.closest('tr').data('uid');
                var quota = $(this).val();
                setQuota(uid, quota, function(returnedQuota){
                        if (quota !== returnedQuota) {
-                               select.find(':selected').text(returnedQuota);
+                               $select.find(':selected').text(returnedQuota);
                        }
                });
        });
@@ -546,7 +570,7 @@ $(document).ready(function () {
                                t('settings', 'Error creating user'));
                        return false;
                }
-               var groups = $('#newusergroups').prev().children('div').data('settings').checked;
+               var groups = $('#newusergroups').val();
                $('#newuser').get(0).reset();
                $.post(
                        OC.filePath('settings', 'ajax', 'createuser.php'),
@@ -576,7 +600,7 @@ $(document).ready(function () {
                                                                UserList.notificationTimeout = null;
                                                        }, 10000);
                                        }
-                                       if($('tr[data-uid="' + username + '"]').length === 0) {
+                                       if(!UserList.has(username)) {
                                                UserList.add(username, username, result.data.groups, null, 'default', result.data.storageLocation, 0, true);
                                        }
                                }
index e246a94ad29a159136368e50ce2a4996513764f1..fc5624d069aaee853d6b431c776e60f877200070 100644 (file)
@@ -6,7 +6,7 @@
                <!-- Default storage -->
                <span><?php p($l->t('Default Quota'));?></span>
                <?php if((bool) $_['isAdmin']): ?>
-                       <select class='quota' data-inputtitle="<?php p($l->t('Please enter storage quota (ex: "512 MB" or "12 GB")')) ?>">
+                       <select id='default_quota' data-inputtitle="<?php p($l->t('Please enter storage quota (ex: "512 MB" or "12 GB")')) ?>">
                                <option <?php if($_['default_quota'] === 'none') print_unescaped('selected="selected"');?> value='none'>
                                        <?php p($l->t('Unlimited'));?>
                                </option>
index 047ebb4667057f6ca549f9c3926fc2f99529b0fc..c74fdcc9efa4381177ea5c3dfd6afaebf856ff51 100644 (file)
@@ -1,4 +1,4 @@
-<table class="hascontrols grid" data-groups="<?php p($_['allGroups']);?>">
+<table id="userlist" class="hascontrols grid" data-groups="<?php p($_['allGroups']);?>">
        <thead>
                <tr>
                        <?php if ($_['enableAvatars']): ?>
@@ -20,7 +20,7 @@
        <tbody>
                <?php foreach($_["users"] as $user): ?>
                <tr data-uid="<?php p($user["name"]) ?>"
-                       data-displayName="<?php p($user["displayName"]) ?>">
+                       data-displayname="<?php p($user["displayName"]) ?>">
                        <?php if ($_['enableAvatars']): ?>
                        <td class="avatar"><div class="avatardiv"></div></td>
                        <?php endif; ?>