- Added an event manager. Also, fixed some more bugs within Block and Section tokens
This commit is contained in:
1 parent
58f73d914b
commit
08211282c2
14 files changed
+164
-18
No files matched your search
@@ -3,6 +3,7 @@
|
||||
namespace Picea\Extension;
|
||||
|
||||
use Picea\Compiler\Context;
|
||||
use Picea\Event\Builder\ClassTemplateRenderSectionDone;
|
||||
|
||||
class LanguageExtension implements Extension, FunctionExtension {
|
||||
|
||||
@@ -28,7 +29,22 @@ class LanguageExtension implements Extension, FunctionExtension {
|
||||
{
|
||||
switch($token) {
|
||||
case "language.set":
|
||||
return "<?php \$picea->compiler->getExtensionFromToken('$token')->currentLanguage = $arguments; ?>";
|
||||
$cls = $this::class;
|
||||
|
||||
return <<<PHP
|
||||
<?php
|
||||
(function(\\$cls \$ext) use (\$___class__template, \$__event) {
|
||||
#\$extends = \$___class__template->getParam('extends');
|
||||
|
||||
if ( \$___class__template->depth === 1 || \$___class__template->sectionStack ) {
|
||||
\$ext->currentLanguage = $arguments;
|
||||
|
||||
# @TODO Make sure this event is only registered when we output() a template, if we are in a section, we must attach it a view/section/block output event instead !
|
||||
\$__event->eventRegister(\\$cls::outputDoneEvent(\$ext));
|
||||
}
|
||||
})(\$picea->compiler->getExtensionFromToken('$token'));
|
||||
?>
|
||||
PHP;
|
||||
|
||||
case "lang":
|
||||
return "<?php echo htmlspecialchars(\$picea->compiler->getExtensionFromToken('$token')->absoluteLang($arguments), \ENT_QUOTES, ini_get('default_charset'), true) ?>";
|
||||
@@ -59,4 +75,21 @@ class LanguageExtension implements Extension, FunctionExtension {
|
||||
{
|
||||
return $this->languageHandler->languageFromKey($key, $variables);
|
||||
}
|
||||
|
||||
public static function outputDoneEvent(LanguageExtension $languageExtension) : ClassTemplateRenderSectionDone
|
||||
{
|
||||
return new class($languageExtension) implements ClassTemplateRenderSectionDone {
|
||||
|
||||
protected string $current;
|
||||
|
||||
public function __construct(protected LanguageExtension $languageExtension) {
|
||||
$this->current = $this->languageExtension->currentLanguage;
|
||||
}
|
||||
|
||||
public function execute(string $name) : mixed
|
||||
{
|
||||
return $this->current ? $this->languageExtension->currentLanguage = $this->current : null;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,13 @@ class TitleExtension implements Extension, FunctionExtension {
|
||||
}
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
return "<?php echo title($arguments) ?>";
|
||||
return <<<PHP
|
||||
<?php
|
||||
if ( null !== \$title = title($arguments) ) {
|
||||
echo \$title;
|
||||
}
|
||||
?>
|
||||
PHP;
|
||||
}
|
||||
|
||||
public function handleTitle(? string $set = null, ...$arguments) : ? string
|
||||
|
||||
@@ -48,7 +48,9 @@ PATTERN;
|
||||
return "<?php echo \$picea->compiler->getExtensionFromToken('$token')->setUrlParameters($arguments) ?>";
|
||||
|
||||
case "slug":
|
||||
return \Transliterator::createFromRules(':: Any-Latin;:: NFD;:: [:Nonspacing Mark:] Remove;:: NFC;:: [:Punctuation:] Remove;:: Lower();[:Separator:] > \'-\'')->transliterate( $arguments );
|
||||
return "<?php echo \$picea->compiler->getExtensionFromToken('$token')->slug($arguments) ?>";
|
||||
|
||||
#return \Transliterator::createFromRules(':: Any-Latin;:: NFD;:: [:Nonspacing Mark:] Remove;:: NFC;:: [:Punctuation:] Remove;:: Lower();[:Separator:] > \'-\'')->transliterate( $arguments );
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -121,9 +123,14 @@ PATTERN;
|
||||
return $this->scheme() . $this->domain() . $this->base();
|
||||
}
|
||||
|
||||
# src: https://stackoverflow.com/a/14550919
|
||||
public static function slug(string $text, string $separator = '-') : string
|
||||
{
|
||||
return trim(str_replace('-', $separator, \Transliterator::createFromRules(':: Any-Latin;:: NFD;:: [:Nonspacing Mark:] Remove;:: NFC;:: [:Punctuation:] Remove;:: Lower();[:Separator:] > \'-\'')->transliterate(str_replace('-', ' ', $text))), '-');
|
||||
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $text);
|
||||
$clean = preg_replace("/[^a-zA-Z0-9\/_| -]/", '', $clean);
|
||||
|
||||
return preg_replace("/[\/_| -]+/", $separator, strtolower(trim($clean, '-')));
|
||||
|
||||
}
|
||||
|
||||
public function registerRoute(string $name, string $route, string $class, string $method, array $routeMethods) : void
|
||||
@@ -195,7 +202,7 @@ PATTERN;
|
||||
$_SERVER['Front-End-Https'] ?? "",
|
||||
$_SERVER['X-Forwarded-Proto'] ?? "",
|
||||
$_SERVER['X-Forwarded-Protocol'] ?? "",
|
||||
$_SERVER['HTTP_X_FORWARDED_PROTO'] ?? "",
|
||||
$_SERVER['HTTP_X_FORWARDED_PROTO'] ?? "",
|
||||
$_SERVER['HTTP_X_FORWARDED_PROTOCOL'] ?? "",
|
||||
])) || isset($_SERVER['HTTP_X_ARR_SSL']);
|
||||
|
||||
|
||||
Reference in new issue
Block a user