$classes Body classes. * @return array */ public static function body_class( $classes ) { if ( ! is_array( $classes ) ) { $classes = array(); } if ( Repository::get( 'a11y_defaults', 1 ) ) { $classes[] = 'rwa-a11y'; } $motion = (string) Repository::get( 'reduced_motion', 'respect' ); if ( 'force' === $motion ) { $classes[] = 'rwa-reduce-motion'; } elseif ( 'off' === $motion ) { $classes[] = 'rwa-motion-ok'; } return $classes; } /** * Print reduced-motion rules through the style queue. * * @return void */ public static function enqueue_motion_css() { $css = self::motion_css(); if ( '' === $css ) { return; } $handle = 'rwa-reduced-motion'; wp_register_style( $handle, false, array(), \ReactWoo\Atomic\Runtime\Env::version() ); wp_enqueue_style( $handle ); wp_add_inline_style( $handle, $css ); } /** * @return string CSS rules, or empty when motion is left alone. */ private static function motion_css() { $motion = (string) Repository::get( 'reduced_motion', 'respect' ); if ( 'force' === $motion ) { return '.rwa-reduce-motion *,.rwa-reduce-motion *::before,.rwa-reduce-motion *::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}'; } if ( 'respect' === $motion ) { return '@media (prefers-reduced-motion:reduce){html:not(.rwa-motion-ok) *,html:not(.rwa-motion-ok) *::before,html:not(.rwa-motion-ok) *::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}'; } return ''; } /** * Whether enabled element assets should be enqueued site-wide. * * @return bool */ public static function always_enqueue_assets() { return 'always' === (string) Repository::get( 'asset_loading', 'conditional' ); } }