store preset in asset:// rather than admin plugin

This commit is contained in:
Andy Miller
2020-04-19 23:52:23 -06:00
parent e3c73c30a5
commit e1b571a655
5 changed files with 26 additions and 1319 deletions

View File

@@ -615,7 +615,7 @@ class AdminPlugin extends Plugin
$assets->setCssPipeline(false); $assets->setCssPipeline(false);
// Compile a missing preset.css file // Compile a missing preset.css file
$preset_css = 'plugin://admin/themes/grav/css-compiled/preset.css'; $preset_css = 'asset://admin-preset.css';
$preset_path = $this->grav['locator']->findResource($preset_css); $preset_path = $this->grav['locator']->findResource($preset_css);
if (!$preset_path) { if (!$preset_path) {
$this->grav['admin-whitebox']->compileScss($this->config->get('plugins.admin.whitebox')); $this->grav['admin-whitebox']->compileScss($this->config->get('plugins.admin.whitebox'));

View File

@@ -2165,20 +2165,20 @@ class AdminController extends AdminBaseController
$preview = $this->data['preview'] ?? false; $preview = $this->data['preview'] ?? false;
$data = ['color_scheme' => $this->data['whitebox']['color_scheme'] ?? null]; $data = ['color_scheme' => $this->data['whitebox']['color_scheme'] ?? null];
$output_file = $preview ? 'admin-preset.css' : 'admin-preset__tmp.css';
if ($preview) { $options = [
// send through some tmp filenames 'input' => 'plugin://admin/themes/grav/scss/preset.scss',
[$compile_status, $msg] = $this->grav['admin-whitebox']->compileScss($data, ['filename' => 'preset_tmp']); 'output' => 'asset://' .$output_file
} else { ];
[$compile_status, $msg] = $this->grav['admin-whitebox']->compileScss($data);
} [$compile_status, $msg] = $this->grav['admin-whitebox']->compileScss($data, $options);
$previewSuffix = $preview ? '_tmp' : '';
$json_response = [ $json_response = [
'status' => $compile_status ? 'success' : 'error', 'status' => $compile_status ? 'success' : 'error',
'message' => ($preview ? 'Preview ' : 'SCSS ') . $msg, 'message' => ($preview ? 'Preview ' : 'SCSS ') . $msg,
'files' => [ 'files' => [
'color_scheme' => $this->grav['twig']->twig_vars['base_url_relative']. "/user/plugins/admin/themes/grav/css-compiled/preset${previewSuffix}.css" 'color_scheme' => Utils::url($options['output'])
] ]
]; ];

View File

@@ -2,6 +2,7 @@
namespace Grav\Plugin\Admin; namespace Grav\Plugin\Admin;
use Grav\Common\Grav; use Grav\Common\Grav;
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
class Whitebox class Whitebox
{ {
@@ -14,7 +15,10 @@ class Whitebox
$this->scss = new ScssCompiler(); $this->scss = new ScssCompiler();
} }
public function compileScss($config, $options = ['filename' => 'preset']) public function compileScss($config, $options = [
'input' => 'plugin://admin/themes/grav/scss/preset.scss',
'output' => 'asset://admin-preset.css'
])
{ {
if (is_array($config)) { if (is_array($config)) {
$color_scheme = $config['color_scheme']; $color_scheme = $config['color_scheme'];
@@ -23,17 +27,20 @@ class Whitebox
} }
if ($color_scheme) { if ($color_scheme) {
/** @var UniformResourceLocator $locator */
$locator = $this->grav['locator']; $locator = $this->grav['locator'];
$admin_in_base = $locator->findResource('plugin://admin/themes/grav/scss'); $input_scss = $locator->findResource($options['input']);
$custom_out_base = $locator->findResource('plugin://admin/themes/grav/css-compiled'); $output_css = $locator->findResource(($options['output']), true, true);
$preset_in_path = $admin_in_base .'/preset.scss'; $input_path = dirname($input_scss);
$preset_out_path = $custom_out_base . '/'. $options['filename'] . '.css'; $imports = [$locator->findResource('plugin://admin/themes/grav/scss')];
if (!in_array($input_path, $imports)) {
$imports[] = $input_path;
}
try { try {
$this->compilePresetScss($color_scheme, $preset_in_path, $preset_out_path); $this->compilePresetScss($color_scheme, $input_scss, $output_css, $imports);
} catch (\Exception $e) { } catch (\Exception $e) {
return [false, $e->getMessage()]; return [false, $e->getMessage()];
} }
@@ -44,12 +51,12 @@ class Whitebox
return [false, ' Could not be recompiled, missing color scheme...']; return [false, ' Could not be recompiled, missing color scheme...'];
} }
public function compilePresetScss($colors, $in_path, $out_path) public function compilePresetScss($colors, $in_path, $out_path, $imports)
{ {
$compiler = $this->scss->reset(); $compiler = $this->scss->reset();
$compiler->setVariables($colors['colors'] + $colors['accents']); $compiler->setVariables($colors['colors'] + $colors['accents']);
$compiler->setImportPaths(dirname($in_path)); $compiler->setImportPaths($imports);
$compiler->compile($in_path, $out_path); $compiler->compile($in_path, $out_path);

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{% do assets.addCss(theme_url~'/css-compiled/nucleus.css') %} {% do assets.addCss(theme_url~'/css-compiled/nucleus.css') %}
{% do assets.addCss(theme_url~'/css-compiled/template.css') %} {% do assets.addCss(theme_url~'/css-compiled/template.css') %}
{% do assets.addCss(theme_url~'/css-compiled/preset.css') %} {% do assets.addCss(base_url_frontend~'/assets/admin-preset.css') %}
{% if config.plugins.admin.google_fonts %} {% if config.plugins.admin.google_fonts %}
{% do assets.addCss(theme_url~'/css-compiled/fonts.css') %} {% do assets.addCss(theme_url~'/css-compiled/fonts.css') %}
{% else %} {% else %}