Merge branch 'master' into develop

This commit is contained in:
Griatch 2017-10-13 23:04:37 +02:00
commit 8be657ba43
9 changed files with 109 additions and 25 deletions

View file

@ -75,7 +75,7 @@ class CmdHelp(Command):
pass
if usemore:
evmore.msg(self.caller, text)
evmore.msg(self.caller, text, session=self.session)
return
self.msg((text, {"type": "help"}))
@ -267,7 +267,7 @@ class CmdHelp(Command):
return
# no exact matches found. Just give suggestions.
self.msg(self.format_help_entry("", "No help entry found for '%s'" % query, None, suggested=suggestions))
self.msg((self.format_help_entry("", "No help entry found for '%s'" % query, None, suggested=suggestions), {"type": "help"}))
def _loadhelp(caller):

View file

@ -161,7 +161,7 @@ def _run_code_snippet(caller, pycode, mode="eval", measure_time=False,
# Try to retrieve the session
session = caller
if hasattr(caller, "sessions"):
session = caller.sessions.get()[0]
sessions = caller.sessions.all()
# import useful variables
import evennia
@ -175,11 +175,12 @@ def _run_code_snippet(caller, pycode, mode="eval", measure_time=False,
}
if show_input:
try:
caller.msg(">>> %s" % pycode, session=session,
options={"raw": True})
except TypeError:
caller.msg(">>> %s" % pycode, options={"raw": True})
for session in sessions:
try:
caller.msg(">>> %s" % pycode, session=session,
options={"raw": True})
except TypeError:
caller.msg(">>> %s" % pycode, options={"raw": True})
try:
try:
@ -206,10 +207,11 @@ def _run_code_snippet(caller, pycode, mode="eval", measure_time=False,
errlist = errlist[4:]
ret = "\n".join("%s" % line for line in errlist if line)
try:
caller.msg(ret, session=session, options={"raw": True})
except TypeError:
caller.msg(ret, options={"raw": True})
for session in sessions:
try:
caller.msg(ret, session=session, options={"raw": True})
except TypeError:
caller.msg(ret, options={"raw": True})
class CmdPy(COMMAND_DEFAULT_CLASS):

View file

@ -436,9 +436,12 @@ def webclient_options(session, *args, **kwargs):
"""
account = session.account
clientoptions = settings.WEBCLIENT_OPTIONS.copy()
storedoptions = account.db._saved_webclient_options or {}
clientoptions.update(storedoptions)
clientoptions = account.db._saved_webclient_options
if not clientoptions:
# No saved options for this account, copy and save the default.
account.db._saved_webclient_options = settings.WEBCLIENT_OPTIONS.copy()
# Get the _SaverDict created by the database.
clientoptions = account.db._saved_webclient_options
# The webclient adds a cmdid to every kwargs, but we don't need it.
try:
@ -448,7 +451,8 @@ def webclient_options(session, *args, **kwargs):
if not kwargs:
# No kwargs: we are getting the stored options
session.msg(webclient_options=clientoptions)
# Convert clientoptions to regular dict for sending.
session.msg(webclient_options=dict(clientoptions))
# Create a monitor. If a monitor already exists then it will replace
# the previous one since it would use the same idstring
@ -461,5 +465,3 @@ def webclient_options(session, *args, **kwargs):
# kwargs provided: persist them to the account object
for key, value in kwargs.iteritems():
clientoptions[key] = value
account.db._saved_webclient_options = clientoptions

View file

@ -20,6 +20,7 @@ IRC_BOLD = "\002"
IRC_COLOR = "\003"
IRC_RESET = "\017"
IRC_ITALIC = "\026"
IRC_INVERT = "\x16"
IRC_NORMAL = "99"
IRC_UNDERLINE = "37"
@ -38,7 +39,7 @@ IRC_CYAN = "11"
IRC_BLUE = "12"
IRC_MAGENTA = "13"
IRC_DGREY = "14"
IRC_GRAY = "15"
IRC_GREY = "15"
# obsolete test:
@ -57,7 +58,7 @@ IRC_COLOR_MAP = dict((
(r'|t', " "), # tab
(r'|-', " "), # fixed tab
(r'|_', " "), # space
(r'|*', ""), # invert
(r'|*', IRC_INVERT), # invert
(r'|^', ""), # blinking text
(r'|h', IRC_BOLD), # highlight, use bold instead
@ -76,7 +77,7 @@ IRC_COLOR_MAP = dict((
(r'|B', IRC_COLOR + IRC_DBLUE),
(r'|M', IRC_COLOR + IRC_DMAGENTA),
(r'|C', IRC_COLOR + IRC_DCYAN),
(r'|W', IRC_COLOR + IRC_GRAY), # light grey
(r'|W', IRC_COLOR + IRC_GREY), # light grey
(r'|X', IRC_COLOR + IRC_BLACK), # pure black
(r'|[r', IRC_COLOR + IRC_NORMAL + "," + IRC_DRED),
@ -85,7 +86,7 @@ IRC_COLOR_MAP = dict((
(r'|[b', IRC_COLOR + IRC_NORMAL + "," + IRC_DBLUE),
(r'|[m', IRC_COLOR + IRC_NORMAL + "," + IRC_DMAGENTA),
(r'|[c', IRC_COLOR + IRC_NORMAL + "," + IRC_DCYAN),
(r'|[w', IRC_COLOR + IRC_NORMAL + "," + IRC_GRAY), # light grey background
(r'|[w', IRC_COLOR + IRC_NORMAL + "," + IRC_GREY), # light grey background
(r'|[x', IRC_COLOR + IRC_NORMAL + "," + IRC_BLACK) # pure black background
))
# ansi->irc

View file

@ -0,0 +1,75 @@
try:
from django.utils.unittest import TestCase
except ImportError:
from django.test import TestCase
try:
from django.utils import unittest
except ImportError:
import unittest
import string
from evennia.server.portal import irc
class TestIRC(TestCase):
def test_plain_ansi(self):
"""
Test that printable characters do not get mangled.
"""
irc_ansi = irc.parse_ansi_to_irc(string.printable)
ansi_irc = irc.parse_irc_to_ansi(string.printable)
self.assertEqual(irc_ansi, string.printable)
self.assertEqual(ansi_irc, string.printable)
def test_bold(self):
s_irc = "\x02thisisatest"
s_eve = r'|hthisisatest'
self.assertEqual(irc.parse_ansi_to_irc(s_eve), s_irc)
self.assertEqual(s_eve, irc.parse_irc_to_ansi(s_irc))
def test_italic(self):
s_irc = "\x02thisisatest"
s_eve = r'|hthisisatest'
self.assertEqual(irc.parse_ansi_to_irc(s_eve), s_irc)
def test_colors(self):
color_map = (("\0030", r'|w'),
("\0031", r'|X'),
("\0032", r'|B'),
("\0033", r'|G'),
("\0034", r'|r'),
("\0035", r'|R'),
("\0036", r'|M'),
("\0037", r'|Y'),
("\0038", r'|y'),
("\0039", r'|g'),
("\00310", r'|C'),
("\00311", r'|c'),
("\00312", r'|b'),
("\00313", r'|m'),
("\00314", r'|x'),
("\00315", r'|W'),
("\00399,5", r'|[r'),
("\00399,3", r'|[g'),
("\00399,7", r'|[y'),
("\00399,2", r'|[b'),
("\00399,6", r'|[m'),
("\00399,10", r'|[c'),
("\00399,15", r'|[w'),
("\00399,1", r'|[x'))
for m in color_map:
self.assertEqual(irc.parse_irc_to_ansi(m[0]), m[1])
self.assertEqual(m[0], irc.parse_ansi_to_irc(m[1]))
def test_identity(self):
"""
Test that the composition of the function and
its inverse gives the correct string.
"""
s = r'|wthis|Xis|gis|Ma|C|complex|*string'
self.assertEqual(irc.parse_irc_to_ansi(irc.parse_ansi_to_irc(s)), s)

View file

@ -192,7 +192,7 @@ class EvMore(object):
if self._npages <= 1 and not always_page:
# no need for paging; just pass-through.
caller.msg(text=text, **kwargs)
caller.msg(text=text, session=self._session, **kwargs)
else:
# go into paging mode
# first pass on the msg kwargs

View file

@ -31,6 +31,8 @@ strong {font-weight: bold;}
div {margin:0px;}
.hidden { display: none; }
/* Utility messages (green) */
.sys { color: #0f0 }

View file

@ -289,6 +289,7 @@ function onPrompt(args, kwargs) {
// Called when the user logged in
function onLoggedIn() {
$('#optionsbutton').removeClass('hidden');
Evennia.msg("webclient_options", [], {});
}
@ -323,6 +324,8 @@ function onSilence(cmdname, args, kwargs) {}
// Handle the server connection closing
function onConnectionClose(conn_name, evt) {
$('#optionsbutton').addClass('hidden');
closePopup("#optionsdialog");
onText(["The connection was closed or lost."], {'cls': 'err'});
}

View file

@ -11,7 +11,7 @@
<div id="wrapper">
<div id="toolbar">
<button id="optionsbutton" type="button">&#x2699;</button>
<button id="optionsbutton" type="button" class="hidden">&#x2699;</button>
</div>
<div id="messagewindow" role="log"></div>
<div id="inputform">
@ -48,4 +48,3 @@
</div>
{% endblock %}