12.8 C
Santiago
Jueves, Mayo 8, 2025

Crikey! There was an error…

{%- set body_bottom %}
{% block body_bottom %}
{% endblock %}
{{ gantry.document.getHtml(‘body_bottom’)|join(“n “)|raw }}
{% endset -%}

{%- do gantry.document.addScript(url(‘gantry-assets://js/main.js’), 11, ‘footer’) -%}

{# Head and footer needs to come last because of any of the above blocks may have CSS or JavaScript in them #}

{%- set page_head %}
{% block page_head -%}
{% include ‘partials/page_head.html.twig’ %}
{%- endblock %}
{% endset -%}

{%- set page_footer %}
{% block page_footer %}
{% do gantry.platform.finalize() -%}
{{ gantry.scripts(‘footer’)|join(“n “)|raw -}}
{% endblock %}

{{ gantry.debugger.render()|raw }}
{% endset -%}

{%- block page -%}
<!DOCTYPE {{ gantry.config.page.doctype|default(‘html’)|raw }}>
<html{{ gantry.page.htmlAttributes|raw }}>
{{ page_head|raw }}
{% block page_body -%}
<body{{ gantry.page.bodyAttributes({‘class’: [offcanvas_position, gantry.page.preset, ‘g-style-‘ ~ gantry.theme.preset]})|raw }}>
{{ gantry.config.page.body.body_top|raw }}
{{ body_top|raw }}
{{ page_offcanvas|raw }}
<div id=”g-page-surround”>
{% if page_offcanvas|trim -%}
<div class=”g-offcanvas-hide g-offcanvas-toggle” role=”navigation” data-offcanvas-toggle aria-controls=”g-offcanvas” aria-expanded=”false”><i class=”fa fa-fw fa-bars”></i></div>
{%- endif %}
{{ page_top|raw }}

$this->storeEnv = $storeEnv;
break;

case Type::T_DEBUG:
list(, $value) = $child;

$fname = $this->sourceNames[$this->sourceIndex];
$line = $this->sourceLine;
$value = $this->compileValue($this->reduce($value, true));
fwrite($this->stderr, “File $fname on line $line DEBUG: $valuen”);
break;

case Type::T_WARN:
list(, $value) = $child;

$fname = $this->sourceNames[$this->sourceIndex];
$line = $this->sourceLine;
$value = $this->compileValue($this->reduce($value, true));
fwrite($this->stderr, “File $fname on line $line WARN: $valuen”);
break;

case Type::T_ERROR:
list(, $value) = $child;

$fname = $this->sourceNames[$this->sourceIndex];
$line = $this->sourceLine;
$value = $this->compileValue($this->reduce($value, true));
$this->throwError(“File $fname on line $line ERROR: $valuen”);
break;

case Type::T_CONTROL:
$this->throwError(‘@break/@continue not permitted in this scope’);
break;

default:
$this->throwError(“unknown child type: $child[0]”);
}
}

$this->storeEnv = $storeEnv;
break;

case Type::T_DEBUG:
list(, $value) = $child;

$fname = $this->sourceNames[$this->sourceIndex];
$line = $this->sourceLine;
$value = $this->compileValue($this->reduce($value, true));
fwrite($this->stderr, “File $fname on line $line DEBUG: $valuen”);
break;

case Type::T_WARN:
list(, $value) = $child;

$fname = $this->sourceNames[$this->sourceIndex];
$line = $this->sourceLine;
$value = $this->compileValue($this->reduce($value, true));
fwrite($this->stderr, “File $fname on line $line WARN: $valuen”);
break;

case Type::T_ERROR:
list(, $value) = $child;

$fname = $this->sourceNames[$this->sourceIndex];
$line = $this->sourceLine;
$value = $this->compileValue($this->reduce($value, true));
$this->throwError(“File $fname on line $line ERROR: $valuen”);
break;

case Type::T_CONTROL:
$this->throwError(‘@break/@continue not permitted in this scope’);
break;

default:
$this->throwError(“unknown child type: $child[0]”);
}
}

protected function popCallStack()
{
array_pop($this->callStack);
}

/**
* Compile children and return result
*
* @param array $stms
* @param LeafoScssPhpFormatterOutputBlock $out
* @param string $traceName
*
* @return array|null
*/
protected function compileChildren($stms, OutputBlock $out, $traceName = ”)
{
$this->pushCallStack($traceName);

foreach ($stms as $stm) {
$ret = $this->compileChild($stm, $out);

if (isset($ret)) {
return $ret;
}
}

$this->popCallStack();

return null;
}

/**
* Compile children and throw exception if unexpected @return
*
* @param array $stms
* @param LeafoScssPhpFormatterOutputBlock $out
* @param LeafoScssPhpBlock $selfParent
* @param string $traceName
*
* @throws Exception

break;

case Type::T_EXTEND:
foreach ($child[1] as $sel) {
$results = $this->evalSelectors([$sel]);

foreach ($results as $result) {
// only use the first one
$result = current($result);

$this->pushExtends($result, $out->selectors, $child);
}
}
break;

case Type::T_IF:
list(, $if) = $child;

if ($this->isTruthy($this->reduce($if->cond, true))) {
return $this->compileChildren($if->children, $out);
}

foreach ($if->cases as $case) {
if ($case->type === Type::T_ELSE ||
$case->type === Type::T_ELSEIF && $this->isTruthy($this->reduce($case->cond))
) {
return $this->compileChildren($case->children, $out);
}
}
break;

case Type::T_EACH:
list(, $each) = $child;

$list = $this->coerceList($this->reduce($each->list));

$this->pushEnv();

foreach ($list[2] as $item) {
if (count($each->vars) === 1) {

protected function popCallStack()
{
array_pop($this->callStack);
}

/**
* Compile children and return result
*
* @param array $stms
* @param LeafoScssPhpFormatterOutputBlock $out
* @param string $traceName
*
* @return array|null
*/
protected function compileChildren($stms, OutputBlock $out, $traceName = ”)
{
$this->pushCallStack($traceName);

foreach ($stms as $stm) {
$ret = $this->compileChild($stm, $out);

if (isset($ret)) {
return $ret;
}
}

$this->popCallStack();

return null;
}

/**
* Compile children and throw exception if unexpected @return
*
* @param array $stms
* @param LeafoScssPhpFormatterOutputBlock $out
* @param LeafoScssPhpBlock $selfParent
* @param string $traceName
*
* @throws Exception

}

$this->pushEnv();

$storeEnv = $this->storeEnv;
$this->storeEnv = $this->env;

// set the args
if (isset($func->args)) {
$this->applyArguments($func->args, $argValues);
}

// throw away lines and children
$tmp = new OutputBlock;
$tmp->lines = [];
$tmp->children = [];

$this->env->marker = ‘function’;

$ret = $this->compileChildren($func->children, $tmp, $this->env->marker . ” ” . $name);

$this->storeEnv = $storeEnv;

$this->popEnv();

$returnValue = ! isset($ret) ? static::$defaultValue : $ret;

return true;
}

/**
* Call built-in and registered (PHP) functions
*
* @param string $name
* @param array $args
* @param array $returnValue
*
* @return boolean Returns true if returnValue is set; otherwise, false
*/
protected function callNativeFunction($name, $args, &$returnValue)

$selfSelector = $this->collapseSelectors($selfSelector, true);
return $selfSelector;

default:
return $value;
}
}

