]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
add a 'more' button for groups menu
authorEvan Prodromou <evan@status.net>
Tue, 5 Jul 2011 23:20:44 +0000 (19:20 -0400)
committerEvan Prodromou <evan@status.net>
Tue, 5 Jul 2011 23:20:44 +0000 (19:20 -0400)
js/util.js
lib/groupsnav.php

index 979415c639829187bda3809823bbbf8bbfe42f2c..d8abbe398b6ed8277b3649b5495954f8ff066906 100644 (file)
@@ -1422,6 +1422,29 @@ var SN = { // StatusNet
                     SN.Init.NoticeFormSetup(form);
                 })
                 .find('.notice_data-text').focus();
+       },
+
+       showMoreGroupMenuItems: function(url) {
+            $.ajax({
+                type: 'GET',
+                dataType: 'xml',
+                url: url,
+                success: function(data, textStatus) {
+                   var groupmenu = $('ul#nav_group');
+                   $('li#nav_timeline_more_group_menu_items').remove();
+                   $("activity\\:object", data).each(function() {
+                       var group = $(this);
+                       var fullname = $('title',group).text();
+                       var nickname = $('poco\\:preferredUsername',group).text();
+                       var url      = $('link[rel="alternate"][type="text/html"]',group).attr('href');
+                       if ($('li#nav_timeline_group_'+nickname, groupmenu).length == 0) {
+                           groupmenu.append('<li id="nav_timeline_group_"' + nickname +'">'+
+                                            '<a href="'+url+'">'+fullname+'</a>'+
+                                            '</li>');
+                       }
+                   });
+                }
+            });
        }
     },
 
index 26058c2b7ef8ae5656dba4f246d79a6549481394..c023481a491ef6f14c021d86660693292142bc36 100644 (file)
@@ -46,6 +46,8 @@ if (!defined('STATUSNET')) {
  */
 class GroupsNav extends Menu
 {
+       const TOP_GROUPS = 5;
+       
     protected $user;
     protected $groups;
 
@@ -53,7 +55,7 @@ class GroupsNav extends Menu
     {
         parent::__construct($action);
         $this->user = $user;
-        $this->groups = $user->getGroups();
+        $this->groups = $this->getTopGroups($user);
     }
 
     function haveGroups()
@@ -61,6 +63,21 @@ class GroupsNav extends Menu
         return (!empty($this->groups) && ($this->groups->N > 0));
     }
 
+       function getTopGroups($user)
+       {
+        $memberships = Group_member::byMember($user->id,
+                                              0,
+                                              self::TOP_GROUPS + 1);
+
+        $g = array();
+
+        while ($memberships->fetch()) {
+            $g[] = User_group::staticGet('id', $memberships->group_id);
+        }
+        
+        return new ArrayWrapper($g);
+       }
+
     /**
      * Show the menu
      *
@@ -70,11 +87,21 @@ class GroupsNav extends Menu
     {
         $action = $this->actionName;
 
-        $this->out->elementStart('ul', array('class' => 'nav'));
+        $this->out->elementStart('ul', array('class' => 'nav',
+                                             'id' => 'nav_group'));
 
         if (Event::handle('StartGroupsNav', array($this))) {
 
+                       $cnt = 0;
+                       
             while ($this->groups->fetch()) {
+               
+               $cnt++;
+               
+               if ($cnt > self::TOP_GROUPS) {
+                       break;
+               }
+               
                 $this->out->menuItem(($this->groups->mainpage) ?
                                      $this->groups->mainpage :
                                      common_local_url('showgroup',
@@ -85,6 +112,16 @@ class GroupsNav extends Menu
                                      $this->action->arg('nickname') == $this->groups->nickname,
                                      'nav_timeline_group_'.$this->groups->nickname);
             }
+            
+            if ($cnt > self::TOP_GROUPS) {
+               $this->out->menuItem(sprintf('javascript:SN.U.showMoreGroupMenuItems("%s")', 
+                                             common_local_url('AtomPubMembershipFeed', array('profile' => $this->user->id))),
+                                     _('More ▼'),
+                                     _('More groups'),
+                                     false,
+                                     'nav_timeline_more_group_menu_items');
+            }
+            
             Event::handle('EndGroupsNav', array($this));
         }