r111149 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r111148‎ | r111149 | r111150 >
Date:11:53, 10 February 2012
Author:nikerabbit
Status:ok
Tags:
Comment:
I18n#533: Task based UI Special:Translate and better interlinking of statistics
New tabbed ui for Translation related special pages
* Should be fully BC
* Query parameters are passed to the other pages/actions when relevant
* Subpage parameters are parsed and passed like query params
* Stats pages keep passed language/group param on submit even when not relevant to that page
* Changed LanguageStats to use language instead of code as param name (code still read to keep BC)
* Hide h1 headers from the special pages to save space
* In Translate, simplify the selector now that we can show different list for each action
* Fade the non-essential selector when not hovered to avoid them distracting too much, subject to change to a better design
* As a down side, this makes the list of task less flexible. It is still possible to disable tasks, but adding new ones need code changes
Don't show navigation at the top (in addition to bottom), if all messages are shown in one page
Modified paths:
  • /trunk/extensions/Translate/Translate.i18n.php (modified) (history)
  • /trunk/extensions/Translate/Translate.php (modified) (history)
  • /trunk/extensions/Translate/resources/ext.translate.special.translate.css (modified) (history)
  • /trunk/extensions/Translate/resources/ext.translate.tabgroup.css (added) (history)
  • /trunk/extensions/Translate/specials/SpecialLanguageStats.php (modified) (history)
  • /trunk/extensions/Translate/specials/SpecialMessageGroupStats.php (modified) (history)
  • /trunk/extensions/Translate/specials/SpecialTranslate.php (modified) (history)

Diff [purge]

Index: trunk/extensions/Translate/Translate.php
@@ -108,6 +108,8 @@
109109 $wgHooks['ArticleSaveComplete'][] = 'TranslateEditAddons::onSave';
110110 $wgHooks['Translate:newTranslation'][] = 'TranslateEditAddons::updateTransverTag';
111111
 112+$wgHooks['SkinTemplateNavigation::SpecialPage'][] = 'SpecialTranslate::tabify';
 113+
112114 // Custom preferences
113115 $wgDefaultUserOptions['translate'] = 0;
114116 $wgDefaultUserOptions['translate-editlangs'] = 'default';
@@ -196,6 +198,11 @@
197199 ),
198200 ) + $resourcePaths;
199201
 202+$wgResourceModules['ext.translate.tabgroup'] = array(
 203+ 'styles' => 'resources/ext.translate.tabgroup.css',
 204+ 'position' => 'top',
 205+) + $resourcePaths;
 206+
