From: Brion Vibber <brion@pobox.com>
Date: Fri, 18 Mar 2011 23:35:50 +0000 (-0700)
Subject: ModPlus plugin -- Ticket #3095: add remote profile options popup to group membership... 
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=afd92957b43aedf8dfb38b0c03aa0461ca27974a;p=quix0rs-gnu-social.git

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.
---

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();
+        }
+    });
+
 });