Santhosh has uploaded a new change for review.

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


Change subject: (Bug 46155) Compact long message group facet lists on search
......................................................................

(Bug 46155) Compact long message group facet lists on search

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, 110 insertions(+), 25 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Translate 
refs/changes/53/55253/1

diff --git a/Resources.php b/Resources.php
index 57b4a5a..20aa0c2 100644
--- a/Resources.php
+++ b/Resources.php
@@ -274,10 +274,12 @@
        'dependencies' => array(
                'ext.translate.editor',
                'ext.uls.init',
+               '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 1ce2dc7..91009c4 100644
--- a/Translate.i18n.php
+++ b/Translate.i18n.php
@@ -502,6 +502,7 @@
        'tux-editor-collapse-tooltip' => 'Collapse',
        'tux-editor-loading' => 'Loading...',
        'translate-search-more-languages-info' => '$1 more 
{{PLURAL:$1|language|languages}}',
+       'translate-search-more-groups-info' => '$1 more 
{{PLURAL:$1|group|groups}}',
 );
 
 /** Message documentation (Message documentation)
@@ -1136,6 +1137,9 @@
        'translate-search-more-languages-info' => 'Information shown as number 
of languages matching the query using
 [[Special:SearchTranslations]]
 * $1 - number of languages',
+       '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 b7e6b01..ce61488 100644
--- a/resources/css/ext.translate.special.searchtranslations.css
+++ b/resources/css/ext.translate.special.searchtranslations.css
@@ -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 e90a337..26235cf 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,89 @@
                }
        }
 
+       function showMessageGroups() {
+               var $grouSelectorTrigger,
+                       selectedClasss = '',
+                       currentGroup,
+                       resultCount,
+                       $count,
+                       i,
+                       group,
+                       groupId,
+                       groupList,
+                       $groups;
+
+               $groups = $( '.facet.groups' );
+               currentGroup = $groups.data( 'group' );
+
+               mw.translate.messageGroups = $groups.data( 'facets' );
+
+               groupList = Object.keys( mw.translate.messageGroups );
+               resultCount = groupList.length;
+
+               if ( currentGroup && $.inArray( currentGroup, groupList ) < 0 ) 
{
+                       groupList = groupList.splice( 0, 5 );
+                       groupList = groupList.concat( currentGroup );
+                       groupList.sort( sortGroups );
+               } else {
+                       groupList = groupList.splice( 0, 6 );
+               }
+               groupList.sort( sortGroups );
+               for ( i = 0; i <= groupList.length; i++ ) {
+                       groupId = groupList[i];
+                       group = mw.translate.messageGroups[groupId];
+                       if ( !group ) {
+                               continue;
+                       }
+                       if ( currentGroup === groupId ) {
+                               selectedClasss = 'selected';
+                       } else {
+                               selectedClasss = '';
+                       }
+
+                       $groups.append( $( '<div>')
+                               .addClass( 'row facet-item ' + selectedClasss )
+                               .append( $( '<span>')
+                                       .addClass('facet-name')
+                                       .append( $('<a>')
+                                               .attr( {
+                                                       href: group.url,
+                                                       title: group.description
+                                               } )
+                                               .text( group.label )
+                                       ),
+                                       $( '<span>')
+                                               .addClass('facet-count')
+                                               .text( group.count )
+                               )
+                       );
+               }
+
+               if ( resultCount > 6 ) {
+                       $grouSelectorTrigger = $( '<a>' )
+                               .text( '...' )
+                               .addClass( 'translate-search-more-groups' );
+
+                       $count = $( '<span>' )
+                               .addClass( 'translate-search-more-groups-info' )
+                               .text( mw.msg( 
'translate-search-more-groups-info', resultCount - groupList.length ) );
+                       $groups.append( $grouSelectorTrigger, $count );
+
+                       $grouSelectorTrigger.msggroupselector( {
+                               onSelect: function ( group ) {
+                                       window.location = group.url;
+                               }
+                       } );
+               }
+       }
+
+       function sortGroups ( groupIdA, groupIdB ) {
+               var groupAName = mw.translate.messageGroups[groupIdA].label,
+                       groupBName = mw.translate.messageGroups[groupIdB].label;
+
+               return groupAName.localeCompare( groupBName );
+       }
+
        function sortLanguages ( languageA, languageB ) {
                var languageNameA = window.wgULSLanguages[languageA] || 
languageA,
                        languageNameB = window.wgULSLanguages[languageB] || 
languageB;
diff --git a/specials/SpecialSearchTranslations.php 
b/specials/SpecialSearchTranslations.php
index 2873a84..23ac748 100644
--- a/specials/SpecialSearchTranslations.php
+++ b/specials/SpecialSearchTranslations.php
@@ -91,12 +91,15 @@
                        $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 );
+
+               //$facets .= $this->renderGroupFacet( $facet );
 
                // Part 2: results
                $results = '';
@@ -241,19 +244,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 ) {
                        $subgroups = $group = $mixed;
@@ -279,27 +280,18 @@
                        }
 
                        $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(),
+                               // FIXME we need icon too
                        );
-
-                       if ( isset( $path[$level] ) && $path[$level] === $id ) {
-                               $output .= $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: newchange
Gerrit-Change-Id: I175df7a231cd1fac3f208003dfb1b812dd2edafb
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Translate
Gerrit-Branch: master
Gerrit-Owner: Santhosh <santhosh.thottin...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to