/**
* Function caller
*
* @param string $name
* @param array $argValues
*
* @return array|null
*/
protected function fncall($name, $argValues)
{
// SCSS @function
if ($this->callScssFunction($name, $argValues, $returnValue)) {
return $returnValue;
}

// native PHP functions
if ($this->callNativeFunction($name, $argValues, $returnValue)) {
return $returnValue;
}

// for CSS functions, simply flatten the arguments into a list
$listArgs = [];

foreach ((array) $argValues as $arg) {
if (empty($arg[0])) {
$listArgs[] = $this->reduce($arg[1]);
}
}

return [Type::T_FUNCTION, $name, [Type::T_LIST, ‘,’, $listArgs]];
}

case Type::T_STRING:
foreach ($value[2] as &$item) {
if (is_array($item) || $item instanceof ArrayAccess) {
$item = $this->reduce($item);
}
}

return $value;

case Type::T_INTERPOLATE:
$value[1] = $this->reduce($value[1]);
if ($inExp) {
return $value[1];
}

return $value;

case Type::T_FUNCTION_CALL:
return $this->fncall($value[1], $value[2]);

case Type::T_SELF:
$selfSelector = $this->multiplySelectors($this->env);
$selfSelector = $this->collapseSelectors($selfSelector, true);
return $selfSelector;

default:
return $value;
}
}

/**
* Function caller
*
* @param string $name
* @param array $argValues
*
* @return array|null
*/
protected function fncall($name, $argValues)

case Type::T_ASSIGN:
list(, $name, $value) = $child;

if ($name[0] === Type::T_VARIABLE) {
$flags = isset($child[3]) ? $child[3] : [];
$isDefault = in_array(‘!default’, $flags);
$isGlobal = in_array(‘!global’, $flags);

if ($isGlobal) {
$this->set($name[1], $this->reduce($value), false, $this->rootEnv, $value);
break;
}

$shouldSet = $isDefault &&
(($result = $this->get($name[1], false)) === null
|| $result === static::$null);

if (! $isDefault || $shouldSet) {
$this->set($name[1], $this->reduce($value), true, null, $value);
}
break;
}

$compiledName = $this->compileValue($name);

// handle shorthand syntax: size / line-height
if ($compiledName === ‘font’ || $compiledName === ‘grid-row’ || $compiledName === ‘grid-column’) {
if ($value[0] === Type::T_VARIABLE) {
// if the font value comes from variable, the content is already reduced
// (i.e., formulas were already calculated), so we need the original unreduced value
$value = $this->get($value[1], true, null, true);
}

$fontValue=&$value;

if ($value[0] === Type::T_LIST && $value[1]==’,’) {
// this is the case if more than one font is given: example: “font: 400 1em/1.3 arial,helvetica”
// we need to handle the first list element
$fontValue=&$value[2][0];

* @param LeafoScssPhpBlock $selfParent
* @param string $traceName
*
* @throws Exception
*/
protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = ”)
{
$this->pushCallStack($traceName);

foreach ($stms as $stm) {
if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
$stm[1]->selfParent = $selfParent;
$ret = $this->compileChild($stm, $out);
$stm[1]->selfParent = null;
} elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
$stm[‘selfParent’] = $selfParent;
$ret = $this->compileChild($stm, $out);
unset($stm[‘selfParent’]);
} else {
$ret = $this->compileChild($stm, $out);
}

if (isset($ret)) {
$this->throwError(‘@return may only be used within a function’);

return;
}
}

$this->popCallStack();
}

/**
* evaluate media query : compile internal value keeping the structure inchanged
*
* @param array $queryList
*
* @return array
*/

$this->handleImportLoop($realPath);

$tree = $this->importCache[$realPath];
} else {
$code = file_get_contents($realPath);

// Work around a bug in the compiler.
if (strpos($realPath, ‘/_bourbon-deprecate.scss’) !== false) {
$code = preg_replace(‘/@content;/u’, ”, $code);
}

$parser = $this->parserFactory($path);
$tree = $parser->parse($code);

$this->importCache[$realPath] = $tree;
}

$dirname = dirname($path);
array_unshift($this->importPaths, $dirname);
$this->compileChildrenNoReturn($tree->children, $out);
array_shift($this->importPaths);
}
}

return [empty($m1)? $m2 : $m1, $t1];
}

/**
* Compile import; returns true if the value was something that could be imported
*
* @param array $rawPath
* @param LeafoScssPhpFormatterOutputBlock $out
* @param boolean $once
*
* @return boolean
*/
protected function compileImport($rawPath, OutputBlock $out, $once = false)
{
if ($rawPath[0] === Type::T_STRING) {
$path = $this->compileStringContent($rawPath);

if ($path = $this->findImport($path)) {
if (! $once || ! in_array($path, $this->importedFiles)) {
$this->importFile($path, $out);
$this->importedFiles[] = $path;
}

return true;
}

return false;
}

if ($rawPath[0] === Type::T_LIST) {
// handle a list of strings
if (count($rawPath[2]) === 0) {
return false;
}

foreach ($rawPath[2] as $path) {
if ($path[0] !== Type::T_STRING) {
return false;
}
}

$this->sourceIndex = array_search($out->sourceName, $this->sourceNames);

if ($this->sourceIndex === false) {
$this->sourceIndex = null;
}
}

switch ($child[0]) {
case Type::T_SCSSPHP_IMPORT_ONCE:
$rawPath = $this->reduce($child[1]);

if (! $this->compileImport($rawPath, $out, true)) {
$out->lines[] = ‘@import ‘ . $this->compileValue($rawPath) . ‘;’;
}
break;

case Type::T_IMPORT:
$rawPath = $this->reduce($child[1]);

if (! $this->compileImport($rawPath, $out)) {
$out->lines[] = ‘@import ‘ . $this->compileValue($rawPath) . ‘;’;
}
break;

case Type::T_DIRECTIVE:
$this->compileDirective($child[1]);
break;

case Type::T_AT_ROOT:
$this->compileAtRoot($child[1]);
break;

case Type::T_MEDIA:
$this->compileMedia($child[1]);
break;

case Type::T_BLOCK:
$this->compileBlock($child[1]);
break;

* @param LeafoScssPhpBlock $selfParent
* @param string $traceName
*
* @throws Exception
*/
protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = ”)
{
$this->pushCallStack($traceName);

foreach ($stms as $stm) {
if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
$stm[1]->selfParent = $selfParent;
$ret = $this->compileChild($stm, $out);
$stm[1]->selfParent = null;
} elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
$stm[‘selfParent’] = $selfParent;
$ret = $this->compileChild($stm, $out);
unset($stm[‘selfParent’]);
} else {
$ret = $this->compileChild($stm, $out);
}

if (isset($ret)) {
$this->throwError(‘@return may only be used within a function’);

return;
}
}

$this->popCallStack();
}

/**
* evaluate media query : compile internal value keeping the structure inchanged
*
* @param array $queryList
*
* @return array
*/

$this->handleImportLoop($realPath);

$tree = $this->importCache[$realPath];
} else {
$code = file_get_contents($realPath);

// Work around a bug in the compiler.
if (strpos($realPath, ‘/_bourbon-deprecate.scss’) !== false) {
$code = preg_replace(‘/@content;/u’, ”, $code);
}

$parser = $this->parserFactory($path);
$tree = $parser->parse($code);

$this->importCache[$realPath] = $tree;
}

$dirname = dirname($path);
array_unshift($this->importPaths, $dirname);
$this->compileChildrenNoReturn($tree->children, $out);
array_shift($this->importPaths);
}
}

