mirror of
https://github.com/flarum/core.git
synced 2025-07-24 02:01:19 +02:00
feat: split frontend asset generation into separate steps for more extensibility (#3446)
This commit is contained in:
@@ -18,7 +18,14 @@ use Psr\Http\Message\ServerRequestInterface as Request;
|
|||||||
|
|
||||||
class Assets
|
class Assets
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @var Container
|
||||||
|
*/
|
||||||
protected $container;
|
protected $container;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Config
|
||||||
|
*/
|
||||||
protected $config;
|
protected $config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,26 +39,56 @@ class Assets
|
|||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function forFrontend(string $name)
|
/**
|
||||||
|
* Sets the frontend to generate assets for.
|
||||||
|
*
|
||||||
|
* @param string $name frontend name
|
||||||
|
* @return $this
|
||||||
|
* @throws \Illuminate\Contracts\Container\BindingResolutionException
|
||||||
|
*/
|
||||||
|
public function forFrontend(string $name): Assets
|
||||||
{
|
{
|
||||||
$this->assets = $this->container->make('flarum.assets.'.$name);
|
$this->assets = $this->container->make('flarum.assets.'.$name);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __invoke(Document $document, Request $request)
|
public function __invoke(Document $document, Request $request): void
|
||||||
{
|
{
|
||||||
$locale = $request->getAttribute('locale');
|
$locale = $request->getAttribute('locale');
|
||||||
|
|
||||||
$compilers = [
|
$compilers = $this->assembleCompilers($locale);
|
||||||
'js' => [$this->assets->makeJs(), $this->assets->makeLocaleJs($locale)],
|
|
||||||
'css' => [$this->assets->makeCss(), $this->assets->makeLocaleCss($locale)]
|
|
||||||
];
|
|
||||||
|
|
||||||
if ($this->config->inDebugMode()) {
|
if ($this->config->inDebugMode()) {
|
||||||
$this->forceCommit(Arr::flatten($compilers));
|
$this->forceCommit(Arr::flatten($compilers));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->addAssetsToDocument($document, $compilers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assembles JS and CSS compilers to be used to generate frontend assets.
|
||||||
|
*
|
||||||
|
* @param string|null $locale
|
||||||
|
* @return array[]
|
||||||
|
*/
|
||||||
|
protected function assembleCompilers(?string $locale): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'js' => [$this->assets->makeJs(), $this->assets->makeLocaleJs($locale)],
|
||||||
|
'css' => [$this->assets->makeCss(), $this->assets->makeLocaleCss($locale)]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds URLs of frontend JS and CSS to the {@link Document} class.
|
||||||
|
*
|
||||||
|
* @param Document $document
|
||||||
|
* @param array $compilers
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function addAssetsToDocument(Document $document, array $compilers): void
|
||||||
|
{
|
||||||
$document->js = array_merge($document->js, $this->getUrls($compilers['js']));
|
$document->js = array_merge($document->js, $this->getUrls($compilers['js']));
|
||||||
$document->css = array_merge($document->css, $this->getUrls($compilers['css']));
|
$document->css = array_merge($document->css, $this->getUrls($compilers['css']));
|
||||||
}
|
}
|
||||||
@@ -61,7 +98,7 @@ class Assets
|
|||||||
*
|
*
|
||||||
* @param array $compilers
|
* @param array $compilers
|
||||||
*/
|
*/
|
||||||
private function forceCommit(array $compilers)
|
protected function forceCommit(array $compilers): void
|
||||||
{
|
{
|
||||||
/** @var CompilerInterface $compiler */
|
/** @var CompilerInterface $compiler */
|
||||||
foreach ($compilers as $compiler) {
|
foreach ($compilers as $compiler) {
|
||||||
@@ -70,10 +107,12 @@ class Assets
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Maps provided {@link CompilerInterface}s to their URLs.
|
||||||
|
*
|
||||||
* @param CompilerInterface[] $compilers
|
* @param CompilerInterface[] $compilers
|
||||||
* @return string[]
|
* @return string[]
|
||||||
*/
|
*/
|
||||||
private function getUrls(array $compilers)
|
protected function getUrls(array $compilers): array
|
||||||
{
|
{
|
||||||
return array_filter(array_map(function (CompilerInterface $compiler) {
|
return array_filter(array_map(function (CompilerInterface $compiler) {
|
||||||
return $compiler->getUrl();
|
return $compiler->getUrl();
|
||||||
|
Reference in New Issue
Block a user