Matmarex has uploaded a new change for review.
https://gerrit.wikimedia.org/r/80781
Change subject: Add a dropdown list for the tag selector
......................................................................
Add a dropdown list for the tag selector
* Factor out a new method, ChangeTags::tagUsageStatistics(), from
SpecialTags. Use it there.
* Change ChangeTags::buildTagFilterSelector() to output a <select>
list instead of an <input>.
Bug: 25909
Change-Id: I34aa2bab5f8db5eed3dbd2826532f2d724fdea30
---
M includes/ChangeTags.php
M includes/specials/SpecialTags.php
M languages/messages/MessagesEn.php
M languages/messages/MessagesQqq.php
M maintenance/language/messages.inc
5 files changed, 46 insertions(+), 19 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core
refs/changes/81/80781/1
diff --git a/includes/ChangeTags.php b/includes/ChangeTags.php
index 029911f..5184dd9 100644
--- a/includes/ChangeTags.php
+++ b/includes/ChangeTags.php
@@ -231,8 +231,18 @@
return $fullForm ? '' : array();
}
- $data = array( Html::rawElement( 'label', array( 'for' =>
'tagfilter' ), wfMessage( 'tag-filter' )->parse() ),
- Xml::input( 'tagfilter', 20, $selected, array( 'class'
=> 'mw-tagfilter-input' ) ) );
+ $select = new XmlSelect( 'tagfilter', false, $selected );
+ $select->addOption( wfMessage( 'tag-filter-none' )->text(), ''
);
+ foreach ( self::tagUsageStatistics() as $tag => $unused ) {
+ // Can't use self::tagDescription because it returns
HTML
+ $select->addOption( $tag );
+ }
+ $select->setAttribute( 'class', 'mw-tagfilter-input' );
+
+ $data = array(
+ Html::rawElement( 'label', array( 'for' => 'tagfilter'
), wfMessage( 'tag-filter' )->parse() ),
+ $select->getHTML()
+ );
if ( !$fullForm ) {
return $data;
@@ -281,4 +291,33 @@
$wgMemc->set( $key, $emptyTags, 300 );
return $emptyTags;
}
+
+ /**
+ * Returns a map of valid tags to number of edits tagged with them,
ordered descending by the hitcount.
+ *
+ * @return array Array of string => int
+ */
+ public static function tagUsageStatistics() {
+ $out = array();
+
+ $dbr = wfGetDB( DB_SLAVE );
+ $res = $dbr->select(
+ 'change_tag',
+ array( 'ct_tag', 'hitcount' => 'count(*)' ),
+ array(),
+ __METHOD__,
+ array( 'GROUP BY' => 'ct_tag', 'ORDER BY' => 'hitcount
DESC' )
+ );
+
+ foreach ( $res as $row ) {
+ $out[$row->ct_tag] = $row->hitcount;
+ }
+ foreach ( self::listDefinedTags() as $tag ) {
+ if ( !isset( $out[$tag] ) ) {
+ $out[$tag] = 0;
+ }
+ }
+
+ return $out;
+ }
}
diff --git a/includes/specials/SpecialTags.php
b/includes/specials/SpecialTags.php
index 6a282c9..80c38d5 100644
--- a/includes/specials/SpecialTags.php
+++ b/includes/specials/SpecialTags.php
@@ -46,28 +46,15 @@
Xml::tags( 'th', null, $this->msg(
'tags-description-header' )->parse() ) .
Xml::tags( 'th', null, $this->msg(
'tags-hitcount-header' )->parse() )
);
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( 'change_tag', array( 'ct_tag', 'hitcount'
=> 'count(*)' ),
- array(), __METHOD__, array( 'GROUP BY' => 'ct_tag',
'ORDER BY' => 'hitcount DESC' ) );
- foreach ( $res as $row ) {
- $html .= $this->doTagRow( $row->ct_tag, $row->hitcount
);
- }
-
- foreach ( ChangeTags::listDefinedTags() as $tag ) {
- $html .= $this->doTagRow( $tag, 0 );
+ foreach ( ChangeTags::tagUsageStatistics() as $tag => $hitcount
) {
+ $html .= $this->doTagRow( $tag, $hitcount );
}
$out->addHTML( Xml::tags( 'table', array( 'class' => 'wikitable
sortable mw-tags-table' ), $html ) );
}
function doTagRow( $tag, $hitcount ) {
- static $doneTags = array();
-
- if ( in_array( $tag, $doneTags ) ) {
- return '';
- }
-
$user = $this->getUser();
$newRow = '';
$newRow .= Xml::tags( 'td', null, Xml::element( 'code', null,
$tag ) );
@@ -93,8 +80,6 @@
$hitcountLink = Linker::link( SpecialPage::getTitleFor(
'Recentchanges' ), $hitcountLabel, array(), array( 'tagfilter' => $tag ) );
// add raw $hitcount for sorting, because tags-hitcount
contains numbers and letters
$newRow .= Xml::tags( 'td', array( 'data-sort-value' =>
$hitcount ), $hitcountLink );
-
- $doneTags[] = $tag;
return Xml::tags( 'tr', null, $newRow ) . "\n";
}
diff --git a/languages/messages/MessagesEn.php
b/languages/messages/MessagesEn.php
index 8834078..1ea97ca 100644
--- a/languages/messages/MessagesEn.php
+++ b/languages/messages/MessagesEn.php
@@ -4928,6 +4928,7 @@
'tags' => 'Valid change tags',
'tags-summary' => '', # do not translate or duplicate this message
to other languages
'tag-filter' => '[[Special:Tags|Tag]] filter:',
+'tag-filter-none' => '(none)',
'tag-filter-submit' => 'Filter',
'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)',
'tags-title' => 'Tags',
diff --git a/languages/messages/MessagesQqq.php
b/languages/messages/MessagesQqq.php
index fa3d317..a04ef0a 100644
--- a/languages/messages/MessagesQqq.php
+++ b/languages/messages/MessagesQqq.php
@@ -9524,6 +9524,7 @@
It appears that the word 'valid' describes 'tags', not 'change'. It also
appears that you could use the term 'defined' instead of 'valid', or perhaps
use a phrase meaning 'Change tags in use'.",
'tag-filter' => 'Caption of a filter shown on lists of changes (e.g.
[[Special:Log]], [[Special:Contributions]], [[Special:Newpages]],
[[Special:Recentchanges]], [[Special:Recentchangeslinked]], page histories)',
+'tag-filter-none' => 'First element of dropdown list of tags, to indicate that
no tag is selected.',
'tag-filter-submit' => 'Caption of the submit button displayed next to the tag
filter on lists of changes (e.g. [[Special:Log]], [[Special:Contributions]],
[[Special:Newpages]], [[Special:Recentchanges]],
[[Special:Recentchangeslinked]], page histories)
{{Identical|Filter}}',
diff --git a/maintenance/language/messages.inc
b/maintenance/language/messages.inc
index 68b2d17..bf603b6 100644
--- a/maintenance/language/messages.inc
+++ b/maintenance/language/messages.inc
@@ -3760,6 +3760,7 @@
'tags',
'tags-summary',
'tag-filter',
+ 'tag-filter-none',
'tag-filter-submit',
'tag-list-wrapper',
'tags-title',
--
To view, visit https://gerrit.wikimedia.org/r/80781
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I34aa2bab5f8db5eed3dbd2826532f2d724fdea30
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Matmarex <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits