--- /dev/null
+<?php
+/**
+ * The Horde_Tree_Jquerymobile class provides rendering of a tree as a jQuery
+ * Mobile list view.
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @author Michael Slusarz <slusarz@horde.org>
+ * @author Jan Schneider <jan@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @package Tree
+ */
+class Horde_Tree_Jquerymobile extends Horde_Tree_Base
+{
+ /**
+ * Allowed parameters for nodes.
+ *
+ * @var array
+ */
+ protected $_allowed = array(
+ 'icon',
+ 'special',
+ 'url',
+ );
+
+ /**
+ * Returns the tree.
+ *
+ * @return string The HTML code of the rendered tree.
+ */
+ public function getTree($static = false)
+ {
+ $tree = '';
+ foreach (array(true, false) as $special) {
+ foreach ($this->_root_nodes as $node_id) {
+ $tree .= $this->_buildTree($node_id, $special);
+ }
+ }
+
+ return $tree;
+ }
+
+ /**
+ * Recursive function to walk through the tree array and build the output.
+ *
+ * @param string $node_id The Node ID.
+ *
+ * @return string The tree rendering.
+ */
+ protected function _buildTree($node_id, $special)
+ {
+ $node = $this->_nodes[$node_id];
+ $output = '';
+
+ if ($node['special'] == $special) {
+ $output = '<li>';
+ if (isset($node['extra'][Horde_Tree::EXTRA_LEFT])) {
+ $output .= implode(' ', $node['extra'][Horde_Tree::EXTRA_LEFT]);
+ }
+ if (!empty($node['url'])) {
+ $output .= '<a href="#mailbox" foo="' . strval($node['url']) . '">';
+ }
+ $output .= $this->_getIcon($node_id) . $node['label'];
+ if (!empty($node['url'])) {
+ $output .= '</a>';
+ }
+ if (isset($node['extra'][Horde_Tree::EXTRA_RIGHT])) {
+ $output .= '<span class="ui-li-count">' . implode(' ', $node['extra'][Horde_Tree::EXTRA_RIGHT]) . '</span>';
+ }
+ $output .= '</li>';
+ }
+
+ if (isset($node['children'])) {
+ foreach ($node['children'] as $val) {
+ $output .= $this->_buildTree($val, $special);
+ }
+ }
+
+ return $output;
+ }
+
+ /**
+ * Sets the icon for the node.
+ *
+ * @param string $node_id The Node ID.
+ *
+ * @return string The node icon for the tree line.
+ */
+ protected function _getIcon($node_id)
+ {
+ $node = $this->_nodes[$node_id];
+ if (empty($node['icon'])) {
+ return '';
+ }
+ return '<img src="' . $node['icon'] . '" class="ui-li-icon">';
+ }
+
+}
<?xml version="1.0" encoding="UTF-8"?>
-<package packagerversion="1.4.9" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
-http://pear.php.net/dtd/tasks-1.0.xsd
-http://pear.php.net/dtd/package-2.0
-http://pear.php.net/dtd/package-2.0.xsd">
+<package packagerversion="1.9.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
<name>Tree</name>
<channel>pear.horde.org</channel>
<summary>Horde Tree API</summary>
- <description>This package provides a tree view of hierarchical information. It allows for expanding/collapsing of branches and maintains their state.
- </description>
+ <description>This package provides a tree view of hierarchical information. It allows for expanding/collapsing of branches and maintains their state.</description>
<lead>
<name>Chuck Hagenbuch</name>
<user>chuck</user>
<email>slusarz@horde.org</email>
<active>yes</active>
</lead>
- <date>2009-12-15</date>
+ <date>2010-11-15</date>
+ <time>20:08:17</time>
<version>
<release>0.1.0</release>
<api>0.1.0</api>
<api>beta</api>
</stability>
<license uri="http://www.gnu.org/copyleft/gpl.html">GPL</license>
- <notes>* Split driver code from main class into Base class.
- * Add simple HTML renderer.
- * Remove dependency on horde/Core.
- * Move javascript renderer to horde/Core.
- * Add Horde_Tree_Exception::.
- * Initial Horde 4 package.
+ <notes>
+* Add jQuery Mobile list view renderer.
+* Split driver code from main class into Base class.
+* Add simple HTML renderer.
+* Remove dependency on horde/Core.
+* Move javascript renderer to horde/Core.
+* Add Horde_Tree_Exception::.
+* Initial Horde 4 package.
</notes>
<contents>
- <dir name="/">
+ <dir baseinstalldir="/" name="/">
<dir name="lib">
<dir name="Horde">
<dir name="Tree">
<file name="Base.php" role="php" />
<file name="Exception.php" role="php" />
<file name="Html.php" role="php" />
+ <file name="Jquerymobile.php" role="php" />
<file name="Select.php" role="php" />
<file name="Simplehtml.php" role="php" />
- </dir> <!-- /lib/Horde/Tree -->
+ </dir> <!-- //lib/Horde/Tree -->
<file name="Tree.php" role="php" />
- </dir> <!-- /lib/Horde -->
- </dir> <!-- /lib -->
+ </dir> <!-- //lib/Horde -->
+ </dir> <!-- //lib -->
</dir> <!-- / -->
</contents>
<dependencies>
</dependencies>
<phprelease>
<filelist>
- <install name="lib/Horde/Tree/Base.php" as="Horde/Tree/Base.php" />
- <install name="lib/Horde/Tree/Exception.php" as="Horde/Tree/Exception.php" />
- <install name="lib/Horde/Tree/Html.php" as="Horde/Tree/Html.php" />
- <install name="lib/Horde/Tree/Select.php" as="Horde/Tree/Select.php" />
- <install name="lib/Horde/Tree/Simplehtml.php" as="Horde/Tree/Simplehtml.php" />
- <install name="lib/Horde/Tree.php" as="Horde/Tree.php" />
+ <install as="Horde/Tree.php" name="lib/Horde/Tree.php" />
+ <install as="Horde/Tree/Base.php" name="lib/Horde/Tree/Base.php" />
+ <install as="Horde/Tree/Exception.php" name="lib/Horde/Tree/Exception.php" />
+ <install as="Horde/Tree/Html.php" name="lib/Horde/Tree/Html.php" />
+ <install as="Horde/Tree/Jquerymobile.php" name="lib/Horde/Tree/Jquerymobile.php" />
+ <install as="Horde/Tree/Select.php" name="lib/Horde/Tree/Select.php" />
+ <install as="Horde/Tree/Simplehtml.php" name="lib/Horde/Tree/Simplehtml.php" />
</filelist>
</phprelease>
<changelog>
<release>
+ <version>
+ <release>0.0.1</release>
+ <api>0.0.1</api>
+ </version>
+ <stability>
+ <release>alpha</release>
+ <api>alpha</api>
+ </stability>
+ <date>2003-07-05</date>
+ <license uri="http://www.gnu.org/copyleft/gpl.html">GPL</license>
+ <notes>
+Initial release as a PEAR package
+ </notes>
+ </release>
+ <release>
<date>2006-05-08</date>
<time>23:51:48</time>
<version>
<api>alpha</api>
</stability>
<license uri="http://www.gnu.org/copyleft/gpl.html">GPL</license>
- <notes>Converted to package.xml 2.0 for pear.horde.org
+ <notes>
+Converted to package.xml 2.0 for pear.horde.org
</notes>
</release>
<release>
<version>
- <release>0.0.1</release>
- <api>0.0.1</api>
+ <release>0.1.0</release>
+ <api>0.1.0</api>
</version>
<stability>
- <release>alpha</release>
- <api>alpha</api>
+ <release>beta</release>
+ <api>beta</api>
</stability>
- <date>2003-07-05</date>
+ <date>2010-11-15</date>
<license uri="http://www.gnu.org/copyleft/gpl.html">GPL</license>
- <notes>Initial release as a PEAR package
+ <notes>
+* Split driver code from main class into Base class.
+ * Add simple HTML renderer.
+ * Remove dependency on horde/Core.
+ * Move javascript renderer to horde/Core.
+ * Add Horde_Tree_Exception::.
+ * Initial Horde 4 package.
</notes>
</release>
</changelog>
$is_open = $val->is_open;
$label = htmlspecialchars(Horde_String::abbreviate($val->label, 30 - ($val->level * 2)));
break;
+
+ case 'Jquerymobile':
+ $is_open = true;
+ $label = htmlspecialchars($val->display);
+ $icon = $val->icon;
+ $params['icon'] = $icon->icon;
+ $params['special'] = $val->special;
+ break;
}
if (!empty($opts['poll_info']) && $val->polled) {
$poll_info = $val->poll_info;
- if ($poll_info->unseen) {
- $this->unseen += $poll_info->unseen;
- if ($poll_info->recent) {
- $recent[$val->value] = $poll_info->recent;
+ if ($opts['render_type'] == 'Jquerymobile') {
+ if ($poll_info->unseen) {
+ $after = $poll_info->unseen;
}
+ } else {
+ if ($poll_info->unseen) {
+ $this->unseen += $poll_info->unseen;
+ if ($poll_info->recent) {
+ $recent[$val->value] = $poll_info->recent;
+ }
- $label = '<strong>' . $label . '</strong>';
- }
+ $label = '<strong>' . $label . '</strong>';
+ }
- $after = ' (' . $poll_info->unseen . '/' . $poll_info->msgs . ')';
+ $after = ' (' . $poll_info->unseen . '/' . $poll_info->msgs . ')';
+ }
}
if (!$val->container) {
*/
require_once dirname(__FILE__) . '/lib/Application.php';
-Horde_Registry::appInit('imp', array('impmode' => 'mimp'));
+Horde_Registry::appInit('imp', array('impmode' => 'imp'));
$view = new Horde_View(array('templatePath' => IMP_TEMPLATES . '/mobile'));
new Horde_View_Helper_Text($view);
-$view->logout = Horde::getServiceLink('logout')->setRaw(false);
+if (empty($conf['user']['allow_folders'])) {
+ $view->allowFolders = false;
+} else {
+ $view->allowFolders = true;
+
+ /* Initialize the IMP_Imap_Tree object. */
+ $imptree = $injector->getInstance('IMP_Imap_Tree');
+ $imptree->setIteratorFilter(IMP_Imap_Tree::FLIST_NOCONTAINER);
+ $tree = $imptree->createTree('mobile_folders', array(
+ 'poll_info' => true,
+ 'render_type' => 'Jquerymobile'
+ ));
+ $view->tree = $tree->getTree(true);
+}
+
+$view->portal = Horde::getServiceLink('portal', 'horde')->setRaw(false);
+$view->logout = Horde::getServiceLink('logout')->setRaw(false);
$title = _("Mobile Mail");
require $registry->get('templates', 'horde') . '/common-header-mobile.inc';
echo $view->render('head.html.php');
-echo $view->render('folders.html.php');
+if (!empty($conf['user']['allow_folders'])) {
+ echo $view->render('folders.html.php');
+}
echo $view->render('mailbox.html.php');
echo $view->render('message.html.php');
require $registry->get('templates', 'horde') . '/common-footer-mobile.inc';
<div id="folders" data-role="page">
<div data-role="header">
- <a href="<?php echo Horde::getServiceLink('portal', 'horde')?>" class="ui-btn-left"><?php echo _("Portal")?></a>
+ <a href="<?php echo $this->portal ?>" class="ui-btn-left"><?php echo _("Portal")?></a>
<h1><?php echo _("Folders") ?></h1>
<?php if ($this->logout): ?>
<a href="<?php echo $this->logout ?>" rel="external" data-theme="e" data-icon="delete" class="ui-btn-right"><?php echo _("Log out") ?></a>
</div>
<div data-role="content">
<ul data-role="listview">
- <li><a href="#mailbox"><img src="themes/graphics/folders/inbox.png" class="ui-li-icon" />Inbox<span class="ui-li-count">99</span></a></li>
- <li><a href="#mailbox"><img src="themes/graphics/folders/folder.png" class="ui-li-icon" />Another Folder</a></li>
- <li><a href="#mailbox"><img src="themes/graphics/folders/folder.png" class="ui-li-icon" /> Sub folder</a></li>
- <li><a href="#"><img src="themes/graphics/folders/trash.png" class="ui-li-icon" />Trash</a></li>
+ <?php echo $this->tree ?>
</ul>
</div>
</div>
<div id="mailbox" data-role="page">
<div data-role="header">
+ <?php if (!$this->allowFolders): ?>
+ <a href="<?php echo $this->portal ?>" class="ui-btn-left"><?php echo _("Portal")?></a>
+ <?php endif ?>
<h1><?php echo _("Inbox") ?></h1>
<?php if ($this->logout): ?>
<a href="<?php echo $this->logout ?>" rel="external" data-theme="e" data-icon="delete" class="ui-btn-right"><?php echo _("Log out") ?></a>