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);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |