Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a3e07033e7 | |||
| 5a3bb026d4 | |||
| 7aa752c3d3 | |||
| 6b412140d4 | |||
| 61157457b8 | |||
| 46cae312c8 | |||
| aa04718374 | |||
| 4c6495c4ee | |||
| 8f00ab9570 | |||
| 32dec36cd7 | |||
| f9b5c0d153 | |||
| b3dc60d950 | |||
| f8e93cedf2 | |||
| 074975650f | |||
| 7f654071d0 | |||
| 0711b55ad8 |
@ -2,7 +2,7 @@
|
||||
|
||||
## Demo
|
||||
|
||||
https://github.com/natankeddem/autopve/assets/44515217/7c766078-a69f-4dc3-889c-6d7113fd3421
|
||||
https://github.com/natankeddem/autopve/assets/44515217/9439e2e2-a7bf-4677-aea8-0684318bea6c
|
||||
|
||||
## Information
|
||||
|
||||
|
||||
@ -44,6 +44,7 @@ class Drawer(object):
|
||||
el.IButton(icon="add", on_click=self._display_answer_dialog)
|
||||
self._buttons["remove"] = el.IButton(icon="remove", on_click=lambda: self._modify_answer("remove"))
|
||||
self._buttons["edit"] = el.IButton(icon="edit", on_click=lambda: self._modify_answer("edit"))
|
||||
self._buttons["content_copy"] = el.IButton(icon="content_copy", on_click=lambda: self._modify_answer("content_copy"))
|
||||
ui.label(text="ANSWERS").classes("text-secondary")
|
||||
self._table = (
|
||||
ui.table(
|
||||
@ -83,7 +84,7 @@ class Drawer(object):
|
||||
self._table.add_rows({"name": name})
|
||||
self._table.visible = True
|
||||
|
||||
async def _display_answer_dialog(self, name=""):
|
||||
async def _display_answer_dialog(self, name="", copy=False):
|
||||
save = None
|
||||
|
||||
with ui.dialog() as answer_dialog, el.Card():
|
||||
@ -100,6 +101,8 @@ class Drawer(object):
|
||||
|
||||
def answer_check(value: str) -> Optional[bool]:
|
||||
spaceless = value.replace(" ", "")
|
||||
if len(spaceless) == 0:
|
||||
return False
|
||||
for invalid_value in all_answers:
|
||||
if invalid_value == spaceless:
|
||||
return False
|
||||
@ -108,6 +111,8 @@ class Drawer(object):
|
||||
def enter_submit(e: KeyEventArguments) -> None:
|
||||
if e.key == "Enter" and save_ea.no_errors is True:
|
||||
answer_dialog.submit("save")
|
||||
elif e.key == "Escape":
|
||||
answer_dialog.close()
|
||||
|
||||
answer_input = el.VInput(label="answer", value=" ", invalid_characters="""'`"$\\;&<>|(){}""", invalid_values=all_answers, check=answer_check, max_length=20)
|
||||
save_ea = el.ErrorAggregator(answer_input)
|
||||
@ -116,16 +121,17 @@ class Drawer(object):
|
||||
answer_input.value = name
|
||||
|
||||
result = await answer_dialog
|
||||
if result == "save":
|
||||
answer = answer_input.value.strip()
|
||||
if len(answer) > 0 and name != "Default":
|
||||
storage.answer(answer)
|
||||
if result == "save" and name != answer:
|
||||
if name in storage.answers:
|
||||
storage.answers[answer] = storage.answer(name, copy=True)
|
||||
if copy is False:
|
||||
del storage.answers[name]
|
||||
for row in self._table.rows:
|
||||
if name == row["name"]:
|
||||
self._table.remove_rows(row)
|
||||
else:
|
||||
storage.answer(answer)
|
||||
self._add_answer_to_table(answer)
|
||||
|
||||
def _modify_answer(self, mode):
|
||||
@ -152,17 +158,20 @@ class Drawer(object):
|
||||
|
||||
async def _selected(self, e):
|
||||
self._hide_content()
|
||||
if self._selection_mode == "edit":
|
||||
if len(e.selection) > 0 and e.selection[0]["name"] != "Default":
|
||||
await self._display_answer_dialog(name=e.selection[0]["name"])
|
||||
if self._selection_mode == "remove":
|
||||
if len(e.selection) > 0:
|
||||
for row in e.selection:
|
||||
if row["name"] != "Default":
|
||||
if row["name"] in storage.answers:
|
||||
del storage.answers[row["name"]]
|
||||
self._table.remove_rows(row)
|
||||
if len(e.selection) == 1:
|
||||
answer = e.selection[0]["name"]
|
||||
if self._selection_mode == "content_copy":
|
||||
await self._display_answer_dialog(name=answer, copy=True)
|
||||
self._modify_answer(None)
|
||||
elif answer == "Default":
|
||||
self._table._props["selected"] = []
|
||||
elif self._selection_mode == "edit":
|
||||
await self._display_answer_dialog(name=answer)
|
||||
self._modify_answer(None)
|
||||
elif self._selection_mode == "remove":
|
||||
if answer in storage.answers:
|
||||
del storage.answers[answer]
|
||||
self._table.remove_rows(e.selection[0])
|
||||
|
||||
async def _clicked(self, e):
|
||||
if "name" in e.args[1]:
|
||||
|
||||
@ -55,6 +55,7 @@ class Setting(Tab):
|
||||
"control": el.FInput(
|
||||
key,
|
||||
password=True if key == "root_password" else False,
|
||||
password_toggle_button=True if key == "root_password" else False,
|
||||
autocomplete=self.keys[key]["options"] if key in self.keys and "options" in self.keys[key] else None,
|
||||
on_change=lambda e, key=key: self.set_key(key, e.value),
|
||||
),
|
||||
@ -81,15 +82,17 @@ class Setting(Tab):
|
||||
v: Any = ""
|
||||
if len(value) > 0:
|
||||
if key in self.keys and "type" in self.keys[key]:
|
||||
if self.keys[key]["type"] == "list":
|
||||
v = value[1:-1].split(",")
|
||||
if self.keys[key]["type"] == "list" and len(value) > 2 and value.strip()[0] == "[" and value.strip()[-1] == "]":
|
||||
l = value.strip()[1:-1].replace('"', "").replace("'", "").split(",")
|
||||
v = [v.strip() for v in l]
|
||||
elif self.keys[key]["type"] == "int":
|
||||
v = int(value)
|
||||
else:
|
||||
v = value
|
||||
else:
|
||||
if len(value) > 2 and value.strip()[0] == "[" and value.strip()[-1] == "]":
|
||||
v = value[1:-1].split(",")
|
||||
l = value.strip()[1:-1].replace('"', "").replace("'", "").split(",")
|
||||
v = [v.strip() for v in l]
|
||||
elif value.isnumeric():
|
||||
v = int(value)
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user