mirror of
https://github.com/evennia/evennia.git
synced 2026-03-16 21:06:30 +01:00
Merge branch 'master' into develop
This commit is contained in:
commit
8be657ba43
9 changed files with 109 additions and 25 deletions
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
75
evennia/server/portal/tests.py
Normal file
75
evennia/server/portal/tests.py
Normal 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)
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ strong {font-weight: bold;}
|
|||
|
||||
div {margin:0px;}
|
||||
|
||||
.hidden { display: none; }
|
||||
|
||||
/* Utility messages (green) */
|
||||
.sys { color: #0f0 }
|
||||
|
||||
|
|
|
|||
|
|
@ -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'});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
<div id="wrapper">
|
||||
<div id="toolbar">
|
||||
<button id="optionsbutton" type="button">⚙</button>
|
||||
<button id="optionsbutton" type="button" class="hidden">⚙</button>
|
||||
</div>
|
||||
<div id="messagewindow" role="log"></div>
|
||||
<div id="inputform">
|
||||
|
|
@ -48,4 +48,3 @@
|
|||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue