39 lines
884 B
PHP
39 lines
884 B
PHP
<?php
|
|
|
|
namespace Elementor\Modules\Usage;
|
|
|
|
use Elementor\Modules\Usage\Contracts\Element_Usage_Calculator;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
class Element_Usage_Calculator_Registry {
|
|
|
|
/** @var Element_Usage_Calculator[] */
|
|
private array $calculators = [];
|
|
|
|
private ?Element_Usage_Calculator $fallback = null;
|
|
|
|
/**
|
|
* @param Element_Usage_Calculator[] $calculators
|
|
*/
|
|
public function __construct( array $calculators = [] ) {
|
|
$this->calculators = $calculators;
|
|
}
|
|
|
|
public function set_fallback( Element_Usage_Calculator $calculator ): void {
|
|
$this->fallback = $calculator;
|
|
}
|
|
|
|
public function get_calculator_for( array $element, $element_instance ): ?Element_Usage_Calculator {
|
|
foreach ( $this->calculators as $calculator ) {
|
|
if ( $calculator->can_calculate( $element, $element_instance ) ) {
|
|
return $calculator;
|
|
}
|
|
}
|
|
|
|
return $this->fallback;
|
|
}
|
|
}
|