(Lys) Layout\HTML

Jeudi 04 Septembre 2025, 23:29:19

<?php/** * Lys * * GNU General Public License * * Copyright © 2007 - 2023, Yohann Schwan. All rights reserved. */namespace Lys\Layout {  class Html extends \Lys\Layout {    use XmlHelper, HtmlHelper, HtmlParserHelper, HtmlFormHelper;    /**     * @args void     * @return void     */    function __wakeup()    {      parent::__wakeup();       #      # Fix headers      #      header('Content-Type:text/html;charset=UTF-8');      header('X-UA-Compatible:IE=edge');      #      # Fix Self      #      $self = $this['self'];      foreach(array('title', 'subtitle', 'date') as $k)      {        if($v = array_value($k, $self))        {          $self[$k] = $this->_analyse($v);        }      }      foreach(array('text') as $k)      {        if($v = array_value($k, $self))        {          $self[$k] = $this->parse($v);        }      }      $this['self'] = $self;      #      # Compress      #      if(!DEBUG_LEVEL)      {        ob_start('ob_gzhandler');      }    }    /**     * @args string $str = ''     * @return void     */    function send($str = '')    {      if(is_empty($str = trim($str)))      {        $str = $this->fallback();      }      parent::send(''      . '<!DOCTYPE html>'        . '<html lang="' . $this['user']['language'] . '"'          . ' itemscope'          . ' itemtype="http://schema.org/' . $this['self']['schema'] . '">'        . '<head>'          . '<meta charset="' . $this['user']['charset'] . '">'          . '<meta http-equiv="x-ua-compatible" content="IE=edge">'          # META          . $this->head()          # Default CSS          . '<link rel="stylesheet" ' . $this->href('css') . ' type="text/css">'                  . '</head>'        . '<body class="' . strtoupper($this['route']['prefix_name']) . '">'          . '<!--[if lt IE 7]>'            . '<div class="ie ie6">'          . '<![endif]-->'          . '<!--[if IE 7]>'            . '<div class="ie ie7">'          . '<![endif]-->'          . (($tmp = $this->banner())            ? ''            . '<header class="container">'              . $tmp            . '</header>'            : ''          )          . $this->before()          . '<div class="container" id="main">'            . $str          . '</div>'          . $this->after()          . (($tmp = $this->contentinfo())            ? ''            . '<footer class="container">'              . $tmp            . '</footer>'            : ''          )          . '<!--[if lt IE 7]>'              . '<div class="container">'                . '<div class="inner">'                  . '<div class="c6 warning">'                    . $this->L('E_IE_6')                  . '</div>'                . '</div>'              . '</div>'            . '</div>'          . '<![endif]-->'          . '<!--[if IE 7]>'              . '<div class="container">'                . '<div class="inner">'                  . '<div class="c6 warning">'                    . $this->L('E_IE_7')                  . '</div>'                . '</div>'              . '</div>'            . '</div>'          . '<![endif]-->'          . $this->message()          . '<!--[if gt IE 7]><!-->'            . '<noscript class="container">'              . '<div class="inner">'                . '<div class="c6 warning">'                  . $this->L('E_NO_JS')                . '</div>'              . '</div>'            . '</noscript>'            # Default JS            . $this->script()          . '<!--<![endif]-->'        . '</body>'      . '</html>'      );    }    /**     * @args string $str = ''     * @return string     */    protected function head($str = '')    {      $self = $this['self'];      if(empty($self['image']))      {        $self['image'] = $this['U_IMG_DEFAULT'];      }      $site = $this->L('site_title');      $meta = $this['meta'];      #      # Title      #      if('home' == $this['route']['name'])      {        $str .= $site;      }      else {        $str .= $self['title'] . ($self['subtitle'] ? ' - ' . $self['subtitle'] : '') . $str . ' - ' . $site;      }      $str = '<title>' . $this->clear($str) . '</title>';      #      # Fix OpenGraph      #      $og = (array) $this['og'] + array(        'site_name' => $site,        'locale'  => $this['user']['locale'],        'title'   => $self['title'],        'url'     => SITE_HTTP . SITE_HOST . $this['route']['path'],        'image'   => site_path($self['image'], true),      );      if($self['text'])      {        $meta['description'] = substr(($self['subtitle'] ? $self['subtitle'] . ' - ' : '') . strip_tags($self['text']), 0, 158);      }      #      # Append META and LINK      #      foreach($meta as $k => $v)      {        $str .= '<meta name="' . $k . '" content="' . $this->clear($v) . '">';      }      foreach($og as $k => $v)      {        $str .= '<meta property="og:' . $k . '" content="' . $this->clear($v) . '">';      }      foreach((array) $this['fb'] as $k => $v)      {        $str .= '<meta property="fb:' . $k . '" content="' . $this->clear($v) . '">';      }      foreach((array) $this['link'] as $k => $v)      {        $str .= '<link rel="' . $k . '" href="' . $this->escape($v) . '">';      }      return $str;    }    /**     * @args string $str = ''     * @return string     */    protected function message($str = '')    {      if($str)      {        # Ok !        $id = 'message';      }      elseif($str = $this['self']['result'])      {        # Ok !        $id = 'result';      }      else {        return '';      }      return ''      . '<div id="' . $id . '" class="fullscreen">'        . '<div class="off">'          . '<div class="inner">'            . $str            . '<div class="c6 uRight">'              . '<nav class="u1 off">'                . '<span class="box ok"><a href="#return">' . $this->L('message_close') . '</a></span>'              . '</nav>'            . '</div>'          . '</div>'        . '</div>'      . '</div>';    }    /**     * @args string $str = ''     * @return string     */    protected function banner($str = '')    {      return ''      . '<div id="banner" class="inner">'        . '<h1 class="u4">'          . $this->a('banner', array(), 'image')          . (($tmp = $this->L('site_subtitle'))            ? '<small>' . $tmp . '</small>'            : ''          )        . '</h1>'        . $str      . '</div>';    }    /**     * @args string $str = ''     * @return string     */    protected function before($str = '')    {      if('home' == $this['route']['name'])      {        return '';      }      return ''      . '<div class="container" id="before">'        . '<div class="inner">'          . '<h1 class="u4">'            . '<a href="' . $this['route']['path'] . '">' . str_replace(array('. ', '! ', '? '), array('.<br>', '!<br>', '?<br>'), $this['self']['title']) . '</a>'          . '</h1>'        . '</div>'        . (($tmp = $this->informations())          ? ''          . '<div class="inner">'            . $tmp          . '</div>'          : ''        )        . $str      . '</div>';    }    /**     * @args string $str = ''     * @return string     */    protected function informations($str = '')    {      if($dt = $this['self']['date'])      {        $dt = ucfirst($this->datetime($dt));      }      else {        $dt = '';      }      if($tmp = $this['self']['subtitle'])      {        $str .= ''        . '<b>' . $tmp . '</b>'        . ($dt          ? '<span class="date"><span class="os"><br></span><span class="hs"> | </span>' . $dt . '</span>'          : ''        );      }      elseif($dt)      {        $str .= $dt;      }      if($str)      {        return '<p class="u4">' . $str . '</p>';      }    }    /**     * @args string $str = ''     * @return string     */    protected function after($str = '')    {      if($str)      {        return ''        . '<div class="container" id="after">'          . '<div class="inner">'            . $str          . '</div>'        . '</div>';      }    }    /**     * @args string $str = ''     * @return string     */    protected function contentinfo($str = '')    {      if($tmp = $this->L('site_copyright'))      {        $str .= ''        . '<div class="u4">'          . $tmp        . '</div>';      }      if($str)      {        return '<div class="inner">' . $str . '</div>';      }    }    /**     * @args string $str = ''     * @return string     */    protected function script($str = '')    {      $str .= (self::$useMathJax        ? 'var useMathJax = true;'        : 'var useMathJax = false;'      );      return ''      . '<script type="text/javascript">' . $str . '</script>'      . '<script type="text/javascript" ' . $this->src('js', array(), true) . '></script>';    }  }}