From e6afd16c02335ea7ca7541d9d2006af09bad7ebf Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 18 Mar 2011 16:35:50 -0700 Subject: [PATCH] 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. --- plugins/ModPlus/ModPlusPlugin.php | 39 +++++++++++++++++++++++++++---- plugins/ModPlus/modplus.js | 18 ++++++++++++++ 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/plugins/ModPlus/ModPlusPlugin.php b/plugins/ModPlus/ModPlusPlugin.php index d2b7c09346..f8351f0988 100644 --- a/plugins/ModPlus/ModPlusPlugin.php +++ b/plugins/ModPlus/ModPlusPlugin.php @@ -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'); } } } diff --git a/plugins/ModPlus/modplus.js b/plugins/ModPlus/modplus.js index 023dee5762..511e8ee144 100644 --- a/plugins/ModPlus/modplus.js +++ b/plugins/ModPlus/modplus.js @@ -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(); + } + }); + }); -- 2.39.5