PluginProbe
Elementor Website Builder – more than just a page builder / 4.3.2
Elementor Website Builder – more than just a page builder v4.3.2
4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 All 455 releases
elementor / modules / atomic-widgets / props-resolver / transformers / styles / font-family-transformer.php

font-family-transformer.php in Elementor Website Builder – more than just a page builder 4.3.2, at modules/atomic-widgets/props-resolver/transformers/styles/font-family-transformer.php

46 lines 1.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Elementor\Modules\AtomicWidgets\PropsResolver\Transformers\Styles;
4
5 use Elementor\Modules\AtomicWidgets\PropsResolver\Props_Resolver_Context;
6 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformer_Base;
7
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit; // Exit if accessed directly.
10 }
11
12 class Font_Family_Transformer extends Transformer_Base {
13 /**
14 * Per the CSS spec, font-family values only need to be quoted when they contain whitespace
15 * or special characters. Quoting is actively harmful for:
16 * - CSS variable references (`var(--x)` becomes a literal string, breaking resolution)
17 * - Generic families (`"sans-serif"` becomes a font named "sans-serif", not the generic)
18 * - CSS-wide keywords (`inherit`, `initial`, `unset`)
19 * - Any other CSS function like `local(...)`
20 *
21 * We only wrap values that actually need it (multi-word font names like "Open Sans").
22 */
23 public function transform( $value, Props_Resolver_Context $context ) {
24 if ( ! is_string( $value ) ) {
25 return null;
26 }
27
28 $trimmed = trim( $value );
29
30 if ( '' === $trimmed || $this->is_already_quoted( $trimmed ) ) {
31 return $trimmed;
32 }
33
34 // Only multi-word font names (e.g. `Open Sans`) need to be wrapped in quotes.
35 // Single-token values like `var(--x)`, `sans-serif` or `inherit` must stay unquoted to remain valid CSS.
36 return preg_match( '/\s/', $trimmed )
37 ? '"' . $trimmed . '"'
38 : $trimmed;
39 }
40
41 private function is_already_quoted( string $value ): bool {
42 return ( str_starts_with( $value, '"' ) && str_ends_with( $value, '"' ) )
43 || ( str_starts_with( $value, "'" ) && str_ends_with( $value, "'" ) );
44 }
45 }
46