Thiemo Mättig (WMDE) has uploaded a new change for review.

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

Change subject: Show human readable time precision in diffs
......................................................................

Show human readable time precision in diffs

This uses existing messages from core.

Change-Id: I714e79bc5d1e048e26a94e56040bf6a50303a721
---
M lib/includes/formatters/TimeDetailsFormatter.php
M lib/tests/phpunit/formatters/TimeDetailsFormatterTest.php
2 files changed, 53 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/44/188544/1

diff --git a/lib/includes/formatters/TimeDetailsFormatter.php 
b/lib/includes/formatters/TimeDetailsFormatter.php
index 20fb536..624f20b 100644
--- a/lib/includes/formatters/TimeDetailsFormatter.php
+++ b/lib/includes/formatters/TimeDetailsFormatter.php
@@ -86,7 +86,7 @@
                // TODO: Provide "nice" rendering of precision, etc.
                $html .= $this->renderLabelValuePair(
                        'precision',
-                       htmlspecialchars( $value->getPrecision() )
+                       $this->getPrecisionHtml( $value->getPrecision() )
                );
                $html .= $this->renderLabelValuePair(
                        'before',
@@ -105,7 +105,7 @@
        /**
         * @param int $timezone
         *
-        * @return string
+        * @return string HTML
         */
        private function getTimezoneHtml( $timezone ) {
                $sign = $timezone < 0 ? "\xE2\x88\x92" : '+';
@@ -117,7 +117,7 @@
        /**
         * @param string $calendarModel
         *
-        * @return string
+        * @return string HTML
         */
        private function getCalendarModelHtml( $calendarModel ) {
                $calendarNames = $this->getOption( self::OPT_CALENDARNAMES );
@@ -126,6 +126,36 @@
                }
 
                return htmlspecialchars( $calendarModel );
+       }
+
+       /**
+        * @param int $precision
+        *
+        * @return string HTML
+        */
+       private function getPrecisionHtml( $precision ) {
+               if ( $precision > TimeValue::PRECISION_SECOND ) {
+                       return htmlspecialchars( $precision );
+               }
+
+               $key = 'years';
+               $amount = 1;
+
+               switch ( $precision ) {
+                       case TimeValue::PRECISION_MONTH: $key = 'months'; break;
+                       case TimeValue::PRECISION_DAY: $key = 'days'; break;
+                       case TimeValue::PRECISION_HOUR: $key = 'hours'; break;
+                       case TimeValue::PRECISION_MINUTE: $key = 'minutes'; 
break;
+                       case TimeValue::PRECISION_SECOND: $key = 'seconds'; 
break;
+               }
+
+               if ( $precision < TimeValue::PRECISION_YEAR ) {
+                       $amount = pow( 10, TimeValue::PRECISION_YEAR - 
$precision );
+               }
+
+               $lang = $this->getOption( ValueFormatter::OPT_LANG );
+               $msg = wfMessage( $key, $amount )->inLanguage( $lang );
+               return $msg->text();
        }
 
        /**
@@ -152,13 +182,12 @@
         * @return Message
         */
        private function getFieldLabel( $fieldName ) {
-               $lang = $this->getOption( ValueFormatter::OPT_LANG );
-
                // Messages: wb-timedetails-amount, wb-timedetails-upperbound,
                // wb-timedetails-lowerbound, wb-timedetails-unit
                $key = 'wikibase-timedetails-' . strtolower( $fieldName );
-               $msg = wfMessage( $key )->inLanguage( $lang );
 
+               $lang = $this->getOption( ValueFormatter::OPT_LANG );
+               $msg = wfMessage( $key )->inLanguage( $lang );
                return $msg;
        }
 
diff --git a/lib/tests/phpunit/formatters/TimeDetailsFormatterTest.php 
b/lib/tests/phpunit/formatters/TimeDetailsFormatterTest.php
index 144e39a..330d726 100644
--- a/lib/tests/phpunit/formatters/TimeDetailsFormatterTest.php
+++ b/lib/tests/phpunit/formatters/TimeDetailsFormatterTest.php
@@ -28,7 +28,9 @@
         * @param string $pattern
         */
        public function testFormat( TimeValue $value, $pattern ) {
-               $formatter = new TimeDetailsFormatter( new FormatterOptions() );
+               $formatter = new TimeDetailsFormatter( new FormatterOptions( 
array(
+                       ValueFormatter::OPT_LANG => 'qqx',
+               ) ) );
 
                $html = $formatter->format( $value );
                $this->assertRegExp( $pattern, $html );
@@ -47,7 +49,7 @@
                                                
'<td[^<>]*>\+0*2001-01-01T00:00:00Z</td>',
                                                '<td[^<>]*>\+01:00</td>',
                                                '<td[^<>]*>Gregorian</td>',
-                                               '<td[^<>]*>10</td>',
+                                               '<td[^<>]*>\(months: 1\)</td>',
                                                '<td[^<>]*>0</td>',
                                                '<td[^<>]*>1</td>',
                                        )
@@ -55,11 +57,23 @@
                        ),
                        array(
                                new TimeValue( '+2001-01-01T00:00:00Z', 0, 0, 
0, $day, 'Stardate' ),
-                               '@.*<td 
class="wb-time-calendar">Stardate</td>.*@s'
+                               '@.*<td[^<>]*calendar">Stardate</td>.*@s'
                        ),
                        array(
                                new TimeValue( '+2001-01-01T00:00:00Z', -179, 
0, 0, $day, $gregorian ),
-                               '@.*<td 
class="wb-time-timezone">\xE2\x88\x9202:59</td>.*@s'
+                               
'@.*<td[^<>]*timezone">\xE2\x88\x9202:59</td>.*@s'
+                       ),
+                       array(
+                               new TimeValue( '+2001-01-01T00:00:00Z', 0, 0, 
0, TimeValue::PRECISION_SECOND, $gregorian ),
+                               '@.*<td[^<>]*precision">\(seconds: 1\)</td>.*@s'
+                       ),
+                       array(
+                               new TimeValue( '+2001-01-01T00:00:00Z', 0, 0, 
0, TimeValue::PRECISION_10a, $gregorian ),
+                               '@.*<td[^<>]*precision">\(years: 10\)</td>.*@s'
+                       ),
+                       array(
+                               new TimeValue( '+2001-01-01T00:00:00Z', 0, 0, 
0, TimeValue::PRECISION_Ga, $gregorian ),
+                               '@.*<td[^<>]*precision">\(years: 
1000000000\)</td>.*@s'
                        ),
                );
        }

-- 
To view, visit https://gerrit.wikimedia.org/r/188544
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I714e79bc5d1e048e26a94e56040bf6a50303a721
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to