]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/menu.php
Merge branch 'nightly' into 'nightly'
[quix0rs-gnu-social.git] / lib / menu.php
index 2713b44d50e8e8c86d722fc15c22b75a881b1d0a..236e99263d0bc418b18cb063f56c7b7eed938196 100644 (file)
@@ -49,23 +49,65 @@ class Menu extends Widget
 {
     var $action     = null;
     var $actionName = null;
+    var $actionArgs = null;
+    
     /**
      * Construction
      *
      * @param Action $action current action, used for output
      */
-    function __construct($action=null)
+    function __construct(Action $action=null)
     {
         parent::__construct($action);
 
         $this->action     = $action;
         $this->actionName = $action->trimmed('action');
+
+        $rtargs = $action->returnToArgs();
+
+        $this->actionArgs = $rtargs[1];
     }
 
-    function item($actionName, $args, $label, $description, $id=null)
+    function getItems()
+    {
+        return array();
+    }
+
+    function tag()
+    {
+        return null;
+    }
+    
+    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);
+
+            foreach ($items as $item) {
+                list($actionName, $args, $label, $description, $id) = $item;
+                $this->item($actionName, $args, $label, $description, $id);
+            }
+        
+            $this->out->elementEnd('ul');
+            
+            Event::handle('EndNav', array($this, $tag, $items));
+        }
+    }
+    
+    function item($actionName, array $args, $label, $description, $id=null, $cls=null)
     {
         if (empty($id)) {
-            $id = $this->menuItemID($actionName);
+            $id = $this->menuItemID($actionName, $args);
         }
 
         $url = common_local_url($actionName, $args);
@@ -73,20 +115,47 @@ class Menu extends Widget
         $this->out->menuItem($url,
                              $label,
                              $description,
-                             $actionName == $this->actionName,
-                             $id);
+                             $this->isCurrent($actionName, $args),
+                             $id,
+                             $cls);
     }
 
-    function menuItemID($actionName)
+    function isCurrent($actionName, array $args)
+    {
+        if ($actionName != $this->actionName) {
+            return false;
+        }
+
+        foreach ($this->actionArgs as $k => $v) {
+            if (!array_key_exists($k, $args) || $args[$k] != $v) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+    
+    function menuItemID($actionName, $args = null)
     {
-        return sprintf('nav_%s', $actionName);
+        $id = sprintf('nav_%s', $actionName);
+        
+        if (!is_null($args)) {
+            foreach ($args as $key => $value) {
+                $id .= '_' . $key . '_' . $value;
+            }
+        }
+
+        return $id;
     }
 
     function submenu($label, $menu)
     {
-        $this->action->elementStart('li');
-        $this->action->element('h3', null, $label);
-        $menu->show();
-        $this->action->elementEnd('li');
+        if (Event::handle('StartSubMenu', array($this->action, $menu, $label))) {
+            $this->action->elementStart('li');
+            $this->action->element('h3', null, $label);
+            $menu->show();
+            $this->action->elementEnd('li');
+            Event::handle('EndSubMenu', array($this->action, $menu, $label));
+        }
     }
 }