- Added tokens 'section.append' and 'section.prepend' which equates longer form '{% section mysection, [ "action" => "prepend" ] %}'
This commit is contained in:
1 parent
af212b07ca
commit
9ea4856f49
3 files changed
+13
-5
No files matched your search
@@ -4,13 +4,17 @@ namespace Picea\ControlStructure;
|
||||
|
||||
class SectionToken implements ControlStructure {
|
||||
|
||||
public array $token = [ "section", "endsection" ];
|
||||
public array $token = [ "section", "section.prepend", "section.append", "endsection" ];
|
||||
|
||||
public function parse(\Picea\Compiler\Context &$context, ?string $arguments, string $token) {
|
||||
switch($token) {
|
||||
case "section.prepend":
|
||||
$context->sectionAction = "prepend";
|
||||
case "section.append":
|
||||
$context->sectionAction ??= "append";
|
||||
case "section":
|
||||
return $this->printSection($context, $arguments);
|
||||
|
||||
|
||||
case "endsection":
|
||||
if ( empty($context->sections) ) {
|
||||
throw new \RuntimeException("A section closing tag {% endsection %} was found without an opening {% section %} tag");
|
||||
@@ -28,7 +32,7 @@ class SectionToken implements ControlStructure {
|
||||
$options = eval("return $options;");
|
||||
}
|
||||
|
||||
if ( ! ctype_alnum(str_replace([".", "\"", "'", "-", "_"], "", $name)) ) {
|
||||
if ( ! ctype_alnum(str_replace([".", "\"", "'", "-", "_", ":"], "", $name)) ) {
|
||||
throw new \RuntimeException("Your section named `{$name}` contains invalid character. Allowed are only letters, numbers, dashes, underscores and dots");
|
||||
}
|
||||
|
||||
@@ -37,7 +41,9 @@ class SectionToken implements ControlStructure {
|
||||
'options' => $options,
|
||||
];
|
||||
|
||||
$action = $options['action'] ?? "default";
|
||||
$action = $options['action'] ?? $context->sectionAction ?? "default";
|
||||
|
||||
unset($context->sectionAction);
|
||||
|
||||
if (! in_array($action, ['prepend', 'append', 'default'])) {
|
||||
throw new \RuntimeException("An unsupported action `$action` was given as an option of a {% section %} tag");
|
||||
|
||||
Reference in new issue
Block a user