Sbisson has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/265495

Change subject: Truncate usernames, titles and excerpts in notifications
......................................................................

Truncate usernames, titles and excerpts in notifications

Bug: T121822
Change-Id: Ia0a52926133ab7e04d7d9c2a095ef8f9d0871a49
---
M includes/formatters/EchoEventFormatter.php
M includes/formatters/EchoFlyoutFormatter.php
M includes/formatters/EchoModelFormatter.php
M includes/formatters/EventPresentationModel.php
M includes/formatters/MentionPresentationModel.php
M includes/formatters/PageLinkedPresentationModel.php
M includes/formatters/RevertedPresentationModel.php
M includes/formatters/SpecialNotificationsFormatter.php
M modules/echo.mixins.less
M modules/nojs/mw.echo.notifications.less
M modules/ooui/styles/mw.echo.ui.NotificationItemWidget.less
11 files changed, 34 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Echo 
refs/changes/95/265495/1

diff --git a/includes/formatters/EchoEventFormatter.php 
b/includes/formatters/EchoEventFormatter.php
index c7aef95..2c34f22 100644
--- a/includes/formatters/EchoEventFormatter.php
+++ b/includes/formatters/EchoEventFormatter.php
@@ -35,4 +35,8 @@
         * @return string
         */
        abstract protected function formatModel( EchoEventPresentationModel 
$model );
+
+       protected function truncateLinkLabel( $label ) {
+               return $this->language->truncate( $label, 15 );
+       }
 }
diff --git a/includes/formatters/EchoFlyoutFormatter.php 
b/includes/formatters/EchoFlyoutFormatter.php
index d94fc27..652369b 100644
--- a/includes/formatters/EchoFlyoutFormatter.php
+++ b/includes/formatters/EchoFlyoutFormatter.php
@@ -41,7 +41,7 @@
                $footerItems = array( $ts );
                $secondaryLinks = array_filter( $model->getSecondaryLinks() );
                foreach ( $secondaryLinks as $link ) {
-                       $footerItems[] = Html::element( 'a', array( 'href' => 
$link['url'] ), $link['label'] );
+                       $footerItems[] = Html::element( 'a', array( 'href' => 
$link['url'] ), $this->truncateLinkLabel( $link['label'] ) );
                }
                $html .= Xml::tags(
                        'div',
diff --git a/includes/formatters/EchoModelFormatter.php 
b/includes/formatters/EchoModelFormatter.php
index 33ec11a..0cf5b46 100644
--- a/includes/formatters/EchoModelFormatter.php
+++ b/includes/formatters/EchoModelFormatter.php
@@ -12,6 +12,9 @@
        protected function formatModel( EchoEventPresentationModel $model ) {
                $data = $model->jsonSerialize();
                $data['iconUrl'] = EchoNotificationFormatter::getIconUrl( 
$model->getIconType(), $this->language->getDir() );
+               foreach ( $data['links']['secondary'] as &$link ) {
+                       $link['label'] = $this->truncateLinkLabel( 
$link['label'] );
+               }
                return $data;
        }
 }
diff --git a/includes/formatters/EventPresentationModel.php 
b/includes/formatters/EventPresentationModel.php
index c7d00c9..41ff0d2 100644
--- a/includes/formatters/EventPresentationModel.php
+++ b/includes/formatters/EventPresentationModel.php
@@ -220,7 +220,7 @@
 
                if ( $this->userCan( Revision::DELETED_USER ) ) {
                        // Not deleted
-                       return array( $agent->getName(), $agent->getName() );
+                       return array( $this->getTruncatedUsername( $agent ), 
$agent->getName() );
                } else {
                        // Deleted/hidden
                        $msg = $this->msg( 'rev-deleted-user' )->plain();
@@ -367,4 +367,13 @@
                        ),
                );
        }
+
+       protected function getTruncatedUsername( User $user ) {
+               return $this->language->truncate( $user->getName(), 30 );
+       }
+
+       protected function getTruncatedTitleText( Title $title, 
$includeNamespace = false ) {
+               $text = $includeNamespace ? $title->getPrefixedText() : 
$title->getText();
+               return $this->language->truncate( $text , 50 );
+       }
 }
diff --git a/includes/formatters/MentionPresentationModel.php 
b/includes/formatters/MentionPresentationModel.php
index d81aca5..8334b05 100644
--- a/includes/formatters/MentionPresentationModel.php
+++ b/includes/formatters/MentionPresentationModel.php
@@ -65,15 +65,15 @@
                $msg->params( $this->getViewingUserForGender() );
 
                if ( $this->onArticleTalkpage() ) {
-                       $msg->params( $this->event->getTitle()->getText() );
+                       $msg->params( $this->getTruncatedTitleText( 
$this->event->getTitle() ) );
                } elseif ( $this->onAgentTalkpage() ) {
                        // No params to add here.
                        // If we remove this check, onUserTalkpage() has to
                        // make sure it is a user talk page but NOT the agent's 
talk page.
                } elseif ( $this->onUserTalkpage() ) {
-                       $msg->params( $this->event->getTitle()->getText() );
+                       $msg->params( $this->getTruncatedTitleText( 
$this->event->getTitle() ) );
                } else {
-                       $msg->params( 
$this->event->getTitle()->getPrefixedText() );
+                       $msg->params( $this->getTruncatedTitleText( 
$this->event->getTitle(), true ) );
                }
 
                $section = $this->getSection();
