mirror of
https://github.com/FrankerFaceZ/FrankerFaceZ.git
synced 2025-08-10 08:10:52 +00:00
Add settings support. Make FFZ menu modular. Add support for chat row styles. Add support for dark twitch (disabled). Add support for SRL races. Update SRL race dialog. Everything.
This commit is contained in:
parent
c9bd39de8a
commit
b284bd0f8d
15 changed files with 2313 additions and 190 deletions
132
src/settings.js
Normal file
132
src/settings.js
Normal file
|
@ -0,0 +1,132 @@
|
|||
var FFZ = window.FrankerFaceZ,
|
||||
|
||||
|
||||
make_ls = function(key) {
|
||||
return "ffz_setting_" + key;
|
||||
};
|
||||
|
||||
|
||||
// --------------------
|
||||
// Initializer
|
||||
// --------------------
|
||||
|
||||
FFZ.settings_info = {};
|
||||
|
||||
FFZ.prototype.load_settings = function() {
|
||||
this.log("Loading settings.");
|
||||
|
||||
// Build a settings object.
|
||||
this.settings = {};
|
||||
|
||||
for(var key in FFZ.settings_info) {
|
||||
var ls_key = make_ls(key),
|
||||
info = FFZ.settings_info[key],
|
||||
val = info.hasOwnProperty("value") ? info.value : undefined;
|
||||
|
||||
if ( localStorage.hasOwnProperty(ls_key) ) {
|
||||
try {
|
||||
val = JSON.parse(localStorage.getItem(ls_key));
|
||||
} catch(err) {
|
||||
this.log('Error loading value for "' + key + '": ' + err);
|
||||
}
|
||||
}
|
||||
|
||||
this.settings[key] = val;
|
||||
}
|
||||
|
||||
// Helpers
|
||||
this.settings.get = this._setting_get.bind(this);
|
||||
this.settings.set = this._setting_set.bind(this);
|
||||
this.settings.del = this._setting_del.bind(this);
|
||||
|
||||
// Listen for Changes
|
||||
window.addEventListener("storage", this._setting_update.bind(this));
|
||||
}
|
||||
|
||||
|
||||
// --------------------
|
||||
// Tracking Updates
|
||||
// --------------------
|
||||
|
||||
FFZ.prototype._setting_update = function(e) {
|
||||
if ( ! e )
|
||||
e = window.event;
|
||||
|
||||
this.log("Storage Event", e);
|
||||
|
||||
if ( ! e.key || e.key.substr(0, 12) !== "ffz_setting_" )
|
||||
return;
|
||||
|
||||
var ls_key = e.key,
|
||||
key = ls_key.substr(12),
|
||||
val = undefined,
|
||||
info = FFZ.settings_info[key];
|
||||
|
||||
this.log("Updated Setting: " + key);
|
||||
|
||||
try {
|
||||
val = JSON.parse(e.newValue);
|
||||
} catch(err) {
|
||||
this.log('Error loading new value for "' + key + '": ' + err);
|
||||
val = info.value || undefined;
|
||||
}
|
||||
|
||||
this.settings[key] = val;
|
||||
if ( info.on_update )
|
||||
try {
|
||||
info.on_update.bind(this)(val, false);
|
||||
} catch(err) {
|
||||
this.log('Error running updater for setting "' + key + '": ' + err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// --------------------
|
||||
// Settings Access
|
||||
// --------------------
|
||||
|
||||
FFZ.prototype._setting_get = function(key) {
|
||||
return this.settings[key];
|
||||
}
|
||||
|
||||
|
||||
FFZ.prototype._setting_set = function(key, val) {
|
||||
var ls_key = make_ls(key),
|
||||
info = FFZ.settings_info[key],
|
||||
jval = JSON.stringify(val);
|
||||
|
||||
this.settings[key] = val;
|
||||
localStorage.setItem(ls_key, jval);
|
||||
|
||||
this.log('Changed Setting "' + key + '" to: ' + jval);
|
||||
|
||||
if ( info.on_update )
|
||||
try {
|
||||
info.on_update.bind(this)(val, true);
|
||||
} catch(err) {
|
||||
this.log('Error running updater for setting "' + key + '": ' + err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
FFZ.prototype._setting_del = function(key) {
|
||||
var ls_key = make_ls(key),
|
||||
info = FFZ.settings_info[key],
|
||||
val = undefined;
|
||||
|
||||
if ( localStorage.hasOwnProperty(ls_key) )
|
||||
localStorage.removeItem(ls_key);
|
||||
|
||||
delete this.settings[key];
|
||||
|
||||
if ( info )
|
||||
val = this.settings[key] = info.hasOwnProperty("value") ? info.value : undefined;
|
||||
|
||||
if ( info.on_update )
|
||||
try {
|
||||
info.on_update.bind(this)(val, true);
|
||||
} catch(err) {
|
||||
this.log('Error running updater for setting "' + key + '": ' + err);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue