Cleaned up some of the duplicate and old test files. Got the flex grid to work and the font is okay for now. Can't seem to get darkmode to work across multiple pages from the header. Editing and adding a verse functions were updated.
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,28 +0,0 @@
|
||||
import theme
|
||||
from nicegui import ui
|
||||
from main import checked_data
|
||||
import data
|
||||
from utils import Utils
|
||||
|
||||
print(theme.tnt)
|
||||
|
||||
@ui.page('/dashboard')
|
||||
def dashboard():
|
||||
with theme.frame('Dashboard'):
|
||||
pass
|
||||
|
||||
with ui.grid().style('grid-template-columns: repeat(2, minmax(1px, 1fr));'):
|
||||
peoples = Utils.get_unique_people()
|
||||
for ppl in peoples:
|
||||
pl = ''.join(ppl)
|
||||
card_info = Utils.get_persons_incomplete(pl)
|
||||
for item in card_info:
|
||||
vcard = ui.label(item[1]).classes('hidden')
|
||||
pcard = ui.label(item[2]).classes('hidden')
|
||||
club = ui.label(item[3]).classes('hidden')
|
||||
clubcolor = ui.label(f'{theme.club.text}')
|
||||
with ui.card().classes('grid justify-items-center').style(f'border: 2px solid {clubcolor.text}'):
|
||||
ui.label(pl).classes('absolute top-0 left-0 font-thin text-sm')
|
||||
ui.label(vcard.text).classes('text-center')
|
||||
ui.label(pcard.text).classes('font-bold')
|
||||
|
||||
38
dashboard.py
38
dashboard.py
@ -1,26 +1,36 @@
|
||||
import theme
|
||||
from nicegui import ui
|
||||
import data
|
||||
from utils import Utils
|
||||
import random
|
||||
|
||||
color = {'tnt': theme.tnt, 'cubbies': theme.cubbies, 'sparks': theme.sparks}
|
||||
color = {"tnt": theme.tnt, "cubbies": theme.cubbies, "sparks": theme.sparks}
|
||||
|
||||
@ui.page('/dashboard')
|
||||
@ui.page("/dashboard", dark=False)
|
||||
def dashboard():
|
||||
with theme.frame('Dashboard'):
|
||||
random_order = []
|
||||
with theme.frame("Dashboard"):
|
||||
pass
|
||||
|
||||
with ui.grid().style('grid-template-columns: repeat(2, minmax(1px, 1fr));'):
|
||||
# with ui.grid().style('grid-template-columns: repeat(2, minmax(1px, 1fr));'):
|
||||
# with ui.grid().classes('grid-flow-row-dense grid-flow-col-dense grid-cols-auto grid-rows-5').style('height: 90vh; width: 100%;'):
|
||||
with ui.grid().classes("flex flex-row gap-x-2 flex-wrap").style(
|
||||
"height: 80vh; width: 100%;"
|
||||
):
|
||||
peoples = Utils.get_unique_people()
|
||||
for ppl in peoples:
|
||||
pl = ''.join(ppl)
|
||||
pl = "".join(ppl)
|
||||
card_info = Utils.get_persons_incomplete(pl)
|
||||
for item in card_info:
|
||||
vcard = ui.label(item[1]).classes('hidden')
|
||||
pcard = ui.label(item[2]).classes('hidden')
|
||||
club = ui.label(item[3]).classes('hidden')
|
||||
with ui.card().classes('grid justify-items-center').style(f'border: 2px solid {color[club.text.lower()]}'):
|
||||
ui.label(pl).classes('absolute top-0 left-0 font-thin text-sm')
|
||||
ui.label(vcard.text).classes('text-center')
|
||||
ui.label(pcard.text).classes('font-bold')
|
||||
random_order = random_order + card_info
|
||||
random.shuffle(random_order)
|
||||
for item in random_order:
|
||||
pl = ui.label(item[0]).classes("hidden")
|
||||
vcard = ui.label(item[1]).classes("hidden")
|
||||
pcard = ui.label(item[2]).classes("hidden")
|
||||
club = ui.label(item[3]).classes("hidden")
|
||||
with ui.card().classes("grid justify-items-center").style(
|
||||
f"border: 2px solid {color[club.text.lower()]}"
|
||||
):
|
||||
ui.label(pl.text).classes("absolute top-4 left-3 font-thin text-sm")
|
||||
ui.label(vcard.text).classes("text-center font-mono")
|
||||
ui.label(pcard.text).classes("font-light text-lg font-sans text-wrap break-words")#.style('font-family: "Liberation Mono"')
|
||||
|
||||
|
||||
66
main.py
66
main.py
@ -1,19 +1,18 @@
|
||||
import data
|
||||
import dashboard
|
||||
from nicegui import app, ui
|
||||
from nicegui import ui
|
||||
import re
|
||||
import requests
|
||||
import theme
|
||||
from utils import Utils
|
||||
|
||||
# DB columns tasks(person, verse, verse_passage, status, awana_completed, awana_bonus)
|
||||
# DB columns tasks(person, verse, verse_passage, status, awana_completed, awana_bonus, spark )
|
||||
db = data.CON
|
||||
cur = db.cursor()
|
||||
APIKEY = "Token f562cf2d890151d682065696dacdc0f86938a18e"
|
||||
HEADERS = {"Authorization": APIKEY}
|
||||
|
||||
|
||||
@ui.page("/")
|
||||
@ui.page("/", dark=False)
|
||||
def index_page() -> None:
|
||||
with theme.frame("Homepage"):
|
||||
firstload = Utils.get_unique_people()
|
||||
@ -36,14 +35,15 @@ def index_page() -> None:
|
||||
pass
|
||||
|
||||
with ui.dialog() as addchild, ui.card().classes("items-center"):
|
||||
result = ui.input(label="Clubber's Name")
|
||||
result1 = ui.input(label="Clubber's Name")
|
||||
result2 = ui.input(label="Awana Club")
|
||||
ui.button().props("push glossy icon=add_circle color=secondary").on(
|
||||
"click", lambda: add_child(result)
|
||||
"click", lambda: add_person(result1, result2)
|
||||
)
|
||||
|
||||
with ui.grid(columns=1).classes(
|
||||
"self-center justify-items-center content-center p-2 m-2 rounded-xl"
|
||||
):
|
||||
) as pplrow:
|
||||
users = Utils.get_unique_people()
|
||||
for ppl in users:
|
||||
pers = str(ppl)[2:-3].title()
|
||||
@ -69,7 +69,6 @@ def index_page() -> None:
|
||||
pass
|
||||
|
||||
showperson.set_visibility(False)
|
||||
# FEAT: Allow editing of the verse. Awana will sometimes only give the student part of a verse (i.e 1 John 4:14 is actually 14b).
|
||||
|
||||
@ui.refreshable
|
||||
def show_person(person):
|
||||
@ -92,7 +91,7 @@ def index_page() -> None:
|
||||
setcolor = "rgba(255, 0, 0, .5)"
|
||||
else:
|
||||
setcolor = "rgba(0, 0, 255, .5)"
|
||||
with showperson.classes(f"border-8").style(
|
||||
with showperson.classes("border-8").style(
|
||||
f"border: {setcolor} 1px solid;"
|
||||
):
|
||||
with ui.grid(columns=5).classes(
|
||||
@ -103,10 +102,10 @@ def index_page() -> None:
|
||||
label_verse = ui.label(text=item[0]).classes("hidden")
|
||||
label_passage = ui.label(text=item[1]).classes("hidden")
|
||||
label_status = ui.label(text=item[2]).classes("hidden")
|
||||
verssage = ui.label(text=f"{label_verse.text} - {label_passage.text}").classes("hidden")
|
||||
ui.label(label_verse.text).classes("font-bold text-center")
|
||||
with ui.row():
|
||||
ui.label(label_passage.text).classes("text-wrap")
|
||||
# ui.chip("Edit Verse", selectable=True, icon="edit", color="white", on_selection_change=lambda label_verse=label_verse: edit_verse(label_verse.text, person, label_passage.text))
|
||||
if label_status.text == "1":
|
||||
ui.chip(
|
||||
"Complete",
|
||||
@ -134,8 +133,8 @@ def index_page() -> None:
|
||||
selectable=True,
|
||||
icon="edit",
|
||||
color="cubbies",
|
||||
on_selection_change=lambda label_passage=label_passage: edit_verse(
|
||||
label_verse.text, person, label_passage.text
|
||||
on_selection_change=lambda verssage=verssage: edit_verse(
|
||||
verssage, person
|
||||
),
|
||||
).classes("text-white")
|
||||
ui.chip(
|
||||
@ -153,17 +152,30 @@ def index_page() -> None:
|
||||
showperson.clear()
|
||||
addverse.close()
|
||||
|
||||
def edit_verse(verse, person, passage):
|
||||
def remove_verse():
|
||||
pass
|
||||
|
||||
def edit_verse(verssage, person):
|
||||
editverse.clear()
|
||||
editverse.open()
|
||||
verse = verssage.text.split('-')[0].strip()
|
||||
passage = verssage.text.split('-')[1]
|
||||
with editverse:
|
||||
with ui.card().classes("flex-wrap items-center"):
|
||||
ui.label("Here's the verse for easier copy & paste:")
|
||||
ui.label(passage)
|
||||
editing = ui.textarea(label="Edit below")
|
||||
ui.label(passage).classes('text-center')
|
||||
ui.label(verse)
|
||||
editing = ui.textarea(label="Edit below").classes('center')
|
||||
with ui.row().classes("justify-content-center"):
|
||||
ui.button().props("push glossy icon=add_circle color=secondary").on(
|
||||
"click", lambda: edit_submit_verse(person, editing, verse)
|
||||
)
|
||||
ui.button().props("push glossy icon=cancel color=sparks").on('click', lambda: editverse.close())
|
||||
|
||||
def edit_submit_verse(person, passage, verse):
|
||||
Utils.edit_verse(person, verse, passage)
|
||||
editverse.close()
|
||||
show_person(person)
|
||||
|
||||
def add_verse(person):
|
||||
if person.value is None:
|
||||
@ -176,19 +188,11 @@ def index_page() -> None:
|
||||
with ui.row().classes("justify-content-center"):
|
||||
ui.button().props(
|
||||
"push glossy icon=add_circle color=secondary"
|
||||
).on("click", lambda: submit_verse(result, person))
|
||||
).on("click", lambda: (submit_verse(result, person), addverse.close()))
|
||||
ui.button().props("push glossy icon=cancel color=negative").on(
|
||||
"click", lambda: addverse.close()
|
||||
)
|
||||
|
||||
def edit_submit_verse(person, passage, verse):
|
||||
print(passage)
|
||||
print(passage.value)
|
||||
Utils.edit_verse(person, verse, passage)
|
||||
editverse.close()
|
||||
show_person(person)
|
||||
|
||||
|
||||
|
||||
def submit_verse(result, person):
|
||||
# Check if Verse is already in db
|
||||
@ -243,24 +247,18 @@ def index_page() -> None:
|
||||
else:
|
||||
ui.notify("Uh oh. Something went wrong.")
|
||||
|
||||
ins = cur.execute(
|
||||
f"replace into tasks values('{person.value.lower()}', '{result.value}', '{zpassage}', 0, 0, 'none');"
|
||||
)
|
||||
db.commit()
|
||||
Utils.add_verse(person, result, zpassage)
|
||||
show_person(person)
|
||||
|
||||
def add_child(person):
|
||||
def add_person(person, club):
|
||||
check_person = Utils.get_specific_person(person)
|
||||
print(check_person)
|
||||
if check_person == []:
|
||||
Utils.add_person(person)
|
||||
# persontoggle.set_visibility(False)
|
||||
show_person(person)
|
||||
Utils.add_person(person, club)
|
||||
addchild.close()
|
||||
else:
|
||||
ui.notify(
|
||||
f"The name {person.value} already exists. Please add someone else"
|
||||
)
|
||||
|
||||
show_person(person)
|
||||
|
||||
ui.run(storage_secret="b601785a-855c-41d1-adeb-68f0330d8186")
|
||||
|
||||
Binary file not shown.
13
test.py
13
test.py
@ -1,13 +0,0 @@
|
||||
from nicegui import ui
|
||||
|
||||
with ui.grid():
|
||||
data = ui.button("Text")
|
||||
#, on_click=lambda: show_element(data))
|
||||
|
||||
def show_element(data):
|
||||
with ui.row():
|
||||
ui.input(label="Add Text")
|
||||
|
||||
data.on_click(lambda: show_element(data))
|
||||
|
||||
ui.run()
|
||||
3
theme.py
3
theme.py
@ -5,6 +5,7 @@ from nicegui import ui
|
||||
tnt='rgba(30, 206, 0, 0.25)'
|
||||
cubbies='rgba(25, 39, 255, 0.25)'
|
||||
sparks='rgba(255, 0, 0, 0.25)'
|
||||
dark_mode = ui.dark_mode(True)
|
||||
|
||||
@contextmanager
|
||||
def frame(navigation_title: str):
|
||||
@ -18,7 +19,9 @@ def frame(navigation_title: str):
|
||||
ui.space()
|
||||
ui.space()
|
||||
with ui.row():
|
||||
# ui.switch('Dark Mode').bind_value(dark_mode)
|
||||
ui.link('Admin', '/').classes(replace='text-white')
|
||||
ui.link('Dashboard', '/dashboard').classes(replace='text-white')
|
||||
with ui.column().classes('absolute-center items-center'):
|
||||
yield
|
||||
|
||||
|
||||
47
utils.py
47
utils.py
@ -1,42 +1,65 @@
|
||||
import data
|
||||
import requests
|
||||
|
||||
db = data.CON
|
||||
cur = db.cursor()
|
||||
|
||||
|
||||
class Utils():
|
||||
class Utils:
|
||||
def __init__():
|
||||
pass
|
||||
|
||||
def get_unique_people():
|
||||
data = cur.execute('select distinct person from tasks;')
|
||||
data = cur.execute("select distinct person from tasks;")
|
||||
ppl = data.fetchall()
|
||||
return ppl
|
||||
|
||||
def get_specific_person(person):
|
||||
res = cur.execute(f"select verse,verse_passage,status from tasks where person='{person.value}'")
|
||||
res = cur.execute(
|
||||
f"select verse,verse_passage,status from tasks where person='{person.value}'"
|
||||
)
|
||||
dbinfo = res.fetchall()
|
||||
return dbinfo
|
||||
|
||||
def toggle_completion(verse, person, status):
|
||||
ins = cur.execute(f"update tasks set status = '{status}' where person = '{person.value}' and verse = '{verse}'")
|
||||
cur.execute(
|
||||
f"update tasks set status = '{status}' where person = '{person.value}' and verse = '{verse}'"
|
||||
)
|
||||
db.commit()
|
||||
|
||||
def get_persons_incomplete(person):
|
||||
inc = cur.execute(f"select person, verse, verse_passage, club from tasks where status = '0' and person = '{person}'")
|
||||
inc = cur.execute(
|
||||
f"select person, verse, verse_passage, club from tasks where status = '0' and person = '{person}'"
|
||||
)
|
||||
incret = inc.fetchall()
|
||||
return incret
|
||||
|
||||
def edit_verse(person, verse, passage):
|
||||
print(f"update tasks set verse_passage = '{passage.value}' where person = '{person.value}' and verse = '{verse}'")
|
||||
vedit = cur.execute(f"update tasks set verse_passage = '{passage.value}' where person = '{person.value} and verse = '{verse}';")
|
||||
def add_verse(person, verse, passage):
|
||||
club = cur.execute(
|
||||
f"select distinct club from tasks where person = '{person.value}'"
|
||||
)
|
||||
clubstring = club.fetchone()
|
||||
clubstring = "".join(clubstring)
|
||||
cur.execute(
|
||||
f"replace into tasks (person, verse, verse_passage, status, club) values('{person.value}', '{verse.value}', '{passage}', '0', '{clubstring}');"
|
||||
)
|
||||
db.commit()
|
||||
|
||||
def add_person(person):
|
||||
print(person)
|
||||
aperson = cur.execute(f"insert into tasks(person) values ('{person.value}')")
|
||||
def edit_verse(person, verse, passage):
|
||||
passage = passage.value.replace("'", '"')
|
||||
cur.execute(
|
||||
f"update tasks set verse_passage = '{passage}' where person = '{person.value}' and verse = '{verse}'"
|
||||
)
|
||||
db.commit()
|
||||
|
||||
def add_person(person, club):
|
||||
cur.execute(
|
||||
f"insert into tasks(person, club) values ('{person.value}', '{club.value}')"
|
||||
)
|
||||
db.commit()
|
||||
|
||||
def delete_verse(verse, person):
|
||||
dverse = cur.execute(f"delete from tasks where person = '{person.value}' and verse = '{verse}'")
|
||||
cur.execute(
|
||||
f"delete from tasks where person = '{person.value}' and verse = '{verse}'"
|
||||
)
|
||||
db.commit()
|
||||
|
||||
Reference in New Issue
Block a user