Skip to content

Commit

Permalink
Helper for CheckboxSelectMultiple widget which allows user to select/…
Browse files Browse the repository at this point in the history
…unselect all available options.
  • Loading branch information
dzejkob committed Oct 30, 2020
1 parent 58b04c0 commit 329f07c
Show file tree
Hide file tree
Showing 9 changed files with 120 additions and 12 deletions.
7 changes: 4 additions & 3 deletions docker-compose.yml
Expand Up @@ -39,9 +39,10 @@ services:
METADEFENDER_API_KEY:
ports:
- "8000:8000"
# Uncomment following to enable debug in development:
# stdin_open: true
# tty: true
# Following allows to execute `docker attach feder_web_1`
# necessary when using ipdb in development:
stdin_open: true
tty: true

worker:
command: python manage.py process_tasks
Expand Down
28 changes: 28 additions & 0 deletions feder/assets/js/widget.js
@@ -0,0 +1,28 @@
/**
* Adds additional utility buttons to form groups having "checkbox-utils" class
* which allows user to select unselect all options in CheckboxSelectMultiple widgets.
*/
$(function () {
var $inputs = $('.checkbox-utils');

$inputs.each(function (index) {
var $elem = $(this),
$label = $elem.find('label.control-label:first-child');

$label.after(
'<button class="btn btn-primary unselect-all-btn" type="button">' +
'Odznacz wszystkie' +
'</button>' +
'<button class="btn btn-primary select-all-btn" type="button">' +
'Zaznacz wszystkie' +
'</button>'
);

$('.checkbox-utils .select-all-btn').click(function (event) {
$elem.find('input[type="checkbox"]').prop("checked", true);
});
$('.checkbox-utils .unselect-all-btn').click(function (event) {
$elem.find('input[type="checkbox"]').prop("checked", false);
});
});
});
8 changes: 8 additions & 0 deletions feder/assets/scss/style.scss
Expand Up @@ -155,3 +155,11 @@ $gray: #F0F0F0;
max-height: 400px;
overflow-y: scroll;
}

.checkbox-utils {
button.btn {
display: block;
float: right;
margin-left: 10px;
}
}
12 changes: 10 additions & 2 deletions feder/monitorings/forms.py
@@ -1,4 +1,4 @@
from atom.ext.crispy_forms.forms import SingleButtonMixin
from atom.ext.crispy_forms.forms import SingleButtonMixin, HelperMixin
from atom.ext.guardian.forms import TranslatedUserObjectPermissionsForm
from braces.forms import UserKwargModelFormMixin
from crispy_forms.layout import Layout, Fieldset
Expand Down Expand Up @@ -42,10 +42,18 @@ class SelectUserForm(forms.Form):
)


class CheckboxTranslatedUserObjectPermissionsForm(TranslatedUserObjectPermissionsForm):
class CheckboxTranslatedUserObjectPermissionsForm(
HelperMixin, TranslatedUserObjectPermissionsForm
):
def get_obj_perms_field_widget(self):
return forms.CheckboxSelectMultiple

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper.layout = Layout(
Fieldset("", "permissions", css_class="form-group checkbox-utils"),
)


class SaveTranslatedUserObjectPermissionsForm(
SingleButtonMixin, CheckboxTranslatedUserObjectPermissionsForm
Expand Down
5 changes: 5 additions & 0 deletions feder/static/css/style.css
Expand Up @@ -7477,3 +7477,8 @@ button.close {
.scrollable-widget {
max-height: 400px;
overflow-y: scroll; }

.checkbox-utils button.btn {
display: block;
float: right;
margin-left: 10px; }
2 changes: 1 addition & 1 deletion feder/static/css/style.min.css

Large diffs are not rendered by default.

29 changes: 29 additions & 0 deletions feder/static/js/script.js
Expand Up @@ -12143,3 +12143,32 @@ return jQuery;
})

}(jQuery);

/**
* Adds additional utility buttons to form groups having "checkbox-utils" class
* which allows to select unselect all choices in CheckboxSelectMultiple widgets.
*/
$(function () {
var $inputs = $('.checkbox-utils');

$inputs.each(function (index) {
var $elem = $(this),
$label = $elem.find('label.control-label:first-child');

$label.after(
'<button class="btn btn-primary unselect-all-btn" type="button">' +
'Odznacz wszystkie' +
'</button>' +
'<button class="btn btn-primary select-all-btn" type="button">' +
'Zaznacz wszystkie' +
'</button>'
);

$('.checkbox-utils .select-all-btn').click(function (event) {
$elem.find('input[type="checkbox"]').prop("checked", true);
});
$('.checkbox-utils .unselect-all-btn').click(function (event) {
$elem.find('input[type="checkbox"]').prop("checked", false);
});
});
});
2 changes: 1 addition & 1 deletion feder/static/js/script.min.js

Large diffs are not rendered by default.

39 changes: 34 additions & 5 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 329f07c

Please sign in to comment.