ULS persistent preference system.
Change-Id: Ieb22e09f226e770c9935b875f4226a75ffd8c46d
This commit is contained in:
committed by
Amir E. Aharoni
parent
7ab6960645
commit
1bc80d58ba
113
resources/js/ext.uls.preferences.js
Normal file
113
resources/js/ext.uls.preferences.js
Normal file
@@ -0,0 +1,113 @@
|
||||
/**
|
||||
* ULS preferences system for MediaWiki.
|
||||
* Cookies for anonymous users, preferences for logged in users.
|
||||
*
|
||||
* Copyright (C) 2012 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris,
|
||||
* Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other
|
||||
* contributors. See CREDITS for a list.
|
||||
*
|
||||
* UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't
|
||||
* have to do anything special to choose one license or the other and you don't
|
||||
* have to notify anyone which license you are using. You are free to use
|
||||
* UniversalLanguageSelector in commercial projects as long as the copyright
|
||||
* header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
|
||||
*
|
||||
* @file
|
||||
* @ingroup Extensions
|
||||
* @licence GNU General Public Licence 2.0 or later
|
||||
* @licence MIT License
|
||||
*/
|
||||
|
||||
(function( $, mw ) {
|
||||
"use strict";
|
||||
|
||||
var ULSPreferences = function ( group ) {
|
||||
this.cookieName = this.preferenceName = 'uls-preferences';
|
||||
this.username = mw.user.getName();
|
||||
this.isAnon = mw.user.isAnon();
|
||||
this.preferences = null;
|
||||
this.group = group;
|
||||
this.init();
|
||||
};
|
||||
|
||||
ULSPreferences.prototype = {
|
||||
/**
|
||||
* Initalize
|
||||
*/
|
||||
init: function () {
|
||||
if ( this.isAnon ) {
|
||||
this.cookie = $.cookie( this.cookieName );
|
||||
this.preferences = $.parseJSON( this.cookie );
|
||||
} else {
|
||||
var options = mw.user.options.get( this.preferenceName );
|
||||
this.preferences = $.parseJSON( options );
|
||||
}
|
||||
this.preferences = this.preferences || {};
|
||||
},
|
||||
|
||||
/**
|
||||
* Set the preference
|
||||
* @param {String} key
|
||||
* @param value
|
||||
*/
|
||||
set: function ( key, value ) {
|
||||
if ( !this.preferences[this.group] ) {
|
||||
this.preferences[this.group] = {};
|
||||
}
|
||||
this.preferences[this.group][key] = value;
|
||||
},
|
||||
|
||||
/**
|
||||
* Get a preference value for the given preference name
|
||||
* @param key
|
||||
* @returns
|
||||
*/
|
||||
get: function ( key ) {
|
||||
return this.preferences[this.group] && this.preferences[this.group][key];
|
||||
},
|
||||
|
||||
/**
|
||||
* Save the preferences
|
||||
*
|
||||
* @param callback
|
||||
*/
|
||||
save: function ( callback ) {
|
||||
var that = this;
|
||||
callback = callback || $.noop();
|
||||
if ( this.isAnon ) {
|
||||
// Anonymous user- Save preferences in cookie
|
||||
$.cookie( this.cookieName, $.toJSON( this.preferences ), {
|
||||
expires: 30,
|
||||
HttpOnly: true,
|
||||
path: '/'
|
||||
} );
|
||||
callback.call( this, true );
|
||||
} else {
|
||||
// Logged in user. Use MW apis to change preferences
|
||||
var api = new mw.Api();
|
||||
api.post( {
|
||||
action: 'tokens',
|
||||
type: 'options'
|
||||
} ).done( function ( result ) {
|
||||
var token = result.tokens.optionstoken;
|
||||
api.post( {
|
||||
action: 'options',
|
||||
change: 'hideminor=1',
|
||||
optionname: that.preferenceName,
|
||||
optionvalue: $.toJSON( that.preferences ),
|
||||
token: token
|
||||
} ).done( function ( result ) {
|
||||
callback.call( this, true );
|
||||
} ).fail( function () {
|
||||
callback.call( this, false );
|
||||
} );
|
||||
} ).fail( function ( xhr, textStatus, exception ) {
|
||||
callback.call( this, false );
|
||||
} );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.uls.preferences = ULSPreferences;
|
||||
|
||||
}( jQuery, mediaWiki ) );
|
||||
Reference in New Issue
Block a user