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