[ Index ]
 

Code source de Horde 3.1.3

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/lib/Horde/Mobile/Renderer/ -> html.php (source)

   1  <?php
   2  /**
   3   * Horde_Mobile_Renderer:: output module for simple HTML and
   4   * Imode/Avantgo/similar devices.
   5   *
   6   * $Horde: framework/Mobile/Mobile/Renderer/html.php,v 1.28.10.6 2006/01/01 21:28:26 jan Exp $
   7   *
   8   * Copyright 2002-2006 Chuck Hagenbuch <chuck@horde.org>
   9   *
  10   * See the enclosed file COPYING for license information (LGPL). If you
  11   * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
  12   *
  13   * @author  Chuck Hagenbuch <chuck@horde.org>
  14   * @since   Horde 3.0
  15   * @package Horde_Mobile
  16   */
  17  class Horde_Mobile_Renderer_html extends Horde_Mobile_Renderer {
  18  
  19      /**
  20       * Properly encode characters for output to an HTML browser.
  21       *
  22       * @param string $input  Characters to encode.
  23       *
  24       * @return string  The encoded text.
  25       */
  26      function escape($input)
  27      {
  28          return @htmlspecialchars($input, ENT_COMPAT, NLS::getCharset());
  29      }
  30  
  31      /**
  32       * Creates the page in the appropriate markup. Depending on the
  33       * clients browser type pure HTML, handheldfriendly AvantGo HTML,
  34       * i-mode cHTML, or MML is created.
  35       *
  36       * @param Horde_Mobile $deck  The deck to render.
  37       */
  38      function render(&$deck)
  39      {
  40          if ($deck->_debug) {
  41              header('Content-Type: text/plain; charset=' . NLS::getCharset());
  42          } else {
  43              header('Content-Type: text/html; charset=' . NLS::getCharset());
  44          }
  45          header('Vary: Accept-Language');
  46  
  47          if (!$this->isBrowser('mml')) {
  48              echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n";
  49          }
  50  
  51          echo !empty($GLOBALS['language']) ? '<html lang="' . strtr($GLOBALS['language'], '_', '-') . '">' : '<html>';
  52          echo '<head>';
  53  
  54          if ($this->isBrowser('avantgo')) {
  55              echo '<meta name="HandheldFriendly" content="True">';
  56          }
  57  
  58          printf("<title>%s</title>\n", $this->escape($deck->get('title')));
  59  
  60          if ($deck->_simulator) {
  61              // Use simulator (mobile theme) stylesheet.
  62              echo Horde::stylesheetLink('horde', 'mobile');
  63          }
  64  
  65          echo '</head><body>';
  66  
  67          if ($deck->_simulator) {
  68              echo "<center><br />\n";
  69              // Create default device simulator table layout with
  70              // central CSS layout.
  71              echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
  72              echo "<tr><td colspan=\"3\" class=\"top\">&nbsp;</td></tr>\n";
  73              echo "<tr><td valign=\"top\" class=\"left\">&nbsp;</td>\n";
  74              echo "<td valign=\"top\" class=\"display\">\n";
  75          }
  76  
  77          $divstyle = '';
  78          if ($this->hasQuirk('scroll_tds') && $deck->_simulator) {
  79              // Make content of table element scrollable (Horde_Mobile
  80              // simulator).
  81              $divstyle = ' class="simdev"';
  82          }
  83          echo '<div' . $divstyle . '>';
  84  
  85          if (($cnt = count($deck->_cards)) !== 0) {
  86              $i = 0;
  87              foreach ($deck->_cards as $card) {
  88                  if ($i != 0) {
  89                      echo '<hr />';
  90                  }
  91                  $this->_renderCard($card);
  92                  $i++;
  93              }
  94          } else {
  95              foreach ($deck->_elements as $page_element) {
  96                  $this->renderElement($page_element);
  97              }
  98          }
  99  
 100          echo '</div>';
 101  
 102          if ($deck->_simulator) {
 103              // Display lower part of Horde_Mobile default device
 104              // simulator.
 105              echo '</td><td valign="top" class="right">&nbsp;</td></tr><tr><td colspan="3" class="bottom">&nbsp;</td></tr></table></center>';
 106          }
 107  
 108          echo '</body></html>';
 109      }
 110  
 111      function _renderCard(&$card)
 112      {
 113          $name = $card->get('name') ? ' name="' . $this->escape($card->get('name')) . '"' : '';
 114          printf('<a%s>%s</a>', $name, $card->get('title'));
 115  
 116          if (count($card->_softkeys)) {
 117              foreach ($card->_softkeys as $key) {
 118                  echo ' | <a href="' . $key['url'] . '">' .  $this->escape($key['label']) . '</a>';
 119              }
 120          }
 121  
 122          // Render all tags.
 123          foreach ($card->_elements as $page_element) {
 124              $this->renderElement($page_element);
 125          }
 126      }
 127  
 128      function _renderLink(&$link)
 129      {
 130          if ($link->get('title') &&
 131              !$this->isBrowser('avantgo') &&
 132              !$this->isBrowser('imode') &&
 133              !$this->isBrowser('mml')) {
 134              $title_option = sprintf(' onmouseover="self.status=\'%s\';return true;"',
 135                                      $this->escape($link->get('title')));
 136          } else {
 137              $title_option = '';
 138          }
 139  
 140          $accesskey_option = '';
 141          if ($link->get('accesskey')) {
 142              if ($this->isBrowser('imode')) {
 143                  $accesskey_option = sprintf(' accesskey="%d"', $link->get('accesskey'));
 144              } elseif ($this->isBrowser('mml')) {
 145                  $accesskey_option = sprintf(' directkey="%d"', $link->get('accesskey'));
 146              }
 147          }
 148  
 149          printf('<a href="%s"%s%s>%s</a>',
 150                 str_replace('&amp;amp;', '&amp;', $this->escape($link->get('url'))),
 151                 $title_option, $accesskey_option,
 152                 $this->escape($link->get('label')));
 153      }
 154  
 155      function _renderLinkset(&$linkset)
 156      {
 157          if (count($linkset->_elements)) {
 158              echo '<ol>';
 159              foreach ($linkset->_elements as $val) {
 160                  echo '<li>';
 161                  $this->_renderLink($val);
 162                  echo '</li>';
 163              }
 164              echo '</ol>';
 165          }
 166      }
 167  
 168      function _renderText(&$element)
 169      {
 170          foreach ($element->_attributes as $attribute) {
 171              echo '<' . $attribute . '>';
 172          }
 173  
 174          if ($element->get('linebreaks')) {
 175              echo nl2br($this->escape($element->get('text')));
 176          } else {
 177              echo $this->escape($element->get('text'));
 178          }
 179  
 180          $attributes = array_reverse($element->_attributes);
 181          foreach ($attributes as $attribute) {
 182              echo '</' . $attribute . '>';
 183          }
 184      }
 185  
 186      function _renderImage(&$image)
 187      {
 188          $attributes = '';
 189          foreach ($image->_attributes as $attribute => $value) {
 190              $attributes .= sprintf(' %s="%s"', $attribute, $value);
 191          }
 192          printf('<img src="%s.png"%s />', $image->_src, $attributes);
 193      }
 194  
 195      function _renderForm(&$form)
 196      {
 197          printf('<form action="%s" method="%s">', $form->get('url'), $form->get('method'));
 198          parent::_renderForm($form);
 199          echo '</form>';
 200      }
 201  
 202      function _renderInput(&$input)
 203      {
 204          $type = 'type="' . $input->get('type') . '"';
 205          $size = $input->get('size') ? sprintf('size="%d"', $input->get('size')) : '';
 206          $maxlength = $input->get('maxlength') ? sprintf('maxlength="%d"', $input->get('maxlength')) : '';
 207  
 208          if ($this->isBrowser('imode')) {
 209              $mode = sprintf(' istyle="%d"', $input->get('mode'));
 210          } elseif ($this->isBrowser('mml')) {
 211              $mode = $this->_getMode($input->get('mode'));
 212          } else {
 213              $mode = '';
 214          }
 215  
 216          // Create HTML input.
 217          printf('%s <input %s name="%s" value="%s"%s%s%s/>',
 218                 $this->escape($input->get('label')), $type,
 219                 $this->escape($input->get('name')), $this->escape($input->get('value')), $size, $maxlength, $mode);
 220      }
 221  
 222      function _renderTextarea(&$textarea)
 223      {
 224          if ($this->isBrowser('imode')) {
 225              $mode = sprintf(' istyle="%d"', $this->mode);
 226          } elseif ($this->isBrowser('mml')) {
 227              $mode = $this->_getMode($this->mode);
 228          } else {
 229              $mode = '';
 230          }
 231  
 232          $wrap = '';
 233          if (!$this->isBrowser('imode') && !$this->isBrowser('mml')) {
 234              $wrap = ' wrap="virtual"';
 235          }
 236  
 237          printf('%s<br /><textarea name="%s" rows="%s" cols="%s"%s%s>%s</textarea>',
 238                 $this->escape($textarea->get('label')), $textarea->get('name'), $textarea->get('rows'),
 239                 $textarea->get('cols'), $mode, $wrap, $textarea->get('value'));
 240      }
 241  
 242      function _renderSelect(&$select)
 243      {
 244          echo '<select name="' . $select->get('name') . '" size="1">';
 245          foreach ($select->_options as $val) {
 246              if ($val['value'] == $select->_value) {
 247                  $sel = ' selected="selected"';
 248              } else {
 249                  $sel = '';
 250              }
 251              echo '<option' . $sel . ' value="' . $val['value'] . '">' . $this->escape($val['label']) . '</option>';
 252          }
 253          echo '</select>';
 254      }
 255  
 256      function _renderRadio(&$radio)
 257      {
 258          foreach ($radio->_buttons as $val) {
 259              $sel = ($val['value'] == $radio->_value) ? ' checked="checked"' : '';
 260              printf('<input type="radio" name="%s"%s value="%s" /> %s<br />',
 261                     $radio->get('name'), $sel, $val['value'],
 262                     $this->escape($val['label']));
 263          }
 264      }
 265  
 266      function _renderCheckbox(&$checkbox)
 267      {
 268          $state = $checkbox->isChecked() ? ' checked="checked"' : '';
 269          printf('<input type="checkbox" name="%s"%s value="%s" /> %s<br />',
 270                 $checkbox->get('name'), $state, $checkbox->get('value'),
 271                 $this->escape($checkbox->get('label')));
 272      }
 273  
 274      function _renderSubmit(&$submit)
 275      {
 276          $name = !empty($submit->_name) ? ' name="' . $submit->_name . '"' : '';
 277          printf('<input type="submit"%s value="%s" /><br />',
 278                 $name, $this->escape($submit->_label));
 279      }
 280  
 281      function _renderHidden(&$hidden)
 282      {
 283          printf('<input type="hidden" name="%s" value="%s" />',
 284                 $hidden->get('name'), $hidden->get('value'));
 285      }
 286  
 287      function _renderTable(&$table)
 288      {
 289          $border = $table->get('border');
 290          $padding = $table->get('padding');
 291          $spacing = $table->get('spacing');
 292  
 293          echo '<table';
 294          if (!is_null($border)) {
 295              echo ' border="' . $border . '"';
 296          }
 297          if (!is_null($padding)) {
 298              echo ' cellpadding="' . $padding . '"';
 299          }
 300          if (!is_null($spacing)) {
 301              echo ' cellspacing="' . $spacing . '"';
 302          }
 303          echo '>';
 304  
 305          parent::_renderTable($table);
 306  
 307          // Terminate table.
 308          if ($this->isBrowser('mml')) {
 309              echo '</table><br />';
 310          } else {
 311              // MML has problems with the clear attribute.
 312              echo '</table><br clear="all">';
 313          }
 314      }
 315  
 316      function _renderPhone(&$phone)
 317      {
 318          if ($this->isBrowser('imode')) {
 319              // Create phoneto: link for i-Mode.
 320              printf('<p><a href="phoneto:%s">%s</a></p>',
 321                     $phone->get('number'), $phone->get('label'));
 322          } elseif ($this->isBrowser('mml')) {
 323              // Create tel: link for MML.
 324              printf('<p><a href="tel:%s">%s</a></p>',
 325                     $phone->get('number'), $phone->get('label'));
 326          } else {
 327              // Display phone number as plain text.
 328              printf('<p><big>%s</big></p>', $phone->get('label'));
 329          }
 330      }
 331  
 332      function _renderRule(&$rule)
 333      {
 334          $width = $rule->get('width');
 335          $size = $rule->get('size');
 336  
 337          echo '<hr' . ($width ? ' width="' . $width . '"' : '') . ($size ? ' size="' . $size . '"' : '') . " />\n";
 338      }
 339  
 340      function _getMode($mode)
 341      {
 342          switch ($mode) {
 343          case 'katakana':
 344              return ' mode="katakana"';
 345  
 346          case 'hiragana':
 347              return ' mode="hiragana"';
 348  
 349          case 'numeric':
 350              return ' mode="numeric"';
 351  
 352          case 'alpha':
 353          default:
 354              return ' mode="alphabet"';
 355          }
 356      }
 357  
 358  }


Généré le : Sun Feb 25 18:01:28 2007 par Balluche grâce à PHPXref 0.7