Partial edit_node functionality

This commit is contained in:
Griatch 2018-04-02 19:55:31 +02:00
parent ed3e57edd0
commit cbaa2c56e9
2 changed files with 34 additions and 32 deletions

View file

@ -1132,7 +1132,7 @@ def list_node(option_generator, select=None, examine=None, edit=None, add=None,
Args:
option_generator (callable or list): A list of strings indicating the options, or a callable
that is called without any arguments to produce such a list.
that is called as option_generator(caller) to produce such a list.
select (callable, option): Will be called as select(caller, menuchoice)
where menuchoice is the chosen option as a string. Should return the target node to
goto after this selection. Note that if this is not given, the decorated node must itself
@ -1217,14 +1217,22 @@ def list_node(option_generator, select=None, examine=None, edit=None, add=None,
def _list_node(caller, raw_string, **kwargs):
mode = kwargs.get("list_mode", None)
option_list = option_generator() if callable(option_generator) else option_generator
option_list = option_generator(caller) if callable(option_generator) else option_generator
nall_options = len(option_list)
pages = [option_list[ind:ind + pagesize] for ind in range(0, nall_options, pagesize)]
npages = len(pages)
npages = 0
page_index = 0
page = None
options = []
page_index = max(0, min(npages - 1, kwargs.get("optionpage_index", 0)))
page = pages[page_index]
if option_list:
nall_options = len(option_list)
pages = [option_list[ind:ind + pagesize] for ind in range(0, nall_options, pagesize)]
npages = len(pages)
page_index = max(0, min(npages - 1, kwargs.get("optionpage_index", 0)))
page = pages[page_index]
text = ""
entry = None
extra_text = None
@ -1233,19 +1241,19 @@ def list_node(option_generator, select=None, examine=None, edit=None, add=None,
mode, entry = _input_parser(caller, raw_string,
**{"available_choices": page})
if examine and mode: # == "look":
if examine and mode: # == "look":
# look mode - we are examining a given entry
try:
text = examine(caller, entry)
except Exception:
logger.log_trace()
text = "|rCould not view."
options = [{"key": ("|wb|Wack|n", "b"),
"goto": (lambda caller: None,
{"optionpage_index": page_index})},
{"key": "_default",
"goto": (lambda caller: None,
{"optionpage_index": page_index})}]
options.extend([{"key": ("|wb|Wack|n", "b"),
"goto": (lambda caller: None,
{"optionpage_index": page_index})},
{"key": "_default",
"goto": (lambda caller: None,
{"optionpage_index": page_index})}])
return text, options
# if edit and mode == "edit":
@ -1263,9 +1271,9 @@ def list_node(option_generator, select=None, examine=None, edit=None, add=None,
# dynamic, multi-page option list. Each selection leads to the `select`
# callback being called with a result from the available choices
options = [{"desc": opt,
"goto": (_select_parser,
{"available_choices": page})} for opt in page]
options.extend([{"desc": opt,
"goto": (_select_parser,
{"available_choices": page})} for opt in page])
if add:
# We have a processor to handle adding a new entry. Re-run this node

View file

@ -916,7 +916,7 @@ def node_meta_key(caller):
return text, options
def _all_prototypes():
def _all_prototypes(caller):
return [mproto.key for mproto in search_prototype()]
@ -949,7 +949,7 @@ def node_prototype(caller):
return text, options
def _all_typeclasses():
def _all_typeclasses(caller):
return list(sorted(get_all_typeclasses().keys()))
# return list(sorted(get_all_typeclasses(parent="evennia.objects.objects.DefaultObject").keys()))
@ -1060,24 +1060,17 @@ def node_attrs(caller):
return text, options
def node_tags(caller):
def _caller_tags(caller):
metaprot = _get_menu_metaprot(caller)
prot = metaprot.prototype
tags = prot.get("tags")
return tags
text = ["Set the prototype's |yTags|n. Separate multiple tags with commas. "
"Will retain case sensitivity."]
if tags:
text.append("Current tags are '|y{tags}|n'.".format(tags=tags))
else:
text.append("No tags are set.")
text = "\n\n".join(text)
@list_node(_caller_tags)
def node_tags(caller):
text = "Set the prototype's |yTags|n."
options = _wizard_options("tags", "attrs", "locks")
options.append({"key": "_default",
"goto": (_set_property,
dict(prop="tags",
processor=lambda s: [part.strip() for part in s.split(",")],
next_node="node_locks"))})
return text, options
@ -1204,6 +1197,7 @@ def node_meta_desc(caller):
return text, options
def node_meta_tags(caller):
metaprot = _get_menu_metaprot(caller)
text = ["|wMeta-Tags|n can be used to classify and find prototypes. Tags are case-insensitive. "