diff --git a/css/fieldmanager.css b/css/fieldmanager.css index 936f66e5cb..0dd09d5d87 100644 --- a/css/fieldmanager.css +++ b/css/fieldmanager.css @@ -680,3 +680,10 @@ a.fm-delete:hover { margin-bottom: 0; } } + +.fm-bulk-actions { + border-bottom: 1px solid #dfdfdf; + margin-bottom: 10px; + max-width: 200px; + padding-bottom: 10px; +} diff --git a/js/fieldmanager.js b/js/fieldmanager.js index 23e2350de0..15504f6921 100644 --- a/js/fieldmanager.js +++ b/js/fieldmanager.js @@ -340,6 +340,26 @@ var fm_init = function () { init_sortable(); $document.on( 'fm_activate_tab', init_sortable ); + + fm.init_bulk_checkboxes_actions = function() { + var $this = $( this ); + var $bulk_toggle = $this.find( '.fm-bulk-action' ); + var $checkboxes = $this.siblings().find( 'input:checkbox' ); + var all_checked; + $bulk_toggle.change( function() { + var is_checked = $bulk_toggle.prop( 'checked' ); + $checkboxes.prop( 'checked', is_checked ); + all_checked = is_checked; + } ); + $checkboxes.change( function() { + var is_checked = $( this ).prop( 'checked' ); + if ( all_checked && !is_checked ) { + all_checked = false; + $bulk_toggle.prop( 'checked', false ); + } + } ); + }; + $( '.fm-bulk-actions' ).each( fm.init_bulk_checkboxes_actions ); }; fmLoadModule( fm_init ); diff --git a/php/class-fieldmanager-checkboxes.php b/php/class-fieldmanager-checkboxes.php index c87d4db94a..f738262e69 100644 --- a/php/class-fieldmanager-checkboxes.php +++ b/php/class-fieldmanager-checkboxes.php @@ -29,6 +29,13 @@ class Fieldmanager_Checkboxes extends Fieldmanager_Options { */ public $multiple = true; + /** + * Add a "select all" bulk action to the list of checkboxes. + * + * @var boolean + */ + public $bulk_actions = true; + /** * Render form element. * @@ -37,12 +44,31 @@ class Fieldmanager_Checkboxes extends Fieldmanager_Options { */ public function form_element( $value = array() ) { return sprintf( - '