jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/326074 )

Change subject: Avatars in page diff views
......................................................................


Avatars in page diff views

Requires MW 1.28 (with https://gerrit.wikimedia.org/r/326075) or newer.

Based on code written by Scott Cushman for wikiHow,
modified by Jack Phoenix and SamanthaNguyen for use
in the SocialProfile extension.

Change-Id: I296c11cd64cd405df78b052604d8a9047679941e
---
A UserProfile/AvatarsInDiffs.css
M UserProfile/UserProfile.php
M UserProfile/UserProfileHooks.php
3 files changed, 183 insertions(+), 1 deletion(-)

Approvals:
  Jack Phoenix: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/UserProfile/AvatarsInDiffs.css b/UserProfile/AvatarsInDiffs.css
new file mode 100644
index 0000000..b412e1a
--- /dev/null
+++ b/UserProfile/AvatarsInDiffs.css
@@ -0,0 +1,58 @@
+/* Various interesting bits and pieces from wikiHow's /skins/common/diff.css
+ * @date 25 April 2015 (with tweaks in December 2016 to remove stuff we don't
+ * need for SocialProfile)
+ */
+table.diff td {
+       text-align: left;
+}
+
+#mw-diff-otitle1,
+#mw-diff-ntitle1,
+#mw-diff-otitle4,
+#mw-diff-ntitle4,
+.rccomment {
+       text-align: center;
+}
+
+#mw-diff-otitle2,
+#mw-diff-ntitle2 {
+       padding: .5em;
+       margin: 1em 0;
+}
+
+#mw-diff-oinfo .comment {
+       display: block;
+}
+
+table.diff td.diff-multi {
+       text-align: center;
+}
+
+table.diff td div {
+       /* As fallback, scrollbars will be added for very wide cells
+          instead of text overflowing or widening */
+       overflow: auto;
+}
+
+table.diff h4 {
+       font-size: 14px;
+       background: none;
+       padding: 0;
+       margin: 0;
+}
+
+/* details at top */
+.diff_details {
+       margin: 0 auto;
+}
+
+.diff-avatar {
+       border-radius: .125em;
+       float: left;
+       margin: 0 .75em 0 0;
+}
+
+.diff-hr {
+       border: 0;
+       margin: 1em 0 0 0;
+}
diff --git a/UserProfile/UserProfile.php b/UserProfile/UserProfile.php
index a72d744..506b322 100644
--- a/UserProfile/UserProfile.php
+++ b/UserProfile/UserProfile.php
@@ -3,6 +3,9 @@
 define( 'NS_USER_PROFILE', 202 );
 define( 'NS_USER_WIKI', 200 );
 
