diff --git a/lib/Froxlor/UI/Panel/FroxlorTwig.php b/lib/Froxlor/UI/Panel/FroxlorTwig.php
index 20c2d4e6..d2f49175 100644
--- a/lib/Froxlor/UI/Panel/FroxlorTwig.php
+++ b/lib/Froxlor/UI/Panel/FroxlorTwig.php
@@ -87,6 +87,10 @@ class FroxlorTwig extends AbstractExtension
new TwigFunction('linker', [
$this,
'getLink'
+ ]),
+ new TwigFunction('mix', [
+ $this,
+ 'getMix'
])
];
}
@@ -158,4 +162,9 @@ class FroxlorTwig extends AbstractExtension
{
return 'froxlortwig';
}
+
+ public function getMix($mix = '')
+ {
+ return mix($mix);
+ }
}
diff --git a/lib/functions.php b/lib/functions.php
index bca5eb0e..4119bfa3 100644
--- a/lib/functions.php
+++ b/lib/functions.php
@@ -26,6 +26,14 @@
use Froxlor\Language;
use Froxlor\UI\Request;
+/**
+ * Render a template with the given data.
+ * Mostly used if we have no template-engine (twig).
+ *
+ * @param $template
+ * @param $attributes
+ * @return array|false|string|string[]
+ */
function view($template, $attributes)
{
$view = file_get_contents(dirname(__DIR__) . '/templates/' . $template);
@@ -33,11 +41,26 @@ function view($template, $attributes)
return str_replace(array_keys($attributes), array_values($attributes), $view);
}
+/**
+ * Get the current translation for a given string.
+ *
+ * @param string $identifier
+ * @param array $arguments
+ * @return array|string
+ */
function lng(string $identifier, array $arguments = [])
{
return Language::getTranslation($identifier, $arguments);
}
+/**
+ * Get the value of a request variable.
+ *
+ * @param string $identifier
+ * @param string|null $default
+ * @param string|null $session
+ * @return mixed|string|null
+ */
function old(string $identifier, string $default = null, string $session = null)
{
if ($session && isset($_SESSION[$session])) {
@@ -45,3 +68,26 @@ function old(string $identifier, string $default = null, string $session = null)
}
return Request::any($identifier, $default);
}
+
+/**
+ * Loading the mix manifest file from given theme.
+ * This file contains the hashed filenames of the assets.
+ * It must be always placed in the theme assets folder.
+ *
+ * @param $filename
+ * @return mixed|string
+ */
+function mix($filename)
+{
+ if (preg_match('/templates\/(.+)\/assets\/(.+)\/(.+)/', $filename, $matches)) {
+ $mixManifest = dirname(__DIR__) . '/templates/' . $matches[1] . '/assets/mix-manifest.json';
+ if (file_exists($mixManifest)) {
+ $manifest = json_decode(file_get_contents($mixManifest), true);
+ $key = '/' . $matches[2] . '/' . $matches[3];
+ if ($manifest && !empty($manifest[$key])) {
+ $filename = 'templates/' . $matches[1] . '/assets' . $manifest[$key];
+ }
+ }
+ }
+ return $filename;
+}
diff --git a/lib/init.php b/lib/init.php
index 5bf42af6..16170a01 100644
--- a/lib/init.php
+++ b/lib/init.php
@@ -277,14 +277,14 @@ if (is_array($_themeoptions) && array_key_exists('js', $_themeoptions['variants'
if (is_array($_themeoptions['variants'][$themevariant]['js'])) {
foreach ($_themeoptions['variants'][$themevariant]['js'] as $jsfile) {
if (file_exists('templates/' . $theme . '/assets/js/' . $jsfile)) {
- $js .= '' . "\n";
+ $js .= '' . "\n";
}
}
}
if (is_array($_themeoptions['variants'][$themevariant]['css'])) {
foreach ($_themeoptions['variants'][$themevariant]['css'] as $cssfile) {
if (file_exists('templates/' . $theme . '/assets/css/' . $cssfile)) {
- $css .= '' . "\n";
+ $css .= '' . "\n";
}
}
}
diff --git a/templates/Froxlor/base.html.twig b/templates/Froxlor/base.html.twig
index 881184eb..f422d95d 100644
--- a/templates/Froxlor/base.html.twig
+++ b/templates/Froxlor/base.html.twig
@@ -11,7 +11,7 @@
{% if theme_css is empty %}
-
+
{% else %}
{{ theme_css|raw }}
{% endif %}
@@ -19,7 +19,7 @@
{% if theme_js is empty %}
-
+
{% else %}
{{ theme_js|raw }}
{% endif %}
diff --git a/webpack.mix.js b/webpack.mix.js
index e865e93e..1fe43e44 100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -10,4 +10,5 @@ mix
.copyDirectory('node_modules/@fortawesome/fontawesome-free/webfonts', 'templates/Froxlor/assets/webfonts')
.js('templates/Froxlor/src/js/main.js', 'js')
.sass('templates/Froxlor/src/scss/main.scss', 'css')
- .sass('templates/Froxlor/src/scss/dark.scss', 'css');
+ .sass('templates/Froxlor/src/scss/dark.scss', 'css')
+ .version();