diff --git a/includes/formatters/PageLinkedPresentationModel.php 
b/includes/formatters/PageLinkedPresentationModel.php
index a4b53ef..c94ac39 100644
--- a/includes/formatters/PageLinkedPresentationModel.php
+++ b/includes/formatters/PageLinkedPresentationModel.php
@@ -46,8 +46,8 @@
 
        public function getHeaderMessage() {
                $msg = parent::getHeaderMessage();
-               $msg->params( $this->event->getTitle()->getPrefixedText() );
-               $msg->params( $this->getPageFrom()->getPrefixedText() );
+               $msg->params( $this->getTruncatedTitleText( 
$this->event->getTitle(), true ) );
+               $msg->params( $this->getTruncatedTitleText( 
$this->getPageFrom(), true ) );
                list( $formattedCount, $countForPlural ) =
                        $this->getNotificationCountForOutput( false, array( 
$this, 'getLinkedPageId' ) );
                $msg->params( $formattedCount );
diff --git a/includes/formatters/RevertedPresentationModel.php 
b/includes/formatters/RevertedPresentationModel.php
index 3e39c50..0804219 100644
--- a/includes/formatters/RevertedPresentationModel.php
+++ b/includes/formatters/RevertedPresentationModel.php
@@ -12,7 +12,7 @@
 
        public function getHeaderMessage() {
                $msg = parent::getHeaderMessage();
-               $msg->params( $this->event->getTitle()->getPrefixedText() );
+               $msg->params( $this->getTruncatedTitleText( 
$this->event->getTitle(), true ) );
                $msg->params( $this->getNumberOfEdits() );
                return $msg;
        }
diff --git a/includes/formatters/SpecialNotificationsFormatter.php 
b/includes/formatters/SpecialNotificationsFormatter.php
index 94d3780..d561ffd 100644
--- a/includes/formatters/SpecialNotificationsFormatter.php
+++ b/includes/formatters/SpecialNotificationsFormatter.php
@@ -44,7 +44,7 @@
                }
                $links = array_merge( $links, array_filter( 
$model->getSecondaryLinks() ) );
                foreach ( $links as $link ) {
-                       $footerItems[] = Html::element( 'a', array( 'href' => 
$link['url'] ), $link['label'] );
+                       $footerItems[] = Html::element( 'a', array( 'href' => 
$link['url'] ), $this->truncateLinkLabel( $link['label'] ) );
                }
 
                $html .= Xml::tags(
diff --git a/modules/echo.mixins.less b/modules/echo.mixins.less
index c0bffb0..11a7f26 100644
--- a/modules/echo.mixins.less
+++ b/modules/echo.mixins.less
@@ -4,3 +4,9 @@
                opacity: 1;
        }
 }
+
+.mw-echo-ui-mixin-one-line-truncated() {
+       white-space: nowrap;
+       overflow: hidden;
+       text-overflow: ellipsis;
+}
diff --git a/modules/nojs/mw.echo.notifications.less 
b/modules/nojs/mw.echo.notifications.less
index e0051da..7abca7e 100644
--- a/modules/nojs/mw.echo.notifications.less
+++ b/modules/nojs/mw.echo.notifications.less
@@ -1,4 +1,5 @@
 @import '../echo.variables';
+@import '../echo.mixins';
 
 // This needs to be outside the upper selector 'NotificationItemWidget'
 // because the same styles also apply (for the moment, at least) to the 
notification
@@ -57,6 +58,7 @@
                }
 
                .mw-echo-payload {
+                       .mw-echo-ui-mixin-one-line-truncated;
                        color: @notification-body-color;
                }
 
diff --git a/modules/ooui/styles/mw.echo.ui.NotificationItemWidget.less 
b/modules/ooui/styles/mw.echo.ui.NotificationItemWidget.less
index dc01102..e25dcc0 100644
--- a/modules/ooui/styles/mw.echo.ui.NotificationItemWidget.less
+++ b/modules/ooui/styles/mw.echo.ui.NotificationItemWidget.less
@@ -37,6 +37,7 @@
                                color: @notification-text-color;
                        }
                        &-body {
+                               .mw-echo-ui-mixin-one-line-truncated;
                                color: @notification-body-color;
                        }
                }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia0a52926133ab7e04d7d9c2a095ef8f9d0871a49
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Echo
Gerrit-Branch: master
Gerrit-Owner: Sbisson <[email protected]>

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

Reply via email to