+// Show user avatars in diffs?
+$wgUserProfileAvatarsInDiffs = false;
+
 /**
  * If you want to require users to have a certain number of certain things, 
like
  * five edits or three friends or two comments or whatever (is supported by
@@ -92,6 +95,14 @@
        'position' => 'top'
 );
 
+// CSS for user avatars in page diffs
+$wgResourceModules['ext.socialprofile.userprofile.diff'] = array(
+       'styles' => 'AvatarsInDiffs.css',
+       'localBasePath' => __DIR__,
+       'remoteExtPath' => 'SocialProfile/UserProfile',
+       'position' => 'top'
+);
+
 # Add new log types for profile edits and avatar uploads
 global $wgLogTypes, $wgLogNames, $wgLogHeaders, $wgLogActions;
 $wgLogTypes[]                    = 'profile';
@@ -105,3 +116,8 @@
 $wgLogActions['avatar/avatar'] = 'avatarlogentry';
 
 $wgHooks['ArticleFromTitle'][] = 'UserProfileHooks::onArticleFromTitle';
+
+$wgHooks['DifferenceEngineShowDiff'][] = 
'UserProfileHooks::onDifferenceEngineShowDiff';
+$wgHooks['DifferenceEngineShowDiffPage'][] = 
'UserProfileHooks::onDifferenceEngineShowDiffPage';
+$wgHooks['DifferenceEngineOldHeader'][] = 
'UserProfileHooks::onDifferenceEngineOldHeader';
+$wgHooks['DifferenceEngineNewHeader'][] = 
'UserProfileHooks::onDifferenceEngineNewHeader';
\ No newline at end of file
diff --git a/UserProfile/UserProfileHooks.php b/UserProfile/UserProfileHooks.php
index bcb526a..eed7a06 100644
--- a/UserProfile/UserProfileHooks.php
+++ b/UserProfile/UserProfileHooks.php
@@ -60,4 +60,112 @@
                return true;
        }
 
-}
\ No newline at end of file
+       /**
+        * Load the necessary CSS for avatars in diffs if that feature is 
enabled.
+        *
+        * @param DifferenceEngine $differenceEngine
+        * @return bool
+        */
+       public static function onDifferenceEngineShowDiff( $differenceEngine ) {
+               global $wgUserProfileAvatarsInDiffs;
+               if ( $wgUserProfileAvatarsInDiffs ) {
+                       $differenceEngine->getOutput()->addModuleStyles( 
'ext.socialprofile.userprofile.diff' );
+               }
+               return true;
+       }
+
+       /**
+        * Load the necessary CSS for avatars in diffs if that feature is 
enabled.
+        *
+        * @param OutputPage $out
+        * @return bool
+        */
+       public static function onDifferenceEngineShowDiffPage( $out ) {
+               global $wgUserProfileAvatarsInDiffs;
+               if ( $wgUserProfileAvatarsInDiffs ) {
+                       $out->addModuleStyles( 
'ext.socialprofile.userprofile.diff' );
+               }
+               return true;
+       }
+
+       /**
+        * Displays user avatars in diffs.
+        *
+        * This is largely based on wikiHow's 
/extensions/wikihow/hooks/DiffHooks.php
+        * (as of 2016-07-08) with some tweaks for SocialProfile.
+        *
+        * @author Scott Cushman@wikiHow -- original code
+        * @author Jack Phoenix -- modifications
+        */
+       public static function onDifferenceEngineOldHeader( $differenceEngine, 
&$oldHeader, $prevLink, $oldMinor, $diffOnly, $ldel, $unhide ) {
+               global $wgUserProfileAvatarsInDiffs;
+
+               if ( !$wgUserProfileAvatarsInDiffs ) {
+                       return true;
+               }
+
+               $oldRevisionHeader = $differenceEngine->getRevisionHeader( 
$differenceEngine->mOldRev, 'complete', 'old' );
+
+               $username = $differenceEngine->mOldRev->getUserText();
+               $avatar = new wAvatar( $differenceEngine->mOldRev->getUser(), 
'l' );
+               $avatarElement = $avatar->getAvatarURL( [
+                       'alt' => $username,
+                       'title' => $username,
+                       'class' => 'diff-avatar'
+               ] );
+
+               $oldHeader = '<div id="mw-diff-otitle1"><h4>' . $prevLink . 
$oldRevisionHeader . '</h4></div>' .
+                       '<div id="mw-diff-otitle2">' . $avatarElement . '<div 
id="mw-diff-oinfo">' .
+                       Linker::revUserTools( $differenceEngine->mOldRev, 
!$unhide ) .
+                       //'<br /><div id="mw-diff-odaysago">' . 
$differenceEngine->mOldRev->getTimestamp() . '</div>' .
+                       Linker::revComment( $differenceEngine->mOldRev, 
!$diffOnly, !$unhide ) .
+                       '</div></div>' .
+                       '<div id="mw-diff-otitle3" class="rccomment">' . 
$oldMinor . $ldel . '</div>' .
+                       '<div id="mw-diff-otitle4">' . $prevLink . '</div>';
+
+               return true;
+       }
+
+       /**
+        * Displays user avatars in diffs.
+        *
+        * This is largely based on wikiHow's 
/extensions/wikihow/hooks/DiffHooks.php
+        * (as of 2016-07-08) with some tweaks for SocialProfile.
+        *
+        * @author Scott Cushman@wikiHow -- original code
+        * @author Jack Phoenix -- modifications
+        */
+       public static function onDifferenceEngineNewHeader( $differenceEngine, 
&$newHeader, $formattedRevisionTools, $nextLink, $rollback, $newMinor, 
$diffOnly, $rdel, $unhide ) {
+               global $wgUserProfileAvatarsInDiffs;
+
+               if ( !$wgUserProfileAvatarsInDiffs ) {
+                       return true;
+               }
+
+               $newRevisionHeader =
+                       $differenceEngine->getRevisionHeader( 
$differenceEngine->mNewRev, 'complete', 'new' ) .
+                       ' ' . implode( ' ', $formattedRevisionTools );
+
+               $username = $differenceEngine->mNewRev->getUserText();
+               $avatar = new wAvatar( $differenceEngine->mNewRev->getUser(), 
'l' );
+               $avatarElement = $avatar->getAvatarURL( [
+                       'alt' => $username,
+                       'title' => $username,
+                       'class' => 'diff-avatar'
+               ] );
+
+               $newHeader = '<div id="mw-diff-ntitle1"><h4>' . 
$newRevisionHeader . $nextLink . '</h4></div>' .
+                       '<div id="mw-diff-ntitle2">' . $avatarElement . '<div 
id="mw-diff-oinfo">'
+                       . Linker::revUserTools( $differenceEngine->mNewRev, 
!$unhide ) .
+                       " $rollback " .
+                       //'<br /><div id="mw-diff-ndaysago">' . 
$differenceEngine->mNewRev->getTimestamp() . '</div>' .
+                       Linker::revComment( $differenceEngine->mNewRev, 
!$diffOnly, !$unhide ) .
+                       '</div></div>' .
+                       '<div id="mw-diff-ntitle3" class="rccomment">' . 
$newMinor . $rdel . '</div>' .
+                       '<div id="mw-diff-ntitle4">' . 
$differenceEngine->markPatrolledLink() . '</div>';
+
+               return true;
+       }
+
+
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/326074
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I296c11cd64cd405df78b052604d8a9047679941e
Gerrit-PatchSet: 11
Gerrit-Project: mediawiki/extensions/SocialProfile
Gerrit-Branch: master
Gerrit-Owner: Jack Phoenix <[email protected]>
Gerrit-Reviewer: Jack Phoenix <[email protected]>
Gerrit-Reviewer: Lewis Cawte <[email protected]>
Gerrit-Reviewer: SamanthaNguyen <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to