PluginProbe
Elementor Website Builder – more than just a page builder / 3.10.0-dev1
Elementor Website Builder – more than just a page builder v3.10.0-dev1
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 4.0.8 4.1.0-beta1 4.1.0-dev1 All 452 releases
← All changes | core/files/css/base.php +13 -92 4.3.0-beta33.10.0-dev1 View file →
@@ -8,10 +8,8 @@
8 8 use Elementor\Core\Breakpoints\Manager as Breakpoints_Manager;
9 9 use Elementor\Core\Files\Base as Base_File;
10 10 use Elementor\Core\DynamicTags\Manager;
11 11 use Elementor\Core\DynamicTags\Tag;
12 -use Elementor\Core\Frontend\Performance;
13 -use Elementor\Core\Frontend\Widget_Content_Render_Mode;
14 12 use Elementor\Core\Kits\Documents\Tabs\Global_Typography;
15 13 use Elementor\Plugin;
16 14 use Elementor\Stylesheet;
17 15 use Elementor\Icons_Manager;
@@ -65,10 +63,8 @@
65 63 private $icons_fonts = [];
66 64
67 65 private $dynamic_elements_ids = [];
68 66
69 - private $preserved_dynamic_style_values = [];
70 -
71 67 /**
72 68 * Stylesheet object.
73 69 *
74 70 * Holds the CSS file stylesheet instance.
@@ -201,12 +197,8 @@
201 197 * @since 1.2.0
202 198 * @access public
203 199 */
204 200 public function enqueue() {
205 - if ( $this->should_skip_enqueue() ) {
206 - return;
207 - }
208 -
209 201 $handle_id = $this->get_file_handle_id();
210 202
211 203 if ( isset( self::$printed[ $handle_id ] ) ) {
212 204 return;
@@ -219,17 +211,8 @@
219 211 if ( self::CSS_STATUS_EMPTY === $meta['status'] ) {
220 212 return;
221 213 }
222 214
223 - /**
224 - * Enqueue CSS file.
225 - *
226 - * Fires before enqueuing a CSS file.
227 - *
228 - * @param Base $this The current CSS file.
229 - */
230 - do_action( 'elementor/css-file/before_enqueue', $this );
231 -
232 215 // First time after clear cache and etc.
233 216 if ( '' === $meta['status'] || $this->is_update_required() ) {
234 217 $this->update();
235 218
@@ -237,17 +220,16 @@
237 220 }
238 221
239 222 if ( self::CSS_STATUS_INLINE === $meta['status'] ) {
240 223 $dep = $this->get_inline_dependency();
241 - $is_dependency_registered = (bool) wp_styles()->query( $dep, 'registered' );
242 -
243 - if ( ! $is_dependency_registered || wp_styles()->query( $dep, 'done' ) ) {
244 - printf( '<style id="%1$s">%2$s</style>', $this->get_file_handle_id(), $meta['css'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
224 + // If the dependency has already been printed ( like a template in footer )
225 + if ( wp_styles()->query( $dep, 'done' ) ) {
226 + printf( '<style id="%1$s">%2$s</style>', $this->get_file_handle_id(), $meta['css'] ); // XSS ok.
245 227 } else {
246 228 wp_add_inline_style( $dep, $meta['css'] );
247 229 }
248 230 } elseif ( self::CSS_STATUS_FILE === $meta['status'] ) { // Re-check if it's not empty after CSS update.
249 - wp_enqueue_style( $this->get_file_handle_id(), $this->get_url(), $this->get_registered_enqueue_dependencies(), null );
231 + wp_enqueue_style( $this->get_file_handle_id(), $this->get_url(), $this->get_enqueue_dependencies(), null ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
250 232 }
251 233
252 234 // Handle fonts.
253 235 if ( ! empty( $meta['fonts'] ) ) {
@@ -279,17 +261,8 @@
279 261 *
280 262 * @param Base $this The current CSS file.
281 263 */
282 264 do_action( "elementor/css-file/{$name}/enqueue", $this );
283 -
284 - /**
285 - * Enqueue CSS file.
286 - *
287 - * Fires after enqueuing a CSS file.
288 - *
289 - * @param Base $this The current CSS file.
290 - */
291 - do_action( 'elementor/css-file/after_enqueue', $this );
292 265 }
293 266
294 267 /**
295 268 * Print CSS.
@@ -300,9 +273,9 @@
300 273 * @since 1.9.4
301 274 * @access public
302 275 */
303 276 public function print_css() {
304 - echo '<style>' . $this->get_content() . '</style>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
277 + echo '<style>' . $this->get_content() . '</style>'; // XSS ok.
305 278 Plugin::$instance->frontend->print_fonts_links();
306 279 }
307 280
308 281 /**
@@ -353,9 +326,9 @@
353 326 }
354 327
355 328 $stylesheet = $this->get_stylesheet();
356 329
357 - $control = apply_filters( 'elementor/files/css/selectors', $control, $value ?? [], $this );
330 + $control = apply_filters( 'elementor/files/css/selectors', $control, $value ?? [] );
358 331
359 332 foreach ( $control['selectors'] as $selector => $css_property ) {
360 333 $output_css_property = '';
361 334
@@ -366,12 +339,8 @@
366 339 $output_css_property = preg_replace( '/(:)[^;]+(;?)/', '$1' . $selector_global_value . '$2', $css_property );
367 340 }
368 341 } else {
369 342 try {
370 - if ( $this->unit_has_custom_selector( $control, $value ) ) {
371 - $css_property = $control['unit_selectors_dictionary'][ $value['unit'] ];
372 - }
373 -
374 343 $output_css_property = preg_replace_callback( '/{{(?:([^.}]+)\.)?([^}| ]*)(?: *\|\| *(?:([^.}]+)\.)?([^}| ]*) *)*}}/', function( $matches ) use ( $control, $value_callback, $controls_stack, $value, $css_property ) {
375 344 $external_control_missing = $matches[1] && ! isset( $controls_stack[ $matches[1] ] );
376 345
377 346 $parsed_value = '';
@@ -407,12 +376,8 @@
407 376 throw new \Exception();
408 377 }
409 378 }
410 379
411 - if ( '__EMPTY__' === $parsed_value ) {
412 - $parsed_value = '';
413 - }
414 -
415 380 return $parsed_value;
416 381 }, $css_property );
417 382 } catch ( \Exception $e ) {
418 383 return;
@@ -462,12 +427,8 @@
462 427 $stylesheet->add_rules( $parsed_selector, $output_css_property, $query );
463 428 }
464 429 }
465 430
466 - protected function unit_has_custom_selector( $control, $value ) {
467 - return isset( $control['unit_selectors_dictionary'] ) && isset( $control['unit_selectors_dictionary'][ $value['unit'] ] );
468 - }
469 -
470 431 /**
471 432 * @param array $control
472 433 * @param mixed $value
473 434 * @param array $controls_stack
@@ -496,9 +457,9 @@
496 457 $value = $this->get_control_global_default_value( $control );
497 458 }
498 459
499 460 if ( Controls_Manager::FONT === $control['type'] ) {
500 - $this->add_font( $value );
461 + $this->fonts[] = $value;
501 462 }
502 463
503 464 /** @var Base_Data_Control $control_obj */
504 465 $control_obj = Plugin::$instance->controls_manager->get_control( $control['type'] );
@@ -554,9 +515,9 @@
554 515 * @param array $placeholders Placeholders.
555 516 * @param array $replacements Replacements.
556 517 * @param array $all_controls All controls.
557 518 */
558 - public function add_controls_stack_style_rules( Controls_Stack $controls_stack, array $controls, array $values, array $placeholders, array $replacements, ?array $all_controls = null ) {
519 + public function add_controls_stack_style_rules( Controls_Stack $controls_stack, array $controls, array $values, array $placeholders, array $replacements, array $all_controls = null ) {
559 520 if ( ! $all_controls ) {
560 521 $all_controls = $controls_stack->get_controls();
561 522 }
562 523
@@ -578,13 +539,8 @@
578 539 if ( ! empty( $parsed_dynamic_settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] ) ) {
579 540 // Dynamic CSS should not be added to the CSS files.
580 541 // Instead it's handled by \Elementor\Core\DynamicTags\Dynamic_CSS
581 542 // and printed in a style tag.
582 - $should_preserve_value = isset( $control['control_type'] ) && 'content' === $control['control_type'];
583 - if ( $should_preserve_value ) {
584 - $this->preserved_dynamic_style_values[ $control['name'] ] = $parsed_dynamic_settings[ $control['name'] ];
585 - }
586 -
587 543 unset( $parsed_dynamic_settings[ $control['name'] ] );
588 544
589 545 $this->dynamic_elements_ids[] = $controls_stack->get_id();
590 546
@@ -611,31 +567,8 @@
611 567 * @return string CSS file handle ID.
612 568 */
613 569 abstract protected function get_file_handle_id();
614 570
615 - protected function should_skip_enqueue(): bool {
616 - if ( Widget_Content_Render_Mode::is( Widget_Content_Render_Mode::MARKDOWN ) ) {
617 - return true;
618 - }
619 -
620 - if ( ! is_admin() ) {
621 - return false;
622 - }
623 -
624 - $editor = Plugin::$instance->editor;
625 -
626 - return $editor && $editor->is_editor_request();
627 - }
628 -
629 - protected function get_registered_enqueue_dependencies(): array {
630 - return array_values( array_filter(
631 - $this->get_enqueue_dependencies(),
632 - static function ( $handle ) {
633 - return (bool) wp_styles()->query( $handle, 'registered' );
634 - }
635 - ) );
636 - }
637 -
638 571 /**
639 572 * Render CSS.
640 573 *
641 574 * Parse the CSS.
@@ -706,10 +639,8 @@
706 639 * @since 1.2.0
707 640 * @access protected
708 641 */
709 642 protected function parse_content() {
710 - Performance::set_use_style_controls( true );
711 -
712 643 $initial_responsive_controls_duplication_mode = Plugin::$instance->breakpoints->get_responsive_control_duplication_mode();
713 644
714 645 Plugin::$instance->breakpoints->set_responsive_control_duplication_mode( $this->get_responsive_control_duplication_mode() );
715 646
@@ -731,10 +662,8 @@
731 662 do_action( "elementor/css-file/{$name}/parse", $this );
732 663
733 664 Plugin::$instance->breakpoints->set_responsive_control_duplication_mode( $initial_responsive_controls_duplication_mode );
734 665
735 - Performance::set_use_style_controls( false );
736 -
737 666 return $this->get_stylesheet()->__toString();
738 667 }
739 668
740 669 /**
@@ -815,11 +744,9 @@
815 744 // When the control itself has no global value, but it refers to another control global value
816 745 return $this->get_selector_global_value( $control, $values['__globals__'][ $control['name'] ] );
817 746 }
818 747
819 - $value = isset( $values[ $control['name'] ] )
820 - ? $values[ $control['name'] ]
821 - : $this->preserved_dynamic_style_values[ $control['name'] ] ?? null;
748 + $value = $values[ $control['name'] ];
822 749
823 750 if ( isset( $control['selectors_dictionary'][ $value ] ) ) {
824 751 $value = $control['selectors_dictionary'][ $value ];
825 752 }
@@ -936,9 +863,9 @@
936 863 if ( $control['groupPrefix'] . 'font_family' === $control['name'] ) {
937 864 $default_generic_fonts = Plugin::$instance->kits_manager->get_current_settings( 'default_generic_fonts' );
938 865
939 866 if ( $default_generic_fonts ) {
940 - $value .= ", $default_generic_fonts";
867 + $value .= ", $default_generic_fonts";
941 868 }
942 869 }
943 870 } else {
944 871 $value = "var( --e-global-$control[type]-$id )";
@@ -946,9 +873,9 @@
946 873
947 874 return $value;
948 875 }
949 876
950 - final protected function get_active_controls( Controls_Stack $controls_stack, ?array $controls = null, ?array $settings = null ) {
877 + final protected function get_active_controls( Controls_Stack $controls_stack, array $controls = null, array $settings = null ) {
951 878 if ( ! $controls ) {
952 879 $controls = $controls_stack->get_controls();
953 880 }
954 881
@@ -963,9 +890,9 @@
963 890 $active_controls = array_reduce(
964 891 array_keys( $controls ), function( $active_controls, $control_key ) use ( $controls_stack, $controls, $settings ) {
965 892 $control = $controls[ $control_key ];
966 893
967 - if ( $controls_stack->is_control_visible( $control, $settings, $controls ) ) {
894 + if ( $controls_stack->is_control_visible( $control, $settings ) ) {
968 895 $active_controls[ $control_key ] = $control;
969 896 }
970 897
971 898 return $active_controls;
@@ -974,9 +901,9 @@
974 901
975 902 return $active_controls;
976 903 }
977 904
978 - final public function get_style_controls( Controls_Stack $controls_stack, ?array $controls = null, ?array $settings = null ) {
905 + final public function get_style_controls( Controls_Stack $controls_stack, array $controls = null, array $settings = null ) {
979 906 $controls = $this->get_active_controls( $controls_stack, $controls, $settings );
980 907
981 908 $style_controls = [];
982 909
@@ -1053,12 +980,6 @@
1053 980
1054 981 $globals = $controls_stack->get_settings( '__globals__' );
1055 982
1056 983 return ! empty( $globals[ $control_global_key ] );
1057 - }
1058 -
1059 - public function add_font( $font ) {
1060 - if ( ! in_array( $font, $this->fonts, true ) ) {
1061 - $this->fonts[] = $font;
1062 - }
1063 984 }
1064 985 }