40 lines
		
	
	
		
			991 B
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			991 B
		
	
	
	
		
			PHP
		
	
	
	
|  | <?php | ||
|  | 
 | ||
|  | namespace BookStack\Util; | ||
|  | 
 | ||
|  | class SvgIcon | ||
|  | { | ||
|  |     public function __construct( | ||
|  |         protected string $name, | ||
|  |         protected array $attrs = [] | ||
|  |     ) { | ||
|  |     } | ||
|  | 
 | ||
|  |     public function toHtml(): string | ||
|  |     { | ||
|  |         $attrs = array_merge([ | ||
|  |             'class'     => 'svg-icon', | ||
|  |             'data-icon' => $this->name, | ||
|  |             'role'      => 'presentation', | ||
|  |         ], $this->attrs); | ||
|  | 
 | ||
|  |         $attrString = ' '; | ||
|  |         foreach ($attrs as $attrName => $attr) { | ||
|  |             $attrString .= $attrName . '="' . $attr . '" '; | ||
|  |         } | ||
|  | 
 | ||
|  |         $iconPath = resource_path('icons/' . $this->name . '.svg'); | ||
|  |         $themeIconPath = theme_path('icons/' . $this->name . '.svg'); | ||
|  | 
 | ||
|  |         if ($themeIconPath && file_exists($themeIconPath)) { | ||
|  |             $iconPath = $themeIconPath; | ||
|  |         } elseif (!file_exists($iconPath)) { | ||
|  |             return ''; | ||
|  |         } | ||
|  | 
 | ||
|  |         $fileContents = file_get_contents($iconPath); | ||
|  | 
 | ||
|  |         return str_replace('<svg', '<svg' . $attrString, $fileContents); | ||
|  |     } | ||
|  | } |