From f55c15e9541c287238bca3e89478be736d1a03ac Mon Sep 17 00:00:00 2001 From: Matthew Boynes Date: Mon, 4 Apr 2022 15:50:22 -0400 Subject: [PATCH 1/5] =?UTF-8?q?Add=20=E2=80=9Cselect=20all=E2=80=9D=20&=20?= =?UTF-8?q?=E2=80=9Cselect=20none=E2=80=9D=20to=20checkboxes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves #834 --- css/fieldmanager.css | 23 +++++++++++++++++++++++ js/fieldmanager.js | 12 ++++++++++++ php/class-fieldmanager-checkboxes.php | 23 ++++++++++++++++++++++- 3 files changed, 57 insertions(+), 1 deletion(-) diff --git a/css/fieldmanager.css b/css/fieldmanager.css index 936f66e5cb..8935be05c2 100644 --- a/css/fieldmanager.css +++ b/css/fieldmanager.css @@ -680,3 +680,26 @@ a.fm-delete:hover { margin-bottom: 0; } } + +.fm-bulk-selectors { + margin-bottom: 10px; +} + +.fm-bulk-selectors button { + background: none; + border: none; + color: #0073aa; + cursor: pointer; + font-size: 80%; + margin: 0; + padding: 0; +} + +.fm-bulk-selectors button:hover { + text-decoration: underline; +} + +.fm-actions-separator:before { + color: #555; + content: " | "; +} diff --git a/js/fieldmanager.js b/js/fieldmanager.js index 23e2350de0..21496584d5 100644 --- a/js/fieldmanager.js +++ b/js/fieldmanager.js @@ -340,6 +340,18 @@ var fm_init = function () { init_sortable(); $document.on( 'fm_activate_tab', init_sortable ); + + fm.init_bulk_selectables = function() { + var $this = $( this ); + var $checkboxes = $this.parent().find( 'input:checkbox' ); + $this.find( '.fm-select-all' ).click( function() { + $checkboxes.prop( 'checked', true ); + } ); + $this.find( '.fm-select-none' ).click( function() { + $checkboxes.prop( 'checked', false ); + } ); + }; + $( '.fm-bulk-selectors' ).each( fm.init_bulk_selectables ); }; fmLoadModule( fm_init ); diff --git a/php/class-fieldmanager-checkboxes.php b/php/class-fieldmanager-checkboxes.php index c87d4db94a..0d1d1a9068 100644 --- a/php/class-fieldmanager-checkboxes.php +++ b/php/class-fieldmanager-checkboxes.php @@ -29,6 +29,8 @@ class Fieldmanager_Checkboxes extends Fieldmanager_Options { */ public $multiple = true; + public $bulk_selectable = false; + /** * Render form element. * @@ -37,12 +39,31 @@ class Fieldmanager_Checkboxes extends Fieldmanager_Options { */ public function form_element( $value = array() ) { return sprintf( - '
%s
', + '
%s%s
', esc_attr( $this->get_element_id() ), + $this->bulk_selectable ? $this->add_bulk_select_options() : '', $this->form_data_elements( $value ) ); } + /** + * Get the HTML for "select all" and "select none" buttons. + * + * @return string + */ + public function add_bulk_select_options() + { + return sprintf( + '
+ + + +
' . "\n", + esc_html__( 'Select all', 'fieldmanager' ), + esc_html__( 'Select none', 'fieldmanager' ) + ); + } + /** * Override function to allow all boxes to be checked by default. * From 05694682ad229a1a22427fae7750c351ef061630 Mon Sep 17 00:00:00 2001 From: Matthew Boynes Date: Mon, 4 Apr 2022 15:52:18 -0400 Subject: [PATCH 2/5] Fill in missing phpdoc --- php/class-fieldmanager-checkboxes.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/php/class-fieldmanager-checkboxes.php b/php/class-fieldmanager-checkboxes.php index 0d1d1a9068..ecc72f58cf 100644 --- a/php/class-fieldmanager-checkboxes.php +++ b/php/class-fieldmanager-checkboxes.php @@ -29,6 +29,11 @@ class Fieldmanager_Checkboxes extends Fieldmanager_Options { */ public $multiple = true; + /** + * Add "select all" and "select none" buttons to the list of checkboxes. + * + * @var boolean + */ public $bulk_selectable = false; /** From 424b22f19f1ee4293cf886b38272efc5337696b2 Mon Sep 17 00:00:00 2001 From: Matthew Boynes Date: Mon, 4 Apr 2022 15:54:32 -0400 Subject: [PATCH 3/5] phpcs fix --- php/class-fieldmanager-checkboxes.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/php/class-fieldmanager-checkboxes.php b/php/class-fieldmanager-checkboxes.php index ecc72f58cf..51b76e49ee 100644 --- a/php/class-fieldmanager-checkboxes.php +++ b/php/class-fieldmanager-checkboxes.php @@ -56,8 +56,7 @@ public function form_element( $value = array() ) { * * @return string */ - public function add_bulk_select_options() - { + public function add_bulk_select_options() { return sprintf( '
From 3785d87016603eee25d52c928698e240ce73c0f9 Mon Sep 17 00:00:00 2001 From: Matthew Boynes Date: Tue, 5 Apr 2022 12:07:27 -0400 Subject: [PATCH 4/5] Change select all/none buttons to a checkbox --- css/fieldmanager.css | 24 ++++-------------------- js/fieldmanager.js | 22 +++++++++++++++------- php/class-fieldmanager-checkboxes.php | 23 ++++++++++++----------- 3 files changed, 31 insertions(+), 38 deletions(-) diff --git a/css/fieldmanager.css b/css/fieldmanager.css index 8935be05c2..0dd09d5d87 100644 --- a/css/fieldmanager.css +++ b/css/fieldmanager.css @@ -681,25 +681,9 @@ a.fm-delete:hover { } } -.fm-bulk-selectors { +.fm-bulk-actions { + border-bottom: 1px solid #dfdfdf; margin-bottom: 10px; -} - -.fm-bulk-selectors button { - background: none; - border: none; - color: #0073aa; - cursor: pointer; - font-size: 80%; - margin: 0; - padding: 0; -} - -.fm-bulk-selectors button:hover { - text-decoration: underline; -} - -.fm-actions-separator:before { - color: #555; - content: " | "; + max-width: 200px; + padding-bottom: 10px; } diff --git a/js/fieldmanager.js b/js/fieldmanager.js index 21496584d5..15504f6921 100644 --- a/js/fieldmanager.js +++ b/js/fieldmanager.js @@ -341,17 +341,25 @@ var fm_init = function () { $document.on( 'fm_activate_tab', init_sortable ); - fm.init_bulk_selectables = function() { + fm.init_bulk_checkboxes_actions = function() { var $this = $( this ); - var $checkboxes = $this.parent().find( 'input:checkbox' ); - $this.find( '.fm-select-all' ).click( function() { - $checkboxes.prop( 'checked', true ); + 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; } ); - $this.find( '.fm-select-none' ).click( function() { - $checkboxes.prop( 'checked', false ); + $checkboxes.change( function() { + var is_checked = $( this ).prop( 'checked' ); + if ( all_checked && !is_checked ) { + all_checked = false; + $bulk_toggle.prop( 'checked', false ); + } } ); }; - $( '.fm-bulk-selectors' ).each( fm.init_bulk_selectables ); + $( '.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 51b76e49ee..854f4a946f 100644 --- a/php/class-fieldmanager-checkboxes.php +++ b/php/class-fieldmanager-checkboxes.php @@ -30,11 +30,11 @@ class Fieldmanager_Checkboxes extends Fieldmanager_Options { public $multiple = true; /** - * Add "select all" and "select none" buttons to the list of checkboxes. + * Add a "select all" bulk action to the list of checkboxes. * * @var boolean */ - public $bulk_selectable = false; + public $bulk_actions = true; /** * Render form element. @@ -46,25 +46,26 @@ public function form_element( $value = array() ) { return sprintf( '
%s%s
', esc_attr( $this->get_element_id() ), - $this->bulk_selectable ? $this->add_bulk_select_options() : '', + $this->bulk_selectable ? $this->add_bulk_actions() : '', $this->form_data_elements( $value ) ); } /** - * Get the HTML for "select all" and "select none" buttons. + * Get the HTML for the bulk actions. * * @return string */ - public function add_bulk_select_options() { + public function add_bulk_actions() { return sprintf( - '
- - - + '
+
' . "\n", - esc_html__( 'Select all', 'fieldmanager' ), - esc_html__( 'Select none', 'fieldmanager' ) + esc_attr( $this->get_element_id() . '-bulk-action' ), + esc_html__( 'Select all', 'fieldmanager' ) ); } From 43ae9112e86c4cb0b081dcb69265bc25fb65e446 Mon Sep 17 00:00:00 2001 From: Matthew Boynes Date: Tue, 5 Apr 2022 12:14:30 -0400 Subject: [PATCH 5/5] Update property name --- php/class-fieldmanager-checkboxes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/class-fieldmanager-checkboxes.php b/php/class-fieldmanager-checkboxes.php index 854f4a946f..f738262e69 100644 --- a/php/class-fieldmanager-checkboxes.php +++ b/php/class-fieldmanager-checkboxes.php @@ -46,7 +46,7 @@ public function form_element( $value = array() ) { return sprintf( '
%s%s
', esc_attr( $this->get_element_id() ), - $this->bulk_selectable ? $this->add_bulk_actions() : '', + $this->bulk_actions ? $this->add_bulk_actions() : '', $this->form_data_elements( $value ) ); }