add a 'more' button for groups menu
This commit is contained in:
parent
af0eded741
commit
3226f2bef6
23
js/util.js
23
js/util.js
@ -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>');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user