Fomafix has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/350971 )

Change subject: Duplicate deprecated mw.user.bucket to local implementation
......................................................................

Duplicate deprecated mw.user.bucket to local implementation

mw.user.bucket will be removed in MediaWiki 1.30.

Change-Id: I3827d6dd988f41bd826bafaf478840153c711c52
---
M extension.json
M modules/jquery.articleFeedbackv5/jquery.articleFeedbackv5.js
2 files changed, 83 insertions(+), 3 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/ArticleFeedbackv5 
refs/changes/71/350971/1

diff --git a/extension.json b/extension.json
index 120cd68..bb78a88 100644
--- a/extension.json
+++ b/extension.json
@@ -271,6 +271,7 @@
                                "jquery.ui.button",
                                "jquery.cookie",
                                "jquery.placeholder",
+                               "mediawiki.cookie",
                                "mediawiki.jqueryMsg",
                                "jquery.effects.highlight",
                                "mediawiki.Uri"
diff --git a/modules/jquery.articleFeedbackv5/jquery.articleFeedbackv5.js 
b/modules/jquery.articleFeedbackv5/jquery.articleFeedbackv5.js
index 329128c..0d94b34 100644
--- a/modules/jquery.articleFeedbackv5/jquery.articleFeedbackv5.js
+++ b/modules/jquery.articleFeedbackv5/jquery.articleFeedbackv5.js
@@ -2143,6 +2143,85 @@
        };
 
        // }}}
+       // {{{ bucket
+
+       /**
+        * Get the user's bucket (place them in one if not done already)
+        *
+        *     $.articleFeedbackv5.bucket( 'test', {
+        *         buckets: { ignored: 50, control: 25, test: 25 },
+        *         version: 1,
+        *         expires: 7
+        *     } );
+        *
+        * @param {string} key Name of bucket
+        * @param {Object} options Bucket configuration options
+        * @param {Object} options.buckets List of 
bucket-name/relative-probability pairs (required,
+        *  must have at least one pair)
+        * @param {number} [options.version=0] Version of bucket test, changing 
this forces
+        *  rebucketing
+        * @param {number} [options.expires=30] Length of time (in days) until 
the user gets
+        *  rebucketed
+        * @return {string} Bucket name - the randomly chosen key of the 
`options.buckets` object
+        */
+       $.articleFeedbackv5.bucket = function ( key, options ) {
+               var cookie, parts, version, bucket,
+                       range, k, rand, total;
+
+               options = $.extend( {
+                       buckets: {},
+                       version: 0,
+                       expires: 30
+               }, options || {} );
+
+               cookie = mw.cookie.get( 'mwuser-bucket:' + key );
+
+               // Bucket information is stored as 2 integers, together as 
version:bucket like: "1:2"
+               if ( typeof cookie === 'string' && cookie.length > 2 && 
cookie.indexOf( ':' ) !== -1 ) {
+                       parts = cookie.split( ':' );
+                       if ( parts.length > 1 && Number( parts[ 0 ] ) === 
options.version ) {
+                               version = Number( parts[ 0 ] );
+                               bucket = String( parts[ 1 ] );
+                       }
+               }
+
+               if ( bucket === undefined ) {
+                       if ( !$.isPlainObject( options.buckets ) ) {
+                               throw new Error( 'Invalid bucket. Object 
expected for options.buckets.' );
+                       }
+
+                       version = Number( options.version );
+
+                       // Find range
+                       range = 0;
+                       for ( k in options.buckets ) {
+                               range += options.buckets[ k ];
+                       }
+
+                       // Select random value within range
+                       rand = Math.random() * range;
+
+                       // Determine which bucket the value landed in
+                       total = 0;
+                       for ( k in options.buckets ) {
+                               bucket = k;
+                               total += options.buckets[ k ];
+                               if ( total >= rand ) {
+                                       break;
+                               }
+                       }
+
+                       mw.cookie.set(
+                               'mwuser-bucket:' + key,
+                               version + ':' + bucket,
+                               { expires: Number( options.expires ) * 86400 }
+                       );
+               }
+
+               return bucket;
+       };
+
+       // }}}
        // {{{ selectBucket
 
        /**
@@ -2164,7 +2243,7 @@
                        $.articleFeedbackv5.bucketId = requested;
                } else {
                        var key = 'ext.articleFeedbackv5@' + cfg.version + 
'-form';
-                       $.articleFeedbackv5.bucketId = mw.user.bucket( key, cfg 
);
+                       $.articleFeedbackv5.bucketId = 
$.articleFeedbackv5.bucket( key, cfg );
                }
        };
 
@@ -2194,7 +2273,7 @@
                                        bucketedLink = requested;
                                } else {
                                        var key = 'ext.articleFeedbackv5@' + 
cfg.version + '-links';
-                                       bucketedLink = mw.user.bucket( key, cfg 
);
+                                       bucketedLink = 
$.articleFeedbackv5.bucket( key, cfg );
                                }
                        }
                }
@@ -2735,7 +2814,7 @@
                        $.articleFeedbackv5.ctaId = requested;
                } else {
                        var key = 'ext.articleFeedbackv5@' + cfg.version + 
'-cta';
-                       var requested = mw.user.bucket( key, cfg );
+                       var requested = $.articleFeedbackv5.bucket( key, cfg );
 
                        if ( valid( requested ) ) {
                                $.articleFeedbackv5.ctaId = requested;

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3827d6dd988f41bd826bafaf478840153c711c52
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/ArticleFeedbackv5
Gerrit-Branch: master
Gerrit-Owner: Fomafix <[email protected]>

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

Reply via email to