return [empty($m1)? $m2 : $m1, $t1];
}

/**
* Compile import; returns true if the value was something that could be imported
*
* @param array $rawPath
* @param LeafoScssPhpFormatterOutputBlock $out
* @param boolean $once
*
* @return boolean
*/
protected function compileImport($rawPath, OutputBlock $out, $once = false)
{
if ($rawPath[0] === Type::T_STRING) {
$path = $this->compileStringContent($rawPath);

if ($path = $this->findImport($path)) {
if (! $once || ! in_array($path, $this->importedFiles)) {
$this->importFile($path, $out);
$this->importedFiles[] = $path;
}

return true;
}

return false;
}

if ($rawPath[0] === Type::T_LIST) {
// handle a list of strings
if (count($rawPath[2]) === 0) {
return false;
}

foreach ($rawPath[2] as $path) {
if ($path[0] !== Type::T_STRING) {
return false;
}
}

$this->sourceIndex = array_search($out->sourceName, $this->sourceNames);

if ($this->sourceIndex === false) {
$this->sourceIndex = null;
}
}

switch ($child[0]) {
case Type::T_SCSSPHP_IMPORT_ONCE:
$rawPath = $this->reduce($child[1]);

if (! $this->compileImport($rawPath, $out, true)) {
$out->lines[] = ‘@import ‘ . $this->compileValue($rawPath) . ‘;’;
}
break;

case Type::T_IMPORT:
$rawPath = $this->reduce($child[1]);

if (! $this->compileImport($rawPath, $out)) {
$out->lines[] = ‘@import ‘ . $this->compileValue($rawPath) . ‘;’;
}
break;

case Type::T_DIRECTIVE:
$this->compileDirective($child[1]);
break;

case Type::T_AT_ROOT:
$this->compileAtRoot($child[1]);
break;

case Type::T_MEDIA:
$this->compileMedia($child[1]);
break;

case Type::T_BLOCK:
$this->compileBlock($child[1]);
break;

* @param LeafoScssPhpBlock $selfParent
* @param string $traceName
*
* @throws Exception
*/
protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = ”)
{
$this->pushCallStack($traceName);

foreach ($stms as $stm) {
if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
$stm[1]->selfParent = $selfParent;
$ret = $this->compileChild($stm, $out);
$stm[1]->selfParent = null;
} elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
$stm[‘selfParent’] = $selfParent;
$ret = $this->compileChild($stm, $out);
unset($stm[‘selfParent’]);
} else {
$ret = $this->compileChild($stm, $out);
}

if (isset($ret)) {
$this->throwError(‘@return may only be used within a function’);

return;
}
}

$this->popCallStack();
}

/**
* evaluate media query : compile internal value keeping the structure inchanged
*
* @param array $queryList
*
* @return array
*/

$this->handleImportLoop($realPath);

$tree = $this->importCache[$realPath];
} else {
$code = file_get_contents($realPath);

// Work around a bug in the compiler.
if (strpos($realPath, ‘/_bourbon-deprecate.scss’) !== false) {
$code = preg_replace(‘/@content;/u’, ”, $code);
}

$parser = $this->parserFactory($path);
$tree = $parser->parse($code);

$this->importCache[$realPath] = $tree;
}

$dirname = dirname($path);
array_unshift($this->importPaths, $dirname);
$this->compileChildrenNoReturn($tree->children, $out);
array_shift($this->importPaths);
}
}

return [empty($m1)? $m2 : $m1, $t1];
}

/**
* Compile import; returns true if the value was something that could be imported
*
* @param array $rawPath
* @param LeafoScssPhpFormatterOutputBlock $out
* @param boolean $once
*
* @return boolean
*/
protected function compileImport($rawPath, OutputBlock $out, $once = false)
{
if ($rawPath[0] === Type::T_STRING) {
$path = $this->compileStringContent($rawPath);

if ($path = $this->findImport($path)) {
if (! $once || ! in_array($path, $this->importedFiles)) {
$this->importFile($path, $out);
$this->importedFiles[] = $path;
}

return true;
}

return false;
}

if ($rawPath[0] === Type::T_LIST) {
// handle a list of strings
if (count($rawPath[2]) === 0) {
return false;
}

foreach ($rawPath[2] as $path) {
if ($path[0] !== Type::T_STRING) {
return false;
}
}

$this->sourceIndex = array_search($out->sourceName, $this->sourceNames);

if ($this->sourceIndex === false) {
$this->sourceIndex = null;
}
}

switch ($child[0]) {
case Type::T_SCSSPHP_IMPORT_ONCE:
$rawPath = $this->reduce($child[1]);

if (! $this->compileImport($rawPath, $out, true)) {
$out->lines[] = ‘@import ‘ . $this->compileValue($rawPath) . ‘;’;
}
break;

case Type::T_IMPORT:
$rawPath = $this->reduce($child[1]);

if (! $this->compileImport($rawPath, $out)) {
$out->lines[] = ‘@import ‘ . $this->compileValue($rawPath) . ‘;’;
}
break;

case Type::T_DIRECTIVE:
$this->compileDirective($child[1]);
break;

case Type::T_AT_ROOT:
$this->compileAtRoot($child[1]);
break;

case Type::T_MEDIA:
$this->compileMedia($child[1]);
break;

case Type::T_BLOCK:
$this->compileBlock($child[1]);
break;

* @param LeafoScssPhpBlock $selfParent
* @param string $traceName
*
* @throws Exception
*/
protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = ”)
{
$this->pushCallStack($traceName);

foreach ($stms as $stm) {
if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
$stm[1]->selfParent = $selfParent;
$ret = $this->compileChild($stm, $out);
$stm[1]->selfParent = null;
} elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
$stm[‘selfParent’] = $selfParent;
$ret = $this->compileChild($stm, $out);
unset($stm[‘selfParent’]);
} else {
$ret = $this->compileChild($stm, $out);
}

if (isset($ret)) {
$this->throwError(‘@return may only be used within a function’);

return;
}
}

$this->popCallStack();
}

/**
* evaluate media query : compile internal value keeping the structure inchanged
*
* @param array $queryList
*
* @return array
*/

$this->handleImportLoop($realPath);

$tree = $this->importCache[$realPath];
} else {
$code = file_get_contents($realPath);

// Work around a bug in the compiler.
if (strpos($realPath, ‘/_bourbon-deprecate.scss’) !== false) {
$code = preg_replace(‘/@content;/u’, ”, $code);
}

$parser = $this->parserFactory($path);
$tree = $parser->parse($code);

$this->importCache[$realPath] = $tree;
}

$dirname = dirname($path);
array_unshift($this->importPaths, $dirname);
$this->compileChildrenNoReturn($tree->children, $out);
array_shift($this->importPaths);
}
}

return [empty($m1)? $m2 : $m1, $t1];
}

