nur-sery/nur_src/v/html5/Html5NavigablePageContainer...

97 lines
2.9 KiB
PHP

<?php
namespace nur\v\html5;
use nur\co;
use nur\session;
use nur\v\ly;
use nur\v\model\IBasicPage;
use nur\v\model\INavigablePage;
use nur\v\model\IPage;
use nur\v\navbar;
use nur\v\v;
class Html5NavigablePageContainer extends Html5BasicPageContainer {
protected function overridePrint(IPage $page): void {
if ($this->isAutocloseSession()) session::close();
if ($page instanceof IBasicPage) {
if ($page->haveContent()) {
$this->doResolveConfig();
$this->haveOutput = true;
$this->printStartHtml();
$this->printStartHead();
$this->printCss();
$this->printJs();
$this->printScript();
$this->printHeadTitle();
$this->printEndHead();
$this->printStartBody();
if ($page instanceof INavigablePage) {
$showNavigation = $page->navigationShowNavigation();
$implementsOwnLayout = $page->navigationImplementsOwnLayout();
$containerOptions = $page->CONTAINER_OPTIONS();
} else {
$showNavigation = false;
$containerOptions = null;
}
if ($showNavigation) {
$page->beforePrintStartNavigation();
if ($implementsOwnLayout) $page->printStartNavigation();
else $this->printStartNavigation($page->NAVBAR_OPTIONS());
$page->afterPrintStartNavigation();
$page->beforePrintNavigation();
$page->printNavigation();
$page->afterPrintNavigation();
$page->beforePrintEndNavigation();
if ($implementsOwnLayout) $page->printEndNavigation();
else $this->printEndNavigation();
$page->afterPrintEndNavigation();
$page->beforePrintStartContainer();
if ($implementsOwnLayout) $page->printStartContainer();
else $this->printStartContainer($containerOptions);
$page->afterPrintStartContainer();
} else {
$this->printStartContainer($containerOptions);
}
$this->printContent();
# s'assurer que le layout est correctement fermé
ly::end();
if ($showNavigation) {
$page->beforePrintEndContainer();
if ($implementsOwnLayout) $page->printEndContainer();
else $this->printEndContainer();
$page->afterPrintEndContainer();
} else {
$this->printEndContainer();
}
$this->printEndBody();
$this->printEndHtml();
}
} else {
# si ce n'est pas une instance de IBasicPage, l'imprimer tel quel
if ($page->haveContent()) {
$this->haveOutput = true;
co::_write([$this->page]);
}
}
}
function printStartNavigation(?array $options): void {
navbar::start($options);
}
function printEndNavigation(): void {
navbar::end();
}
function printStartContainer(?array $options): void {
co::_print(v::sdiv(["class" => ["container"]]));
}
function printEndContainer(): void {
co::_print(v::ediv());
}
}