From 82f0fa686511db5689ede9fd47e668d8ab3ca14d Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Fri, 3 Nov 2023 08:30:16 -0400 Subject: [PATCH] - Added static route --- meta/definitions.php | 9 ++++++-- src/Config.php | 1 + src/Extension/UrlExtension.php | 38 ++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 src/Extension/UrlExtension.php diff --git a/meta/definitions.php b/meta/definitions.php index 8cf5c78..182a4ab 100644 --- a/meta/definitions.php +++ b/meta/definitions.php @@ -2,13 +2,16 @@ use Picea\{ Asset, Asset\Action, Language\LanguageRegistration, Ui\Ui }; +use Psr\Container\ContainerInterface; + use function DI\{get, autowire, create}; return [ Asset\Asset::class => autowire(Asset\Asset::class), - Asset\Config::class => create(Asset\Config::class)->constructor( - destination: getenv("PUBLIC_PATH") . DIRECTORY_SEPARATOR . "static" + Asset\Config::class => fn(ContainerInterface $c) => new Asset\Config( + destination: $c->get('config')['picea']['asset']['symlink']['destination'], + path: $c->get('config')['picea']['asset']['path'], ), Asset\FileFetcher::class => function($c) { @@ -22,4 +25,6 @@ return [ Action\InstallActionInterface::class => autowire(Action\Symlink::class), LanguageRegistration::class => create(\Lean\PiceaDefaultRegistration::class)->constructor(get('picea.extensions'), [], [], get(Ui::class), get(Asset\Asset::class)), + + \Picea\Extension\UrlExtension::class => create(Asset\Extension\UrlExtension::class)->constructor(get(Asset\Config::class), getenv("URL_BASE"), get('git.commit'), explode(',', getenv('APP_URL')), (bool) getenv('FORCE_SSL')), ]; \ No newline at end of file diff --git a/src/Config.php b/src/Config.php index 03d0bbf..53fe6b4 100644 --- a/src/Config.php +++ b/src/Config.php @@ -6,5 +6,6 @@ class Config { public function __construct( public null|string $destination = null, + public null|string $path = null, ) {} } \ No newline at end of file diff --git a/src/Extension/UrlExtension.php b/src/Extension/UrlExtension.php new file mode 100644 index 0000000..40f6275 --- /dev/null +++ b/src/Extension/UrlExtension.php @@ -0,0 +1,38 @@ +tokens[] = 'asset:path'; + $this->config = $config; + + parent::__construct($urlBase, $assetToken, $appUrl, $forceSSL); + } + + public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token, array $options = []) : string + { + if ( $token === 'asset:path' ) { + return "compiler->getExtensionFromToken('$token')->buildAssetUrlFromPath($arguments) ?>"; + } + + return parent::parse($context, $arguments, $token, $options); + } + + public function exportFunctions(): array + { + return array_replace([ + "asset_path" => [ $this, 'buildAssetUrlFromPath' ], + ], parent::exportFunctions()); + } + + public function buildAssetUrlFromPath(string $uri, array $parameters = [], bool $appendVersion = true) : string + { + return $this->buildAssetUrl( trim($this->config->path, '/') . '/' . $uri, $parameters, $appendVersion); + } +}