WMDE-leszek has uploaded a new change for review.

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

Change subject: Make RevisionList expect list of Revision object
......................................................................

Make RevisionList expect list of Revision object

Despite its documentation the "constructor" of RevisionList tends
to expect array of revision data in a format returned by API instead
of array of Revision objects.
Due to different name of ID fields in Revision object and in API array,
if "real" Revision object is passed to RevisionList, its ID is lost.

This changes RevisionList so that it only accepts an array of Revision
objects. This provides better abstraction.

This is basically a revert of I147270f28381038d05f8bcfd2317e8c269b2e458
which aimed at the same problem but suggested solution doesn't seem right.

Change-Id: Ic45cdd3e7b707a8c6a19eecf0a84d4c11696cd1f
---
M modules/ext.RevisionSlider.RevisionList.js
M modules/ext.RevisionSlider.init.js
M tests/qunit/RevisionSlider.DiffPage.test.js
M tests/qunit/RevisionSlider.RevisionList.test.js
M tests/qunit/RevisionSlider.RevisionListView.test.js
M tests/qunit/RevisionSlider.Slider.test.js
M tests/qunit/RevisionSlider.SliderView.test.js
7 files changed, 62 insertions(+), 27 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/RevisionSlider 
refs/changes/39/297339/1

diff --git a/modules/ext.RevisionSlider.RevisionList.js 
b/modules/ext.RevisionSlider.RevisionList.js
index 0c10001..e4a9476 100644
--- a/modules/ext.RevisionSlider.RevisionList.js
+++ b/modules/ext.RevisionSlider.RevisionList.js
@@ -29,8 +29,8 @@
                        var i, rev;
 
                        for ( i = 0; i < revs.length; i++ ) {
-                               rev = new mw.libs.revisionSlider.Revision( 
revs[ i ] );
-                               rev.setRelativeSize( i > 0 ? revs[ i ].size - 
revs[ i - 1 ].size : revs[ i ].size );
+                               rev = revs[ i ]
+                               rev.setRelativeSize( i > 0 ? rev.getSize() - 
revs[ i - 1 ].getSize() : rev.getSize() );
 
                                this.revisions.push( rev );
                        }
@@ -74,4 +74,17 @@
 
        mw.libs.revisionSlider = mw.libs.revisionSlider || {};
        mw.libs.revisionSlider.RevisionList = RevisionList;
+
+       /**
+        * Transforms an array of revision data returned by MediaWiki API into
+        * an array of Revision objects
+        *
+        * @param {Array} revs
+        * @return {Revision[]}
+        */
+       mw.libs.revisionSlider.makeRevisions = function ( revs ) {
+               return revs.map( function ( revData ) {
+                       return new mw.libs.revisionSlider.Revision( revData );
+               } );
+       };
 }( mediaWiki, jQuery ) );
diff --git a/modules/ext.RevisionSlider.init.js 
b/modules/ext.RevisionSlider.init.js
index 4ab9aa0..de04bc3 100644
--- a/modules/ext.RevisionSlider.init.js
+++ b/modules/ext.RevisionSlider.init.js
@@ -18,7 +18,7 @@
                                }
                                revs.reverse();
 
-                               revisionList = new 
mw.libs.revisionSlider.RevisionList( revs );
+                               revisionList = new 
mw.libs.revisionSlider.RevisionList( mw.libs.revisionSlider.makeRevisions( revs 
) );
                                $container = $( '#mw-revslider-container' );
                                slider = new mw.libs.revisionSlider.Slider( 
revisionList );
                                slider.getView().render( $container );
diff --git a/tests/qunit/RevisionSlider.DiffPage.test.js 
b/tests/qunit/RevisionSlider.DiffPage.test.js
index b9556d7..1d42b43 100644
--- a/tests/qunit/RevisionSlider.DiffPage.test.js
+++ b/tests/qunit/RevisionSlider.DiffPage.test.js
@@ -2,7 +2,8 @@
        var DiffPage = mw.libs.revisionSlider.DiffPage,
                SliderView = mw.libs.revisionSlider.SliderView,
                Slider = mw.libs.revisionSlider.Slider,
-               RevisionList = mw.libs.revisionSlider.RevisionList;
+               RevisionList = mw.libs.revisionSlider.RevisionList,
+               Revision = mw.libs.revisionSlider.Revision;
 
        QUnit.module( 'ext.RevisionSlider.DiffPage' );
 
