Cosmetic changes to the webclient options

- Renamed the used attribute
- Changed to use only one inputfunc
This commit is contained in:
Simon Vermeersch 2017-01-14 22:15:17 +01:00 committed by Griatch
parent 221aa362ab
commit 8dcd242d3b
3 changed files with 68 additions and 61 deletions

View file

@ -422,57 +422,61 @@ def unmonitor(session, *args, **kwargs):
kwargs["stop"] = True
monitor(session, *args, **kwargs)
def _on_webclient_setting_change(**kwargs):
def _on_webclient_options_change(**kwargs):
"""
Called when the settings stored on the player changes.
Called when the webclient options stored on the player changes.
Inform the interested clients of this change.
"""
session = kwargs["session"]
obj = kwargs["obj"]
fieldname = kwargs["fieldname"]
clientsettings = _GA(obj, fieldname)
clientoptions = _GA(obj, fieldname)
session.msg(webclient_settings=clientsettings)
session.msg(webclient_options=clientoptions)
def webclient_settings(session, *args, **kwargs):
def webclient_options(session, *args, **kwargs):
"""
Handles returning and monitoring stored settings relatede to the webclient.
Handles retrieving and changing of options related to the webclient.
If kwargs is empty (or contains just a "cmdid"), the saved options will be
sent back to the session.
A monitor handler will be created to inform the client of any future options
that changes.
If kwargs is not empty, the key/values stored in there will be persisted
to the player object.
Kwargs:
monitor (bool): If this is true, starts monitoring the settings for
changes too
<option name>: an option to save
"""
player = session.player
clientsettings = settings.WEBCLIENT_SETTINGS.copy()
storedsettings = player.db.webclient_settings or {}
clientsettings.update(storedsettings)
clientoptions = settings.WEBCLIENT_OPTIONS.copy()
storedoptions = player.db._saved_webclient_options or {}
clientoptions.update(storedoptions)
session.msg(webclient_settings=clientsettings)
# The webclient adds a cmdid to every kwargs, but we don't need it.
try:
del kwargs["cmdid"]
except KeyError:
pass
if kwargs.get("monitor", False):
if not kwargs:
# No kwargs: we are getting the stored options
session.msg(webclient_options=clientoptions)
# Create a monitor. If a monitor already exists then it will replace
# the previous one since it would use the same idstring
from evennia.scripts.monitorhandler import MONITOR_HANDLER
MONITOR_HANDLER.add(player, "webclient_settings",
_on_webclient_setting_change,
MONITOR_HANDLER.add(player, "webclient_options",
_on_webclient_options_change,
idstring=session.sessid, persistent=False,
session=session)
else:
# kwargs provided: persist them to the player object
for key, value in kwargs.iteritems():
clientoptions[key] = value
def set_webclient_settings(session, *args, **kwargs):
"""
Handles changing of a setting related to the webclient: the setting will
get saved to the player object.
Kwargs:
<setting>: A setting to save.
"""
player = session.player
clientsettings = settings.WEBCLIENT_SETTINGS.copy()
storedsettings = player.db.webclient_settings or {}
clientsettings.update(storedsettings)
for key, value in kwargs.iteritems():
clientsettings[key] = value
player.db.webclient_settings = clientsettings
player.db._saved_webclient_options = clientoptions

View file

@ -623,8 +623,8 @@ STATICFILES_IGNORE_PATTERNS = ('README.md',)
# directory names shown in the templates directory.
WEBSITE_TEMPLATE = 'website'
WEBCLIENT_TEMPLATE = 'webclient'
# The default settings used by the webclient
WEBCLIENT_SETTINGS = {
# The default options used by the webclient
WEBCLIENT_OPTIONS = {
"gagprompt": True, # Gags prompt from the output window and keep them
# together with the input bar
"helppopup": True, # Shows help files in a new popup window

View file

@ -107,8 +107,8 @@ function doSendText() {
}
}
// Opens the settings dialog
function doOpenSettings() {
// Opens the options dialog
function doOpenOptions() {
if (!Evennia.isConnected()) {
alert("You need to be connected.");
return;
@ -239,11 +239,11 @@ function onPrompt(args, kwargs) {
// Called when the user logged in
function onLoggedIn() {
Evennia.msg("webclient_settings", [], {"monitor": true});
Evennia.msg("webclient_options", [], {});
}
// Called when a setting changed
function onGotSetting(args, kwargs) {
function onGotOptions(args, kwargs) {
$.each(kwargs, function(key, value) {
var elem = $("[data-setting='" + key + "']");
if (elem.length === 0) {
@ -255,10 +255,13 @@ function onGotSetting(args, kwargs) {
}
// Called when the user changed a setting from the interface
function onSettingCheckboxChanged() {
function onOptionCheckboxChanged() {
var name = $(this).data("setting");
var value = this.checked;
Evennia.msg("set_webclient_settings", [], {name: value});
var options = {};
options[name] = value;
Evennia.msg("webclient_options", [], options);
}
// Silences events we don't do anything with.
@ -396,10 +399,10 @@ $(document).ready(function() {
$("#inputsend").bind("click", doSendText);
// Pressing the settings button
$("#optionsbutton").bind("click", doOpenSettings);
$("#optionsbutton").bind("click", doOpenOptions);
// Checking a checkbox in the settings dialog
$("[data-setting]").bind("change", onSettingCheckboxChanged);
$("[data-setting]").bind("change", onOptionCheckboxChanged);
// Pressing the close button on a dialog
$(".dialogclose").bind("click", doCloseDialog);
@ -416,7 +419,7 @@ $(document).ready(function() {
Evennia.emitter.on("default", onDefault);
Evennia.emitter.on("connection_close", onConnectionClose);
Evennia.emitter.on("logged_in", onLoggedIn);
Evennia.emitter.on("webclient_settings", onGotSetting);
Evennia.emitter.on("webclient_options", onGotOptions);
// silence currently unused events
Evennia.emitter.on("connection_open", onSilence);
Evennia.emitter.on("connection_error", onSilence);