125 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			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());
 | |
|   }
 | |
| }
 |