summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/resources/js/ext.translate.special.languagestats.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Translate/resources/js/ext.translate.special.languagestats.js')
-rw-r--r--www/wiki/extensions/Translate/resources/js/ext.translate.special.languagestats.js136
1 files changed, 136 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/resources/js/ext.translate.special.languagestats.js b/www/wiki/extensions/Translate/resources/js/ext.translate.special.languagestats.js
new file mode 100644
index 00000000..979242d8
--- /dev/null
+++ b/www/wiki/extensions/Translate/resources/js/ext.translate.special.languagestats.js
@@ -0,0 +1,136 @@
+/*!
+ * Collapsing script for Special:LanguageStats in MediaWiki Extension:Translate
+ * @author Krinkle <krinklemail (at) gmail (dot) com>
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later, CC-BY-SA-3.0
+ */
+
+( function () {
+ 'use strict';
+
+ /**
+ * Add css class to every other visible row.
+ * It's not possible to do zebra colors with CSS only if there are hidden rows.
+ */
+ function doZebra() {
+ $( '.statstable tr:visible:odd' ).toggleClass( 'tux-statstable-even', false );
+ $( '.statstable tr:visible:even' ).toggleClass( 'tux-statstable-even', true );
+ }
+
+ $( function () {
+ var $allChildRows, $allTogglesCache, $toggleAllButton,
+ $translateTable = $( '.statstable' ),
+ $metaRows = $( 'tr.AggregateMessageGroup', $translateTable );
+
+ // Quick return
+ if ( !$metaRows.length ) {
+ return;
+ }
+
+ $metaRows.each( function () {
+ var $toggler,
+ $parent = $( this ),
+ thisGroupId = $parent.attr( 'data-groupid' ),
+ $children = $( 'tr[data-parentgroup="' + thisGroupId + '"]', $translateTable );
+
+ // Only do the collapse stuff if this Meta-group actually has children on this page
+ if ( !$children.length ) {
+ return;
+ }
+
+ // Build toggle link
+ $toggler = $( '<span class="groupexpander collapsed">[</span>' )
+ .append( $( '<a href="#"></a>' )
+ .text( mw.msg( 'translate-langstats-expand' ) ) )
+ .append( ']' )
+ .click( function ( e ) {
+ var $el = $( this );
+ // Switch the state and toggle the rows
+ if ( $el.hasClass( 'collapsed' ) ) {
+ $children.fadeIn( { start: doZebra } ).trigger( 'show' );
+ $el.removeClass( 'collapsed' ).addClass( 'expanded' );
+ $el.find( '> a' ).text( mw.msg( 'translate-langstats-collapse' ) );
+ } else {
+ $children.fadeOut( { done: doZebra } ).trigger( 'hide' );
+ $el.addClass( 'collapsed' ).removeClass( 'expanded' );
+ $el.find( '> a' ).text( mw.msg( 'translate-langstats-expand' ) );
+ }
+
+ e.preventDefault();
+ } );
+
+ // Add the toggle link to the first cell of the meta group table-row
+ $parent.find( ' > td:first' ).append( $toggler );
+
+ // Handle hide/show recursively, so that collapsing parent group
+ // hides all sub groups regardless of nesting level
+ $parent.on( 'hide show', function ( event ) {
+ // Reuse $toggle, $parent and $children from parent scope
+ if ( $toggler.hasClass( 'expanded' ) ) {
+ $children.trigger( event.type )[ event.type ]();
+ }
+ } );
+ } );
+
+ // Create, bind and append the toggle-all button
+ $allChildRows = $( 'tr[data-parentgroup]', $translateTable );
+ $allTogglesCache = null;
+ $toggleAllButton = $( '<span class="collapsed">[</span>' )
+ .append( $( '<a href="#"></a>' )
+ .text( mw.msg( 'translate-langstats-expandall' ) ) )
+ .append( ']' )
+ .click( function ( e ) {
+ var $el = $( this ),
+ $allToggles = $allTogglesCache || $( '.groupexpander', $translateTable );
+
+ // Switch the state and toggle the rows
+ // and update the local toggles too
+ if ( $el.hasClass( 'collapsed' ) ) {
+ $allChildRows.show();
+ $el.add( $allToggles ).removeClass( 'collapsed' ).addClass( 'expanded' );
+ $el.find( '> a' ).text( mw.msg( 'translate-langstats-collapseall' ) );
+ $allToggles.find( '> a' ).text( mw.msg( 'translate-langstats-collapse' ) );
+ } else {
+ $allChildRows.hide();
+ $el.add( $allToggles ).addClass( 'collapsed' ).removeClass( 'expanded' );
+ $el.find( '> a' ).text( mw.msg( 'translate-langstats-expandall' ) );
+ $allToggles.find( '> a' ).text( mw.msg( 'translate-langstats-expand' ) );
+ }
+
+ doZebra();
+ e.preventDefault();
+ } );
+
+ // Initially hide them
+ $allChildRows.hide();
+ doZebra();
+
+ // Add the toggle-all button above the table
+ $( '<p class="groupexpander-all"></p>' ).append( $toggleAllButton ).insertBefore( $translateTable );
+ } );
+
+ $( function () {
+ var index,
+ sort = {},
+ re = /#sortable:(\d+)=(asc|desc)/,
+ match = re.exec( window.location.hash ),
+ $tables = $( '.statstable' );
+
+ if ( match ) {
+ index = parseInt( match[ 1 ], 10 );
+ sort[ index ] = match[ 2 ];
+ }
+ $tables.tablesorter( { sortList: [ sort ] } );
+
+ $tables.on( 'sortEnd.tablesorter', function () {
+ var $table = $( this );
+ $table.find( '.headerSortDown, .headerSortUp' ).each( function () {
+ var index = $table.find( 'th' ).index( $( this ) ),
+ dir = $( this ).hasClass( 'headerSortUp' ) ? 'asc' : 'desc';
+ window.location.hash = 'sortable:' + index + '=' + dir;
+
+ doZebra();
+ } );
+ } );
+ } );
+}() );