206 lines
5.7 KiB
PHP
206 lines
5.7 KiB
PHP
|
<?php
|
||
|
|
||
|
if (!function_exists('get_svg_icon')) {
|
||
|
function get_svg_icon($path, $class = null, $svgClass = null)
|
||
|
{
|
||
|
if (strpos($path, 'media') === false) {
|
||
|
$path = theme()->getMediaUrlPath() . $path;
|
||
|
}
|
||
|
|
||
|
$file_path = public_path($path);
|
||
|
|
||
|
if (!file_exists($file_path)) {
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
$svg_content = file_get_contents($file_path);
|
||
|
|
||
|
if (empty($svg_content)) {
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
$dom = new DOMDocument();
|
||
|
$dom->loadXML($svg_content);
|
||
|
|
||
|
// remove unwanted comments
|
||
|
$xpath = new DOMXPath($dom);
|
||
|
foreach ($xpath->query('//comment()') as $comment) {
|
||
|
$comment->parentNode->removeChild($comment);
|
||
|
}
|
||
|
|
||
|
// add class to svg
|
||
|
if (!empty($svgClass)) {
|
||
|
foreach ($dom->getElementsByTagName('svg') as $element) {
|
||
|
$element->setAttribute('class', $svgClass);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// remove unwanted tags
|
||
|
$title = $dom->getElementsByTagName('title');
|
||
|
if ($title['length']) {
|
||
|
$dom->documentElement->removeChild($title[0]);
|
||
|
}
|
||
|
$desc = $dom->getElementsByTagName('desc');
|
||
|
if ($desc['length']) {
|
||
|
$dom->documentElement->removeChild($desc[0]);
|
||
|
}
|
||
|
$defs = $dom->getElementsByTagName('defs');
|
||
|
if ($defs['length']) {
|
||
|
$dom->documentElement->removeChild($defs[0]);
|
||
|
}
|
||
|
|
||
|
// remove unwanted id attribute in g tag
|
||
|
$g = $dom->getElementsByTagName('g');
|
||
|
foreach ($g as $el) {
|
||
|
$el->removeAttribute('id');
|
||
|
}
|
||
|
$mask = $dom->getElementsByTagName('mask');
|
||
|
foreach ($mask as $el) {
|
||
|
$el->removeAttribute('id');
|
||
|
}
|
||
|
$rect = $dom->getElementsByTagName('rect');
|
||
|
foreach ($rect as $el) {
|
||
|
$el->removeAttribute('id');
|
||
|
}
|
||
|
$xpath = $dom->getElementsByTagName('path');
|
||
|
foreach ($xpath as $el) {
|
||
|
$el->removeAttribute('id');
|
||
|
}
|
||
|
$circle = $dom->getElementsByTagName('circle');
|
||
|
foreach ($circle as $el) {
|
||
|
$el->removeAttribute('id');
|
||
|
}
|
||
|
$use = $dom->getElementsByTagName('use');
|
||
|
foreach ($use as $el) {
|
||
|
$el->removeAttribute('id');
|
||
|
}
|
||
|
$polygon = $dom->getElementsByTagName('polygon');
|
||
|
foreach ($polygon as $el) {
|
||
|
$el->removeAttribute('id');
|
||
|
}
|
||
|
$ellipse = $dom->getElementsByTagName('ellipse');
|
||
|
foreach ($ellipse as $el) {
|
||
|
$el->removeAttribute('id');
|
||
|
}
|
||
|
|
||
|
$string = $dom->saveXML($dom->documentElement);
|
||
|
|
||
|
// remove empty lines
|
||
|
$string = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $string);
|
||
|
|
||
|
$cls = array('svg-icon');
|
||
|
|
||
|
if (!empty($class)) {
|
||
|
$cls = array_merge($cls, explode(' ', $class));
|
||
|
}
|
||
|
|
||
|
$asd = explode('/media/', $path);
|
||
|
if (isset($asd[1])) {
|
||
|
$path = 'assets/media/' . $asd[1];
|
||
|
}
|
||
|
|
||
|
$output = "<!--begin::Svg Icon | path: $path-->\n";
|
||
|
$output .= '<span class="' . implode(' ', $cls) . '">' . $string . '</span>';
|
||
|
$output .= "\n<!--end::Svg Icon-->";
|
||
|
|
||
|
return $output;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!function_exists('theme')) {
|
||
|
/**
|
||
|
* Get the instance of Theme class core
|
||
|
*
|
||
|
* @return \App\Core\Adapters\Theme|\Illuminate\Contracts\Foundation\Application|mixed
|
||
|
*/
|
||
|
function theme()
|
||
|
{
|
||
|
return app(\App\Core\Adapters\Theme::class);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!function_exists('util')) {
|
||
|
/**
|
||
|
* Get the instance of Util class core
|
||
|
*
|
||
|
* @return \App\Core\Adapters\Util|\Illuminate\Contracts\Foundation\Application|mixed
|
||
|
*/
|
||
|
function util()
|
||
|
{
|
||
|
return app(\App\Core\Adapters\Util::class);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!function_exists('bootstrap')) {
|
||
|
/**
|
||
|
* Get the instance of Util class core
|
||
|
*
|
||
|
* @return \App\Core\Adapters\Util|\Illuminate\Contracts\Foundation\Application|mixed
|
||
|
* @throws Throwable
|
||
|
*/
|
||
|
function bootstrap()
|
||
|
{
|
||
|
$demo = ucwords(theme()->getDemo());
|
||
|
$bootstrap = "\App\Core\Bootstraps\Bootstrap$demo";
|
||
|
|
||
|
if (!class_exists($bootstrap)) {
|
||
|
abort(404, 'Demo has not been set or ' . $bootstrap . ' file is not found.');
|
||
|
}
|
||
|
|
||
|
return app($bootstrap);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!function_exists('assetCustom')) {
|
||
|
/**
|
||
|
* Get the asset path of RTL if this is an RTL request
|
||
|
*
|
||
|
* @param $path
|
||
|
* @param null $secure
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
function assetCustom($path)
|
||
|
{
|
||
|
// Include rtl css file
|
||
|
if (isRTL()) {
|
||
|
return asset(theme()->getDemo() . '/' . dirname($path) . '/' . basename($path, '.css') . '.rtl.css');
|
||
|
}
|
||
|
|
||
|
// Include dark style css file
|
||
|
if (theme()->isDarkModeEnabled() && theme()->getCurrentMode() !== 'light') {
|
||
|
$darkPath = str_replace('.bundle', '.' . theme()->getCurrentMode() . '.bundle', $path);
|
||
|
if (file_exists(public_path(theme()->getDemo() . '/' . $darkPath))) {
|
||
|
return asset(theme()->getDemo() . '/' . $darkPath);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Include default css file
|
||
|
return asset(theme()->getDemo() . '/' . $path);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!function_exists('isRTL')) {
|
||
|
/**
|
||
|
* Check if the request has RTL param
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
function isRTL()
|
||
|
{
|
||
|
return (bool) request()->input('rtl');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!function_exists('preloadCss')) {
|
||
|
/**
|
||
|
* Preload CSS file
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
function preloadCss($url)
|
||
|
{
|
||
|
return '<link rel="preload" href="' . $url . '" as="style" onload="this.onload=null;this.rel=\'stylesheet\'" type="text/css"><noscript><link rel="stylesheet" href="' . $url . '"></noscript>';
|
||
|
}
|
||
|
}
|