jenkins-bot has submitted this change and it was merged.

Change subject: Compact long message group facet lists on search
......................................................................


Compact long message group facet lists on search

Bug: 46155
Change-Id: I175df7a231cd1fac3f208003dfb1b812dd2edafb
---
M Resources.php
M Translate.i18n.php
M resources/css/ext.translate.special.searchtranslations.css
M resources/js/ext.translate.special.searchtranslations.js
M specials/SpecialSearchTranslations.php
5 files changed, 130 insertions(+), 29 deletions(-)

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



diff --git a/Resources.php b/Resources.php
index c8bdce0..55dc396 100644
--- a/Resources.php
+++ b/Resources.php
@@ -274,10 +274,12 @@
                'ext.translate.editor',
                'ext.uls.init',
                'ext.uls.geoclient',
+               'ext.translate.groupselector',
        ),
        'messages' => array(
                'translate-documentation-language',
-               'translate-search-more-languages-info'
+               'translate-search-more-languages-info',
+               'translate-search-more-groups-info',
        ),
        'position' => 'top',
 ) + $resourcePaths;
diff --git a/Translate.i18n.php b/Translate.i18n.php
index a58ed57..b574eef 100644
--- a/Translate.i18n.php
+++ b/Translate.i18n.php
@@ -509,6 +509,7 @@
        'translate-search-more-languages-info' => '$1 more 
{{PLURAL:$1|language|languages}}',
        'translate-statsbar-tooltip' => '$1% translated, $2% proofread',
        'translate-statsbar-tooltip-with-fuzzy' => '$1% translated, $2% 