200207 $wgResourceModules['ext.translate.quickedit'] = array(
201208 'scripts' => 'resources/ext.translate.quickedit.js',
202209 'styles' => 'resources/ext.translate.quickedit.css',
Index: trunk/extensions/Translate/Translate.i18n.php
@@ -21,22 +21,23 @@
2222 Click the message group name to view a list of untranslated messages.',
2323 'translate-grouplisting-empty' => 'No message groups have been configured for translation.',
2424
25 - 'translate-task-view' => 'View all messages from',
26 - 'translate-task-untranslated' => 'View all untranslated messages from',
27 - 'translate-task-optional' => 'View optional messages from',
28 - 'translate-task-suggestions' => 'View messages with suggestions from translation memory',
29 - 'translate-task-untranslatedoptional' => 'View untranslated optional messages from',
30 - 'translate-task-problematic' => 'View messages that have problems',
31 - 'translate-task-review' => 'Review changes to',
32 - 'translate-task-acceptqueue' => 'Accept translations in',
33 - 'translate-task-reviewall' => 'Review all translated messages in',
34 - 'translate-task-export' => 'Export translations',
35 - 'translate-task-export-to-file' => 'Export translations to file',
36 - 'translate-task-export-as-po' => 'Export translations for off-line translation',
37 - 'translate-task-export-to-xliff' => 'Export translations in Xliff format',
 25+ 'translate-taskui-view' => 'Show all messages',
 26+ 'translate-taskui-untranslated' => 'Show untranslated messages',
 27+ 'translate-taskui-optional' => 'Show optional messages',
 28+ 'translate-taskui-suggestions' => 'Show messages with suggestions from translation memory',
 29+ 'translate-taskui-acceptqueue' => 'Only messages I can accept',
 30+ 'translate-taskui-reviewall' => 'Review all translations',
 31+ 'translate-taskui-export-to-file' => 'Export in native format',
 32+ 'translate-taskui-export-as-po' => 'Export for off-line translation',
3833
 34+ 'translate-taction-translate' => 'Translate',
 35+ 'translate-taction-proofread' => 'Proofread',
 36+ 'translate-taction-lstats' => 'Language statistics',
 37+ 'translate-taction-mstats' => 'Message group statistics',
 38+ 'translate-taction-export' => 'Export',
 39+ 'translate-taction-disabled' => 'This action is disabled on this wiki.',
 40+
3941 'translate-page-no-such-language' => 'Specified language was invalid.',
40 - 'translate-page-no-such-task' => 'Specified task was invalid.',
4142 'translate-page-no-such-group' => 'Specified group was invalid.',
4243
4344 'translate-page-disabled' => "Translations to this language in this group have been disabled.
@@ -45,7 +46,6 @@
4647 ''$1''",
4748
4849 'translate-page-settings-legend' => 'Settings',
49 - 'translate-page-task' => 'I want to',
5050 'translate-page-group' => 'Group',
5151 'translate-page-language' => 'Language',
5252 'translate-page-limit' => 'Limit',
Index: trunk/extensions/Translate/specials/SpecialTranslate.php
@@ -57,8 +57,6 @@
5858
5959 $this->setup( $parameters );
6060
61 - $errors = array();
62 -
6361 if ( $this->options['group'] === '' ) {
6462 TranslateUtils::addSpecialHelpLink( $wgOut, 'Help:Extension:Translate/Translation_example' );
6563 $this->groupInformation();
@@ -66,19 +64,14 @@
6765 }
6866
6967 $codes = Language::getLanguageNames( false );
70 -
 68+ $errors = array();
7169 if ( !$this->options['language'] || !isset( $codes[$this->options['language']] ) ) {
72 - $errors['language'] = wfMsgExt( 'translate-page-no-such-language', array( 'parse' ) );
 70+ $errors['language'] = wfMessage( 'translate-page-no-such-language' )->text();
7371 $this->options['language'] = $this->defaults['language'];
7472 }
7573
76 - if ( !$this->task instanceof TranslateTask ) {
77 - $errors['task'] = wfMsgExt( 'translate-page-no-such-task', array( 'parse' ) );
78 - $this->options['task'] = $this->defaults['task'];
79 - }
80 -
8174 if ( !$this->group instanceof MessageGroup ) {
82 - $errors['group'] = wfMsgExt( 'translate-page-no-such-group', array( 'parse' ) );
 75+ $errors['group'] = wfMessage( 'translate-page-no-such-group' )->text();
8376 $this->options['group'] = $this->defaults['group'];
8477 }
8578
@@ -113,6 +106,9 @@
114107 );
115108
116109 // Initialise and get output.
 110+ if ( !$this->task ) {
 111+ return;
 112+ }