@@ -14,9 +15,9 @@
                var histLength,
                        diffPage = new DiffPage(),
                        sliderView = new SliderView( new Slider( new 
RevisionList( [
-                               { revid: 1, comment: '' },
-                               { revid: 3, comment: '' },
-                               { revid: 37, comment: '' }
+                               new Revision( { revid: 1, comment: '' } ),
+                               new Revision( { revid: 3, comment: '' } ),
+                               new Revision( { revid: 37, comment: '' } )
                        ] ) )
                        );
                mw.config.values.extRevisionSliderOldRev = 1;
diff --git a/tests/qunit/RevisionSlider.RevisionList.test.js 
b/tests/qunit/RevisionSlider.RevisionList.test.js
index ffe79ec..01d9958 100644
--- a/tests/qunit/RevisionSlider.RevisionList.test.js
+++ b/tests/qunit/RevisionSlider.RevisionList.test.js
@@ -1,13 +1,15 @@
 ( function ( mw ) {
-       var RevisionList = mw.libs.revisionSlider.RevisionList;
+       var Revision = mw.libs.revisionSlider.Revision,
+               RevisionList = mw.libs.revisionSlider.RevisionList,
+               makeRevisions = mw.libs.revisionSlider.makeRevisions;
 
        QUnit.module( 'ext.RevisionSlider.RevisionList' );
 
        QUnit.test( 'Find biggest Revision', function ( assert ) {
                var revs = new RevisionList( [
-                       { size: 5 },
-                       { size: 21 },
-                       { size: 13 }
+                       new Revision( { revid: 1, size: 5 } ),
+                       new Revision( { revid: 2, size: 21 } ),
+                       new Revision( { revid: 3, size: 13 } )
                ] );
 
                assert.equal( revs.getBiggestChangeSize(), 16 );
@@ -15,13 +17,27 @@
 
        QUnit.test( 'calculate relative size on init', function ( assert ) {
                var revs = new RevisionList( [
-                       { size: 5 },
-                       { size: 21 },
-                       { size: 13 }
+                       new Revision( { revid: 1, size: 5 } ),
+                       new Revision( { revid: 2, size: 21 } ),
+                       new Revision( { revid: 3, size: 13 } )
                ] );
 
                assert.equal( revs.getRevisions()[ 0 ].getRelativeSize(), 5 );
                assert.equal( revs.getRevisions()[ 1 ].getRelativeSize(), 16 );
                assert.equal( revs.getRevisions()[ 2 ].getRelativeSize(), -8 );
        } );
+
+       QUnit.test( 'makeRevisions converts revision data into list of Revision 
objects', function ( assert ) {
+               var revs = [ { revid: 1, size: 5 },
+                       { revid: 2, size: 21 },
+                       { revid: 3, size: 13 }
+               ], revisions = makeRevisions( revs );
+
+               assert.equal( revisions[ 0 ].getId(), 1 );
+               assert.equal( revisions[ 0 ].getSize(), 5 );
+               assert.equal( revisions[ 1 ].getId(), 2 );
+               assert.equal( revisions[ 1 ].getSize(), 21 );
+               assert.equal( revisions[ 2 ].getId(), 3 );
+               assert.equal( revisions[ 2 ].getSize(), 13 );
+       } );
 } )( mediaWiki );
diff --git a/tests/qunit/RevisionSlider.RevisionListView.test.js 
b/tests/qunit/RevisionSlider.RevisionListView.test.js
index 5730e56..6b6b049 100644
--- a/tests/qunit/RevisionSlider.RevisionListView.test.js
+++ b/tests/qunit/RevisionSlider.RevisionListView.test.js
@@ -7,9 +7,9 @@
 
        QUnit.test( 'render adds revisions', function ( assert ) {
                var revisionListView = new RevisionListView( new RevisionList( [
-                               { revid: 1, size: 5, comment: '' },
-                               { revid: 3, size: 213, comment: '' },
-                               { revid: 37, size: 100, comment: '' }
+                               new Revision( { revid: 1, size: 5, comment: '' 
} ),
+                               new Revision( { revid: 3, size: 213, comment: 
'' } ),
+                               new Revision( { revid: 37, size: 100, comment: 
'' } )
                        ] ) ),
                        $resultHtml, $revisionWrapperDivs, $revisionDivs;
 
diff --git a/tests/qunit/RevisionSlider.Slider.test.js 
b/tests/qunit/RevisionSlider.Slider.test.js
index 44c0c2e..b947fb8 100644
--- a/tests/qunit/RevisionSlider.Slider.test.js
+++ b/tests/qunit/RevisionSlider.Slider.test.js
@@ -1,11 +1,12 @@
 ( function ( mw ) {
        var Slider = mw.libs.revisionSlider.Slider,
                RevisionList = mw.libs.revisionSlider.RevisionList,
+               Revision = mw.libs.revisionSlider.Revision,
                makeNRevisions = function ( n ) {
                        var revs = [],
                                i;
                        for ( i = 0; i < n; i++ ) {
-                               revs.push( { user: 'Fooo' } );
+                               revs.push( new Revision( { revid: i + 1, user: 
'Fooo' } ) );
                        }
                        return new RevisionList( revs );
                };
@@ -13,7 +14,10 @@
        QUnit.module( 'ext.RevisionSlider.Slider' );
 
        QUnit.test( 'has revisions', function ( assert ) {
-               var revs = new RevisionList( [ {}, {} ] ),
+               var revs = new RevisionList( [
+                       new Revision( { revid: 1 } ),
+                       new Revision( { revid: 2 } )
+               ] ),
                        slider = new Slider( revs );
 
                assert.equal( slider.getRevisions(), revs );
diff --git a/tests/qunit/RevisionSlider.SliderView.test.js 
b/tests/qunit/RevisionSlider.SliderView.test.js
index a567df1..1fc771a 100644
--- a/tests/qunit/RevisionSlider.SliderView.test.js
+++ b/tests/qunit/RevisionSlider.SliderView.test.js
@@ -2,6 +2,7 @@
        var SliderView = mw.libs.revisionSlider.SliderView,
                Slider = mw.libs.revisionSlider.Slider,
                RevisionList = mw.libs.revisionSlider.RevisionList,
+               Revision = mw.libs.revisionSlider.Revision,
                startHistoryState, startHref;
 
        QUnit.module( 'ext.RevisionSlider.SliderView' );
@@ -18,9 +19,9 @@
        QUnit.test( 'render adds the slider view with defined revisions 
selected', function ( assert ) {
                var $container = $( '<div>' ),
                        view = new SliderView( new Slider( new RevisionList( [
-                               { revid: 1, size: 5, comment: 'Comment1', user: 
'User1' },
-                               { revid: 3, size: 21, comment: 'Comment2', 
user: 'User2' },
-                               { revid: 37, size: 13, comment: 'Comment3', 
user: 'User3' }
+                               new Revision( { revid: 1, size: 5, comment: 
'Comment1', user: 'User1' } ),
+                               new Revision( { revid: 3, size: 21, comment: 
'Comment2', user: 'User2' } ),
+                               new Revision( { revid: 37, size: 13, comment: 
'Comment3', user: 'User3' } )
                        ] ) ) ),
                        $revisionOld,
                        $revisionNew;
@@ -42,8 +43,8 @@
        QUnit.test( 'render throws an exception when selected revision not in 
available range', function ( assert ) {
                var $container = $( '<div>' ),
                        view = new SliderView( new Slider( new RevisionList( [
-                               { revid: 3, size: 21, comment: 'Comment2', 
user: 'User2' },
-                               { revid: 37, size: 13, comment: 'Comment3', 
user: 'User3' }
+                               new Revision( { revid: 3, size: 21, comment: 
'Comment2', user: 'User2' } ),
+                               new Revision( { revid: 37, size: 13, comment: 
'Comment3', user: 'User3' } )
                        ] ) ) );
 
                mw.config.values.extRevisionSliderOldRev = 1;
@@ -62,9 +63,9 @@
        QUnit.test( 'render throws an exception when no selected revisions 
provided', function ( assert ) {
                var $container = $( '<div>' ),
                        view = new SliderView( new Slider( new RevisionList( [
-                               { revid: 1, size: 5, comment: 'Comment1', user: 
'User1' },
-                               { revid: 3, size: 21, comment: 'Comment2', 
user: 'User2' },
-                               { revid: 37, size: 13, comment: 'Comment3', 
user: 'User3' }
+                               new Revision( { revid: 1, size: 5, comment: 
'Comment1', user: 'User1' } ),
+                               new Revision( { revid: 3, size: 21, comment: 
'Comment2', user: 'User2' } ),
+                               new Revision( { revid: 37, size: 13, comment: 
'Comment3', user: 'User3' } )
                        ] ) ) );
 
                mw.config.values.extRevisionSliderOldRev = null;

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic45cdd3e7b707a8c6a19eecf0a84d4c11696cd1f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/RevisionSlider
Gerrit-Branch: master
Gerrit-Owner: WMDE-leszek <[email protected]>

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

Reply via email to