mediawiki-extensions-Revisi.../modules/ext.RevisionSlider.Settings.js

109 lines
2.2 KiB
JavaScript
Raw Normal View History

/**
* @class Settings
* @constructor
*/
function Settings() {
this.hideHelpDialogue = this.loadBoolean( 'hide-help-dialogue' );
this.autoExpand = this.loadBoolean( 'autoexpand' );
}
Object.assign( Settings.prototype, {
/**
* @type {boolean}
*/
hideHelpDialogue: null,
/**
* @type {boolean}
*/
autoExpand: null,
/**
* @return {boolean}
*/
shouldHideHelpDialogue: function () {
return this.hideHelpDialogue;
},
/**
* @return {boolean}
*/
shouldAutoExpand: function () {
return this.autoExpand;
},
/**
* @param {boolean} newSetting
*/
setHideHelpDialogue: function ( newSetting ) {
if ( newSetting !== this.hideHelpDialogue ) {
this.saveBoolean( 'hide-help-dialogue', newSetting );
this.hideHelpDialogue = newSetting;
}
},
/**
* @param {boolean} newSetting
*/
setAutoExpand: function ( newSetting ) {
if ( newSetting !== this.autoExpand ) {
this.saveBoolean( 'autoexpand', newSetting );
this.autoExpand = newSetting;
}
},
/**
* @private
* @param {string} name
* @param {string} defaultValue
* @return {string|boolean}
*/
loadSetting: function ( name, defaultValue ) {
let setting;
if ( mw.user.isNamed() ) {
setting = mw.user.options.get( 'userjs-revslider-' + name );
} else {
setting = mw.storage.get( 'mw-revslider-' + name ) ||
mw.cookie.get( '-revslider-' + name );
}
return setting !== null && setting !== false ? setting : defaultValue;
},
/**
* @private
* @param {string} name
* @param {boolean} [defaultValue]
* @return {boolean}
*/
loadBoolean: function ( name, defaultValue ) {
return this.loadSetting( name, defaultValue ? '1' : '0' ) === '1';
},
/**
* @private
* @param {string} name
* @param {string} value
*/
saveSetting: function ( name, value ) {
if ( mw.user.isNamed() ) {
( new mw.Api() ).saveOption( 'userjs-revslider-' + name, value );
} else {
if ( !mw.storage.set( 'mw-revslider-' + name, value ) ) {
mw.cookie.set( '-revslider-' + name, value ); // use cookie when localStorage is not available
}
}
},
/**
* @private
* @param {string} name
* @param {boolean} value
*/
saveBoolean: function ( name, value ) {
this.saveSetting( name, value ? '1' : '0' );
}
} );
module.exports = Settings;