はじまりの大地
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* SVG PHP Helper
|
||||
*
|
||||
* Based on https://github.com/chteuchteu/MaterialDesignIcons-PHP
|
||||
*
|
||||
* @author Giuseppe Di Terlizzi <giuseppe.diterlizzi@gmail.com>
|
||||
* @license MIT, GPLv2
|
||||
*/
|
||||
|
||||
namespace dokuwiki\template\bootstrap3;
|
||||
|
||||
class SVG
|
||||
{
|
||||
|
||||
public static $iconsPath;
|
||||
|
||||
public static $defaultAttributes = array();
|
||||
|
||||
/**
|
||||
* Add icon
|
||||
*
|
||||
* @param string $icon Icon name or full path
|
||||
* @param string $class Icon Class
|
||||
* @param int $size Icon size
|
||||
* @param array $attrs Icon attributes
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function icon($icon, $class = null, $size = 24, $attrs = array())
|
||||
{
|
||||
// Find the icon, ensure it exists
|
||||
if (file_exists($icon)) {
|
||||
$file_path = $icon;
|
||||
} else {
|
||||
$file_path = self::$iconsPath . $icon . '.svg';
|
||||
}
|
||||
|
||||
if (!is_file($file_path)) {
|
||||
msg(sprintf('Unrecognized icon "%s" (svg file "%s" does not exist).', $icon, $file_path), -1);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Read the file
|
||||
$svg = file_get_contents($file_path);
|
||||
|
||||
// Only keep the <path d="..." /> part
|
||||
// Old REGEX: (<path d=".+" \/>)
|
||||
if (preg_match('/((<path\b([\s\S]*?)\/>)|(<path\b([\s\S]*?)><\/path>))/', $svg, $matches) !== 1) {
|
||||
msg(sprintf('"%s" could not be recognized as an icon file', $file_path), -1);
|
||||
return false;
|
||||
}
|
||||
|
||||
$svg = $matches[1];
|
||||
|
||||
// Add some (clean) attributes
|
||||
$attributes = array_merge(
|
||||
array(
|
||||
'viewBox' => '0 0 24 24',
|
||||
'xmlns' => 'http://www.w3.org/2000/svg',
|
||||
'width' => $size,
|
||||
'height' => $size,
|
||||
'role' => 'presentation',
|
||||
),
|
||||
self::$defaultAttributes,
|
||||
$attrs
|
||||
);
|
||||
|
||||
if ($class !== null) {
|
||||
$attributes['class'] = $class;
|
||||
}
|
||||
|
||||
// Remove possibly empty-ish attributes (self::$defaultAttributes or $attrs may contain null values)
|
||||
$attributes = array_filter($attributes);
|
||||
|
||||
return sprintf(
|
||||
'<svg %s>%s</svg>',
|
||||
self::attributes($attributes),
|
||||
$svg
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns a 1-dimension array into an HTML-ready attributes set.
|
||||
*/
|
||||
private static function attributes($attrs = array())
|
||||
{
|
||||
return implode(' ', array_map(
|
||||
function ($val, $key) {
|
||||
return $key . '="' . htmlspecialchars($val) . '"';
|
||||
},
|
||||
$attrs,
|
||||
array_keys($attrs)
|
||||
));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user