Loading config/autoload/global.php +8 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,14 @@ return array( // Par défaut, pas de socket 'socket' => false, 'vite' => [ 'mode' => 'prod', 'src' => __DIR__ . '/../../ui', 'dest' => __DIR__ . '/../../public/js/oscar/vite/dist', 'base_url_dev' => 'http://127.0.0.1:5173', 'base_url_prod' => '/js/oscar/vite/dist', ], // Rapports de synchronisation 'repport_directory' => __DIR__ .'/../../data/repports/', Loading module/Oscar/config/module.config.php +1 −0 Original line number Diff line number Diff line Loading @@ -1027,6 +1027,7 @@ return array( 'factories' => [ 'activityTypeHlp' => \Oscar\View\Helpers\ActivityTypeHelperFactory::class, 'Grant' => \Oscar\View\Helpers\GrantFactory::class, 'Vite' => \Oscar\View\Helpers\ViteFactory::class, 'hasRole' => \Oscar\View\Helpers\HasRoleFactory::class, 'link' => \Oscar\View\Helpers\LinksFactory::class, 'options' => \Oscar\View\Helpers\OptionsFactory::class, Loading module/Oscar/src/Oscar/Utils/ViteUtils.php 0 → 100644 +82 −0 Original line number Diff line number Diff line <?php /** * @author Stéphane Bouvry<stephane.bouvry@unicaen.fr> * @date: 06/02/2023 * @copyright Certic (c) 2023 */ namespace Oscar\Utils; class ViteUtils { /** Configuration */ private $manifest; private $basePath; private $buildedJs; private $buildedCss; private $mode; public function __construct(string $mode = 'dev', string $pathRoot = 'dist/', string $baseUrl = '/dist/') { $this->mode = $mode; $this->basePath = $pathRoot; $this->baseUrl = $baseUrl; $this->buildedJs = []; $this->buildedCss = []; $this->initManifest(); } private function initManifest() { if ($this->mode == 'prod') { $this->manifest = json_decode(file_get_contents($this->basePath . '/manifest.json'), true); } } public function build($script) { if (in_array($script, $this->buildedJs)) { return; } $css_import = []; if ($this->mode != 'prod') { $jsFile = $script; } else { if (!array_key_exists($script, $this->manifest)) { throw new \Exception("Script $script"); } $conf = $this->manifest[$script]; if (array_key_exists('imports', $conf)) { foreach ($conf['imports'] as $import) { $this->build($import); } } if (array_key_exists('css', $conf)) { foreach ($conf['css'] as $css) { if (in_array($css, $this->buildedCss)) { continue; } $this->buildedCss[] = $css; $css_import[] = $css; } } $jsFile = $conf['file']; } $url = $this->baseUrl . '/' . $jsFile; foreach ($css_import as $css) { echo '<link rel="stylesheet" href="' . $this->baseUrl . '/' . $css . '" />'; } echo '<script type="module" src="' . $url . '"></script>'; } } No newline at end of file module/Oscar/src/Oscar/View/Helpers/Vite.php 0 → 100644 +65 −0 Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: stephane * Date: 02/03/16 * Time: 16:18 */ namespace Oscar\View\Helpers; use Oscar\Service\ConfigurationParser; use Oscar\Service\OscarConfigurationService; use Oscar\Traits\UseOscarConfigurationService; use Oscar\Traits\UseOscarConfigurationServiceTrait; use Oscar\Utils\ViteUtils; use UnicaenApp\ServiceManager\ServiceLocatorAwareInterface; use UnicaenApp\ServiceManager\ServiceLocatorAwareTrait; use Zend\View\Helper\AbstractHtmlElement; class Vite extends AbstractHtmlElement implements UseOscarConfigurationService { use UseOscarConfigurationServiceTrait; private $viteutils; /** * Vite constructor. * @param ViteUtils $viteutils */ public function __construct() { } /** * @return OscarConfigurationService */ private function getConfiguration() { return $this->getOscarConfigurationService(); } /** * @return ViteUtils */ private function getViteUtils() :ViteUtils { if( $this->viteutils === null ){ $config = $this->getOscarConfigurationService()->getConfiguration('vite'); $mode = $config['mode']; $pathRoot = $config['dest']; $baseUrl = $mode == 'dev' ? $config['base_url_dev'] : $config['base_url_prod']; $this->viteutils = new ViteUtils($mode, $pathRoot, $baseUrl); } return $this->viteutils; } public function addJs( $file ) :void { $this->getViteUtils()->build($file); } } module/Oscar/src/Oscar/View/Helpers/ViteFactory.php 0 → 100644 +29 −0 Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: bouvry * Date: 19/09/19 * Time: 18:36 */ namespace Oscar\View\Helpers; use Interop\Container\ContainerInterface; use Interop\Container\Exception\ContainerException; use Oscar\Service\OscarConfigurationService; use Oscar\Service\OscarUserContext; use Oscar\Utils\ViteUtils; use Zend\ServiceManager\Exception\ServiceNotCreatedException; use Zend\ServiceManager\Exception\ServiceNotFoundException; use Zend\ServiceManager\Factory\FactoryInterface; class ViteFactory implements FactoryInterface { public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { $s = new Vite(); $s->setOscarConfigurationService($container->get(OscarConfigurationService::class)); return $s; } } No newline at end of file Loading
config/autoload/global.php +8 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,14 @@ return array( // Par défaut, pas de socket 'socket' => false, 'vite' => [ 'mode' => 'prod', 'src' => __DIR__ . '/../../ui', 'dest' => __DIR__ . '/../../public/js/oscar/vite/dist', 'base_url_dev' => 'http://127.0.0.1:5173', 'base_url_prod' => '/js/oscar/vite/dist', ], // Rapports de synchronisation 'repport_directory' => __DIR__ .'/../../data/repports/', Loading
module/Oscar/config/module.config.php +1 −0 Original line number Diff line number Diff line Loading @@ -1027,6 +1027,7 @@ return array( 'factories' => [ 'activityTypeHlp' => \Oscar\View\Helpers\ActivityTypeHelperFactory::class, 'Grant' => \Oscar\View\Helpers\GrantFactory::class, 'Vite' => \Oscar\View\Helpers\ViteFactory::class, 'hasRole' => \Oscar\View\Helpers\HasRoleFactory::class, 'link' => \Oscar\View\Helpers\LinksFactory::class, 'options' => \Oscar\View\Helpers\OptionsFactory::class, Loading
module/Oscar/src/Oscar/Utils/ViteUtils.php 0 → 100644 +82 −0 Original line number Diff line number Diff line <?php /** * @author Stéphane Bouvry<stephane.bouvry@unicaen.fr> * @date: 06/02/2023 * @copyright Certic (c) 2023 */ namespace Oscar\Utils; class ViteUtils { /** Configuration */ private $manifest; private $basePath; private $buildedJs; private $buildedCss; private $mode; public function __construct(string $mode = 'dev', string $pathRoot = 'dist/', string $baseUrl = '/dist/') { $this->mode = $mode; $this->basePath = $pathRoot; $this->baseUrl = $baseUrl; $this->buildedJs = []; $this->buildedCss = []; $this->initManifest(); } private function initManifest() { if ($this->mode == 'prod') { $this->manifest = json_decode(file_get_contents($this->basePath . '/manifest.json'), true); } } public function build($script) { if (in_array($script, $this->buildedJs)) { return; } $css_import = []; if ($this->mode != 'prod') { $jsFile = $script; } else { if (!array_key_exists($script, $this->manifest)) { throw new \Exception("Script $script"); } $conf = $this->manifest[$script]; if (array_key_exists('imports', $conf)) { foreach ($conf['imports'] as $import) { $this->build($import); } } if (array_key_exists('css', $conf)) { foreach ($conf['css'] as $css) { if (in_array($css, $this->buildedCss)) { continue; } $this->buildedCss[] = $css; $css_import[] = $css; } } $jsFile = $conf['file']; } $url = $this->baseUrl . '/' . $jsFile; foreach ($css_import as $css) { echo '<link rel="stylesheet" href="' . $this->baseUrl . '/' . $css . '" />'; } echo '<script type="module" src="' . $url . '"></script>'; } } No newline at end of file
module/Oscar/src/Oscar/View/Helpers/Vite.php 0 → 100644 +65 −0 Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: stephane * Date: 02/03/16 * Time: 16:18 */ namespace Oscar\View\Helpers; use Oscar\Service\ConfigurationParser; use Oscar\Service\OscarConfigurationService; use Oscar\Traits\UseOscarConfigurationService; use Oscar\Traits\UseOscarConfigurationServiceTrait; use Oscar\Utils\ViteUtils; use UnicaenApp\ServiceManager\ServiceLocatorAwareInterface; use UnicaenApp\ServiceManager\ServiceLocatorAwareTrait; use Zend\View\Helper\AbstractHtmlElement; class Vite extends AbstractHtmlElement implements UseOscarConfigurationService { use UseOscarConfigurationServiceTrait; private $viteutils; /** * Vite constructor. * @param ViteUtils $viteutils */ public function __construct() { } /** * @return OscarConfigurationService */ private function getConfiguration() { return $this->getOscarConfigurationService(); } /** * @return ViteUtils */ private function getViteUtils() :ViteUtils { if( $this->viteutils === null ){ $config = $this->getOscarConfigurationService()->getConfiguration('vite'); $mode = $config['mode']; $pathRoot = $config['dest']; $baseUrl = $mode == 'dev' ? $config['base_url_dev'] : $config['base_url_prod']; $this->viteutils = new ViteUtils($mode, $pathRoot, $baseUrl); } return $this->viteutils; } public function addJs( $file ) :void { $this->getViteUtils()->build($file); } }
module/Oscar/src/Oscar/View/Helpers/ViteFactory.php 0 → 100644 +29 −0 Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: bouvry * Date: 19/09/19 * Time: 18:36 */ namespace Oscar\View\Helpers; use Interop\Container\ContainerInterface; use Interop\Container\Exception\ContainerException; use Oscar\Service\OscarConfigurationService; use Oscar\Service\OscarUserContext; use Oscar\Utils\ViteUtils; use Zend\ServiceManager\Exception\ServiceNotCreatedException; use Zend\ServiceManager\Exception\ServiceNotFoundException; use Zend\ServiceManager\Factory\FactoryInterface; class ViteFactory implements FactoryInterface { public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { $s = new Vite(); $s->setOscarConfigurationService($container->get(OscarConfigurationService::class)); return $s; } } No newline at end of file