nur-sery/nur_src/v/navbar.php

125 lines
4.1 KiB
PHP

<?php
namespace nur\v;
use nur\co;
use nur\str;
use nur\v\base\MenuManager;
use nur\v\html5\Html5NavbarManager;
use nur\v\model\IMenuManager;
use nur\v\model\INavbarManager;
/**
* Class navbar: gestion globale de la barre de navigation
*/
class navbar {
const MANAGER_CLASS = Html5NavbarManager::class;
protected static $manager_class;
/**
* spécifier la classe à utiliser pour instancier le gestionnaire de
* barre de navigation
*
* cette méthode *doit* être appelée avant d'appeler la méthode
* {@link manager()}
*/
static final function set_manager_class(string $manager_class) {
self::$manager_class = $manager_class;
}
/** @var INavbarManager */
protected static $manager;
static final function set_manager(INavbarManager $manager) {
self::$manager = $manager;
}
/** obtenir l'instance globale de gestionnaire de navbar */
static final function manager(): INavbarManager {
if (self::$manager === null) {
$manager_class = self::$manager_class;
if ($manager_class === null) $manager_class = static::MANAGER_CLASS;
self::$manager = new $manager_class();
}
return self::$manager;
}
static final function __callStatic($name, $args) {
$name = str::us2camel($name);
return call_user_func_array([self::manager(), $name], $args);
}
#############################################################################
const MENU_MANAGER_CLASS = MenuManager::class;
protected static $menu_manager_class;
/**
* spécifier la classe à utiliser pour instancier le gestionnaire de
* menu
*
* cette méthode *doit* être appelée avant d'appeler la méthode
* {@link menu_manager()}
*/
static final function set_menu_manager_class(string $menu_manager_class) {
self::$menu_manager_class = $menu_manager_class;
}
/** @var MenuManager */
protected static $menu_manager;
static final function set_menu_manager(IMenuManager $menu_manager) {
self::$menu_manager = $menu_manager;
}
/** obtenir l'instance globale de gestionnaire de menu */
static final function menu_manager(): IMenuManager {
if (self::$menu_manager === null) {
$menu_manager_class = self::$menu_manager_class;
if ($menu_manager_class === null) $menu_manager_class = static::MENU_MANAGER_CLASS;
self::$menu_manager = new $menu_manager_class();
}
return self::$menu_manager;
}
#############################################################################
static final function push($mark, ?array $start=null, ?array $end=null): void {
co::_write(self::manager()->push($mark, $start, $end));
}
static final function pop($mark): void {
co::_write(self::manager()->pop($mark));
}
static final function started(): bool { return self::manager()->started(); }
static final function start($options=null): void {
co::_write(self::manager()->start($options));
}
static final function end(): void {
co::_print(self::manager()->end());
}
static final function nav($options=null, ?array $items=null): void {
$navbar = self::manager();
co::_write($navbar->startNav($options));
if ($items !== null) {
foreach ($items as $item) {
co::_write($navbar->navItem($item));
}
}
}
static final function item($item): void {
co::_write(self::manager()->navItem($item));
}
static final function brand($brand, ?array $options=null): void { self::item(nb::brand($brand, $options)); }
static final function text($text, ?array $options=null): void { self::item(nb::text($text, $options)); }
static final function link($url, $link=null, ?array $options=null): void { self::item(nb::link($url, $link, $options)); }
static final function button($url, $button=null, ?array $options=null): void { self::item(nb::button($url, $button, $options)); }
static final function menu($text, ?array $links=null, ?array $options=null): void { self::item(nb::menu($text, $links, $options)); }
static final function literal($literal, ?array $options=null): void { self::item(nb::literal($literal, $options)); }
static final function endnav(): void {
co::_print(self::manager()->endNav());
}
}