/**
* Compile import; returns true if the value was something that could be imported
*
* @param array $rawPath
* @param LeafoScssPhpFormatterOutputBlock $out
* @param boolean $once
*
* @return boolean
*/
protected function compileImport($rawPath, OutputBlock $out, $once = false)
{
if ($rawPath[0] === Type::T_STRING) {
$path = $this->compileStringContent($rawPath);

if ($path = $this->findImport($path)) {
if (! $once || ! in_array($path, $this->importedFiles)) {
$this->importFile($path, $out);
$this->importedFiles[] = $path;
}

return true;
}

return false;
}

if ($rawPath[0] === Type::T_LIST) {
// handle a list of strings
if (count($rawPath[2]) === 0) {
return false;
}

foreach ($rawPath[2] as $path) {
if ($path[0] !== Type::T_STRING) {
return false;
}
}

$this->sourceIndex = array_search($out->sourceName, $this->sourceNames);

if ($this->sourceIndex === false) {
$this->sourceIndex = null;
}
}

switch ($child[0]) {
case Type::T_SCSSPHP_IMPORT_ONCE:
$rawPath = $this->reduce($child[1]);

if (! $this->compileImport($rawPath, $out, true)) {
$out->lines[] = ‘@import ‘ . $this->compileValue($rawPath) . ‘;’;
}
break;

case Type::T_IMPORT:
$rawPath = $this->reduce($child[1]);

if (! $this->compileImport($rawPath, $out)) {
$out->lines[] = ‘@import ‘ . $this->compileValue($rawPath) . ‘;’;
}
break;

case Type::T_DIRECTIVE:
$this->compileDirective($child[1]);
break;

case Type::T_AT_ROOT:
$this->compileAtRoot($child[1]);
break;

case Type::T_MEDIA:
$this->compileMedia($child[1]);
break;

case Type::T_BLOCK:
$this->compileBlock($child[1]);
break;

* @param LeafoScssPhpBlock $selfParent
* @param string $traceName
*
* @throws Exception
*/
protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = ”)
{
$this->pushCallStack($traceName);

foreach ($stms as $stm) {
if ($selfParent && isset($stm[1]) && is_object($stm[1]) && $stm[1] instanceof Block) {
$stm[1]->selfParent = $selfParent;
$ret = $this->compileChild($stm, $out);
$stm[1]->selfParent = null;
} elseif ($selfParent && $stm[0] === TYPE::T_INCLUDE) {
$stm[‘selfParent’] = $selfParent;
$ret = $this->compileChild($stm, $out);
unset($stm[‘selfParent’]);
} else {
$ret = $this->compileChild($stm, $out);
}

if (isset($ret)) {
$this->throwError(‘@return may only be used within a function’);

return;
}
}

$this->popCallStack();
}

/**
* evaluate media query : compile internal value keeping the structure inchanged
*
* @param array $queryList
*
* @return array
*/

$out->sourceColumn = $this->env->block->sourceColumn;
} else {
$out->sourceName = null;
$out->sourceLine = null;
$out->sourceColumn = null;
}

return $out;
}

/**
* Compile root
*
* @param LeafoScssPhpBlock $rootBlock
*/
protected function compileRoot(Block $rootBlock)
{
$this->rootBlock = $this->scope = $this->makeOutputBlock(Type::T_ROOT);

$this->compileChildrenNoReturn($rootBlock->children, $this->scope);
$this->flattenSelectors($this->scope);
$this->missingSelectors();
}