117113 $this->task->init( $this->group, $taskOptions );
118114 $output = $this->task->execute();
119115
@@ -154,6 +150,8 @@
155151
156152 if ( $this->paging['count'] === 0 ) {
157153 $wgOut->addHTML( $description . $links );
 154+ } elseif( $this->paging['count'] === $this->paging['total'] ) {
 155+ $wgOut->addHTML( $description . $output . $links );
158156 } else {
159157 $wgOut->addHTML( $description . $links . $output . $links );
160158 }
@@ -164,6 +162,7 @@
165163 global $wgUser, $wgRequest;
166164
167165 $defaults = array(
 166+ /* str */ 'taction' => 'translate',
168167 /* str */ 'task' => 'untranslated',
169168 /* str */ 'sort' => 'normal',
170169 /* str */ 'language' => $wgUser->getOption( 'language' ),
@@ -208,6 +207,19 @@
209208 wfAppendToArrayIfNotDefault( $v, $r, $defaults, $nondefaults );
210209 }
211210
 211+ // Fix defaults based on what we got
 212+ if ( isset( $nondefaults['taction'] ) ) {
 213+ if ( $nondefaults['taction'] === 'proofread' ) {
 214+ if ( $wgUser->isAllowed( 'translate-messagereview' ) ) {
 215+ $defaults['task'] = 'acceptqueue';
 216+ } else {
 217+ $defaults['task'] = 'reviewall';
 218+ }
 219+ } elseif( $nondefaults['taction'] === 'export' ) {
 220+ $defaults['task'] = '';
 221+ }
 222+ }
 223+
