Repository navigation
Conversation
…on and accessibility - Added Swiper library for improved slider functionality. - Created a new Slider class to manage Swiper instances with accessibility features. - Implemented custom controls for previous and next slide navigation. - Updated package dependencies to include Swiper and WordPress i18n for translations. - Added French translations for slider navigation messages. - Introduced SCSS styles for Swiper controls and integrated them into the main stylesheets.
- Replaced static French labels for previous and next slide buttons with translatable strings using WordPress i18n functions. - Updated language files to include the new translations for accessibility.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contexte et objectif
Cette évolution ajoute au thème Be API Frontend Framework une base réutilisable pour les carrousels basés sur Swiper (v14). L’objectif est de centraliser la configuration (modules, navigation, messages d’accessibilité), d’aligner le markup et les styles sur les conventions du thème, et de préparer l’internationalisation des chaînes exposées aux technologies d’assistance.
Il ne s’agit pas d’un bloc Gutenberg ni d’un composant visuel figé : c’est une brique technique (classe JS, partial PHP, feuille SCSS) que les projets enfants ou les futurs blocs/composants pourront brancher selon leurs besoins (
slidesPerView, pagination, autoplay, etc.).Dépendances
swiper(^14.3.0)@wordpress/i18nLes styles de base Swiper sont importés dans le SCSS du thème (
swiper/css,swiper/css/a11y).Fichiers livrés
src/js/classes/Slider.jsWrapper fin autour de
Swiper, héritant deAbstractDomElementcomme les autres classes DOM du thème.Comportement par défaut
options.modulessont ajoutés sans écraser les défauts (évite la perte d’A11y/Navigation quand l’utilisateur ne redéclare pas tout).__()et le text domainbeapi-frontend-framework(prevSlideMessage,nextSlideMessage, première/dernière diapositive, pagination, libellé de slide).onChange(option du wrapper) branché sur l’événementslideChangede Swiper.Options spécifiques au wrapper
hideNavigationFromA11yfalsetrue: boutons préc./suiv. retirés de l’arbre d’accessibilité (tabindex="-1",aria-hidden="true") et suppression de.swiper-notification, utile quand chaque slide est déjà navigable au clavier (cartes focusables). Réappliqué aprèstransitionEndcar Swiper réinitialise letabindex.fixLastSlideActiveOnEndfalse.swiper-slide-activeen fin de parcours pourslidesPerView: 'auto'ou des fractions « non demi » (ex. 2,75), où la dernière slide peut rester partiellement visible sans la classe active.optionsSlider.defaultsSwiperOptionsfusionné avec les défauts (donta11y).Accessibilité intégrée
<li>,slideRoleest vidé pour ne pas imposerrole="group"sur des éléments de liste (sémantique liste préservée pour les lecteurs d’écran). Surcharge possible viaoptions.a11y..swiper-notificationest conservée pour les annonces première / précédente / suivante / dernière diapositive au clavier.wrapperLiveRegion: laissé au comportement Swiper par défaut (politesans autoplay,offavec autoplay), surcharge possible viaoptions.a11y.Initialisation
Slider.init('.selector', { … })(patternAbstractDomElement) ounew Slider(element, { … }).getInstance()renvoie l’instance Swiper native pour les API avancées.components/parts/common/swiper-controls.phpPartial PHP pour les contrôles de navigation :
.swiper__controls>.swiper__buttons> boutons.swiper-button-prev/.swiper-button-nextavec classe thème.swiper__button.aria-labeltraduits viaesc_attr_e()(Previous slide/Next slide, même msgid que le JS) ; Swiper peut les ajuster au runtime selon sa config A11y.À inclure dans le conteneur
.swiper:Markup minimal attendu côté slide :
La navigation Swiper doit pointer vers les sélecteurs des boutons (ex.
navigation: { prevEl: '.swiper-button-prev', nextEl: '.swiper-button-next' }), en général dans le scope du carrousel concerné.src/scss/10-vendor/_swiper.scssCouche de style projet par-dessus Swiper :
--swiper-theme-color(variable SCSS primaire).:has(.swiper-button-lock)).cursor: not-allowed).scaleX(-1)..swiper-overflow-visiblepour déborder le viewport si besoin..swiper-wrapper(padding, margin,list-style) pour usage avec<ul>/<li>.Import ajouté dans
style.scsseteditor.scsspour cohérence front et éditeur.inc/Services/Assets.phpwp-i18najoutée au script principalscripts(en plus de jQuery).wp_set_script_translationssurscriptsavec le domainebeapi-frontend-frameworket le dossierlanguages/, pour que les chaînes__()du bundle JS soient servies en.json(format Jed) côté WordPress.Fichiers de traduction
beapi-frontend-framework.potetfr_FR.popour les six messages A11y du slider.beapi-frontend-framework-fr_FR-*.json(hash lié au fichierdist/app.jsaprès build).Workflow traduction : après modification des chaînes dans
Slider.js, rebuild du JS puis régénération / mise à jour des fichiers.pot,.poet JSON (WP-CLI ou outil du projet).Exemple d’utilisation côté JavaScript
Les modules optionnels (Pagination, Autoplay, etc.) s’importent depuis
swiper/moduleset se déclarent dansoptions.modules; A11y et Navigation restent présents sauf configuration Swiper explicite qui les désactiverait.Points d’attention pour les intégrateurs
npm run buildou équivalent) pour quedist/app.jset le hash du fichier JSON de traduction restent alignés.<ul class="swiper-wrapper">/<li class="swiper-slide">, le wrapper gère déjàslideRole; conserver une structure HTML valide.hideNavigationFromA11y: à activer lorsque la navigation prev/next est purement visuelle et que l’usage clavier se fait dans le contenu des slides ; à laisser àfalsesi les boutons doivent rester utilisables et annoncés par les AT.aria-labelpartagent les mêmes chaînes queSlider.defaults; recompiler le.moaprès mise à jour du.posi besoin.Synthèse
Cette PR pose les fondations Swiper + a11y + i18n + styles thème sans imposer un composant métier unique. Les prochaines étapes typiques sur un projet : brancher
Slider.initdepuis le point d’entrée JS du composant concerné, fournir le markup slide + partial contrôles, et étendre les options Swiper (pagination, breakpoints, loop, etc.) au cas par cas.Note
Low Risk
New optional UI building blocks and asset i18n wiring; no changes to auth, data, or existing carousel behavior until adopted by callers.
Overview
Adds a reusable Swiper-based carousel foundation for the theme:
Slider.jswraps Swiper 14 with default A11y and Navigation modules, translated screen-reader messages via@wordpress/i18n, and optional behaviors (hideNavigationFromA11y,fixLastSlideActiveOnEndforslidesPerView: 'auto').Also ships a
swiper-controlsPHP partial (prev/next with translatedaria-labels), theme SCSS over Swiper (front + editor), and wireswp-i18n+wp_set_script_translationson the main script so JS strings load fromlanguages/. French strings and POT entries cover the six slider A11y messages.Nothing in this PR auto-instantiates sliders; consumers import
Sliderand include the partial when they add markup.Reviewed by Cursor Bugbot for commit beedf40. Bugbot is set up for automated code reviews on this repo. Configure here.