/**
* Report missing selectors
*/
protected function missingSelectors()
{
foreach ($this->extends as $extend) {
if (isset($extend[3])) {
continue;
}

list($target, $origin, $block) = $extend;

// ignore if !optional
if ($block[2]) {
continue;
}

$this->sourceIndex = null;
$this->sourceLine = null;
$this->sourceColumn = null;
$this->env = null;
$this->scope = null;
$this->storeEnv = null;
$this->charsetSeen = null;
$this->shouldEvaluate = null;
$this->stderr = fopen(‘php://stderr’, ‘w’);

$this->parser = $this->parserFactory($path);
$tree = $this->parser->parse($code);
$this->parser = null;

$this->formatter = new $this->formatter();
$this->rootBlock = null;
$this->rootEnv = $this->pushEnv($tree);

$this->injectVariables($this->registeredVars);
$this->compileRoot($tree);
$this->popEnv();

$sourceMapGenerator = null;

if ($this->sourceMap) {
if (is_object($this->sourceMap) && $this->sourceMap instanceof SourceMapGenerator) {
$sourceMapGenerator = $this->sourceMap;
$this->sourceMap = self::SOURCE_MAP_FILE;
} elseif ($this->sourceMap !== self::SOURCE_MAP_NONE) {
$sourceMapGenerator = new SourceMapGenerator($this->sourceMapOptions);
}
}

$out = $this->formatter->format($this->scope, $sourceMapGenerator);

if (! empty($out) && $this->sourceMap && $this->sourceMap !== self::SOURCE_MAP_NONE) {
$sourceMap = $sourceMapGenerator->generateJson();
$sourceMapUrl = null;

switch ($this->sourceMap) {

$file->lock(false);
} catch (Exception $e) {
// Another process has locked the file; we will check this in a bit.
}

if ($file->locked() === false) {
// File was already locked by another process, lets avoid compiling the same file twice.
return false;
}

// Set the lookup paths.
$compiler = $this->getLegacyCompiler();
$compiler->setBasePath($path);
$compiler->setImportPaths([[$this, ‘findLegacyImport’]]);

// Run the compiler.
$compiler->setVariables($this->getVariables());
$scss = ‘@import “‘ . $in . ‘.scss”‘;
try {
$css = $compiler->compile($scss);
} catch (CompilerException $e) {
throw new RuntimeException(“CSS Compilation on file ‘{$in}.scss’ failed on error: {$e->getMessage()}”, 500, $e);
}
if (strpos($css, $scss) === 0) {
$css = ‘/* ‘ . $scss . ‘ */’;
}

// Extract map from css and save it as separate file.
if ($pos = strrpos($css, ‘/*# sourceMappingURL=’)) {
$map = json_decode(urldecode(substr($css, $pos + 43, -3)), true);

/** @var Document $document */
$document = $gantry[‘document’];

foreach ($map[‘sources’] as &$source) {
$source = $document->url($source, null, -1);
}
unset($source);

$mapFile = JsonFile::instance($path . ‘.map’);

$compiler = $this->getCompiler();
$compiler->setLogger($logger);

// Set the lookup paths.
$this->functions->setBasePath($path);
$compiler->setImportPaths([[$this, ‘findImport’]]);

// Run the compiler.
$compiler->addVariables($this->getVariables(true));
$scss = ‘$output-bourbon-deprecation-warnings: false;’ . “n” . ‘@import “‘ . $in . ‘.scss”‘;
try {
$this->result = $compiler->compileString($scss);
$css = $this->result->getCss();
} catch (CompilerException $e) {
if (version_compare(static::$options[‘compatibility’], ‘5.5’, ‘<‘)) {
static::$options[‘legacy’][$in] = true;
$this->warnings[‘__TITLE__’] = ‘Please update your theme!’;
$this->warnings[$in] = [‘WARNING: ‘ . $e->getMessage()];

return $this->compileLegacyFile($in);
}

throw new RuntimeException(“ERROR: CSS Compilation on file ‘{$in}.scss’ failed on error: {$e->getMessage()}”, 500, $e);
} catch (Exception $e) {
throw new RuntimeException(“ERROR: CSS Compilation on file ‘{$in}.scss’ failed on fatal error: {$e->getMessage()}”, 500, $e);
}
if (strpos($css, $scss) === 0) {
$css = ‘/* ‘ . $scss . ‘ */’;
}

// Extract map from css and save it as separate file.
$pos = strrpos($css, ‘/*# sourceMappingURL=’);
if ($pos !== false) {
$map = json_decode(urldecode(substr($css, $pos + 43, -3)), true);

/** @var Document $document */
$document = $gantry[‘document’];

foreach ($map[‘sources’] as &$source) {
$source = $document::url($source, false, -1);

/**
* Returns URL to CSS file.
*
* If file does not exist, it will be created by using CSS compiler.
*
* @param string $name
* @return string
*/
public function css($name)
{
if (!isset($this->cssCache[$name])) {
$compiler = $this->compiler();

if ($compiler->needsCompile($name, [$this, ‘getCssVariables’])) {
if (GANTRY_DEBUGGER) {
Debugger::startTimer(“css-{$name}”, “Compiling CSS: {$name}”);
Debugger::addMessage(“Compiling CSS: {$name}”);
}

$compiler->compileFile($name);

if (GANTRY_DEBUGGER) {
Debugger::stopTimer(“css-{$name}”);
}
}

$this->cssCache[$name] = $compiler->getCssUrl($name);
}

return $this->cssCache[$name];
}

/**
* @return array
*/
public function getCssVariables()
{
if ($this->preset) {
$variables = $this->presets()->flatten($this->preset . ‘.styles’, ‘-‘);
} else {

$styles = $this->getAssetsInLocation(‘styles’, $location);

if (!$styles) {
return [];
}

$gantry = Gantry::instance();

/** @var Theme|null $theme */
$theme = isset($gantry[‘theme’]) ? $gantry[‘theme’] : null;

/** @var Document $document */
$document = $gantry[‘document’];

foreach ($styles as $key => $style) {
if (isset($style[‘href’])) {
$url = $style[‘href’];
if ($theme && preg_match(‘|.scss$|’, $url)) {
// Compile SCSS files.
$url = $theme->css(basename($url, ‘.scss’));
}
// Deal with streams and relative paths.
$url = $document::url($url, false, null, false);

$styles[$key][‘href’] = $url;
}
}

return $styles;
}

/**
* @param string $location
* @return array
* @since 5.4.3
*/
public function getScripts($location = ‘head’)
{
$scripts = $this->getAssetsInLocation(‘scripts’, $location);

static $error = false;

if (isset($new)) {
$error = (bool) $new;
}

return $error;
}

protected static function registerStyles()
{
if (static::errorPage()) {
return;
}

/** @var CMSApplication $application */
$application = Factory::getApplication();
$doc = $application->getDocument();

$styles = static::$stack[0]->getStyles();

foreach ($styles as $style) {
switch ($style[‘:type’]) {
case ‘file’:
$attribs = array_replace([‘type’ => $style[‘type’], ‘media’ => $style[‘media’]], $style[‘element’]);
$attribs = array_filter($attribs, static function($arg) { return null !== $arg; });
$doc->addStyleSheet($style[‘href’], [], $attribs);
break;
case ‘inline’:
$doc->addStyleDeclaration($style[‘content’], $style[‘type’]);
break;
}
}
}

protected static function registerScripts()
{
if (static::errorPage()) {
return;
}

if (
$framework === ‘bootstrap’
|| ($framework === ‘bootstrap.2’ && JVersion::MAJOR_VERSION === 3)
|| ($framework === ‘bootstrap.5’ && JVersion::MAJOR_VERSION >= 4)
) {
/** @var Theme $theme */
$theme = Gantry::instance()[‘theme’];
$theme->joomla = true;
}

return true;
}

/**
*
*/
public static function registerAssets()
{
static::registerFrameworks();
static::registerStyles();
static::registerScripts();
}

/**
* NOTE: In PHP this function can be called either from Gantry DI container or statically.
*
* @param bool $addDomain
* @return string
*/
public static function domain($addDomain = false)
{
if (!$addDomain) {
return ”;
}

$absolute = Uri::root(false);
$relative = Uri::root(true);

return substr($absolute, 0, -strlen($relative));
}

{
return null;
}

/**
* @param string $text
* @return string
*/
public function filter($text)
{
return $text;
}

public function finalize()
{
$gantry = Gantry::instance();
/** @var Document $document */
$document = $gantry[‘document’];

$document::registerAssets();
}

/**
* @return mixed|null
*/
public function call()
{
$args = func_get_args();
$callable = array_shift($args);
return is_callable($callable) ? call_user_func_array($callable, $args) : null;
}

/**
* @param string $action
* @param int|string|null $id
* @return bool
*/
public function authorize($action, $id = null)
{
return true;

if ($ignoreStrictCheck || !$this->env->isStrictVariables()) {
return;
}

throw new RuntimeError(sprintf(‘Neither the property “%1$s” nor one of the methods “%1$s()”, “get%1$s()”/”is%1$s()” or “__call()” exist and have public access in class “%2$s”.’, $item, $class), -1, $this->getSourceContext());
}

if ($isDefinedTest) {
return true;
}

if ($this->env->hasExtension(‘TwigExtensionSandboxExtension’)) {
$this->env->getExtension(‘TwigExtensionSandboxExtension’)->checkMethodAllowed($object, $method);
}

// Some objects throw exceptions when they have __call, and the method we try
// to call is not supported. If ignoreStrictCheck is true, we should return null.
try {
if (!$arguments) {
$ret = $object->$method();
} else {
$ret = call_user_func_array([$object, $method], $arguments);
}
} catch (BadMethodCallException $e) {
if ($call && ($ignoreStrictCheck || !$this->env->isStrictVariables())) {
return;
}
throw $e;
}

// @deprecated in 1.28
if ($object instanceof Twig_TemplateInterface) {
$self = $object->getTemplateName() === $this->getTemplateName();
$message = sprintf(‘Calling “%s” on template “%s” from template “%s” is deprecated since version 1.28 and won’t be supported anymore in 2.0.’, $item, $object->getTemplateName(), $this->getTemplateName());
if (‘renderBlock’ === $method || ‘displayBlock’ === $method) {
$message .= sprintf(‘ Use block(“%s”%s) instead).’, $arguments[0], $self ? ” : ‘, template’);
} elseif (‘hasBlock’ === $method) {
$message .= sprintf(‘ Use “block(“%s”%s) is defined” instead).’, $arguments[0], $self ? ” : ‘, template’);
} elseif (‘render’ === $method || ‘display’ === $method) {
$message .= sprintf(‘ Use include(“%s”) instead).’, $object->getTemplateName());

// line 56
public function block_body_bottom($context, array $blocks = [])
{
// line 57
echo ” “;
}

// line 66
public function block_page_head($context, array $blocks = [])
{
// line 67
$this->loadTemplate(“partials/page_head.html.twig”, “@nucleus/page.html.twig”, 67)->display($context);
}

// line 72
public function block_page_footer($context, array $blocks = [])
{
// line 73
echo ” “;
$this->getAttribute($this->getAttribute(($context[“gantry”] ?? null), “platform”, []), “finalize”, [], “method”);
// line 74
echo twig_join_filter($this->getAttribute(($context[“gantry”] ?? null), “scripts”, [0 => “footer”], “method”), ”
“);
}

// line 80
public function block_page($context, array $blocks = [])
{
// line 81
echo “<!DOCTYPE “;
echo (($this->getAttribute($this->getAttribute($this->getAttribute(($context[“gantry”] ?? null), “config”, [], “any”, false, true), “page”, [], “any”, false, true), “doctype”, [], “any”, true, true)) ? (_twig_default_filter($this->getAttribute($this->getAttribute($this->getAttribute(($context[“gantry”] ?? null), “config”, [], “any”, false, true), “page”, [], “any”, false, true), “doctype”, []), “html”)) : (“html”));
echo “>
<html”;
// line 82
echo $this->getAttribute($this->getAttribute(($context[“gantry”] ?? null), “page”, []), “htmlAttributes”, []);
echo “>
“;
// line 83
echo ($context[“page_head”] ?? null);
echo ”

if ($useBlocks && isset($blocks[$name])) {
$template = $blocks[$name][0];
$block = $blocks[$name][1];
} elseif (isset($this->blocks[$name])) {
$template = $this->blocks[$name][0];
$block = $this->blocks[$name][1];
} else {
$template = null;
$block = null;
}

// avoid RCEs when sandbox is enabled
if (null !== $template && !$template instanceof self) {
throw new LogicException(‘A block must be a method on a TwigTemplate instance.’);
}

if (null !== $template) {
try {
$template->$block($context, $blocks);
} catch (Error $e) {
if (!$e->getSourceContext()) {
$e->setSourceContext($template->getSourceContext());
}

// this is mostly useful for TwigErrorLoaderError exceptions
// see TwigErrorLoaderError
if (-1 === $e->getTemplateLine()) {
$e->guess();
}

throw $e;
} catch (Exception $e) {
$e = new RuntimeError(sprintf(‘An exception has been thrown during the rendering of a template (“%s”).’, $e->getMessage()), -1, $template->getSourceContext(), $e);
$e->guess();

throw $e;
}
} elseif (false !== $parent = $this->getParent($context)) {
$parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false);

}

/**
* Displays a parent block.
*
* This method is for internal use only and should never be called
* directly.
*
* @param string $name The block name to display from the parent
* @param array $context The context
* @param array $blocks The current set of blocks
*/
public function displayParentBlock($name, array $context, array $blocks = [])
{
$name = (string) $name;

if (isset($this->traits[$name])) {
$this->traits[$name][0]->displayBlock($name, $context, $blocks, false);
} elseif (false !== $parent = $this->getParent($context)) {
$parent->displayBlock($name, $context, $blocks, false);
} else {
throw new RuntimeError(sprintf(‘The template has no parent and no traits defining the “%s” block.’, $name), -1, $this->getSourceContext());
}
}

/**
* Displays a block.
*
* This method is for internal use only and should never be called
* directly.
*
* @param string $name The block name to display
* @param array $context The context
* @param array $blocks The current set of blocks
* @param bool $useBlocks Whether to use the current set of blocks
*/
public function displayBlock($name, array $context, array $blocks = [], $useBlocks = true)
{
$name = (string) $name;

}

protected function doGetParent(array $context)
{
// line 1
return “@nucleus/page.html.twig”;
}

protected function doDisplay(array $context, array $blocks = [])
{
$this->parent = $this->loadTemplate(“@nucleus/page.html.twig”, “partials/page.html.twig”, 1);
$this->parent->display($context, array_merge($this->blocks, $blocks));
}

// line 3
public function block_page_footer($context, array $blocks = [])
{
// line 4
echo ” “;
$this->displayParentBlock(“page_footer”, $context, $blocks);
echo ”
<jdoc:include type=”modules” name=”debug” />
“;
}

public function getTemplateName()
{
return “partials/page.html.twig”;
}

public function isTraitable()
{
return false;
}

public function getDebugInfo()
{
return array ( 42 => 4, 39 => 3, 29 => 1,);
}

if ($useBlocks && isset($blocks[$name])) {
$template = $blocks[$name][0];
$block = $blocks[$name][1];
} elseif (isset($this->blocks[$name])) {
$template = $this->blocks[$name][0];
$block = $this->blocks[$name][1];
} else {
$template = null;
$block = null;
}

// avoid RCEs when sandbox is enabled
if (null !== $template && !$template instanceof self) {
throw new LogicException(‘A block must be a method on a TwigTemplate instance.’);
}

if (null !== $template) {
try {
$template->$block($context, $blocks);
} catch (Error $e) {
if (!$e->getSourceContext()) {
$e->setSourceContext($template->getSourceContext());
}

// this is mostly useful for TwigErrorLoaderError exceptions
// see TwigErrorLoaderError
if (-1 === $e->getTemplateLine()) {
$e->guess();
}

throw $e;
} catch (Exception $e) {
$e = new RuntimeError(sprintf(‘An exception has been thrown during the rendering of a template (“%s”).’, $e->getMessage()), -1, $template->getSourceContext(), $e);
$e->guess();

throw $e;
}
} elseif (false !== $parent = $this->getParent($context)) {
$parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false);

// line 58
echo ” “;
echo twig_join_filter($this->getAttribute($this->getAttribute(($context[“gantry”] ?? null), “document”, []), “getHtml”, [0 => “body_bottom”], “method”), ”
“);
echo ”
“;
$context[“body_bottom”] = (” === $tmp = ob_get_clean()) ? ” : new Markup($tmp, $this->env->getCharset());
// line 61
$this->getAttribute($this->getAttribute(($context[“gantry”] ?? null), “document”, []), “addScript”, [0 => $this->env->getExtension(‘GantryComponentTwigTwigExtension’)->urlFunc(“gantry-assets://js/main.js”), 1 => 11, 2 => “footer”], “method”);
// line 65
ob_start(function () { return ”; });
// line 66
echo ” “;
$this->displayBlock(‘page_head’, $context, $blocks);
$context[“page_head”] = (” === $tmp = ob_get_clean()) ? ” : new Markup($tmp, $this->env->getCharset());
// line 71
ob_start(function () { return ”; });
// line 72
echo ” “;
$this->displayBlock(‘page_footer’, $context, $blocks);
// line 76
echo ”
“;
// line 77
echo $this->getAttribute($this->getAttribute(($context[“gantry”] ?? null), “debugger”, []), “render”, [], “method”);
echo ”
“;
$context[“page_footer”] = (” === $tmp = ob_get_clean()) ? ” : new Markup($tmp, $this->env->getCharset());
// line 80
$this->displayBlock(‘page’, $context, $blocks);
}

// line 8
public function block_content($context, array $blocks = [])
{
// line 9
echo ” “;
}

// line 19

while (ob_get_level() > $level) {
ob_end_clean();
}

throw $e;
} catch (Throwable $e) {
while (ob_get_level() > $level) {
ob_end_clean();
}

throw $e;
}

return ob_get_clean();
}

protected function displayWithErrorHandling(array $context, array $blocks = [])
{
try {
$this->doDisplay($context, $blocks);
} catch (Error $e) {
if (!$e->getSourceContext()) {
$e->setSourceContext($this->getSourceContext());
}

// this is mostly useful for TwigErrorLoaderError exceptions
// see TwigErrorLoaderError
if (-1 === $e->getTemplateLine()) {
$e->guess();
}

throw $e;
} catch (Exception $e) {
$e = new RuntimeError(sprintf(‘An exception has been thrown during the rendering of a template (“%s”).’, $e->getMessage()), -1, $this->getSourceContext(), $e);
$e->guess();

throw $e;
}
}

{
return $this;
}

/**
* Returns all blocks.
*
* This method is for internal use only and should never be called
* directly.
*
* @return array An array of blocks
*/
public function getBlocks()
{
return $this->blocks;
}

public function display(array $context, array $blocks = [])
{
$this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
}

public function render(array $context)
{
$level = ob_get_level();
if ($this->env->isDebug()) {
ob_start();
} else {
ob_start(function () { return ”; });
}
try {
$this->display($context);
} catch (Exception $e) {
while (ob_get_level() > $level) {
ob_end_clean();
}

throw $e;
} catch (Throwable $e) {
while (ob_get_level() > $level) {

{
public function __construct(Environment $env)
{
parent::__construct($env);

$this->blocks = [
‘page_footer’ => [$this, ‘block_page_footer’],
];
}

protected function doGetParent(array $context)
{
// line 1
return “@nucleus/page.html.twig”;
}

protected function doDisplay(array $context, array $blocks = [])
{
$this->parent = $this->loadTemplate(“@nucleus/page.html.twig”, “partials/page.html.twig”, 1);
$this->parent->display($context, array_merge($this->blocks, $blocks));
}

// line 3
public function block_page_footer($context, array $blocks = [])
{
// line 4
echo ” “;
$this->displayParentBlock(“page_footer”, $context, $blocks);
echo ”
<jdoc:include type=”modules” name=”debug” />
“;
}

public function getTemplateName()
{
return “partials/page.html.twig”;
}

public function isTraitable()
{

while (ob_get_level() > $level) {
ob_end_clean();
}

throw $e;
} catch (Throwable $e) {
while (ob_get_level() > $level) {
ob_end_clean();
}

throw $e;
}

return ob_get_clean();
}

protected function displayWithErrorHandling(array $context, array $blocks = [])
{
try {
$this->doDisplay($context, $blocks);
} catch (Error $e) {
if (!$e->getSourceContext()) {
$e->setSourceContext($this->getSourceContext());
}

// this is mostly useful for TwigErrorLoaderError exceptions
// see TwigErrorLoaderError
if (-1 === $e->getTemplateLine()) {
$e->guess();
}

throw $e;
} catch (Exception $e) {
$e = new RuntimeError(sprintf(‘An exception has been thrown during the rendering of a template (“%s”).’, $e->getMessage()), -1, $this->getSourceContext(), $e);
$e->guess();

throw $e;
}
}

{
return $this;
}

/**
* Returns all blocks.
*
* This method is for internal use only and should never be called
* directly.
*
* @return array An array of blocks
*/
public function getBlocks()
{
return $this->blocks;
}

public function display(array $context, array $blocks = [])
{
$this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
}

public function render(array $context)
{
$level = ob_get_level();
if ($this->env->isDebug()) {
ob_start();
} else {
ob_start(function () { return ”; });
}
try {
$this->display($context);
} catch (Exception $e) {
while (ob_get_level() > $level) {
ob_end_clean();
}

throw $e;
} catch (Throwable $e) {
while (ob_get_level() > $level) {

{
public function __construct(Environment $env)
{
parent::__construct($env);

$this->blocks = [
‘content’ => [$this, ‘block_content’],
];
}

protected function doGetParent(array $context)
{
// line 1
return “partials/page.html.twig”;
}

protected function doDisplay(array $context, array $blocks = [])
{
$this->parent = $this->loadTemplate(“partials/page.html.twig”, “index.html.twig”, 1);
$this->parent->display($context, array_merge($this->blocks, $blocks));
}

// line 3
public function block_content($context, array $blocks = [])
{
// line 4
echo ” “;
echo $this->getAttribute($this->getAttribute(($context[“gantry”] ?? null), “platform”, []), “displayContent”, [0 => ($context[“content”] ?? null)], “method”);
echo ”
“;
}

public function getTemplateName()
{
return “index.html.twig”;
}

public function isTraitable()
{
return false;

while (ob_get_level() > $level) {
ob_end_clean();
}

throw $e;
} catch (Throwable $e) {
while (ob_get_level() > $level) {
ob_end_clean();
}

throw $e;
}

return ob_get_clean();
}

protected function displayWithErrorHandling(array $context, array $blocks = [])
{
try {
$this->doDisplay($context, $blocks);
} catch (Error $e) {
if (!$e->getSourceContext()) {
$e->setSourceContext($this->getSourceContext());
}

// this is mostly useful for TwigErrorLoaderError exceptions
// see TwigErrorLoaderError
if (-1 === $e->getTemplateLine()) {
$e->guess();
}

throw $e;
} catch (Exception $e) {
$e = new RuntimeError(sprintf(‘An exception has been thrown during the rendering of a template (“%s”).’, $e->getMessage()), -1, $this->getSourceContext(), $e);
$e->guess();

throw $e;
}
}

{
return $this;
}

/**
* Returns all blocks.
*
* This method is for internal use only and should never be called
* directly.
*
* @return array An array of blocks
*/
public function getBlocks()
{
return $this->blocks;
}

public function display(array $context, array $blocks = [])
{
$this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
}

public function render(array $context)
{
$level = ob_get_level();
if ($this->env->isDebug()) {
ob_start();
} else {
ob_start(function () { return ”; });
}
try {
$this->display($context);
} catch (Exception $e) {
while (ob_get_level() > $level) {
ob_end_clean();
}

throw $e;
} catch (Throwable $e) {
while (ob_get_level() > $level) {

public function getBlocks()
{
return $this->blocks;
}

public function display(array $context, array $blocks = [])
{
$this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
}

public function render(array $context)
{
$level = ob_get_level();
if ($this->env->isDebug()) {
ob_start();
} else {
ob_start(function () { return ”; });
}
try {
$this->display($context);
} catch (Exception $e) {
while (ob_get_level() > $level) {
ob_end_clean();
}

throw $e;
} catch (Throwable $e) {
while (ob_get_level() > $level) {
ob_end_clean();
}

throw $e;
}

return ob_get_clean();
}

protected function displayWithErrorHandling(array $context, array $blocks = [])
{
try {

* @internal
*/
public function __construct(Environment $env, Template $template)
{
$this->env = $env;
$this->template = $template;
}

/**
* Renders the template.
*
* @param array $context An array of parameters to pass to the template
*
* @return string The rendered template
*/
public function render($context = [])
{
// using func_get_args() allows to not expose the blocks argument
// as it should only be used by internal code
return $this->template->render($context, func_num_args() > 1 ? func_get_arg(1) : []);
}

/**
* Displays the template.
*
* @param array $context An array of parameters to pass to the template
*/
public function display($context = [])
{
// using func_get_args() allows to not expose the blocks argument
// as it should only be used by internal code
$this->template->display($context, func_num_args() > 1 ? func_get_arg(1) : []);
}

/**
* Checks if a block is defined.
*
* @param string $name The block name
* @param array $context An array of parameters to pass to the template
*

@trigger_error(sprintf(‘The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.’, __METHOD__), E_USER_DEPRECATED);

return $this->templateClassPrefix;
}

/**
* Renders a template.
*
* @param string|TemplateWrapper $name The template name
* @param array $context An array of parameters to pass to the template
*
* @return string The rendered template
*
* @throws LoaderError When the template cannot be found
* @throws SyntaxError When an error occurred during compilation
* @throws RuntimeError When an error occurred during rendering
*/
public function render($name, array $context = [])
{
return $this->load($name)->render($context);
}

/**
* Displays a template.
*
* @param string|TemplateWrapper $name The template name
* @param array $context An array of parameters to pass to the template
*
* @throws LoaderError When the template cannot be found
* @throws SyntaxError When an error occurred during compilation
* @throws RuntimeError When an error occurred during rendering
*/
public function display($name, array $context = [])
{
$this->load($name)->display($context);
}

/**
* Loads a template.
*

$this->renderer = $this->extendTwig($twig, $loader);
}

return $this->renderer;
}

/**
* Render a template file by using given context.
*
* @param string $file
* @param array $context
* @return string
*/
public function render($file, array $context = [])
{
// Include Gantry specific things to the context.
$context = $this->getContext($context);

return $this->renderer()->render($file, $context);
}

/**
* Compile and render twig string.
*
* @param string $string
* @param array $context
* @return string
*/
public function compile($string, array $context = [])
{
$renderer = $this->renderer();
$template = $renderer->createTemplate($string);

// Include Gantry specific things to the context.
$context = $this->getContext($context);

return $template->render($context);
}

* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 – 2020 RocketTheme, LLC
* @license GNU/GPLv2 and later
*
* http://www.gnu.org/licenses/gpl-2.0.html
*/

defined(‘_JEXEC’) or die;

// Bootstrap Gantry framework or fail gracefully (inside included file).
$gantry = include __DIR__ . ‘/includes/gantry.php’;

/** @var GantryFrameworkTheme $theme */
$theme = $gantry[‘theme’];

// All the custom twig variables can be defined in here:
$context = array();

// Render the page.
echo $theme->render(‘index.html.twig’, $context);

* @param string $directory The name of the template
* @param string $filename The actual filename
*
* @return string The contents of the template
*
* @since 1.7.0
*/
protected function _loadTemplate($directory, $filename)
{
$contents = ”;

// Check to see if we have a valid template file
if (file_exists($directory . ‘/’ . $filename))
{
// Store the file path
$this->_file = $directory . ‘/’ . $filename;

// Get the file content
ob_start();
require $directory . ‘/’ . $filename;
$contents = ob_get_contents();
ob_end_clean();
}

// Try to find a favicon by checking the template and root folder
$icon = ‘/favicon.ico’;

foreach (array($directory, JPATH_BASE) as $dir)
{
if (file_exists($dir . $icon))
{
$path = str_replace(JPATH_BASE, ”, $dir);
$path = str_replace(‘\’, ‘/’, $path);
$this->addFavicon(Uri::base(true) . $path . $icon);
break;
}
}

return $contents;
}

if (!file_exists($directory . ‘/’ . $template . ‘/’ . $file))
{
$file = ‘index.php’;
}

// Load the language file for the template
$lang = JFactory::getLanguage();

// 1.5 or core then 1.6
$lang->load(‘tpl_’ . $template, JPATH_BASE, null, false, true)
|| $lang->load(‘tpl_’ . $template, $directory . ‘/’ . $template, null, false, true);

// Assign the variables
$this->template = $template;
$this->baseurl = Uri::base(true);
$this->params = isset($params[‘params’]) ? $params[‘params’] : new Registry;

// Load
$this->_template = $this->_loadTemplate($directory . ‘/’ . $template, $file);

return $this;
}

/**
* Parse a document template
*
* @return HtmlDocument instance of $this to allow chaining
*
* @since 1.7.0
*/
protected function _parseTemplate()
{
$matches = array();

if (preg_match_all(‘#<jdoc:include type=”([^”]+)”(.*)/>#iU’, $this->_template, $matches))
{
$template_tags_first = array();
$template_tags_last = array();

$options[‘title’] = (isset($args[3])) ? $args[3] : null;
}

parent::$_buffer[$options[‘type’]][$options[‘name’]][$options[‘title’]] = $content;

return $this;
}

/**
* Parses the template and populates the buffer
*
* @param array $params Parameters for fetching the template
*
* @return HtmlDocument instance of $this to allow chaining
*
* @since 1.7.0
*/
public function parse($params = array())
{
return $this->_fetchTemplate($params)->_parseTemplate();
}

/**
* Outputs the template to the browser.
*
* @param boolean $caching If true, cache the output
* @param array $params Associative array of attributes
*
* @return string The rendered data
*
* @since 1.7.0
*/
public function render($caching = false, $params = array())
{
$this->_caching = $caching;

if (empty($this->_template))
{
$this->parse($params);
}

*/
protected function render()
{
// Setup the document options.
$this->docOptions[‘template’] = $this->get(‘theme’);
$this->docOptions[‘file’] = $this->get(‘themeFile’, ‘index.php’);
$this->docOptions[‘params’] = $this->get(‘themeParams’);

if ($this->get(‘themes.base’))
{
$this->docOptions[‘directory’] = $this->get(‘themes.base’);
}
// Fall back to constants.
else
{
$this->docOptions[‘directory’] = defined(‘JPATH_THEMES’) ? JPATH_THEMES : (defined(‘JPATH_BASE’) ? JPATH_BASE : __DIR__) . ‘/themes’;
}

// Parse the document.
$this->document->parse($this->docOptions);

// Trigger the onBeforeRender event.
JPluginHelper::importPlugin(‘system’);
$this->triggerEvent(‘onBeforeRender’);

$caching = false;

if ($this->isClient(‘site’) && $this->get(‘caching’) && $this->get(‘caching’, 2) == 2 && !JFactory::getUser()->get(‘id’))
{
$caching = true;
}

// Render the document.
$data = $this->document->render($caching, $this->docOptions);

// Set the application output data.
$this->setBody($data);

// Trigger the onAfterRender event.
$this->triggerEvent(‘onAfterRender’);

$this->setUserState(‘users.login.form.data’, array(‘return’ => JUri::getInstance()->toString()));
$this->set(‘themeFile’, ‘offline.php’);
$this->setHeader(‘Status’, ‘503 Service Temporarily Unavailable’, ‘true’);
}

if (!is_dir(JPATH_THEMES . ‘/’ . $template->template) && !$this->get(‘offline’))
{
$this->set(‘themeFile’, ‘component.php’);
}

// Ensure themeFile is set by now
if ($this->get(‘themeFile’) == ”)
{
$this->set(‘themeFile’, $file . ‘.php’);
}

break;
}

parent::render();
}

/**
* Route the application.
*
* Routing is the process of examining the request environment to determine which
* component should receive the request. The component optional parameters
* are then set in the request object to be processed when the application is being
* dispatched.
*
* @return void
*
* @since 3.2
*/
protected function route()
{
// Execute the parent method
parent::route();

$Itemid = $this->input->getInt(‘Itemid’, null);

// Unset invalid system variables
foreach ($invalidInputVariables as $systemVariable)
{
$input->set($systemVariable, null);
}

// Abort when there are invalid variables
if ($invalidInputVariables)
{
throw new RuntimeException(‘Invalid input, aborting application.’);
}

// Perform application routines.
$this->doExecute();

// If we have an application document object, render it.
if ($this->document instanceof JDocument)
{
// Render the application output.
$this->render();
}

// If gzip compression is enabled in configuration and the server is compliant, compress the output.
if ($this->get(‘gzip’) && !ini_get(‘zlib.output_compression’) && ini_get(‘output_handler’) !== ‘ob_gzhandler’)
{
$this->compress();

// Trigger the onAfterCompress event.
$this->triggerEvent(‘onAfterCompress’);
}

// Send the application response.
$this->respond();

// Trigger the onAfterRespond event.
$this->triggerEvent(‘onAfterRespond’);
}

/**
* Check if the user is required to reset their password.

{
include_once __DIR__ . ‘/defines.php’;
}

if (!defined(‘_JDEFINES’))
{
define(‘JPATH_BASE’, __DIR__);
require_once JPATH_BASE . ‘/includes/defines.php’;
}

require_once JPATH_BASE . ‘/includes/framework.php’;

// Set profiler start time and memory usage and mark afterLoad in the profiler.
JDEBUG ? JProfiler::getInstance(‘Application’)->setStart($startTime, $startMem)->mark(‘afterLoad’) : null;

// Instantiate the application.
$app = JFactory::getApplication(‘site’);

// Execute the application.
$app->execute();

Artículos Recientes

Te puede interesar