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 pass
if usemore: if usemore:
evmore.msg(self.caller, text) evmore.msg(self.caller, text, session=self.session)
return return
self.msg((text, {"type": "help"})) self.msg((text, {"type": "help"}))
@ -267,7 +267,7 @@ class CmdHelp(Command):
return return
# no exact matches found. Just give suggestions. # 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): 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 # Try to retrieve the session
session = caller session = caller
if hasattr(caller, "sessions"): if hasattr(caller, "sessions"):
session = caller.sessions.get()[0] sessions = caller.sessions.all()
# import useful variables # import useful variables
import evennia import evennia
@ -175,11 +175,12 @@ def _run_code_snippet(caller, pycode, mode="eval", measure_time=False,
} }
if show_input: if show_input:
try: for session in sessions:
caller.msg(">>> %s" % pycode, session=session, try:
options={"raw": True}) caller.msg(">>> %s" % pycode, session=session,
except TypeError: options={"raw": True})
caller.msg(">>> %s" % pycode, options={"raw": True}) except TypeError:
caller.msg(">>> %s" % pycode, options={"raw": True})
try: try:
try: try:
@ -206,10 +207,11 @@ def _run_code_snippet(caller, pycode, mode="eval", measure_time=False,
errlist = errlist[4:] errlist = errlist[4:]
ret = "\n".join("%s" % line for line in errlist if line) ret = "\n".join("%s" % line for line in errlist if line)
try: for session in sessions:
caller.msg(ret, session=session, options={"raw": True}) try:
except TypeError: caller.msg(ret, session=session, options={"raw": True})
caller.msg(ret, options={"raw": True}) except TypeError:
caller.msg(ret, options={"raw": True})
class CmdPy(COMMAND_DEFAULT_CLASS): class CmdPy(COMMAND_DEFAULT_CLASS):

View file

@ -436,9 +436,12 @@ def webclient_options(session, *args, **kwargs):
""" """
account = session.account account = session.account
clientoptions = settings.WEBCLIENT_OPTIONS.copy() clientoptions = account.db._saved_webclient_options
storedoptions = account.db._saved_webclient_options or {} if not clientoptions:
clientoptions.update(storedoptions) # 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. # The webclient adds a cmdid to every kwargs, but we don't need it.
try: try:
@ -448,7 +451,8 @@ def webclient_options(session, *args, **kwargs):
if not kwargs: if not kwargs:
# No kwargs: we are getting the stored options # 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 # Create a monitor. If a monitor already exists then it will replace
# the previous one since it would use the same idstring # 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 # kwargs provided: persist them to the account object
for key, value in kwargs.iteritems(): for key, value in kwargs.iteritems():
clientoptions[key] = value clientoptions[key] = value
account.db._saved_webclient_options = clientoptions

View file

@ -20,6 +20,7 @@ IRC_BOLD = "\002"
IRC_COLOR = "\003" IRC_COLOR = "\003"
IRC_RESET = "\017" IRC_RESET = "\017"
IRC_ITALIC = "\026" IRC_ITALIC = "\026"
IRC_INVERT = "\x16"
IRC_NORMAL = "99" IRC_NORMAL = "99"
IRC_UNDERLINE = "37" IRC_UNDERLINE = "37"
@ -38,7 +39,7 @@ IRC_CYAN = "11"
IRC_BLUE = "12" IRC_BLUE = "12"
IRC_MAGENTA = "13" IRC_MAGENTA = "13"
IRC_DGREY = "14" IRC_DGREY = "14"
IRC_GRAY = "15" IRC_GREY = "15"
# obsolete test: # obsolete test:
@ -57,7 +58,7 @@ IRC_COLOR_MAP = dict((
(r'|t', " "), # tab (r'|t', " "), # tab
(r'|-', " "), # fixed tab (r'|-', " "), # fixed tab
(r'|_', " "), # space (r'|_', " "), # space
(r'|*', ""), # invert (r'|*', IRC_INVERT), # invert
(r'|^', ""), # blinking text (r'|^', ""), # blinking text
(r'|h', IRC_BOLD), # highlight, use bold instead (r'|h', IRC_BOLD), # highlight, use bold instead
@ -76,7 +77,7 @@ IRC_COLOR_MAP = dict((
(r'|B', IRC_COLOR + IRC_DBLUE), (r'|B', IRC_COLOR + IRC_DBLUE),
(r'|M', IRC_COLOR + IRC_DMAGENTA), (r'|M', IRC_COLOR + IRC_DMAGENTA),
(r'|C', IRC_COLOR + IRC_DCYAN), (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'|X', IRC_COLOR + IRC_BLACK), # pure black
(r'|[r', IRC_COLOR + IRC_NORMAL + "," + IRC_DRED), (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'|[b', IRC_COLOR + IRC_NORMAL + "," + IRC_DBLUE),
(r'|[m', IRC_COLOR + IRC_NORMAL + "," + IRC_DMAGENTA), (r'|[m', IRC_COLOR + IRC_NORMAL + "," + IRC_DMAGENTA),
(r'|[c', IRC_COLOR + IRC_NORMAL + "," + IRC_DCYAN), (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 (r'|[x', IRC_COLOR + IRC_NORMAL + "," + IRC_BLACK) # pure black background
)) ))
# ansi->irc # 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: if self._npages <= 1 and not always_page:
# no need for paging; just pass-through. # no need for paging; just pass-through.
caller.msg(text=text, **kwargs) caller.msg(text=text, session=self._session, **kwargs)
else: else:
# go into paging mode # go into paging mode
# first pass on the msg kwargs # first pass on the msg kwargs

View file

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

View file

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

View file

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