From e2f68d039d35d44f88b719ec63cd096462358235 Mon Sep 17 00:00:00 2001 From: Laurel Fulford Date: Fri, 24 Nov 2023 12:35:15 -0800 Subject: [PATCH 1/9] feat: accessibility improvements to the donate tabs --- src/blocks/donate/frequency-based/index.ts | 12 +++++++++ src/blocks/donate/frequency-based/style.scss | 13 ++++++++++ ...blocks-donate-renderer-frequency-based.php | 26 +++++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/src/blocks/donate/frequency-based/index.ts b/src/blocks/donate/frequency-based/index.ts index dbed4edd7..08c9ee133 100644 --- a/src/blocks/donate/frequency-based/index.ts +++ b/src/blocks/donate/frequency-based/index.ts @@ -57,6 +57,18 @@ export const processFrequencyBasedElements = ( parentEl = document ) => { elements.forEach( container => { resetOtherValue( container ); } ); + + + // Change selected elements based on "tab" + const tierButtonsEls = parentEl.querySelectorAll( '.tab-container a[role="tab"' ); + // Frequency choosing interaction. + tierButtonsEls.forEach( buttonEl => { + const tiers = frequency.querySelectorAll( 'input[type="radio"]' ); + + buttonEl.addEventListener( 'click', () => { + document.getElementById( 'newspack-donate-' + buttonEl.getAttribute( 'data-tab-id' ) ).checked = true; + } ); + } ); }; if ( typeof window !== 'undefined' ) { diff --git a/src/blocks/donate/frequency-based/style.scss b/src/blocks/donate/frequency-based/style.scss index 1133dc638..cab5b30e3 100644 --- a/src/blocks/donate/frequency-based/style.scss +++ b/src/blocks/donate/frequency-based/style.scss @@ -9,6 +9,7 @@ position: relative; width: 100%; + /* Hide all absolutely */ input[type='radio'] { left: -99999em; position: absolute; @@ -49,6 +50,12 @@ } } + // Added: + [role='tabset'] .freq-label { + text-decoration: none; + text-transform: uppercase; + } + .thanks { color: colors.$color__text-light; font-size: variables.$font__size-sm; @@ -198,7 +205,9 @@ padding-top: 2.65em; } +// Doesn't need any of this: .wpbnbd .frequency { + .freq-label { position: absolute; top: 0; @@ -261,3 +270,7 @@ } } } + +.tab-container { + display: flex; +} diff --git a/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer-frequency-based.php b/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer-frequency-based.php index eaeba4d7d..cdc98866e 100644 --- a/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer-frequency-based.php +++ b/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer-frequency-based.php @@ -48,6 +48,26 @@ class='wpbnbd__button freq-label' return ob_get_clean(); } + /** + * Renders the frequency selection of the donation form in accessible tabs. + * TODO: add $configuration for selected state. + * + * @param string $frequency_slug Frequency slug. + * @param string $frequency_name Frequency name. + * @param number $uid Unique ID. + * + * @return string + */ + private static function render_frequency_tab( $frequency_slug, $frequency_name, $uid ) { + ob_start(); + ?> + + + +
+
+ $frequency_name ) : ?> + + +
+ $frequency_name ) : ?> Date: Sat, 2 Dec 2023 13:20:28 -0800 Subject: [PATCH 2/9] feat: add accessible tabs to the donate block --- .../donate/edit/FrequencyBasedLayout.tsx | 37 ++++- src/blocks/donate/frequency-based/index.ts | 62 +++++++-- src/blocks/donate/frequency-based/style.scss | 112 +++++---------- ...blocks-donate-renderer-frequency-based.php | 41 +++++- .../donate/styles/style-variations.scss | 130 +++++++++++------- src/blocks/donate/styles/view.scss | 3 +- 6 files changed, 228 insertions(+), 157 deletions(-) diff --git a/src/blocks/donate/edit/FrequencyBasedLayout.tsx b/src/blocks/donate/edit/FrequencyBasedLayout.tsx index 8d8d857d4..3a1e38143 100644 --- a/src/blocks/donate/edit/FrequencyBasedLayout.tsx +++ b/src/blocks/donate/edit/FrequencyBasedLayout.tsx @@ -7,7 +7,7 @@ import classNames from 'classnames'; * WordPress dependencies */ import { __ } from '@wordpress/i18n'; -import { useMemo, useEffect, useRef } from '@wordpress/element'; +import { useMemo, useEffect, useRef, useState } from '@wordpress/element'; import { SelectControl } from '@wordpress/components'; import { RichText } from '@wordpress/block-editor'; @@ -68,6 +68,8 @@ const FrequencyBasedLayout = ( props: { isTiered: boolean } & ComponentProps ) = const isRenderingStripePaymentForm = window.newspack_blocks_data?.is_rendering_stripe_payment_form; + const [ selectedFrequency, setSelectedFrequency ] = useState( attributes.defaultFrequency ); + const renderFrequencySelect = ( frequencySlug: DonationFrequencySlug ) => ( <> setSelectedFrequency( e.target.value ) } /> -