212224 $this->defaults = $defaults;
213225 $this->nondefaults = $nondefaults;
214226 $this->options = $nondefaults + $defaults;
@@ -221,35 +233,51 @@
222234 }
223235
224236 protected function settingsForm( $errors ) {
225 - global $wgScript;
 237+ global $wgScript, $wgUser;
 238+ $user = $wgUser;
226239
227 - // These are used, in the $$g black magic below. Do not remove!
228 - $task = $this->taskSelector();
229 - $group = $this->groupSelector();
230 - $language = $this->languageSelector();
231 - $limit = $this->limitSelector();
 240+ $taction = $this->options['taction'];
232241
233 - $button = Xml::submitButton( wfMsg( 'translate-submit' ) );
 242+ $selectors = array(
 243+ 'group' => $this->groupSelector(),
 244+ 'language' => $this->languageSelector(),
 245+ 'limit' => $this->limitSelector(),
 246+ );
234247
 248+ if ( $taction === 'export' ) {
 249+ unset( $selectors['limit'] );
 250+ }
 251+
235252 $options = array();
236 -
237 - foreach ( array( 'task', 'group', 'language', 'limit' ) as $g ) {
 253+ foreach ( $selectors as $g => $selector ) {
238254 $options[] = self::optionRow(
239 - Xml::tags( 'label', array( 'for' => $g ), wfMsgExt( 'translate-page-' . $g, 'escapenoentities' ) ),
240 - $$g,
 255+ wfMessage( 'translate-page-' . $g )->escaped(),
 256+ $selector,
241257 array_key_exists( $g, $errors ) ? $errors[$g] : null
242258 );
243259 }
244260
 261+ if ( $taction === 'proofread' ) {
 262+ $extra = $this->taskLinks( array( 'acceptqueue', 'reviewall' ) );
 263+ } elseif ( $taction === 'translate' ) {
 264+ $extra = $this->taskLinks( array( 'untranslated', 'view', 'optional', 'suggestions' ) );
 265+ } elseif ( $taction === 'export' ) {
 266+ $extra = $this->taskLinks( array( 'export-as-po', 'export-to-file' ) );
 267+ } else {
 268+ $extra = '';
 269+ }
 270+
 271+ $nonEssential = Html::rawElement( 'span', array( 'class' => 'mw-sp-translate-nonessential' ), implode( "", $options ) );
 272+
 273+ $button = Xml::submitButton( wfMsg( 'translate-submit' ) );
 274+
245275 $form =
246276 Html::openElement( 'fieldset', array( 'class' => 'mw-sp-translate-settings' ) ) .
247277 Html::element( 'legend', null, wfMsg( 'translate-page-settings-legend' ) ) .
248278 Html::openElement( 'form', array( 'action' => $wgScript, 'method' => 'get' ) ) .
249279 Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
250 - Html::openElement( 'table' ) .
251 - implode( "", $options ) .
252 - self::optionRow( $button, ' ' ) .
253 - Html::closeElement( 'table' ) .
 280+ Html::hidden( 'taction', $this->options['taction'] ) .
 281+ "$nonEssential\n$extra\n$button\n" .
254282 Html::closeElement( 'form' ) .
255283 Html::closeElement( 'fieldset' );
256284 return $form;
@@ -263,29 +291,58 @@
264292 */
265293 private static function optionRow( $label, $option, $error = null ) {
266294 return
267 - Html::openElement( 'tr' ) .
268 - Html::rawElement( 'td', null, $label ) .
269 - Html::rawElement( 'td', null, $option ) .
270 - ( $error ? Html::rawElement( 'td', array( 'class' => 'mw-sp-translate-error' ), $error ) : '' ) .
271 - Html::closeElement( 'tr' );
 295+ "<label>$label&nbsp;$option</label>" .
 296+ ( $error ? Html::rawElement( 'span', array( 'class' => 'mw-sp-translate-error' ), $error ) : '' ) . ' ';
272297 }
273298
274 - /* Selectors ahead */
275 -
276 - protected function taskSelector( $pageTranslation = false ) {
 299+ protected function taskLinks( $tasks ) {
277300 global $wgUser;
278 - $selector = new XmlSelect( 'task', 'task' );
279 - $selector->setDefault( $this->options['task'] );
 301+ $user = $wgUser;
280302
281 - $isPageTranslation = $this->group instanceof WikiPageMessageGroup;
282 - foreach ( TranslateTasks::getTasks( $isPageTranslation ) as $id ) {
283 - if ( TranslateTasks::getTask( $id )->isAllowedFor( $wgUser ) ) {
284 - $label = TranslateTask::labelForTask( $id );
285 - $selector->addOption( $label, $id );
 303+ foreach ( $tasks as $index => $id ) {
 304+ $task = TranslateTasks::getTask( $id );
 305+ if ( !$task ) {
 306+ unset( $tasks[$index] );
 307+ continue;
286308 }
 309+
 310+ if ( !$task->isAllowedFor( $user ) ) {
 311+ unset( $tasks[$index] );
 312+ continue;
 313+ }
287314 }
288315
289 - return $selector->getHTML();
 316+ $sep = Html::element( 'br' );
 317+ $count = count( $tasks );
 318+ if ( $count === 0 ) {
 319+ return $sep . wfMessage( 'translate-taction-disabled' )->escaped();
 320+ } elseif ( $count === 1 ) {
 321+ $id = array_pop( $tasks );
 322+ // If there is only one task, and it is the default task, hide it.
 323+ // If someone disables the default task for action, we will show
 324+ // a list of alternative task(s), but not showing anything
 325+ // by default. */
 326+ if ( $this->defaults['task'] === $id ) {
 327+ return '';
 328+ }
 329+ return $sep . Xml::radioLabel(
 330+ wfMessage( "translate-taskui-$id" )->text(),
 331+ 'task', $id, 'task', // Name, value, id
 332+ true // Selected
 333+ );
 334+ } else {
 335+ $output = '';
 336+ foreach ( $tasks as $index => $id ) {
 337+ $output .= Xml::radioLabel(
 338+ wfMessage( "translate-taskui-$id" )->text(),
 339+ 'task', // Name
 340+ $id,
 341+ "task-$index", // id
 342+ $this->options['task'] === $id
 343+ );
 344+ }
 345+ return $sep . $output;
 346+ }
290347 }
291348
292349 protected function groupSelector() {
@@ -488,10 +545,10 @@
489546
490547 $title = $this->getTitle();
491548
492 - $code = $this->options['language'];
493549 $queryParams = array(
494550 'group' => $id,
495 - 'language' => $code
 551+ 'language' => $this->options['language'],
 552+ 'taction' => $this->options['taction'],
496553 );
497554
498555 $linker = class_exists( 'DummyLinker' ) ? new DummyLinker : new Linker;
@@ -583,4 +640,86 @@
584641 $box = Html::rawElement( 'div', array( 'id' => 'mw-sp-translate-workflow' ), $message->escaped() );
585642 return $box;
586643 }
 644+
 645+ /**
 646+ * Adds the task-based tabs on Special:Translate and few other special pages.
 647+ * Hook: SkinTemplateNavigation::SpecialPage
 648+ * @since 2012-02-10
 649+ */
 650+ static function tabify( Skin $skin, array &$tabs ) {
 651+ global $wgRequest, $wgOut;
 652+
 653+ $title = $skin->getTitle();
 654+ list( $alias, $sub ) = SpecialPage::resolveAliasWithSubpage( $title->getText() );
 655+
 656+ $pagesInGroup = array( 'Translate', 'LanguageStats', 'MessageGroupStats' );
 657+ if ( !in_array( $alias, $pagesInGroup, true ) ) {
 658+ return true;
 659+ }
 660+
 661+ $wgOut->addModules( 'ext.translate.tabgroup' );
 662+
 663+ // Extract subpage syntax, otherwise the values are not passed forward
 664+ $params = array();
 665+ if ( trim( $sub ) !== '' ) {
 666+ if ( $alias === 'Translate' || $alias === 'MessageGroupStats' ) {
 667+ $params['group'] = $sub;
 668+ } elseif( $alias === 'LanguageStats' ) {
 669+ // Breaks if additional parameters besides language are code provided
 670+ $params['language'] = $sub;
 671+ }
 672+ }
 673+ // However, query string params take precedence
 674+ $params = $wgRequest->getQueryValues() + $params;
 675+ asort( $params );
 676+
 677+ $taction = $wgRequest->getVal( 'taction', 'translate' );
 678+
 679+ $translate = SpecialPage::getTitleFor( 'Translate' );
 680+ $languagestats = SpecialPage::getTitleFor( 'LanguageStats' );
 681+ $messagegroupstats = SpecialPage::getTitleFor( 'MessageGroupStats' );
 682+
 683+
 684+ unset( $params['task'] ); // Depends on taction
 685+ unset( $params['taction'] ); // We're supplying this ourself
 686+ unset( $params['title'] ); // As above
 687+ unset( $params['x'] ); // Was posted -marker on stats pages
 688+ unset( $params['suppresscomplete'] ); // Stats things, should
 689+ unset( $params['suppressempty'] ); // not be passed
 690+
 691+ // Clear the special page tab that might be there already
 692+ $tabs['namespaces'] = array();
 693+
 694+ $tabs['namespaces']['translate'] = $data = array(
 695+ 'text' => wfMessage( 'translate-taction-translate' )->text(),
 696+ 'href' => $translate->getLocalUrl( array( 'taction' => 'translate' ) + $params ),
 697+ 'class' => $alias === 'Translate' && $taction === 'translate' ? 'selected' : '',
 698+ );
 699+ $tabs['namespaces']['proofread'] = $data = array(
 700+ 'text' => wfMessage( 'translate-taction-proofread' )->text(),
 701+ 'href' => $translate->getLocalUrl( array( 'taction' => 'proofread' ) + $params ),
 702+ 'class' => $alias === 'Translate' && $taction === 'proofread' ? 'selected' : '',
 703+ );
 704+
 705+ // Limit only applies to the above
 706+ unset( $params['limit'] );
 707+
 708+ $tabs['views']['lstats'] = array(
 709+ 'text' => wfMessage( 'translate-taction-lstats' )->text(),
 710+ 'href' => $languagestats->getLocalUrl( $params ),
 711+ 'class' => $alias === 'LanguageStats' ? 'selected' : '',
 712+ );
 713+ $tabs['views']['mstats'] = array(
 714+ 'text' => wfMessage( 'translate-taction-mstats' )->text(),
 715+ 'href' => $messagegroupstats->getLocalUrl( $params ),
 716+ 'class' => $alias === 'MessageGroupStats' ? 'selected' : '',
 717+ );
 718+ $tabs['views']['export'] = array(
 719+ 'text' => wfMessage( 'translate-taction-export' )->text(),
 720+ 'href' => $translate->getLocalUrl( array( 'taction' => 'export' ) + $params ),
 721+ 'class' => $alias === 'Translate' && $taction === 'export' ? 'selected' : '',
 722+ );
 723+
 724+ return true;
 725+ }
587726 }
Index: trunk/extensions/Translate/specials/SpecialMessageGroupStats.php
@@ -16,7 +16,7 @@
1717 */
1818 class SpecialMessageGroupStats extends SpecialLanguageStats {
1919 /// Overwritten from SpecialLanguageStats
20 - protected $targetValueName = 'group';
 20+ protected $targetValueName = array( 'group' );
2121 /// Overwritten from SpecialLanguageStats
2222 protected $noComplete = false;
2323 /// Overwritten from SpecialLanguageStats
@@ -57,7 +57,7 @@
5858
5959 /// Overwriten from SpecialLanguageStats
6060 function getform() {
61 - global $wgScript;
 61+ global $wgScript, $wgRequest;
6262
6363 $out = Html::openElement( 'div' );
6464 $out .= Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
@@ -96,6 +96,13 @@
9797
9898 $out .= Html::closeElement( 'table' );
9999 $out .= Html::closeElement( 'fieldset' );
 100+ /* Since these pages are in the tabgroup with Special:Translate,
 101+ * it makes sense to retain the selected group/language parameter
 102+ * on post requests even when not relevant to the current page. */
 103+ $val = $wgRequest->getVal( 'language' );
 104+ if ( $val !== null ) {
 105+ $out .= Html::hidden( 'language', $val );
 106+ }
100107 $out .= Html::closeElement( 'form' );
101108 $out .= Html::closeElement( 'div' );
102109
Index: trunk/extensions/Translate/specials/SpecialLanguageStats.php
@@ -29,7 +29,7 @@
3030 /**
3131 * @var String
3232 */
33 - protected $targetValueName = 'code';
 33+ protected $targetValueName = array( 'code', 'language' );
3434
3535 /**
3636 * Most of the displayed numbers added together.
@@ -117,7 +117,9 @@
118118 $submitted = !$this->including() && $request->getVal( 'x' ) === 'D';
119119
120120 // Default booleans to false if the form was submitted
121 - $this->target = $request->getVal( $this->targetValueName, $this->target );
 121+ foreach ( $this->targetValueName as $key ) {
 122+ $this->target = $request->getVal( $key, $this->target );
 123+ }
122124 $this->noComplete = $request->getBool( 'suppresscomplete', $this->noComplete && !$submitted );
123125 $this->noEmpty = $request->getBool( 'suppressempty', $this->noEmpty && !$submitted );
124126
@@ -165,7 +167,7 @@
166168 * @todo duplicated code
167169 */
168170 protected function getForm() {
169 - global $wgScript;
 171+ global $wgScript, $wgRequest;
170172
171173 $out = Html::openElement( 'div' );
172174 $out .= Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
@@ -177,10 +179,10 @@
178180
179181 $out .= Html::openElement( 'tr' );
180182 $out .= Html::openElement( 'td', array( 'class' => 'mw-label' ) );
181 - $out .= Xml::label( wfMsg( 'translate-language-code-field-name' ), 'code' );
 183+ $out .= Xml::label( wfMsg( 'translate-language-code-field-name' ), 'language' );
182184 $out .= Html::closeElement( 'td' );
183185 $out .= Html::openElement( 'td', array( 'class' => 'mw-input' ) );
184 - $out .= Xml::input( 'code', 10, $this->target, array( 'id' => 'code' ) );
 186+ $out .= Xml::input( 'language', 10, $this->target, array( 'id' => 'language' ) );
185187 $out .= Html::closeElement( 'td' );
186188 $out .= Html::closeElement( 'tr' );
187189
@@ -204,6 +206,13 @@
205207
206208 $out .= Html::closeElement( 'table' );
207209 $out .= Html::closeElement( 'fieldset' );
 210+ /* Since these pages are in the tabgroup with Special:Translate,
 211+ * it makes sense to retain the selected group/language parameter
 212+ * on post requests even when not relevant to the current page. */
 213+ $val = $wgRequest->getVal( 'group' );
 214+ if ( $val !== null ) {
 215+ $out .= Html::hidden( 'group', $val );
 216+ }
208217 $out .= Html::closeElement( 'form' );
209218 $out .= Html::closeElement( 'div' );
210219
@@ -408,13 +417,13 @@
409418
410419 protected function getWorkflowStates() {
411420 $db = wfGetDB( DB_SLAVE );
412 -
413 - switch ( $this->targetValueName ) {
 421+ $key = array_pop( $this->targetValueName );
 422+ switch ( $key ) {
414423 case 'group':
415424 $targetCol = 'tgr_group';
416425 $selectKey = 'tgr_lang';
417426 break;
418 - case 'code':
 427+ case 'language':
419428 $targetCol = 'tgr_lang';
420429 $selectKey = 'tgr_group';
421430 break;
Index: trunk/extensions/Translate/resources/ext.translate.special.translate.css
@@ -1,5 +1,6 @@
2 -/* Group listing at Special:Translate */
3 -
 2+/*
 3+ * Group listing at Special:Translate
 4+ */
45 table.mw-sp-translate-grouplist td {
56 min-width: 13em;
67 }
@@ -23,27 +24,45 @@
2425 cursor: pointer;
2526 }
2627
27 -/* Form at Special:Translate */
28 -
 28+/*
 29+ * Form at Special:Translate
 30+ */
2931 .mw-sp-translate-error {
3032 font-style: italic;
3133 background-color: yellow;
32 - padding-left: 3em;
33 - padding-right: 3em;
3434 }
3535
36 -.mw-sp-translate-settings table {
37 - border-spacing: 12pt 5pt;
38 - background-color: inherit;
 36+/* Make the less important selectors fade to reduce the feel that
 37+ * there is ton of options that need scanning and changing. Subject
 38+ * to change to better solution later. */
 39+.mw-sp-translate-nonessential {
3940 font-weight: bold;
 41+ opacity: 0.4;
4042 }
4143
 44+.mw-sp-translate-nonessential:hover {
 45+ opacity: 1.0;
 46+}
 47+
 48+/* This gets pretty far on wide screens... */
 49+.mw-sp-translate-settings input[type=submit] {
 50+ float: right;
 51+}
 52+
 53+/* For some reason a non-breaking space is not enough to keep the label
 54+ * with the dropdown. */
 55+.mw-sp-translate-settings label {
 56+ white-space: nowrap;
 57+}
 58+
 59+/*
 60+ * This reserves one corner with curvy lines for the message group status.
 61+ */
4262 #mw-sp-translate-workflow {
4363 float: right;
4464 vertical-align: middle;
4565 padding: 0.5em;
4666 margin-left: 20px;
47 - margin-bottom: 20px;
4867 margin-right: -1em;
4968 margin-top: -1em;
5069 border-bottom: 2px dotted #666;
Index: trunk/extensions/Translate/resources/ext.translate.tabgroup.css
@@ -0,0 +1,8 @@
 2+/* Heading not needer for special pages in tab group */
 3+#firstHeading {
 4+ display: none;
 5+}
 6+
 7+#left-navigation .selected {
 8+ font-weight: bold;
 9+}
Property changes on: trunk/extensions/Translate/resources/ext.translate.tabgroup.css
___________________________________________________________________
Added: svn:eol-style
110 + native

Sign-offs

UserFlagDate
Siebrandtested09:16, 16 February 2012

Follow-up revisions

RevisionCommit summaryAuthorDate
r111352Have the radio buttons go with the label, not the line before (CSS has label ...nikerabbit07:42, 13 February 2012
r111419People hate this :)nikerabbit20:40, 13 February 2012
r111420"All messages" should be first in the list, patch by neverendingonikerabbit20:53, 13 February 2012

Status & tagging log