Изменения документа AdminUsersSheet

Редактировал(а) Alexey Semenihin 23.10.2026, 15:12

От версии 1.1
отредактировано Admin xWiKi
на 15.10.2019, 13:19
Изменить комментарий: Install extension [org.xwiki.platform:xwiki-platform-administration-ui/11.8.1]
К версии 2.1
отредактировано Dmitriy Rybakov
на 04.10.2024, 00:09
Изменить комментарий: Install extension [org.xwiki.platform:xwiki-platform-administration-ui/15.10.12]

Сводка

Подробности

Свойства страницы
Автор документа
... ... @@ -1,1 +1,1 @@
1 -XWiki.admin
1 +XWiki.rybakovds
Содержимое
... ... @@ -46,7 +46,9 @@
46 46   #livetable('userstable' $columns $columnOptions $liveTableOptions)
47 47   </div>
48 48   <p>
49 - <button type="button" class="btn btn-primary" data-toggle="modal" data-target="${escapetool.h}createUserModal">
49 + <button type="button" class="btn btn-primary" data-toggle="modal" data-target="${escapetool.h}createUserModal"
50 + ## Disable the button until the JavaScript code that handles the user creation is ready.
51 + disabled="disabled">
50 50   $escapetool.xml($services.localization.render('rightsmanager.addnewuser'))
51 51   </button>
52 52   </p>
XWiki.JavaScriptExtension[0]
Код
... ... @@ -20,7 +20,7 @@
20 20   var createUserModal = $('#createUserModal');
21 21  
22 22   var validateCreateUserForm = function(form) {
23 - return form.size() > 0 && (!window.LiveValidation ||
23 + return form.length && (!window.LiveValidation ||
24 24   LiveValidation.massValidate(LiveValidationForm.getInstance(form[0]).fields));
25 25   };
26 26  
... ... @@ -35,7 +35,7 @@
35 35   createUserModalBody.removeClass('loading').append(createUserForm);
36 36   $(document).trigger('xwiki:dom:updated', {'elements': createUserModalBody.toArray()});
37 37   createUserForm.find(':input').filter(':visible').first().focus();
38 - createUserButton.prop('disabled', createUserForm.size() === 0);
38 + createUserButton.prop('disabled', !createUserForm.length);
39 39   });
40 40   }).on('click', '.btn-primary', function(event) {
41 41   var createUserForm = createUserModal.find('form#register');
... ... @@ -47,9 +47,9 @@
47 47   $jsontool.serialize($services.localization.render('xe.admin.users.create.inProgress')),
48 48   'inprogress'
49 49   );
50 - $.post(createUserForm.attr('action'), createUserForm.serialize()).done(function(html) {
50 + $.post(createUserForm.attr('action'), createUserForm.serialize()).then(html => {
51 51   var errorMessage = $('<div/>').html(html).find('.errormessage, .LV_validation_message.LV_invalid');
52 - if (errorMessage.size() > 0) {
52 + if (errorMessage.length) {
53 53   createUserButton.prop('disabled', false);
54 54   notification.replace(new XWiki.widgets.Notification(errorMessage.text(), 'error'));
55 55   } else {
... ... @@ -61,7 +61,7 @@
61 61   'done'
62 62   ));
63 63   }
64 - }).fail(function (response) {
64 + }).catch(() => {
65 65   createUserButton.prop('disabled', false);
66 66   notification.replace(new XWiki.widgets.Notification(
67 67   $jsontool.serialize($services.localization.render('xe.admin.users.create.failed')),
... ... @@ -86,12 +86,13 @@
86 86   parameters.force = 1;
87 87   }
88 88   editUserModal.find('.modal-body').first().empty().addClass('loading').load(editUserURL, parameters, function() {
89 - this.removeClass('loading');
90 - this.find('.column.half').removeClass('half').addClass('full');
91 - $(document).trigger('xwiki:dom:updated', {'elements': this.toArray()});
89 + var self = $(this);
90 + self.removeClass('loading');
91 + self.find('.column.half').removeClass('half').addClass('full');
92 + $(document).trigger('xwiki:dom:updated', {'elements': self.toArray()});
92 92   var editUserForm = editUserModal.find('form#edituser');
93 93   editUserForm.find(':input').filter(':visible').first().focus();
94 - saveButton.prop('disabled', editUserForm.size() === 0);
95 + saveButton.prop('disabled', !editUserForm.length);
95 95   });
96 96   };
97 97  
... ... @@ -109,7 +109,7 @@
109 109   'inprogress'
110 110   );
111 111   $(document).trigger('xwiki:actions:beforeSave');
112 - $.post(editForm.attr('action'), editForm.serialize()).done(function() {
113 + $.post(editForm.attr('action'), editForm.serialize()).then(() => {
113 113   $(document).trigger('xwiki:document:saved');
114 114   editUserModal.modal('hide').data('liveTable').refresh();
115 115   notification.replace(new XWiki.widgets.Notification(
... ... @@ -116,7 +116,7 @@
116 116   $jsontool.serialize($services.localization.render('core.editors.saveandcontinue.notification.done')),
117 117   'done'
118 118   ));
119 - }).fail(function (response) {
120 + }).catch(response => {
120 120   saveButton.prop('disabled', false);
121 121   var message = $jsontool.serialize($services.localization.render('core.editors.saveandcontinue.notification.error',
122 122   ['__reason__']));
... ... @@ -145,7 +145,7 @@
145 145   failed: $jsontool.serialize($services.localization.render('administration.section.users.disableUser.failed'))
146 146   }
147 147   }
148 - var onToggleUser = function(action, event) {
149 + var onToggleUser = function(event) {
149 149   event.preventDefault();
150 150   var actionTrigger = $(this);
151 151   if (actionTrigger.hasClass('pending')) {
... ... @@ -153,21 +153,22 @@
153 153   return;
154 154   }
155 155   actionTrigger.addClass('pending');
157 + var action = event.data.action;
156 156   var notification = new XWiki.widgets.Notification(notificationMessage[action].inProgress, 'inprogress');
157 157   // The enable and disable actions redirect to the user profile by default which may take a lot of time to render so
158 158   // we redirect to a URL that doesn't render anything.
159 159   var emptyResponseURL = new XWiki.Document('AdminUsersSheet', 'XWiki').getURL('get', 'outputSyntax=plain');
160 - $.post(actionTrigger.attr('href'), {'xredirect': emptyResponseURL}).done(function() {
162 + Promise.resolve($.post(actionTrigger.attr('href'), {'xredirect': emptyResponseURL})).then(function() {
161 161   window['livetable_userstable'].refresh();
162 162   notification.replace(new XWiki.widgets.Notification(notificationMessage[action].done, 'done'));
163 - }).fail(function() {
165 + }).catch(function() {
164 164   notification.replace(new XWiki.widgets.Notification(notificationMessage[action].failed, 'error'));
165 - }).always(function() {
167 + }).finally(function() {
166 166   actionTrigger.removeClass('pending');
167 167   });
168 168   };
169 - $('#userstable').on('click', 'a.actionenable', $.proxy(onToggleUser, null, 'enable'));
170 - $('#userstable').on('click', 'a.actiondisable', $.proxy(onToggleUser, null, 'disable'));
171 + $('#userstable').on('click', 'a.actionenable', {action: 'enable'}, onToggleUser);
172 + $('#userstable').on('click', 'a.actiondisable', {action: 'disable'}, onToggleUser);
171 171   })();
172 172  
173 173   //
... ... @@ -224,9 +224,9 @@
224 224   newAuthor: newAuthor,
225 225   requiredRight: requiredRight
226 226   });
227 - return newAuthorValidationRequest;
229 + return Promise.resolve(newAuthorValidationRequest);
228 228   } else {
229 - return $.Deferred().resolve({valid: true}).promise();
231 + return Promise.resolve({valid: true});
230 230   }
231 231   };
232 232   deleteUserModal.on('change', '#newAuthor', function(event) {
... ... @@ -235,17 +235,17 @@
235 235   var newAuthorField = $(event.target);
236 236   // Hide the previous error message.
237 237   newAuthorField.nextAll('.xErrorMsg').addClass('hidden');
238 - validateNewAuthor(newAuthorField.val(), newAuthorField.data('requiredRight')).done(function(result) {
240 + validateNewAuthor(newAuthorField.val(), newAuthorField.data('requiredRight')).then(function(result) {
239 239   if (result.valid === false) {
240 240   newAuthorField.nextAll('.xErrorMsg').removeClass('hidden');
241 241   }
242 - }).always(function() {
244 + }).finally(function() {
243 243   // Re-enable the modal submit button.
244 244   deleteUserButton.prop('disabled', false);
245 245   });
246 246   });
247 247  
248 - deleteUserButton.click(function() {
250 + deleteUserButton.on('click', function() {
249 249   var notification = new XWiki.widgets.Notification(
250 250   $jsontool.serialize($services.localization.render('xe.admin.users.delete.inProgress')),
251 251   'inprogress'
... ... @@ -256,7 +256,7 @@
256 256   docname: userReference,
257 257   newAuthor: deleteUserModal.find('#newAuthor').val(),
258 258   form_token: xm.form_token
259 - }).done(function() {
261 + }).then(() => {
260 260   deleteUserModal.data('liveTable').deleteRow(deleteUserModal.data('rowIndex'));
261 261   deleteUserModal.data('liveTableElement').trigger('xwiki:user:deleted', {reference: userReference});
262 262   notification.replace(new XWiki.widgets.Notification(
... ... @@ -263,7 +263,7 @@
263 263   $jsontool.serialize($services.localization.render('xe.admin.users.delete.done')),
264 264   'done'
265 265   ));
266 - }).fail(function() {
268 + }).catch(() => {
267 267   notification.replace(new XWiki.widgets.Notification(
268 268   $jsontool.serialize($services.localization.render('xe.admin.users.delete.failed')),
269 269   'error'
... ... @@ -270,4 +270,7 @@
270 270   ));
271 271   });
272 272   });
275 +
276 + // Finally, enable the user creation.
277 + $('button[data-target="#createUserModal"]').prop('disabled', false);
273 273  });