$wgUseAjax, $wgAjaxWatch, $wgEnableMWSuggest;
// Add base resources
- $this->addModules( 'mediawiki.util' );
- if( $wgIncludeLegacyJavaScript ){
+ $this->addModules( array( 'mediawiki.user', 'mediawiki.util', 'mediawiki.action.view.tablesorting' ) );
+ if ( $wgIncludeLegacyJavaScript ){
$this->addModules( 'mediawiki.legacy.wikibits' );
}
if( $this->getUser()->getBoolOption( 'editsectiononrightclick' ) ) {
$this->addModules( 'mediawiki.action.view.rightClickEdit' );
}
- $this->addModules( 'mediawiki.action.view.tablesorting' );
}
/**
'mediawiki.htmlform' => array(
'scripts' => 'resources/mediawiki/mediawiki.htmlform.js',
),
+ 'mediawiki.user' => array(
+ 'scripts' => 'resources/mediawiki/mediawiki.user.js',
+ 'dependencies' => array(
+ 'jquery.cookie',
+ ),
+ ),
'mediawiki.util' => array(
'scripts' => 'resources/mediawiki.util/mediawiki.util.js',
'dependencies' => array(
return this.map.exists( this.key );
};
- /**
- * User object
- */
- function User() {
-
- /* Private Members */
-
- var that = this;
-
- /* Public Members */
-
- this.options = new Map();
-
- /* Public Methods */
-
- /**
- * Generates a random user session ID (32 alpha-numeric characters).
- *
- * This information would potentially be stored in a cookie to identify a user during a
- * session or series of sessions. It's uniqueness should not be depended on.
- *
- * @return string random set of 32 alpha-numeric characters
- */
- function generateId() {
- var id = '';
- var seed = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
- for ( var i = 0, r; i < 32; i++ ) {
- r = Math.floor( Math.random() * seed.length );
- id += seed.substring( r, r + 1 );
- }
- return id;
- }
-
- /**
- * Gets the current user's name.
- *
- * @return mixed user name string or null if users is anonymous
- */
- this.name = function() {
- return mw.config.get( 'wgUserName' );
- };
-
- /**
- * Checks if the current user is anonymous.
- *
- * @return boolean
- */
- this.anonymous = function() {
- return that.name() ? false : true;
- };
-
- /**
- * Gets a random session ID automatically generated and kept in a cookie.
- *
- * This ID is ephemeral for everyone, staying in their browser only until they close
- * their browser.
- *
- * Do not use this method before the first call to mw.loader.go(), it depends on
- * jquery.cookie, which is added to the first pay-load just after mediaWiki is defined, but
- * won't be loaded until the first call to go().
- *
- * @return string user name or random session ID
- */
- this.sessionId = function () {
- var sessionId = $.cookie( 'mediaWiki.user.sessionId' );
- if ( typeof sessionId == 'undefined' || sessionId === null ) {
- sessionId = generateId();
- $.cookie( 'mediaWiki.user.sessionId', sessionId, { 'expires': null, 'path': '/' } );
- }
- return sessionId;
- };
-
- /**
- * Gets the current user's name or a random ID automatically generated and kept in a cookie.
- *
- * This ID is persistent for anonymous users, staying in their browser up to 1 year. The
- * expiration time is reset each time the ID is queried, so in most cases this ID will
- * persist until the browser's cookies are cleared or the user doesn't visit for 1 year.
- *
- * Do not use this method before the first call to mw.loader.go(), it depends on
- * jquery.cookie, which is added to the first pay-load just after mediaWiki is defined, but
- * won't be loaded until the first call to go().
- *
- * @return string user name or random session ID
- */
- this.id = function() {
- var name = that.name();
- if ( name ) {
- return name;
- }
- var id = $.cookie( 'mediaWiki.user.id' );
- if ( typeof id == 'undefined' || id === null ) {
- id = generateId();
- }
- // Set cookie if not set, or renew it if already set
- $.cookie( 'mediaWiki.user.id', id, { 'expires': 365, 'path': '/' } );
- return id;
- };
-
- /**
- * Gets the user's bucket, placing them in one at random based on set odds if needed.
- *
- * @param key String: Name of bucket
- * @param options Object: Bucket configuration options
- * @param options.buckets Object: List of bucket-name/relative-probability pairs (required,
- * must have at least one pair)
- * @param options.version Number: Version of bucket test, changing this forces rebucketing
- * (optional, default: 0)
- * @param options.tracked Boolean: Track the event of bucketing through the API module of
- * the ClickTracking extension (optional, default: false)
- * @param options.expires Number: Length of time (in days) until the user gets rebucketed
- * (optional, default: 30)
- * @return String: Bucket name - the randomly chosen key of the options.buckets object
- *
- * @example
- * mw.user.bucket( 'test', {
- * 'buckets': { 'ignored': 50, 'control': 25, 'test': 25 },
- * 'version': 1,
- * 'tracked': true,
- * 'expires': 7
- * } );
- */
- this.bucket = function( key, options ) {
- options = $.extend( {
- 'buckets': {},
- 'version': 0,
- 'tracked': false,
- 'expires': 30
- }, options || {} );
- var cookie = $.cookie( 'mediaWiki.user.bucket:' + key );
- var bucket = null;
- var version = 0;
- // Bucket information is stored as 2 integers, together as version:bucket like: "1:2"
- if ( typeof cookie === 'string' && cookie.length > 2 && cookie.indexOf( ':' ) > 0 ) {
- var parts = cookie.split( ':' );
- if ( parts.length > 1 && parts[0] == options.version ) {
- version = Number( parts[0] );
- bucket = String( parts[1] );
- }
- }
- if ( bucket === null ) {
- if ( !$.isPlainObject( options.buckets ) ) {
- throw 'Invalid buckets error. Object expected for options.buckets.';
- }
- version = Number( options.version );
- // Find range
- var range = 0, k;
- for ( k in options.buckets ) {
- range += options.buckets[k];
- }
- // Select random value within range
- var rand = Math.random() * range;
- // Determine which bucket the value landed in
- var total = 0;
- for ( k in options.buckets ) {
- bucket = k;
- total += options.buckets[k];
- if ( total >= rand ) {
- break;
- }
- }
- if ( options.tracked ) {
- mw.loader.using( 'jquery.clickTracking', function() {
- $.trackAction(
- 'mediaWiki.user.bucket:' + key + '@' + version + ':' + bucket
- );
- } );
- }
- $.cookie(
- 'mediaWiki.user.bucket:' + key,
- version + ':' + bucket,
- { 'path': '/', 'expires': Number( options.expires ) }
- );
- }
- return bucket;
- };
- }
-
/* Public Members */
/*
*/
this.config = null;
- /*
- * Information about the current user
- */
- this.user = new User();
-
/*
* Localization system
*/
startUp();
delete startUp;
}
-
-// Add jQuery Cookie to initial payload (used in mw.user)
-mw.loader.load( 'jquery.cookie' );
--- /dev/null
+/*
+ * Implementation for mediaWiki.log stub
+ */
+
+(function( $ ) {
+
+ /**
+ * User object
+ */
+ function User() {
+
+ /* Private Members */
+
+ var that = this;
+
+ /* Public Members */
+
+ this.options = new mw.Map();
+
+ /* Public Methods */
+
+ /**
+ * Generates a random user session ID (32 alpha-numeric characters).
+ *
+ * This information would potentially be stored in a cookie to identify a user during a
+ * session or series of sessions. It's uniqueness should not be depended on.
+ *
+ * @return string random set of 32 alpha-numeric characters
+ */
+ function generateId() {
+ var id = '';
+ var seed = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+ for ( var i = 0, r; i < 32; i++ ) {
+ r = Math.floor( Math.random() * seed.length );
+ id += seed.substring( r, r + 1 );
+ }
+ return id;
+ }
+
+ /**
+ * Gets the current user's name.
+ *
+ * @return mixed user name string or null if users is anonymous
+ */
+ this.name = function() {
+ return mw.config.get( 'wgUserName' );
+ };
+
+ /**
+ * Checks if the current user is anonymous.
+ *
+ * @return boolean
+ */
+ this.anonymous = function() {
+ return that.name() ? false : true;
+ };
+
+ /**
+ * Gets a random session ID automatically generated and kept in a cookie.
+ *
+ * This ID is ephemeral for everyone, staying in their browser only until they close
+ * their browser.
+ *
+ * Do not use this method before the first call to mw.loader.go(), it depends on
+ * jquery.cookie, which is added to the first pay-load just after mediaWiki is defined, but
+ * won't be loaded until the first call to go().
+ *
+ * @return string user name or random session ID
+ */
+ this.sessionId = function () {
+ var sessionId = $.cookie( 'mediaWiki.user.sessionId' );
+ if ( typeof sessionId == 'undefined' || sessionId === null ) {
+ sessionId = generateId();
+ $.cookie( 'mediaWiki.user.sessionId', sessionId, { 'expires': null, 'path': '/' } );
+ }
+ return sessionId;
+ };
+
+ /**
+ * Gets the current user's name or a random ID automatically generated and kept in a cookie.
+ *
+ * This ID is persistent for anonymous users, staying in their browser up to 1 year. The
+ * expiration time is reset each time the ID is queried, so in most cases this ID will
+ * persist until the browser's cookies are cleared or the user doesn't visit for 1 year.
+ *
+ * Do not use this method before the first call to mw.loader.go(), it depends on
+ * jquery.cookie, which is added to the first pay-load just after mediaWiki is defined, but
+ * won't be loaded until the first call to go().
+ *
+ * @return string user name or random session ID
+ */
+ this.id = function() {
+ var name = that.name();
+ if ( name ) {
+ return name;
+ }
+ var id = $.cookie( 'mediaWiki.user.id' );
+ if ( typeof id == 'undefined' || id === null ) {
+ id = generateId();
+ }
+ // Set cookie if not set, or renew it if already set
+ $.cookie( 'mediaWiki.user.id', id, { 'expires': 365, 'path': '/' } );
+ return id;
+ };
+
+ /**
+ * Gets the user's bucket, placing them in one at random based on set odds if needed.
+ *
+ * @param key String: Name of bucket
+ * @param options Object: Bucket configuration options
+ * @param options.buckets Object: List of bucket-name/relative-probability pairs (required,
+ * must have at least one pair)
+ * @param options.version Number: Version of bucket test, changing this forces rebucketing
+ * (optional, default: 0)
+ * @param options.tracked Boolean: Track the event of bucketing through the API module of
+ * the ClickTracking extension (optional, default: false)
+ * @param options.expires Number: Length of time (in days) until the user gets rebucketed
+ * (optional, default: 30)
+ * @return String: Bucket name - the randomly chosen key of the options.buckets object
+ *
+ * @example
+ * mw.user.bucket( 'test', {
+ * 'buckets': { 'ignored': 50, 'control': 25, 'test': 25 },
+ * 'version': 1,
+ * 'tracked': true,
+ * 'expires': 7
+ * } );
+ */
+ this.bucket = function( key, options ) {
+ options = $.extend( {
+ 'buckets': {},
+ 'version': 0,
+ 'tracked': false,
+ 'expires': 30
+ }, options || {} );
+ var cookie = $.cookie( 'mediaWiki.user.bucket:' + key );
+ var bucket = null;
+ var version = 0;
+ // Bucket information is stored as 2 integers, together as version:bucket like: "1:2"
+ if ( typeof cookie === 'string' && cookie.length > 2 && cookie.indexOf( ':' ) > 0 ) {
+ var parts = cookie.split( ':' );
+ if ( parts.length > 1 && parts[0] == options.version ) {
+ version = Number( parts[0] );
+ bucket = String( parts[1] );
+ }
+ }
+ if ( bucket === null ) {
+ if ( !$.isPlainObject( options.buckets ) ) {
+ throw 'Invalid buckets error. Object expected for options.buckets.';
+ }
+ version = Number( options.version );
+ // Find range
+ var range = 0, k;
+ for ( k in options.buckets ) {
+ range += options.buckets[k];
+ }
+ // Select random value within range
+ var rand = Math.random() * range;
+ // Determine which bucket the value landed in
+ var total = 0;
+ for ( k in options.buckets ) {
+ bucket = k;
+ total += options.buckets[k];
+ if ( total >= rand ) {
+ break;
+ }
+ }
+ if ( options.tracked ) {
+ mw.loader.using( 'jquery.clickTracking', function() {
+ $.trackAction(
+ 'mediaWiki.user.bucket:' + key + '@' + version + ':' + bucket
+ );
+ } );
+ }
+ $.cookie(
+ 'mediaWiki.user.bucket:' + key,
+ version + ':' + bucket,
+ { 'path': '/', 'expires': Number( options.expires ) }
+ );
+ }
+ return bucket;
+ };
+ }
+
+ mw.user = new User();
+
+})(jQuery);
\ No newline at end of file
<script> function startUp(){} </script>
<script src="../mediawiki/mediawiki.js"></script>
<script> mw.config = new mw.Map( false ); </script>
+ <script src="../mediawiki/mediawiki.user.js"></script>
<script src="../jquery/jquery.checkboxShiftClick.js"></script>
<script src="../jquery/jquery.client.js"></script>
<!-- Your test suites go here -->
<script src="unit/mediawiki/mediawiki.js"></script>
+ <script src="unit/mediawiki/mediawiki.user.js"></script>
<script src="unit/mediawiki.util/mediawiki.util.js"></script>
<script src="unit/jquery/jquery.colorUtil.js"></script>
// params, toString, parse, plain, escaped, exists
});
-test( 'mw.user', function(){
-
- ok( mw.user, 'user defined' );
- ok( mw.user.options instanceof mw.Map, 'user.options instance of mw.Map' );
-
- same( mw.user.name(), null, 'user.name() Anonymous' );
- ok( mw.user.anonymous(), 'user.anonymous() Anonymous' );
-
- // Not part of startUp module
- mw.config.set( 'wgUserName', 'John' );
-
- equals( mw.user.name(), 'John', 'user.name() Logged-in' );
- ok( !mw.user.anonymous(), 'user.anonymous() Logged-in' );
-
- equals( mw.user.id(), 'John', 'user.id() Logged-in' );
-
-});
-
test( 'mw.loader', function(){
expect(2);
--- /dev/null
+module( 'mediawiki.user.js' );
+
+test( '-- Initial check', function(){
+
+ ok( mw.user, 'mw.user defined' );
+
+});
+
+
+test( 'options', function(){
+
+ ok( mw.user.options instanceof mw.Map, 'options instance of mw.Map' );
+
+});
+
+test( 'User login status', function(){
+
+ deepEqual( mw.user.name(), null, 'user.name() When anonymous' );
+ ok( mw.user.anonymous(), 'user.anonymous() When anonymous' );
+
+ // Not part of startUp module
+ mw.config.set( 'wgUserName', 'John' );
+
+ equal( mw.user.name(), 'John', 'user.name() When logged-in as John' );
+ ok( !mw.user.anonymous(), 'user.anonymous() When logged-in' );
+
+ equal( mw.user.id(), 'John', 'user.id() When logged-in as John' );
+
+
+});
\ No newline at end of file