1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
<?php
namespace Elementor\Modules\GlobalClasses\Usage;
use Elementor\Plugin; use Elementor\Core\Base\Document as ElementorDocument; use Elementor\Modules\GlobalClasses\Global_Classes_Repository;
/** * Tracks usage of global CSS classes within a specific Elementor document. */ class Document_Usage {
/** @var ElementorDocument */ private ElementorDocument $document;
/** @var array<string, Css_Class_Usage> */ private array $usages = [];
/** * Constructor. * * @param ElementorDocument $document The Elementor document object. */ public function __construct( ElementorDocument $document ) { $this->document = $document; }
/** * Analyze the document to find and record usage of global CSS classes. */ public function analyze(): void { $page_id = $this->document->get_main_id(); $page_title = $this->document->get_post()->post_title; $class_ids = $this->get_all_global_class_ids(); $elements_data = $this->document->get_elements_raw_data() ?? [];
$document_type = $this->document->get_type(); if ( empty( $document_type ) ) { $document_type = get_post_type( $page_id ) ?? 'unknown'; }
if ( empty( $elements_data ) ) { return; }
Plugin::$instance->db->iterate_data( $elements_data, function ( $element_data ) use ( $class_ids, $page_id, $page_title, $document_type ) { $class_values = $element_data['settings']['classes']['value'] ?? [];
if ( empty( $class_values ) || ! is_array( $class_values ) ) { return; }
foreach ( $class_values as $class_id ) { if ( ! in_array( $class_id, $class_ids, true ) ) { continue; }
if ( ! isset( $this->usages[ $class_id ] ) ) { $this->usages[ $class_id ] = new Css_Class_Usage( $class_id ); }
$this->usages[ $class_id ]->track_usage( $page_id, $page_title, $element_data['id'] ?? 'unknown', $document_type ); } } ); }
/** * Get all recorded usages of global CSS classes in this document. * * @return array<string, Css_Class_Usage> */ public function get_usages(): array { return $this->usages; }
/**֜ * Retrieve all registered global CSS class IDs. * * @return string[] */ protected function get_all_global_class_ids(): array { return Global_Classes_Repository::make() ->all() ->get_items() ->filter( fn( $item ) => ! empty( $item['id'] ?? null ) ) ->keys() ->all(); } }
|