mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-10-24 17:04:04 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			129 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /* Icinga Web 2 | (c) 2022 Icinga GmbH | GPLv2+ */
 | |
| 
 | |
| namespace Icinga\Less;
 | |
| 
 | |
| use ArrayIterator;
 | |
| use InvalidArgumentException;
 | |
| use IteratorAggregate;
 | |
| use Less_Environment;
 | |
| use Traversable;
 | |
| 
 | |
| /**
 | |
|  * Registry for light modes and the environments in which they are defined
 | |
|  */
 | |
| class LightMode implements IteratorAggregate
 | |
| {
 | |
|     /** @var array Mode environments as mode-environment pairs */
 | |
|     protected $envs = [];
 | |
| 
 | |
|     /** @var array Assoc list of modes */
 | |
|     protected $modes = [];
 | |
| 
 | |
|     /** @var array Mode selectors as mode-selector pairs */
 | |
|     protected $selectors = [];
 | |
| 
 | |
|     /**
 | |
|      * @param string $mode
 | |
|      *
 | |
|      * @return $this
 | |
|      *
 | |
|      * @throws InvalidArgumentException If the mode already exists
 | |
|      */
 | |
|     public function add($mode)
 | |
|     {
 | |
|         if (array_key_exists($mode, $this->modes)) {
 | |
|             throw new InvalidArgumentException("$mode already exists");
 | |
|         }
 | |
| 
 | |
|         $this->modes[$mode] = true;
 | |
| 
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $mode
 | |
|      *
 | |
|      * @return Less_Environment
 | |
|      *
 | |
|      * @throws InvalidArgumentException If there is no environment for the given mode
 | |
|      */
 | |
|     public function getEnv($mode)
 | |
|     {
 | |
|         if (! isset($this->envs[$mode])) {
 | |
|             throw new InvalidArgumentException("$mode does not exist");
 | |
|         }
 | |
| 
 | |
|         return $this->envs[$mode];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string           $mode
 | |
|      * @param Less_Environment $env
 | |
|      *
 | |
|      * @return $this
 | |
|      *
 | |
|      * @throws InvalidArgumentException If an environment for given the mode already exists
 | |
|      */
 | |
|     public function setEnv($mode, Less_Environment $env)
 | |
|     {
 | |
|         if (array_key_exists($mode, $this->envs)) {
 | |
|             throw new InvalidArgumentException("$mode already exists");
 | |
|         }
 | |
| 
 | |
|         $this->envs[$mode] = $env;
 | |
| 
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $mode
 | |
|      *
 | |
|      * @return bool
 | |
|      */
 | |
|     public function hasSelector($mode)
 | |
|     {
 | |
|         return isset($this->selectors[$mode]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $mode
 | |
|      *
 | |
|      * @return string
 | |
|      *
 | |
|      * @throws InvalidArgumentException If there is no selector for the given mode
 | |
|      */
 | |
|     public function getSelector($mode)
 | |
|     {
 | |
|         if (! isset($this->selectors[$mode])) {
 | |
|             throw new InvalidArgumentException("$mode does not exist");
 | |
|         }
 | |
| 
 | |
|         return $this->selectors[$mode];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param string $mode
 | |
|      * @param string $selector
 | |
|      *
 | |
|      * @return $this
 | |
|      *
 | |
|      * @throws InvalidArgumentException If a selector for given the mode already exists
 | |
|      */
 | |
|     public function setSelector($mode, $selector)
 | |
|     {
 | |
|         if (array_key_exists($mode, $this->selectors)) {
 | |
|             throw new InvalidArgumentException("$mode already exists");
 | |
|         }
 | |
| 
 | |
|         $this->selectors[$mode] = $selector;
 | |
| 
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     public function getIterator(): Traversable
 | |
|     {
 | |
|         return new ArrayIterator(array_keys($this->modes));
 | |
|     }
 | |
| }
 |