WMDE-leszek has submitted this change and it was merged.

Change subject: Create module for Revision type.
......................................................................


Create module for Revision type.

This pulls out some of the code around revisions into a decoupled and
tested module.

Change-Id: Ib2a4f96f0e0b9a96ec85d300d97cd52dcaffe89e
---
M RevisionSlider.hooks.php
M extension.json
A modules/ext.RevisionSlider.Revision.js
M modules/ext.RevisionSlider.init.js
A tests/RevisionSlider.Revision.test.js
5 files changed, 136 insertions(+), 22 deletions(-)

Approvals:
  WMDE-Fisch: Verified; Looks good to me, but someone else must approve
  WMDE-leszek: Verified; Looks good to me, approved
  jenkins-bot: Verified



diff --git a/RevisionSlider.hooks.php b/RevisionSlider.hooks.php
index 0efe5a3..2c9246a 100755
--- a/RevisionSlider.hooks.php
+++ b/RevisionSlider.hooks.php
@@ -17,4 +17,18 @@
        private static function isRevisionPage( WebRequest $request ) {
                return $request->getVal( 'action' ) === 'history' || 
$request->getVal( 'type' ) === 'revision';
        }
+
+       public static function onResourceLoaderTestModules( array 
&$testModules, ResourceLoader $rl ) {
+               $testModules['qunit']['ext.RevisionSlider.tests'] = [
+                       'scripts' => [
+                               'tests/RevisionSlider.Revision.test.js',
+                       ],
+                       'dependencies' => [
+                               'ext.RevisionSlider.Revision'
+                       ],
+                       'localBasePath' => __DIR__,
+               ];
+
+               return true;
+       }
 }
diff --git a/extension.json b/extension.json
index 9f77063..d67f149 100755
--- a/extension.json
+++ b/extension.json
@@ -27,6 +27,7 @@
                                "modules/ext.RevisionSlider.css"
                        ],
                        "dependencies": [
+                               "ext.RevisionSlider.Revision",
                                "ext.RevisionSlider.rainbow",
                                "ext.RevisionSlider.fetchRevisions"
                        ],
@@ -41,6 +42,11 @@
                        "scripts": [
                                "modules/ext.RevisionSlider.fetchRevisions.js"
                        ]
+               },
+               "ext.RevisionSlider.Revision": {
+                       "scripts": [
+                               "modules/ext.RevisionSlider.Revision.js"
+                       ]
                }
        },
        "ResourceFileModulePaths": {
@@ -49,6 +55,9 @@
        "Hooks": {
                "BeforePageDisplay": [
                        "RevisionSliderHooks::onBeforePageDisplay"
+               ],
+               "ResourceLoaderTestModules": [
+                       "RevisionSliderHooks::onResourceLoaderTestModules"
                ]
        }
 }
diff --git a/modules/ext.RevisionSlider.Revision.js 
b/modules/ext.RevisionSlider.Revision.js
new file mode 100644
index 0000000..b8202a8
--- /dev/null
+++ b/modules/ext.RevisionSlider.Revision.js
@@ -0,0 +1,72 @@
+( function ( mw, $ ) {
+
+       var Revision = function ( data ) {
+               this.size = data.size;
+               this.comment = data.comment;
+               this.parsedComment = data.parsedcomment;
+               this.timestamp = data.timestamp;
+               this.user = data.user;
+       };
+
+       $.extend( Revision.prototype, {
+               /**
+                * @type {int}
+                */
+               size: 0,
+
+               /**
+                * @type {string}
+                */
+               comment: '',
+
+               /**
+                * @type {string}
+                */
+               parsedComment: '',
+
+               /**
+                * @type {string}
+                */
+               timestamp: '',
+
+               /**
+                * @type {string}
+                */
+               user: '',
+
+               getSize: function () {
+                       return this.size;
+               },
+
+               getParsedComment: function () {
+                       return this.parsedComment;
+               },
+
+               getComment: function () {
+                       return this.comment;
+               },
+
+               formatDate: function ( rawDate ) {
+                       var MONTHS = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 
'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec' ],
+                               f = new Date( rawDate ),
+                               fDate = f.getUTCDate(),
+                               fMonth = f.getUTCMonth(),
+                               fYear = f.getUTCFullYear(),
+                               fHours = ( '0' + f.getUTCHours() ).slice( -2 ),
+                               fMinutes = ( '0' + f.getUTCMinutes() ).slice( 
-2 );
+
+                       return fHours + ':' + fMinutes + ', ' + fDate + ' ' + 
MONTHS[ fMonth ] + ' ' + fYear;
+               },
+
+               getFormattedDate: function () {
+                       return this.formatDate( this.timestamp );
+               },
+
+               getUser: function () {
+                       return this.user;
+               }
+       } );
+
+       mw.libs.revisionSlider = mw.libs.revisionSlider || {};
+       mw.libs.revisionSlider.Revision = Revision;
+}( mediaWiki, jQuery ) );
diff --git a/modules/ext.RevisionSlider.init.js 
b/modules/ext.RevisionSlider.init.js
index 4798bcd..1189408 100755
--- a/modules/ext.RevisionSlider.init.js
+++ b/modules/ext.RevisionSlider.init.js
@@ -17,19 +17,6 @@
        //      location.href = $url;
        // }
 
