Modifications pour le document AdminGroupsSheet
Modifié par Florent Charton le 2025/07/04 23:28
Depuis la version 3.1
modifié par Florent Charton
sur 2025/07/04 23:28
sur 2025/07/04 23:28
Commentaire de modification :
Install extension [org.xwiki.platform:xwiki-platform-administration-ui/16.10.9]
À la version 2.1
modifié par Florent Charton
sur 2024/08/08 18:43
sur 2024/08/08 18:43
Commentaire de modification :
Install extension [org.xwiki.platform:xwiki-platform-administration-ui/15.10.11]
Résumé
-
Propriétés de la Page (1 modifications, 0 ajouts, 0 suppressions)
-
Objets (2 modifications, 0 ajouts, 0 suppressions)
Détails
- Propriétés de la Page
-
- Contenu
-
... ... @@ -48,7 +48,7 @@ 48 48 49 49 #macro (editGroupModal) 50 50 <div class="modal" id="editGroupModal" tabindex="-1" role="dialog" aria-labelledby="editGroupModal-label" 51 - data-backdrop="static" data-keyboard="false" data-live -data="#groupstable" data-live-data-action="edit">51 + data-backdrop="static" data-keyboard="false" data-liveTable="#groupstable" data-liveTableAction="edit"> 52 52 <div class="modal-dialog" role="document"> 53 53 <div class="modal-content"> 54 54 <div class="modal-header"> ... ... @@ -67,7 +67,7 @@ 67 67 68 68 #macro (deleteGroupModal) 69 69 <div class="modal" id="deleteGroupModal" tabindex="-1" role="dialog" aria-labelledby="deleteGroupModal-label" 70 - data-live -data="#groupstable" data-live-data-action="delete">70 + data-liveTable="#groupstable" data-liveTableAction="delete"> 71 71 <div class="modal-dialog" role="document"> 72 72 <div class="modal-content"> 73 73 <div class="modal-header"> ... ... @@ -94,6 +94,20 @@ 94 94 </div> 95 95 </div> 96 96 #end 97 + 98 +#macro (groupScopeFilter) 99 + <select name="wiki"> 100 + <option selected="selected" value="local"> 101 + $escapetool.xml($services.localization.render('xe.admin.groups.local')) 102 + </option> 103 + <option value="global"> 104 + $escapetool.xml($services.localization.render('xe.admin.groups.global')) 105 + </option> 106 + <option value="both"> 107 + $escapetool.xml($services.localization.render('xe.admin.groups.both')) 108 + </option> 109 + </select> 110 +#end 97 97 {{/velocity}} 98 98 99 99 {{velocity}} ... ... @@ -100,79 +100,37 @@ 100 100 {{html clean="false"}} 101 101 #set ($discard = $xwiki.ssx.use('XWiki.AdminGroupsSheet')) 102 102 #set ($discard = $xwiki.jsx.use('XWiki.AdminGroupsSheet')) 103 -## The following are needed when editing a group (e.g. ,for adding new members).117 +## The following are needed when editing a group (e.g. for adding new members). 104 104 #userPicker_import() 105 105 #set ($discard = $xwiki.ssx.use('XWiki.XWikiGroupSheet')) 106 106 #set ($discard = $xwiki.jsx.use('XWiki.XWikiGroupSheet')) 107 -#set ($properties = ['name', 'members', '_actions']) 121 +#set ($columnOptions = { 122 + 'name': {'type': 'text', 'html': true, 'sortable': false}, 123 + 'members': {'filterable': false, 'sortable': false}, 124 + 'scope': {'type': 'list', 'sortable': false}, 125 + '_actions': { 126 + 'actions': ['edit', 'delete'], 127 + 'labels': { 128 + 'delete': $services.localization.render('platform.livetable._actions.delete') 129 + }, 130 + 'filterable': false 131 + } 132 +}) 133 +#set ($columns = ['name', 'members', '_actions']) 134 +#set ($liveTableOptions = { 135 + 'url': $doc.getURL('view', 'xpage=getgroups'), 136 + 'translationPrefix': 'xe.admin.groups.', 137 + 'outputOnlyHtml': true 138 +}) 108 108 #if (!$xcontext.isMainWiki()) 109 - #set ($discard = $properties.add(2, 'scope')) 140 + #set ($discard = $columns.add(2, 'scope')) 141 + ## We use the top filters option to show only the local groups by default because the JavaScript code from the sheet 142 + ## is executed after the livetable is loaded. The JavaScript code removes the top filters and updates the scope filter 143 + ## afterwards. 144 + #set ($liveTableOptions.topFilters = "#groupScopeFilter") 110 110 #end 111 111 <div class="medium-avatars"> 112 - #set ($sourceParameters = { 113 - 'template': 'getgroups.vm', 114 - 'translationPrefix': 'xe.admin.groups.' 115 - }) 116 - $services.liveData.render({ 117 - 'id': 'groupstable', 118 - 'source': 'liveTable', 119 - 'properties': $stringtool.join($properties, ','), 120 - 'sourceParameters': $escapetool.url($sourceParameters) 121 - }, { 122 - 'query': { 123 - 'filters': [ 124 - { 125 - 'property': 'scope', 126 - 'constraints': [{ 127 - 'operator': 'contains', 128 - 'value': 'local' 129 - }] 130 - } 131 - ] 132 - }, 133 - 'meta': { 134 - 'propertyDescriptors': [ 135 - { 136 - 'id': 'name', 137 - 'displayer': 'html', 138 - 'sortable': false, 139 - 'editable': false 140 - }, 141 - { 142 - 'id': 'members', 143 - 'sortable': false, 144 - 'filterable': false, 145 - 'editable': false 146 - }, 147 - { 148 - 'id': 'scope', 149 - 'sortable': false, 150 - 'editable': false, 151 - 'filter': { 152 - 'id': 'list', 153 - 'options': [ 154 - {'value': 'local', 'label': $services.localization.render('xe.admin.groups.local')}, 155 - {'value': 'global', 'label': $services.localization.render('xe.admin.groups.global')}, 156 - {'value': 'both', 'label': $services.localization.render('xe.admin.groups.both')} 157 - ] 158 - } 159 - }, 160 - { 161 - 'id': '_actions', 162 - 'displayer': { 163 - 'id': 'actions', 164 - 'actions': ['edit', 'delete'] 165 - } 166 - } 167 - ], 168 - 'actions': [ 169 - { 170 - 'id': 'delete', 171 - 'name': $services.localization.render('platform.livetable._actions.delete') 172 - } 173 - ] 174 - } 175 - }) 147 + #livetable('groupstable' $columns $columnOptions $liveTableOptions) 176 176 </div> 177 177 <p> 178 178 <button type="button" class="btn btn-primary" data-toggle="modal" data-target="${escapetool.h}createGroupModal"> ... ... @@ -179,8 +179,8 @@ 179 179 $escapetool.xml($services.localization.render('rightsmanager.creategroup')) 180 180 </button> 181 181 </p> 182 -#createGroupModal ()183 -#editGroupModal ()184 -#deleteGroupModal ()154 +#createGroupModal 155 +#editGroupModal 156 +#deleteGroupModal 185 185 {{/html}} 186 186 {{/velocity}}
- XWiki.JavaScriptExtension[0]
-
- Code
-
... ... @@ -87,7 +87,7 @@ 87 87 Promise.resolve($.post(createGroupURL, data)).then(function() { 88 88 // Close the modal and refresh the groups live table. 89 89 createGroupModal.modal('hide'); 90 - $('#groupstable').data('liveData').updateEntries();90 + window.livetable_groupstable.refresh(); 91 91 notification.replace(new XWiki.widgets.Notification( 92 92 $jsontool.serialize($services.localization.render('xe.admin.groups.create.done')), 93 93 'done' ... ... @@ -105,10 +105,19 @@ 105 105 }); 106 106 107 107 // 108 -// LiveData Modals108 +// Scope Filtering 109 109 // 110 +require(['jquery'], function($) { 111 + var options = $('#groupstable').prev('.tipfilters').remove().find('select[name="wiki"]').html(); 112 + var scopeFilter = $('#groupstable .xwiki-livetable-display-filters select[name="scope"]') 113 + scopeFilter.attr('name', 'wiki').html(options); 114 +}); 110 110 111 -define('xwiki-livedata-modal', ['jquery', 'bootstrap'], function($) { 116 +// 117 +// Live Table Modals 118 +// 119 + 120 +define('xwiki-livetable-modal', ['jquery', 'bootstrap'], function($) { 112 112 $.fn.bindActionToModal = function(action, modal) { 113 113 var actionToModal = action; 114 114 if (typeof action === 'string') { ... ... @@ -116,32 +116,32 @@ 116 116 actionToModal[action] = modal; 117 117 } 118 118 return this.each(function() { 119 - constliveDataElement = $(this);120 - constliveData= liveDataElement.attr('id')128 + var liveTableElement = $(this); 129 + var liveTable = window['livetable_' + liveTableElement.attr('id')]; 121 121 $.each(actionToModal, function(action, modal) { 122 - const clickFilter = '#' + liveData + ' a.action.action_' + action; 123 - $(document).on('click', clickFilter, function (event) { 131 + liveTableElement.on('click', 'a.action' + action, function(event) { 124 124 event.preventDefault(); 125 - constactionTrigger = $(this);126 - constrow = actionTrigger.closest('tr');127 - constrowIndex = parseInt(row.attr('data-livedata-entry-index'));133 + var actionTrigger = $(this); 134 + var row = actionTrigger.closest('tr'); 135 + var rowIndex = parseInt(row.attr('data-index')); 128 128 $(modal).data({ 129 - rowData: live DataElement.data('liveData').data.data.entries[rowIndex],137 + rowData: liveTable.fetchedRows[rowIndex], 130 130 rowIndex: rowIndex, 131 - live Data: liveData,132 - live DataElement: liveDataElement139 + liveTable: liveTable, 140 + liveTableElement: liveTableElement 133 133 }).modal('show'); 134 134 }); 135 135 }); 136 136 }); 137 137 }; 138 - $('.modal[data-live-data]').each(function () { 146 + 147 + $('.modal[data-liveTable]').each(function() { 139 139 var modal = $(this); 140 - $(modal.attr('data-live -data')).bindActionToModal(modal.attr('data-live-data-action'), modal);149 + $(modal.attr('data-liveTable')).bindActionToModal(modal.attr('data-liveTableAction'), modal); 141 141 }); 142 142 }); 143 143 144 -require(['jquery', 'xwiki-meta', 'xwiki-live data-modal'], function($, xm) {153 +require(['jquery', 'xwiki-meta', 'xwiki-livetable-modal'], function($, xm) { 145 145 // 146 146 // Group Editing 147 147 // ... ... @@ -148,15 +148,15 @@ 148 148 var editGroupModal = $('#editGroupModal'); 149 149 editGroupModal.on('show.bs.modal', function() { 150 150 var rowData = editGroupModal.data('rowData'); 151 - var groupReference = XWiki.Model.resolve(rowData ['doc.fullName'], XWiki.EntityType.DOCUMENT, [rowData['doc.wiki']]);160 + var groupReference = XWiki.Model.resolve(rowData.doc_fullName, XWiki.EntityType.DOCUMENT, [rowData.doc_wiki]); 152 152 var groupDocument = new XWiki.Document(groupReference); 153 153 var editGroupURL = groupDocument.getURL('edit', 'xpage=plain'); 154 - editGroupModal.find('.modal-body').empty().addClass('loading').load(editGroupURL, function () {163 + editGroupModal.find('.modal-body').empty().addClass('loading').load(editGroupURL, function() { 155 155 $(this).removeClass('loading'); 156 156 $(document).trigger('xwiki:dom:updated', {'elements': $(this).toArray()}); 157 157 }); 158 158 }).on('hide.bs.modal', function() { 159 - editGroupModal.data('live DataElement').data('liveData').updateEntries();168 + editGroupModal.data('liveTable').refresh(); 160 160 }); 161 161 162 162 // ... ... @@ -165,9 +165,9 @@ 165 165 var deleteGroupModal = $('#deleteGroupModal'); 166 166 deleteGroupModal.on('show.bs.modal', function() { 167 167 var rowData = deleteGroupModal.data('rowData'); 168 - var groupReference = rowData ['doc.fullName'];169 - if (XWiki.currentWiki !== rowData ['doc.wiki']) {170 - groupReference = XWiki.Model.resolve(groupReference, XWiki.EntityType.DOCUMENT, [rowData ['doc.wiki']]);177 + var groupReference = rowData.doc_fullName; 178 + if (XWiki.currentWiki !== rowData.doc_wiki) { 179 + groupReference = XWiki.Model.resolve(groupReference, XWiki.EntityType.DOCUMENT, [rowData.doc_wiki]); 171 171 groupReference = XWiki.Model.serialize(groupReference); 172 172 } 173 173 deleteGroupModal.find('.groupName').text(groupReference); ... ... @@ -181,7 +181,7 @@ 181 181 docname: deleteGroupModal.find('.groupName').text(), 182 182 form_token: xm.form_token 183 183 }).then(() => { 184 - deleteGroupModal.data('live DataElement').data('liveData').updateEntries();193 + deleteGroupModal.data('liveTable').deleteRow(deleteGroupModal.data('rowIndex')); 185 185 notification.replace(new XWiki.widgets.Notification( 186 186 $jsontool.serialize($services.localization.render('xe.admin.groups.delete.done')), 187 187 'done'
- XWiki.StyleSheetExtension[0]
-
- Code
-
... ... @@ -1,3 +1,9 @@ 1 +/** 2 + * Groups Live Table 3 + */ 4 +#groupstable td[data-title] { 5 + vertical-align: middle; 6 +} 1 1 2 2 /** 3 3 * Create Group Modal