getAttribute( 'class' ) ); $classes = array_unique( $classes ); $styles = css_string_to_array( $first->getAttribute( 'style' ) ); unset( $styles['animation-play-state'] ); if ( $infinite ) { unset( $styles['--animation-event'] ); $styles['animation-iteration-count'] = 'infinite'; } else { unset( $styles['animation-name'] ); $styles['--animation-name'] = $animation['name'] ?? ''; } $event = $animation['event'] ?? ''; if ( $event === 'scroll' ) { $classes[] = 'has-scroll-animation'; unset( $classes[ array_search( 'has-animation', $classes, true ) ] ); $styles['animation-delay'] = 'calc(var(--scroll) * -1s)'; $styles['animation-play-state'] = 'paused'; $styles['animation-duration'] = '1s'; $styles['animation-fill-mode'] = 'both'; unset( $styles['--animation-event'] ); } $first->setAttribute( 'style', css_array_to_string( $styles ) ); $first->setAttribute( 'class', implode( ' ', $classes ) ); return $dom->saveHTML(); } add_filter( 'blockify_inline_js', NS . 'add_scroll_js', 10, 2 ); /** * Adds scroll JS to the inline JS. * * @since 0.0.14 * * @param string $js Inline JS. * @param string $content Page content. * * @return string */ function add_scroll_js( string $js, string $content ): string { if ( str_contains( $content, 'animation-event:scroll' ) ) { $js .= file_get_contents( DIR . 'assets/js/scroll.js' ); } return $js; }