-       // Formating date in JS
-       function formatDate( rawDate ) {
-               var months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 
'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec' ],
-                       f = new Date( rawDate ),
-                       fDate = f.getUTCDate(),
-                       fMonth = f.getUTCMonth(),
-                       fYear = f.getUTCFullYear(),
-                       fHours = ( '0' + f.getUTCHours() ).slice( -2 ),
-                       fMinutes = ( '0' + f.getUTCMinutes() ).slice( -2 );
-
-               return ( fHours + ':' + fMinutes + ', ' + fDate + ' ' + months[ 
fMonth ] + ' ' + fYear ).toString();
-       }
-
        function getSection( text ) {
                text = text.match(
                        new RegExp( '(/\\* [^\\*]* \\*/)', 'gi' )
@@ -53,8 +40,8 @@
                        sectionName;
 
                for ( i = 1; i < revs.length; i++ ) {
-                       changeSize = Math.abs( revs[ i ].size - revs[ i - 1 
].size );
-                       section = getSection( revs[ i ].comment );
+                       changeSize = Math.abs( revs[ i ].getSize() - revs[ i - 
1 ].getSize() );
+                       section = getSection( revs[ i ].getComment() );
                        if ( changeSize > max ) {
                                max = changeSize;
                        }
@@ -86,14 +73,14 @@
                        i, diffSize, relativeChangeSize, section, html;
 
                for ( i = 1; i < revs.length; i++ ) {
-                       diffSize = revs[ i ].size - revs[ i - 1 ].size;
+                       diffSize = revs[ i ].getSize() - revs[ i - 1 
].getSize();
                        relativeChangeSize = Math.ceil( 65.0 * Math.log( 
Math.abs( diffSize ) ) / maxChangeSizeLogged ) + 5;
-                       section = getSection( revs[ i ].comment );
-                       html = '<b>' + formatDate( revs[ i ].timestamp ) + 
'</b><br>';
+                       section = getSection( revs[ i ].getComment() );
+                       html = '<b>' + revs[ i ].getFormattedDate() + 
'</b><br>';
 
-                       html += mw.html.escape( revs[ i ].user ) + '<br>';
-                       if ( revs[ i ].comment !== '' ) {
-                               html += '<br><i>' + mw.html.escape( revs[ i 
].parsedcomment ) + '</i>';
+                       html += mw.html.escape( revs[ i ].getUser() ) + '<br>';
+                       if ( revs[ i ].getComment() !== '' ) {
+                               html += '<br><i>' + mw.html.escape( revs[ i 
].getParsedComment() ) + '</i>';
                        }
                        html += '<br>' + diffSize + ' byte';
 
@@ -201,6 +188,17 @@
                return ( ( numberOfTicks >= maxNumberOfTicks ? maxNumberOfTicks 
: numberOfTicks ) * maxWidthPerTick );
        }
 
+       function initializeRevs( revs ) {
+               var revisions = [],
+                       i;
+
+               for ( i = 0; i < revs.length; i++ ) {
+                       revisions.push( new mw.libs.revisionSlider.Revision( 
revs[ i ] ) );
+               }
+
+               return revisions;
+       }
+
        function addSlider( revs ) {
                var $revisions = $( '<div class="revisions"></div>' ).css( 
'width', revs.length * revisionWidth ),
                        $leftPointer = $( '<div class="pointer left-pointer" 
/>' ),
@@ -298,7 +296,7 @@
                                        }
                                        revs.reverse();
 
-                                       addSlider( revs );
+                                       addSlider( initializeRevs( revs ) );
                                }
                        } );
                } );
diff --git a/tests/RevisionSlider.Revision.test.js 
b/tests/RevisionSlider.Revision.test.js
new file mode 100644
index 0000000..45b09fb
--- /dev/null
+++ b/tests/RevisionSlider.Revision.test.js
@@ -0,0 +1,21 @@
+(function ( mw, $ ) {
+       QUnit.module( 'ext.RevisionSlider.Revision' );
+
+       QUnit.test( 'create Revision', function ( assert ) {
+               var data = {
+                               size: 5,
+                               comment: 'hello',
+                               parsedcomment: '<b>hello</b>',
+                               timestamp: '2016-04-26T10:27:14Z', // 10:27, 26 
Apr 2016
+                               user: 'meh'
+                       },
+                       rev = new mw.libs.revisionSlider.Revision( data );
+
+               assert.equal( rev.getSize(), data.size );
+               assert.equal( rev.getComment(), data.comment );
+               assert.equal( rev.getParsedComment(), data.parsedcomment );
+               assert.equal( rev.getFormattedDate(), '10:27, 26 Apr 2016' );
+               assert.equal( rev.getUser(), data.user );
+       } );
+
+})( mediaWiki, jQuery );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib2a4f96f0e0b9a96ec85d300d97cd52dcaffe89e
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/RevisionSlider
Gerrit-Branch: master
Gerrit-Owner: Jakob <jakob.warkot...@wikimedia.de>
Gerrit-Reviewer: Addshore <addshorew...@gmail.com>
Gerrit-Reviewer: WMDE-Fisch <christoph.fisc...@wikimedia.de>
Gerrit-Reviewer: WMDE-leszek <leszek.mani...@wikimedia.de>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to