<?php
namespace nur\v\model;

/**
 * Class INavigablePage: une page structurée: son contenu est précédé d'une
 * barre de navigation
 */
interface INavigablePage extends IBasicPage {
  /**
   * retourner les options utilisées pour instancier le gestionnaire de barre
   * de navigation
   */
  function NAVBAR_OPTIONS(): ?array;

  /** faut-il afficher la barre de navigation? */
  function navigationShowNavigation(): bool;

  /**
   * indiquer si cet objet gère complètement de lui-même la mise en page de la
   * navigation. Dans ce cas, le container ne fournit pas l'implémentation par
   * défaut de la navigation et fait usage des méthodes suivantes:
   * - {@link printStartNavigation()}
   * - {@link printEndNavigation()}
   * - {@link printStartContainer()}
   * - {@link printEndContainer()}
   */
  function navigationImplementsOwnLayout(): bool;

  /** retourner les options pour instancier le container */
  function CONTAINER_OPTIONS(): ?array;

  function beforePrintStartNavigation(): void;
  function printStartNavigation(): void;
  function afterPrintStartNavigation(): void;

  function beforePrintNavigation(): void;
  function printNavigation(): void;
  function afterPrintNavigation(): void;

  function beforePrintEndNavigation(): void;
  function printEndNavigation(): void;
  function afterPrintEndNavigation(): void;

  function beforePrintStartContainer(): void;
  function printStartContainer(): void;
  function afterPrintStartContainer(): void;

  function beforePrintEndContainer(): void;
  function printEndContainer(): void;
  function afterPrintEndContainer(): void;
}
