jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/325285 )
Change subject: Include user's edit count in BOOT action ...................................................................... Include user's edit count in BOOT action Action changes: * Group user-related data in the user property, rather than repeating "isUser" and "user" prefixes. * Include user's edit count in the user property of the action. Reducer changes: * Make the preview reducer handle the action's new shape. * Make the eventLogging reducer add the bucketed user's edit count to the state tree. Bug: T152225 Change-Id: I8fae9e2d0f6889ffdd30bb5192513d194f791967 --- M extension.json M resources/ext.popups/actions.js A resources/ext.popups/counts.js M resources/ext.popups/reducers.js M tests/qunit/ext.popups/actions.test.js A tests/qunit/ext.popups/counts.test.js M tests/qunit/ext.popups/reducers.eventLogging.test.js M tests/qunit/ext.popups/reducers.test.js 8 files changed, 109 insertions(+), 15 deletions(-) Approvals: Jhernandez: Looks good to me, approved jenkins-bot: Verified diff --git a/extension.json b/extension.json index ff6c036..602d487 100644 --- a/extension.json +++ b/extension.json @@ -63,6 +63,7 @@ "resources/ext.popups/experiment.js", "resources/ext.popups/actions.js", "resources/ext.popups/processLinks.js", + "resources/ext.popups/counts.js", "resources/ext.popups/gateway.js", "resources/ext.popups/reducers.js", "resources/ext.popups/changeListener.js", diff --git a/resources/ext.popups/actions.js b/resources/ext.popups/actions.js index beb3165..42d58a7 100644 --- a/resources/ext.popups/actions.js +++ b/resources/ext.popups/actions.js @@ -44,9 +44,10 @@ * i.e. `mw.config` */ actions.boot = function ( isUserInCondition, user, generateToken, config ) { + var editCount = config.get( 'wgUserEditCount' ); + return { type: types.BOOT, - isUserInCondition: isUserInCondition(), sessionToken: user.sessionId(), pageToken: generateToken(), page: { @@ -54,7 +55,11 @@ namespaceID: config.get( 'wgNamespaceNumber' ), id: config.get( 'wgArticleId' ) }, - isUserAnon: user.isAnon() + user: { + isInCondition: isUserInCondition(), + isAnon: user.isAnon(), + editCount: editCount + } }; }; diff --git a/resources/ext.popups/counts.js b/resources/ext.popups/counts.js new file mode 100644 index 0000000..47fed15 --- /dev/null +++ b/resources/ext.popups/counts.js @@ -0,0 +1,34 @@ +( function ( mw ) { + + mw.popups.counts = {}; + + /** + * Return count bucket for the number of edits a user has made. + * + * The buckets are defined as part of + * [the Popups schema](https://meta.wikimedia.org/wiki/Schema:Popups). + * + * Extracted from `mw.popups.schemaPopups.getEditCountBucket`. + * + * @param {Number} count + * @return {String} + */ + mw.popups.counts.getEditCountBucket = function ( count ) { + var bucket; + + if ( count === 0 ) { + bucket = '0'; + } else if ( count >= 1 && count <= 4 ) { + bucket = '1-4'; + } else if ( count >= 5 && count <= 99 ) { + bucket = '5-99'; + } else if ( count >= 100 && count <= 999 ) { + bucket = '100-999'; + } else if ( count >= 1000 ) { + bucket = '1000+'; + } + + return bucket + ' edits'; + }; + +}( mediaWiki ) ); diff --git a/resources/ext.popups/reducers.js b/resources/ext.popups/reducers.js index cb8a9d9..44d9465 100644 --- a/resources/ext.popups/reducers.js +++ b/resources/ext.popups/reducers.js @@ -1,4 +1,8 @@ ( function ( mw, $ ) { + + // Sugar for the mw.popups.reducers.eventLogging reducer. + var counts = mw.popups.counts; + mw.popups.reducers = {}; /** @@ -62,7 +66,7 @@ switch ( action.type ) { case mw.popups.actionTypes.BOOT: return nextState( state, { - enabled: action.isUserInCondition + enabled: action.user.isInCondition } ); case mw.popups.actionTypes.LINK_DWELL: return nextState( state, { @@ -155,10 +159,11 @@ pageTitleSource: action.page.title, namespaceIdSource: action.page.namespaceID, pageIdSource: action.page.id, - isAnon: action.isUserAnon, - popupEnabled: action.isUserInCondition, + isAnon: action.user.isAnon, + popupEnabled: action.user.isInCondition, pageToken: action.pageToken, - sessionToken: action.sessionToken + sessionToken: action.sessionToken, + editCountBucket: counts.getEditCountBucket( action.user.editCount ) }, event: { action: 'pageLoaded' diff --git a/tests/qunit/ext.popups/actions.test.js b/tests/qunit/ext.popups/actions.test.js index ff49db7..b603764 100644 --- a/tests/qunit/ext.popups/actions.test.js +++ b/tests/qunit/ext.popups/actions.test.js @@ -15,7 +15,8 @@ config.set( { wgTitle: 'Foo', wgNamespaceNumber: 1, - wgArticleId: 2 + wgArticleId: 2, + wgUserEditCount: 3 } ); assert.expect( 1 ); @@ -24,7 +25,6 @@ mw.popups.actions.boot( isUserInCondition, stubUser, generateToken, config ), { type: 'BOOT', - isUserInCondition: false, sessionToken: '0123456789', pageToken: '9876543210', page: { @@ -32,7 +32,11 @@ namespaceID: 1, id: 2 }, - isUserAnon: true + user: { + isInCondition: false, + isAnon: true, + editCount: 3 + } } ); } ); diff --git a/tests/qunit/ext.popups/counts.test.js b/tests/qunit/ext.popups/counts.test.js new file mode 100644 index 0000000..642ccab --- /dev/null +++ b/tests/qunit/ext.popups/counts.test.js @@ -0,0 +1,37 @@ +( function ( mw ) { + + QUnit.module( 'ext.popups/counts' ); + + QUnit.test( '#getEditCountBucket', function ( assert ) { + var i, bucket, count, + cases = [ + [ 0, '0 edits' ], + [ 1, '1-4 edits' ], + [ 2, '1-4 edits' ], + [ 4, '1-4 edits' ], + [ 5, '5-99 edits' ], + [ 25, '5-99 edits' ], + [ 50, '5-99 edits' ], + [ 99, '5-99 edits' ], + [ 100, '100-999 edits' ], + [ 101, '100-999 edits' ], + [ 500, '100-999 edits' ], + [ 999, '100-999 edits' ], + [ 1000, '1000+ edits' ], + [ 1500, '1000+ edits' ] + ]; + + assert.expect( cases.length ); + + for ( i = 0; i < cases.length; i++ ) { + count = cases[ i ][ 0 ]; + bucket = mw.popups.counts.getEditCountBucket( count ); + assert.equal( + bucket, + cases[ i ][ 1 ], + 'Edit count bucket is "' + bucket + '" when edit count is ' + count + '.' + ); + } + } ); + +}( mediaWiki ) ); diff --git a/tests/qunit/ext.popups/reducers.eventLogging.test.js b/tests/qunit/ext.popups/reducers.eventLogging.test.js index 00372ab..01fcb30 100644 --- a/tests/qunit/ext.popups/reducers.eventLogging.test.js +++ b/tests/qunit/ext.popups/reducers.eventLogging.test.js @@ -1,5 +1,7 @@ ( function ( mw ) { + var counts = mw.popups.counts; + QUnit.module( 'ext.popups/reducers#eventLogging', { setup: function () { this.initialState = mw.popups.reducers.eventLogging( undefined, { @@ -11,7 +13,6 @@ QUnit.test( 'BOOT', function ( assert ) { var action = { type: 'BOOT', - isUserInCondition: true, sessionToken: '0123456789', pageToken: '9876543210', page: { @@ -19,7 +20,11 @@ namespaceID: 1, id: 2 }, - isUserAnon: true + user: { + isInCondition: true, + isAnon: false, + editCount: 11 + } }; assert.deepEqual( @@ -29,10 +34,11 @@ pageTitleSource: action.page.title, namespaceIdSource: action.page.namespaceID, pageIdSource: action.page.id, - isAnon: action.isUserAnon, - popupEnabled: action.isUserInCondition, + isAnon: action.user.isAnon, + popupEnabled: action.user.isInCondition, pageToken: action.pageToken, - sessionToken: action.sessionToken + sessionToken: action.sessionToken, + editCountBucket: counts.getEditCountBucket( action.user.editCount ) }, event: { action: 'pageLoaded' diff --git a/tests/qunit/ext.popups/reducers.test.js b/tests/qunit/ext.popups/reducers.test.js index aca18bb..45ecd45 100644 --- a/tests/qunit/ext.popups/reducers.test.js +++ b/tests/qunit/ext.popups/reducers.test.js @@ -38,7 +38,9 @@ QUnit.test( '#preview: BOOT', function ( assert ) { var action = { type: 'BOOT', - isUserInCondition: true + user: { + isInCondition: true + } }; assert.expect( 1 ); -- To view, visit https://gerrit.wikimedia.org/r/325285 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I8fae9e2d0f6889ffdd30bb5192513d194f791967 Gerrit-PatchSet: 4 Gerrit-Project: mediawiki/extensions/Popups Gerrit-Branch: mpga Gerrit-Owner: Phuedx <samsm...@wikimedia.org> Gerrit-Reviewer: Jhernandez <jhernan...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits