ModPlus plugin -- Ticket #3095: add remote profile options popup to group membership and other profile lists

Popup remote profile options menu now shown on profile lists as well as notice lists.
This commit is contained in:
Brion Vibber 2011-03-18 16:35:50 -07:00
parent 119d0f7dba
commit afd92957b4
2 changed files with 52 additions and 5 deletions

View File

@ -84,7 +84,7 @@ class ModPlusPlugin extends Plugin
}
/**
* Add OpenID-related paths to the router table
* Add ModPlus-related paths to the router table
*
* Hook for RouterInitialized event.
*
@ -101,16 +101,45 @@ class ModPlusPlugin extends Plugin
return true;
}
/**
* Add per-profile info popup menu for author on notice lists.
*
* @param NoticeListItem $item
* @return boolean hook value
*/
function onStartShowNoticeItem($item)
{
$profile = $item->profile;
$this->showProfileOptions($item->out, $item->profile);
return true;
}
/**
* Add per-profile info popup menu on profile lists.
*
* @param ProfileListItem $item
*/
function onStartProfileListItemProfile($item)
{
$this->showProfileOptions($item->out, $item->profile);
return true;
}
/**
* Build common remote-profile options structure.
* Currently only adds output for remote profiles, nothing for local users.
*
* @param HTMLOutputter $out
* @param Profile $profile
*/
protected function showProfileOptions(HTMLOutputter $out, Profile $profile)
{
$isRemote = !(User::staticGet('id', $profile->id));
if ($isRemote) {
$target = common_local_url('remoteprofile', array('id' => $profile->id));
$label = _m('Remote profile options...');
$item->out->elementStart('div', 'remote-profile-options');
$item->out->element('a', array('href' => $target), $label);
$item->out->elementEnd('div');
$out->elementStart('div', 'remote-profile-options');
$out->element('a', array('href' => $target), $label);
$out->elementEnd('div');
}
}
}

View File

@ -4,6 +4,7 @@
*/
$(function() {
// Notice lists...
$('.notice .author').live('mouseenter', function(e) {
var notice = $(this).closest('.notice');
var popup = notice.find('.remote-profile-options');
@ -18,4 +19,21 @@ $(function() {
popup.fadeOut();
}
});
// Profile lists...
$('.profile .avatar').live('mouseenter', function(e) {
var profile = $(this).closest('.profile');
var popup = profile.find('.remote-profile-options');
if (popup.length) {
popup.fadeIn();
}
});
$('.profile').live('mouseleave', function(e) {
var profile = $(this);
var popup = profile.find('.remote-profile-options');
if (popup.length) {
popup.fadeOut();
}
});
});