Browse Source

+ component & twig function/filter for inject assets from manifest.json

tags/1.0.0
parent
commit
829231a79f
  1. 22
      Plugin.php
  2. 6
      classes/AssetsManifestException.php
  3. 14
      classes/ManifestReader.php
  4. 15
      classes/TwigFilters.php
  5. 59
      components/Manifest.php
  6. 3
      components/manifest/default.htm
  7. 18
      lang/en/lang.php
  8. 18
      lang/ru/lang.php

22
Plugin.php

@ -2,6 +2,8 @@
use Backend;
use System\Classes\PluginBase;
use Wpstudio\AssetsManifest\Classes\TwigFilters;
use Wpstudio\Assetsmanifest\Components\Manifest;
/**
* assetsmanifest Plugin Information File
@ -16,8 +18,8 @@ class Plugin extends PluginBase
public function pluginDetails()
{
return [
'name' => 'assetsmanifest',
'description' => 'No description provided yet...',
'name' => 'Assets manifest',
'description' => 'Assets with manifest.json',
'author' => 'wpstudio',
'icon' => 'icon-leaf'
];
@ -50,10 +52,8 @@ class Plugin extends PluginBase
*/
public function registerComponents()
{
return []; // Remove this line to activate
return [
'Wpstudio\Assetsmanifest\Components\MyComponent' => 'myComponent',
Manifest::class => 'manifest',
];
}
@ -93,4 +93,16 @@ class Plugin extends PluginBase
],
];
}
public function registerMarkupTags()
{
return [
'filters' => [
'manifest' => [TwigFilters::class, 'manifest'],
],
'functions' => [
'manifest' => [TwigFilters::class, 'manifest'],
],
];
}
}

6
classes/AssetsManifestException.php

@ -0,0 +1,6 @@
<?php namespace Wpstudio\AssetsManifest\Classes;
class AssetsManifestException extends \ErrorException
{
}

14
classes/ManifestReader.php

@ -4,12 +4,24 @@ class ManifestReader
{
private $manifest = null;
/**
* @param string $manifestPath
* @throws AssetsManifestException
*/
public function __construct(string $manifestPath)
{
if (!file_exists($manifestPath)) {
throw new AssetsManifestException('Not found: ' . $manifestPath);
}
if (!is_readable($manifestPath)) {
throw new AssetsManifestException('Not readable: ' . $manifestPath);
}
$this->manifest = json_decode(file_get_contents($manifestPath));
}
public function get($assetName)
public function get(string $assetName)
{
return $this->manifest->$assetName;
}

15
classes/TwigFilters.php

@ -0,0 +1,15 @@
<?php namespace Wpstudio\AssetsManifest\Classes;
use Wpstudio\Assetsmanifest\Components\Manifest;
class TwigFilters
{
public static function manifest($assetName): string
{
$manifest = app()->get(Manifest::class);
assert($manifest instanceof Manifest);
return $manifest->getManifestReader()->get($assetName);
}
}

59
components/Manifest.php

@ -0,0 +1,59 @@
<?php namespace Wpstudio\Assetsmanifest\Components;
use Cms\Classes\ComponentBase;
use Wpstudio\AssetsManifest\Classes\ManifestReader;
class Manifest extends ComponentBase
{
const LANG_PREFIX = 'wpstudio.assetsmanifest::lang.components.manifest.';
private ?ManifestReader $manifestReader;
public function componentDetails(): array
{
return [
'name' => self::LANG_PREFIX . 'name',
'description' => self::LANG_PREFIX . 'description',
];
}
public function defineProperties(): array
{
return [
'path' => [
'title' => self::LANG_PREFIX . 'properties.path.title',
'description' => self::LANG_PREFIX . 'properties.path.description',
'validationPattern' => '^[^/].*/manifest.json',
'validationMessage' => self::LANG_PREFIX . 'properties.path.validationMessage',
'placeholder' => 'assets/build/manifest.json',
'showExternalParam' => false,
'required' => true,
]
];
}
/**
* @return void
* @throws \Wpstudio\AssetsManifest\Classes\AssetsManifestException
*/
public function init(): void
{
app()->instance(Manifest::class, $this);
$this->prepareVars();
}
/**
* @return void
* @throws \Wpstudio\AssetsManifest\Classes\AssetsManifestException
*/
private function prepareVars(): void
{
$this->manifestReader = new ManifestReader(base_path($this->property('path')));
}
public function getManifestReader(): ManifestReader
{
return $this->manifestReader;
}
}

3
components/manifest/default.htm

@ -0,0 +1,3 @@
<p>This is the default markup for component manifest</p>
<small>You can delete this file if you want</small>

18
lang/en/lang.php

@ -0,0 +1,18 @@
<?php
return [
'components' => [
'manifest' => [
'name' => 'Manifest path',
'description' => 'Accept manifest.json path',
'properties' => [
'path' => [
'title' => 'Manifest relative basepath',
'description' =>
'manifest.json path relative from basepath. Example: themes/demo/assets/build/manifest.json',
'validationMessage' => 'Incorrect manifest.json path',
]
]
]
]
];

18
lang/ru/lang.php

@ -0,0 +1,18 @@
<?php
return [
'components' => [
'manifest' => [
'name' => 'Manifest path',
'description' => 'Устанавливает путь к manifest.json',
'properties' => [
'path' => [
'title' => 'Manifest относительно корня',
'description' =>
'Путь к файлу manifest.json относительно корня проекта. Например: themes/demo/assets/build/manifest.json',
'validationMessage' => 'Неправильный формат пути к файлу manifest.json',
]
]
]
]
];
Loading…
Cancel
Save