backoffice: add button to check all permission columns (#66067) #757

Open
fpeters wants to merge 1 commits from wip/66067-admin-permissions-check-all into main
3 changed files with 41 additions and 6 deletions

View File

@ -2649,16 +2649,22 @@ class TableWidget(CompositeWidget):
r += htmltext('<th scope="col"><span>%s</span></th>') % column
r += htmltext('</tr></thead><tbody>')
for i, row in enumerate(self.rows):
r += htmltext('<tr><th scope="row">%s</th>') % row
for j, column in enumerate(self.columns):
widget = self.get_widget('c-%s-%s' % (i, j))
r += htmltext('<td>')
r += widget.render_content()
r += htmltext('</td>')
r += htmltext('<tr>')
r += self.render_row_content(i, row)
r += htmltext('</tr>')
r += htmltext('</tbody></table>')
return r.getvalue()
def render_row_content(self, i, row):
r = TemplateIO(html=True)
r += htmltext('<th scope="row">%s</th>') % row
for j in range(len(self.columns)):
widget = self.get_widget('c-%s-%s' % (i, j))
r += htmltext('<td>')
r += widget.render_content()
r += htmltext('</td>')
return r.getvalue()
def parse(self, request=None):
CompositeWidget.parse(self, request=request)
if request is None:
@ -2712,6 +2718,11 @@ class SingleSelectTableWidget(TableWidget):
class CheckboxesTableWidget(TableWidget):
def render_row_content(self, i, row):
t = super().render_row_content(i, row)
t += htmltext('<td><button>%s</button></td>') % _('check all')
return t
def add_widget(self, kwargs, i, j):
widget_kwargs = {'options': kwargs.get('options')}
if kwargs.get('readonly'):

View File

@ -3040,3 +3040,17 @@ fieldset.foldable {
}
}
}
.CheckboxesTableWidget {
button {
visibility: hidden;
}
tr:hover {
th, td {
background: #fff !important;
}
button {
visibility: visible;
}
}
}

View File

@ -366,6 +366,16 @@ $(function() {
});
$('[type=radio][name=display_mode]:checked').trigger('change');
$('.admin-permissions button').on('click', function() {
var new_value = false;
// check all checkboxes unless they're all checked already
for (const checkbox of $(this).parents('tr').find('input[type="checkbox"]')) {
new_value |= ! $(checkbox).prop('checked');
}
$(this).parents('tr').find('input[type="checkbox"]').prop('checked', new_value);
return false;
});
if (document.getElementById('validation-error-messages')) {
const error_messages = JSON.parse(document.getElementById('validation-error-messages').textContent);
const error_message_widget = document.getElementById('form_validation__error_message');