]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
start making more menu work
authorEvan Prodromou <evan@status.net>
Wed, 6 Jul 2011 22:40:02 +0000 (18:40 -0400)
committerEvan Prodromou <evan@status.net>
Wed, 6 Jul 2011 22:40:02 +0000 (18:40 -0400)
lib/groupsnav.php
lib/menu.php
lib/moremenu.php [new file with mode: 0644]
theme/base/css/display.css

index b060153f88e5c116d6924fb5c847dfcb673d91ce..5578c2feceab46bcb3d0d6c2fa650c751e60e38b 100644 (file)
@@ -44,7 +44,7 @@ if (!defined('STATUSNET')) {
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
  * @link      http://status.net/
  */
-class GroupsNav extends Menu
+class GroupsNav extends MoreMenu
 {
     protected $user;
     protected $groups;
index b92b37dbb1b3e788d852d74c62509e2b600a6c1c..281ef7797be7c4af1c9aa2179cbd4df59ebbaf13 100644 (file)
@@ -104,7 +104,7 @@ class Menu extends Widget
         }
     }
     
-    function item($actionName, $args, $label, $description, $id=null)
+    function item($actionName, $args, $label, $description, $id=null, $cls=null)
     {
         if (empty($id)) {
             $id = $this->menuItemID($actionName, $args);
@@ -116,7 +116,8 @@ class Menu extends Widget
                              $label,
                              $description,
                              $this->isCurrent($actionName, $args),
-                             $id);
+                             $id,
+                             $cls);
     }
 
     function isCurrent($actionName, $args)
diff --git a/lib/moremenu.php b/lib/moremenu.php
new file mode 100644 (file)
index 0000000..e8c16b0
--- /dev/null
@@ -0,0 +1,121 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * A menu with a More... button to show more elements
+ * 
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Widget
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * A menu with a More... element to show more items
+ *
+ * @category  General
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class MoreMenu extends Menu
+{
+    const SOFT_MAX = 5;
+    const HARD_MAX = 15;
+    
+    /**
+     * Show a menu with a limited number of elements
+     *
+     * @param
+     *
+     * @return
+     */
+
+    function show()
+    {
+        $items = $this->getItems();
+        $tag = $this->tag();
+
+        $attrs = array('class' => 'nav');
+
+        if (!is_null($tag)) {
+            $attrs['id']  = 'nav_' . $tag;
+        }
+
+        if (Event::handle('StartNav', array($this, &$tag, &$items))) {
+
+            $this->out->elementStart('ul', $attrs);
+
+            $total = count($items);
+
+            if ($total <= self::SOFT_MAX + 1) {
+                $toShow = $items;
+            } else {
+                $toShow = array_slice($items, 0, self::SOFT_MAX);
+            }
+
+            foreach ($toShow as $item) {
+                list($actionName, $args, $label, $description, $id) = $item;
+                $this->item($actionName, $args, $label, $description, $id);
+            }
+
+            if ($total > self::SOFT_MAX + 1) {
+                $this->out->elementStart('li');
+                $this->out->element('a', array('href' => '#'),
+                                    _('More ▼'));
+                $this->out->elementEnd('li');
+
+                $extended = array_slice($items, self::SOFT_MAX, self::HARD_MAX - self::SOFT_MAX);
+
+                foreach ($extended as $item) {
+                    list($actionName, $args, $label, $description, $id) = $item;
+                    $this->item($actionName, $args, $label, $description, $id, 'extended_menu');
+                }
+
+                $seeAll = $this->seeAllItem();
+
+                if (!empty($seeAll)) {
+                    list($actionName, $args, $label, $description, $id) = $seeAll;
+                    $this->item($actionName, $args, $label, $description, $id, 'extended_menu see_all');
+                }
+            }
+            
+            $this->out->elementEnd('ul');
+
+            Event::handle('EndNav', array($this, $tag, $items));
+        }
+    }
+
+    function seeAllItem()
+    {
+        return null;
+    }
+    
+}
index c9655d52c06c75b46e29fbb127d4e13063dadc35..485b95cf0acca181c3e457025c2d12daade14b27 100644 (file)
@@ -2229,6 +2229,10 @@ float:right;
 display:none;
 }
 
+#site_nav_local_views li.extended_menu a {
+    display:none;
+}
+
 /*end of @media screen, projection, tv*/