form: add fancy separators

This commit is contained in:
axolotle 2023-04-07 20:27:23 +02:00
parent e4a0ad35ce
commit dc99febe4c

View file

@ -40,6 +40,13 @@ from yunohost.log import OperationLogger
logger = getActionLogger("yunohost.form") logger = getActionLogger("yunohost.form")
# ╭───────────────────────────────────────────────────────╮
# │ ┌─╴╷ ╷╭─┐╷ │
# │ ├─╴│╭╯├─┤│ │
# │ ╰─╴╰╯ ╵ ╵╰─╴ │
# ╰───────────────────────────────────────────────────────╯
# Those js-like evaluate functions are used to eval safely visible attributes # Those js-like evaluate functions are used to eval safely visible attributes
# The goal is to evaluate in the same way than js simple-evaluate # The goal is to evaluate in the same way than js simple-evaluate
# https://github.com/shepherdwind/simple-evaluate # https://github.com/shepherdwind/simple-evaluate
@ -183,6 +190,13 @@ def evaluate_simple_js_expression(expr, context={}):
return evaluate_simple_ast(node, context) return evaluate_simple_ast(node, context)
# ╭───────────────────────────────────────────────────────╮
# │ ╭─╮┌─╮╶┬╴╶┬╴╭─╮╭╮╷╭─╴ │
# │ │ │├─╯ │ │ │ ││││╰─╮ │
# │ ╰─╯╵ ╵ ╶┴╴╰─╯╵╰╯╶─╯ │
# ╰───────────────────────────────────────────────────────╯
class BaseOption: class BaseOption:
hide_user_input_in_prompt = False hide_user_input_in_prompt = False
pattern: Optional[Dict] = None pattern: Optional[Dict] = None
@ -377,6 +391,11 @@ class BaseOption:
return self.value return self.value
# ╭───────────────────────────────────────────────────────╮
# │ DISPLAY OPTIONS │
# ╰───────────────────────────────────────────────────────╯
class DisplayTextOption(BaseOption): class DisplayTextOption(BaseOption):
argument_type = "display_text" argument_type = "display_text"
@ -418,6 +437,14 @@ class ButtonOption(BaseOption):
self.enabled = question.get("enabled", None) self.enabled = question.get("enabled", None)
# ╭───────────────────────────────────────────────────────╮
# │ INPUT OPTIONS │
# ╰───────────────────────────────────────────────────────╯
# ─ STRINGS ───────────────────────────────────────────────
class StringOption(BaseOption): class StringOption(BaseOption):
argument_type = "string" argument_type = "string"
default_value = "" default_value = ""
@ -461,6 +488,9 @@ class ColorOption(StringOption):
} }
# ─ NUMERIC ───────────────────────────────────────────────
class NumberOption(BaseOption): class NumberOption(BaseOption):
argument_type = "number" argument_type = "number"
default_value = None default_value = None
@ -514,6 +544,9 @@ class NumberOption(BaseOption):
) )
# ─ BOOLEAN ───────────────────────────────────────────────
class BooleanOption(BaseOption): class BooleanOption(BaseOption):
argument_type = "boolean" argument_type = "boolean"
default_value = 0 default_value = 0
@ -604,6 +637,9 @@ class BooleanOption(BaseOption):
return text_for_user_input_in_cli return text_for_user_input_in_cli
# ─ TIME ──────────────────────────────────────────────────
class DateOption(StringOption): class DateOption(StringOption):
pattern = { pattern = {
"regexp": r"^\d{4}-\d\d-\d\d$", "regexp": r"^\d{4}-\d\d-\d\d$",
@ -629,6 +665,9 @@ class TimeOption(StringOption):
} }
# ─ LOCATIONS ─────────────────────────────────────────────
class EmailOption(StringOption): class EmailOption(StringOption):
pattern = { pattern = {
"regexp": r"^.+@.+", "regexp": r"^.+@.+",
@ -674,6 +713,9 @@ class URLOption(StringOption):
} }
# ─ FILE ──────────────────────────────────────────────────
class FileOption(BaseOption): class FileOption(BaseOption):
argument_type = "file" argument_type = "file"
upload_dirs: List[str] = [] upload_dirs: List[str] = []
@ -739,6 +781,9 @@ class FileOption(BaseOption):
return self.value return self.value
# ─ CHOICES ───────────────────────────────────────────────
class TagsOption(BaseOption): class TagsOption(BaseOption):
argument_type = "tags" argument_type = "tags"
default_value = "" default_value = ""
@ -933,6 +978,13 @@ OPTIONS = {
} }
# ╭───────────────────────────────────────────────────────╮
# │ ╷ ╷╶┬╴╶┬╴╷ ╭─╴ │
# │ │ │ │ │ │ ╰─╮ │
# │ ╰─╯ ╵ ╶┴╴╰─╴╶─╯ │
# ╰───────────────────────────────────────────────────────╯
def ask_questions_and_parse_answers( def ask_questions_and_parse_answers(
raw_questions: Dict, raw_questions: Dict,
prefilled_answers: Union[str, Mapping[str, Any]] = {}, prefilled_answers: Union[str, Mapping[str, Any]] = {},