proofread, $3% outdated',
+       'translate-search-more-groups-info' => '$1 more 
{{PLURAL:$1|group|groups}}',
 );
 
 /** Message documentation (Message documentation)
@@ -1181,6 +1182,9 @@
 * $1 percentage of messages translated (does not include outdated)
 * $2 percentage of messages proofread
 * $3 percentage of messages outdated (not counted as translated)',
+       'translate-search-more-groups-info'=> 'Information shown as number of 
message groups matching the query using
+[[Special:SearchTranslations]]
+* $1 - number of groups',
 );
 
 /** Afrikaans (Afrikaans)
diff --git a/resources/css/ext.translate.special.searchtranslations.css 
b/resources/css/ext.translate.special.searchtranslations.css
index c65f081..b827847 100644
--- a/resources/css/ext.translate.special.searchtranslations.css
+++ b/resources/css/ext.translate.special.searchtranslations.css
@@ -35,23 +35,23 @@
        margin-right: 5%;
 }
 
+.tux-searchpage .facet-level-0 {
+       font-size: 16px;
+}
+
 .tux-searchpage .facet-level-1 {
-       font-size: 95%;
+       font-size: 14px;
 }
 
 .tux-searchpage .facet-level-2 {
-       font-size: 90%;
+       font-size: 12px;
 }
 
 .tux-searchpage .facet-level-3 {
-       font-size: 85%;
+       font-size: 10px;
 }
 
-.tux-searchpage .facet-level-4 {
-       font-size: 80%;
-}
-
-.tux-searchpage .facet-item.selected .facet-name {
+.tux-searchpage .facet-item .facet-name.selected {
        font-weight: bold;
 }
 
@@ -125,6 +125,7 @@
        display: none;
 }
 
+.translate-search-more-groups,
 .translate-search-more-languages {
        background-color: #F0F0F0;
        font-size: 16px;
@@ -134,11 +135,13 @@
        border: 1px solid #EEE;
 }
 
+.translate-search-more-groups:hover,
 .translate-search-more-languages:hover {
        border: 1px solid #CCC;
        text-decoration: none;
 }
 
+.translate-search-more-groups-info,
 .translate-search-more-languages-info {
        padding: 5px;
        color: #888;
diff --git a/resources/js/ext.translate.special.searchtranslations.js 
b/resources/js/ext.translate.special.searchtranslations.js
index 6dbf0eb..9e3ce24 100644
--- a/resources/js/ext.translate.special.searchtranslations.js
+++ b/resources/js/ext.translate.special.searchtranslations.js
@@ -21,7 +21,7 @@
                } );
 
                showLanguages();
-
+               showMessageGroups();
        } );
 
        // ES5-compatible Chrome, IE 9+, FF 4+, or Safari 5+ has Object.keys.
@@ -140,6 +140,7 @@
                                        window.location = 
languages[language].url;
                                },
                                lazyload: false,
+                               compact: true,
                                languages: ulslanguages,
                                top: $languages.offset().top,
                                showRegions: regions
@@ -147,6 +148,102 @@
                }
        }
 
+       function showMessageGroups() {
+               var currentGroup,
+                       groupList,
+                       $groups;
+
+               $groups = $( '.facet.groups' );
+               currentGroup = $groups.data( 'group' );
+               mw.translate.messageGroups = $groups.data( 'facets' );
+               if ( !mw.translate.messageGroups ) {
+                       // at empty search screen
+                       return;
+               }
+               groupList = Object.keys( mw.translate.messageGroups );
+               listGroups( groupList, currentGroup, $groups );
+       }
+
+       function listGroups( groupList, parentGroup, $parent, level ) {
+               var i,
+                       $grouSelectorTrigger,
+                       selectedClass = '',
+                       group,
+                       groupId,
+                       $groupRow,
+                       maxListSize = 10,
+                       currentGroup = $( '.facet.groups' ).data( 'group' ),
+                       resultCount = groupList.length;
+
+               level = level || 0;
+               groupList = groupList.splice( 0, maxListSize );
+               if ( currentGroup && mw.translate.messageGroups[currentGroup]
+                       && $.inArray( currentGroup, groupList ) < 0 ) {
+                       // Make sure current selected group is displayed always.
+                       groupList = groupList.concat( currentGroup );
+                       groupList.sort( sortGroups );
+               }
+               groupList.sort( sortGroups );
+               for ( i = 0; i <= groupList.length; i++ ) {
+                       groupId = groupList[i];
+                       group = mw.translate.getGroup( groupId );
+                       if ( !group ) {
+                               continue;
+                       }
+                       if ( currentGroup === groupId ) {
+                               selectedClass = 'selected';
+                       } else {
+                               selectedClass = '';
+                       }
+                       $groupRow = $( '<div>' )
+                               .addClass( 'row facet-item ' + ' facet-level-' 
+ level )
+                               .append( $( '<span>' )
+                                       .addClass( 'facet-name ' + 
selectedClass)
+                                       .append( $( '<a>' )
+                                               .attr( {
+                                                       href: group.url,
+                                                       title: group.description
+                                               } )
+                                               .text( group.label )
+                                       ),
+                                       $( '<span>' )
+                                               .addClass( 'facet-count ' + 
selectedClass )
+                                               .text( group.count )
+                               );
+                       $parent.append( $groupRow );
+                       if ( group.groups && level < 2 ) {
+                               listGroups( Object.keys( group.groups ), group, 
$groupRow, level + 1 );
+                       }
+               }
+
+               if ( resultCount > maxListSize ) {
+                       $grouSelectorTrigger = $( '<div>')
+                               .addClass( 'rowfacet-item ' )
+                               .append( $( '<a>' )
+                                       .text( '...' )
+                                       .addClass( 
'translate-search-more-groups' ),
+                                       $( '<span>' )
+                                               .addClass( 
'translate-search-more-groups-info' )
+                                               .text( mw.msg( 
'translate-search-more-groups-info',
+                                                       resultCount - 
groupList.length ) )
+                               );
+                       $parent.append( $grouSelectorTrigger );
+
+                       $grouSelectorTrigger.msggroupselector( {
+                               onSelect: function ( group ) {
+                                       window.location = group.url;
+                               }
+                       } );
+               }
+       }
+
+       function sortGroups ( groupIdA, groupIdB ) {
+               var groupAName = mw.translate.getGroup( groupIdA ).label,
+                       groupBName = mw.translate.getGroup( groupIdB ).label;
+
+               return groupAName.localeCompare( groupBName );
+       }
+
        function sortLanguages( languageA, languageB ) {
                var languageNameA = mw.config.get( 'wgULSLanguages' 
)[languageA] || languageA,
                        languageNameB = mw.config.get( 'wgULSLanguages' 
)[languageB] || languageB;
diff --git a/specials/SpecialSearchTranslations.php 
b/specials/SpecialSearchTranslations.php
index e888a00..39db611 100644
--- a/specials/SpecialSearchTranslations.php
+++ b/specials/SpecialSearchTranslations.php
@@ -99,12 +99,13 @@
                        $this->msg( 'tux-sst-facet-language' )
                );
 
+               $facet = $resultset->getFacetSet()->getFacet( 'group' );
                $facets .= Html::element( 'div',
-                       array( 'class' => 'row facet' ),
+                       array( 'class' => 'row facet groups',
+                               'data-facets' => FormatJson::encode(  
$this->getGroups( $facet) ),
+                               'data-group' => $opts->getValue( 'group' ), ),
                        $this->msg( 'tux-sst-facet-group' )
                );
-               $facet = $resultset->getFacetSet()->getFacet( 'group' );
-               $facets .= $this->renderGroupFacet( $facet );
 
                // Part 2: results
                $results = '';
@@ -265,18 +266,17 @@
        }
 
 
-       protected function renderGroupFacet( Solarium_Result_Select_Facet_Field 
$facet ) {
+       protected function getGroups( Solarium_Result_Select_Facet_Field $facet 
) {
                $structure = MessageGroups::getGroupStructure();
                $counts = iterator_to_array( $facet );
                return $this->makeGroupFacetRows( $structure, $counts );
        }
 
        protected function makeGroupFacetRows( array $groups, $counts, $level = 
0, $pathString = '' ) {
-               $output = '';
+               $output = array();
 
                $nondefaults = $this->opts->getChangedValues();
                $selected = $this->opts->getValue( 'group' );
-
                $path = explode( '|', $this->opts->getValue( 'grouppath' ) );
 
                foreach ( $groups as $mixed ) {
@@ -303,26 +303,21 @@
                        }
 
                        $url = $this->getTitle()->getLocalUrl( $nondefaults );
-                       $link = Html::element( 'a', array( 'href' => $url ), 
$group->getLabel() );
-                       $name = Html::rawElement( 'span', array( 'class' => 
'facet-name' ), $link );
 
                        $value = isset( $counts[$id] ) ? $counts[$id] : 0;
                        $count = $this->getLanguage()->formatNum( $value );
-                       $count = Html::element( 'span', array( 'class' => 
'facet-count' ), $count );
 
-
-                       $class = "row facet-item facet-level-$level";
-                       if ( isset( $path[$level] ) && $path[$level] === $id ) {
-                               $class .= ' selected';
-                       }
-
-                       $output .= Html::rawElement( 'div',
-                               array( 'class' => $class ),
-                               $name . $count
+                       $output[$id] = array(
+                               'id' => $id,
+                               'count' => $value,
+                               'url' => $url,
+                               'label' => $group->getLabel(),
+                               'description' => $group->getDescription(),
+                               'icon' => TranslateUtils::getIcon( $group, 100 
),
                        );
 
                        if ( isset( $path[$level] ) && $path[$level] === $id ) {
-                               $output .= $this->makeGroupFacetRows( 
$subgroups, $counts, $level + 1, "$pathString$id|" );
+                               $output[$id]['groups'] = 
$this->makeGroupFacetRows( $subgroups, $counts, $level + 1, "$pathString$id|" );
                        }
                }
                return $output;

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I175df7a231cd1fac3f208003dfb1b812dd2edafb
Gerrit-PatchSet: 10
Gerrit-Project: mediawiki/extensions/Translate
Gerrit-Branch: master
Gerrit-Owner: Santhosh <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>
Gerrit-Reviewer: Santhosh <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to