diff --git a/folkugat_web/api/__init__.py b/folkugat_web/api/__init__.py
index 0b302bc..12f6d40 100644
--- a/folkugat_web/api/__init__.py
+++ b/folkugat_web/api/__init__.py
@@ -1,6 +1,7 @@
from ._router import router
from .auth import *
from .index import *
+from .sessio import *
from .sessions import *
from .tema import *
from .temes import *
diff --git a/folkugat_web/api/sessio/__init__.py b/folkugat_web/api/sessio/__init__.py
new file mode 100644
index 0000000..b56b5e1
--- /dev/null
+++ b/folkugat_web/api/sessio/__init__.py
@@ -0,0 +1 @@
+from . import index, live, set_page
diff --git a/folkugat_web/api/sessio/index.py b/folkugat_web/api/sessio/index.py
new file mode 100644
index 0000000..17249f6
--- /dev/null
+++ b/folkugat_web/api/sessio/index.py
@@ -0,0 +1,199 @@
+from typing import Annotated
+
+from fastapi import Form, Request
+from folkugat_web.api import router
+from folkugat_web.fragments import live, sessio
+from folkugat_web.services import auth
+from folkugat_web.services.temes import write as temes_service
+from folkugat_web.templates import templates
+
+
+@router.get("/sessio/{session_id}")
+def page(
+ request: Request,
+ logged_in: auth.LoggedIn,
+ session_id: int,
+):
+ return templates.TemplateResponse(
+ "index.html",
+ {
+ "request": request,
+ "page_title": "Folkugat",
+ "content": f"/api/content/sessio/{session_id}",
+ "logged_in": logged_in,
+ }
+ )
+
+
+@router.get("/api/content/sessio/{session_id}")
+def contingut(
+ request: Request,
+ logged_in: auth.LoggedIn,
+ session_id: int,
+):
+ return sessio.pagina(request, session_id, logged_in)
+
+
+@router.put("/api/sessio/{session_id}/live")
+def set_live(
+ request: Request,
+ _: auth.RequireLogin,
+ session_id: int,
+):
+ return live.start_live_session(request=request, session_id=session_id)
+
+
+@router.delete("/api/sessio/{session_id}/live")
+def stop_live(
+ request: Request,
+ _: auth.RequireLogin,
+ session_id: int,
+):
+ return live.stop_live_session(request=request, session_id=session_id)
+
+
+@router.post("/api/sessio/{session_id}/set")
+def add_set(
+ request: Request,
+ logged_in: auth.RequireLogin,
+ session_id: int,
+):
+ return sessio.add_set(request=request, session_id=session_id, logged_in=logged_in)
+
+
+@router.get("/api/sessio/{session_id}/set/{set_id}")
+def get_set(
+ request: Request,
+ logged_in: auth.LoggedIn,
+ session_id: int,
+ set_id: int,
+):
+ return sessio.get_set(request=request, session_id=session_id, set_id=set_id, logged_in=logged_in)
+
+
+@router.delete("/api/sessio/{session_id}/set/{set_id}")
+def delete_set(
+ _: auth.RequireLogin,
+ session_id: int,
+ set_id: int,
+):
+ return sessio.delete_set(session_id=session_id, set_id=set_id)
+
+
+@router.post("/api/sessio/{session_id}/set/{set_id}")
+def add_tema(
+ request: Request,
+ logged_in: auth.RequireLogin,
+ session_id: int,
+ set_id: int,
+):
+ return sessio.add_tema(request=request, session_id=session_id, set_id=set_id, logged_in=logged_in)
+
+
+@router.get("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}")
+def get_tema(
+ request: Request,
+ logged_in: auth.RequireLogin,
+ session_id: int,
+ set_id: int,
+ entry_id: int,
+):
+ return sessio.get_tema(
+ request=request, session_id=session_id, set_id=set_id, entry_id=entry_id, logged_in=logged_in)
+
+
+@router.get("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}/editor")
+def get_tema_editor(
+ request: Request,
+ logged_in: auth.RequireLogin,
+ session_id: int,
+ set_id: int,
+ entry_id: int,
+):
+ return sessio.get_tema_editor(
+ request=request, session_id=session_id, set_id=set_id, entry_id=entry_id, logged_in=logged_in)
+
+
+@router.delete("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}")
+def delete_tema(
+ _: auth.RequireLogin,
+ session_id: int,
+ set_id: int,
+ entry_id: int,
+):
+ return sessio.delete_tema(session_id=session_id, set_id=set_id, entry_id=entry_id)
+
+
+@router.get("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}/busca")
+def busca_tema(
+ request: Request,
+ _: auth.RequireLogin,
+ session_id: int,
+ set_id: int,
+ entry_id: int,
+ query: str,
+):
+ return sessio.busca_tema(
+ request=request,
+ session_id=session_id,
+ set_id=set_id,
+ entry_id=entry_id,
+ query=query,
+ )
+
+
+@router.put("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}")
+def set_tema(
+ request: Request,
+ logged_in: auth.RequireLogin,
+ session_id: int,
+ set_id: int,
+ entry_id: int,
+ tema_id: Annotated[int, Form()],
+):
+ return sessio.set_tema(
+ request=request,
+ logged_in=logged_in,
+ session_id=session_id,
+ set_id=set_id,
+ entry_id=entry_id,
+ tema_id=tema_id,
+ )
+
+
+@router.put("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}/unknown")
+def set_tema_unknown(
+ request: Request,
+ logged_in: auth.RequireLogin,
+ session_id: int,
+ set_id: int,
+ entry_id: int,
+):
+ return sessio.set_tema(
+ request=request,
+ logged_in=logged_in,
+ session_id=session_id,
+ set_id=set_id,
+ entry_id=entry_id,
+ tema_id=None,
+ )
+
+
+@router.post("/api/sessio/{session_id}/set/{set_id}/tema/{entry_id}")
+def set_tema_new(
+ request: Request,
+ logged_in: auth.RequireLogin,
+ session_id: int,
+ set_id: int,
+ entry_id: int,
+ title: Annotated[str, Form()],
+):
+ new_tema = temes_service.create_tema(title=title)
+ return sessio.set_tema(
+ request=request,
+ logged_in=logged_in,
+ session_id=session_id,
+ set_id=set_id,
+ entry_id=entry_id,
+ tema_id=new_tema.id,
+ )
diff --git a/folkugat_web/api/sessio/live.py b/folkugat_web/api/sessio/live.py
new file mode 100644
index 0000000..70e09dc
--- /dev/null
+++ b/folkugat_web/api/sessio/live.py
@@ -0,0 +1,37 @@
+from fastapi import Request
+from folkugat_web.api import router
+from folkugat_web.fragments import set_page
+from folkugat_web.services import auth
+from folkugat_web.templates import templates
+
+
+@router.get("/live")
+def page(
+ request: Request,
+ logged_in: auth.LoggedIn,
+):
+ return templates.TemplateResponse(
+ "index.html",
+ {
+ "request": request,
+ "page_title": "Folkugat",
+ "content": f"/api/content/live",
+ "logged_in": logged_in,
+ }
+ )
+
+
+@router.get("/api/content/live")
+def contingut(
+ request: Request,
+ logged_in: auth.LoggedIn,
+):
+ return set_page.live(request, logged_in)
+
+
+@router.get("/api/content/live/set")
+def get_set_page(
+ request: Request,
+ logged_in: auth.LoggedIn,
+):
+ return set_page.live_set(request, logged_in)
diff --git a/folkugat_web/api/sessio/set_page.py b/folkugat_web/api/sessio/set_page.py
new file mode 100644
index 0000000..7502321
--- /dev/null
+++ b/folkugat_web/api/sessio/set_page.py
@@ -0,0 +1,33 @@
+from fastapi import Request
+from folkugat_web.api import router
+from folkugat_web.fragments import set_page
+from folkugat_web.services import auth
+from folkugat_web.templates import templates
+
+
+@router.get("/sessio/{session_id}/set/{set_id}")
+def page(
+ request: Request,
+ logged_in: auth.LoggedIn,
+ session_id: int,
+ set_id: int,
+):
+ return templates.TemplateResponse(
+ "index.html",
+ {
+ "request": request,
+ "page_title": "Folkugat",
+ "content": f"/api/content/sessio/{session_id}/set/{set_id}",
+ "logged_in": logged_in,
+ }
+ )
+
+
+@router.get("/api/content/sessio/{session_id}/set/{set_id}")
+def contingut(
+ request: Request,
+ logged_in: auth.LoggedIn,
+ session_id: int,
+ set_id: int,
+):
+ return set_page.pagina(request, session_id, set_id, logged_in)
diff --git a/folkugat_web/api/sessions/__init__.py b/folkugat_web/api/sessions/__init__.py
index 66b414f..aba1bbe 100644
--- a/folkugat_web/api/sessions/__init__.py
+++ b/folkugat_web/api/sessions/__init__.py
@@ -1 +1 @@
-from . import editor, index, sessio
+from . import editor, index
diff --git a/folkugat_web/api/sessions/sessio.py b/folkugat_web/api/sessions/sessio.py
deleted file mode 100644
index 9c26b01..0000000
--- a/folkugat_web/api/sessions/sessio.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from fastapi import Request
-from folkugat_web.api import router
-from folkugat_web.fragments import live, sessions
-from folkugat_web.services import auth
-from folkugat_web.templates import templates
-
-
-@router.get("/sessio/{session_id}")
-def page(
- request: Request,
- session_id: int,
- logged_in: auth.LoggedIn,
-):
- return templates.TemplateResponse(
- "index.html",
- {
- "request": request,
- "page_title": "Folkugat",
- "content": f"/api/content/sessio/{session_id}",
- "logged_in": logged_in,
- }
- )
-
-
-@router.get("/api/content/sessio/{session_id}")
-def contingut(
- request: Request,
- session_id: int,
- logged_in: auth.LoggedIn,
-):
- return sessions.sessio(request, session_id, logged_in)
-
-
-@router.put("/api/sessio/{session_id}/live")
-def set_live(request: Request, session_id: int, _: auth.RequireLogin):
- return live.start_live_session(request=request, session_id=session_id)
-
-
-@router.delete("/api/sessio/{session_id}/live")
-def stop_live(request: Request, session_id: int, _: auth.RequireLogin):
- return live.stop_live_session(request=request, session_id=session_id)
diff --git a/folkugat_web/api/tema/index.py b/folkugat_web/api/tema/index.py
index 74f5f15..a79ec30 100644
--- a/folkugat_web/api/tema/index.py
+++ b/folkugat_web/api/tema/index.py
@@ -32,7 +32,7 @@ def contingut(request: Request, logged_in: auth.LoggedIn, tema_id: int):
@router.delete("/api/tema/{tema_id}")
-def delete_tema(request: Request, _: auth.RequireLogin, tema_id: int):
+def delete_tema(_: auth.RequireLogin, tema_id: int):
temes_w.delete_tema(tema_id=tema_id)
return HTMLResponse(headers={
'HX-Redirect': '/temes'
@@ -40,7 +40,7 @@ def delete_tema(request: Request, _: auth.RequireLogin, tema_id: int):
@router.post("/api/tema")
-def create_tema(request: Request, _: auth.RequireLogin, title: Annotated[str, Form()] = ""):
+def create_tema(_: auth.RequireLogin, title: Annotated[str, Form()] = ""):
new_tema = temes_w.create_tema(title=title)
return HTMLResponse(headers={
'HX-Redirect': f'/tema/{new_tema.id}'
diff --git a/folkugat_web/api/temes/index.py b/folkugat_web/api/temes/index.py
index ceb63d8..cd5183e 100644
--- a/folkugat_web/api/temes/index.py
+++ b/folkugat_web/api/temes/index.py
@@ -36,5 +36,5 @@ def content(
@router.get("/api/temes/busca")
-def busca(request: Request, query: str, logged_in: auth.LoggedIn):
- return temes.temes_busca(request, query, logged_in)
+def busca(request: Request, query: str, logged_in: auth.LoggedIn, limit: int = 10, offset: int = 0):
+ return temes.temes_busca(request, query=query, limit=limit, offset=offset, logged_in=logged_in)
diff --git a/folkugat_web/assets/static/css/main.css b/folkugat_web/assets/static/css/main.css
index 462f760..4ed7a43 100644
--- a/folkugat_web/assets/static/css/main.css
+++ b/folkugat_web/assets/static/css/main.css
@@ -606,11 +606,20 @@ video {
margin: 1.5rem;
}
+.m-8 {
+ margin: 2rem;
+}
+
.mx-1 {
margin-left: 0.25rem;
margin-right: 0.25rem;
}
+.mx-12 {
+ margin-left: 3rem;
+ margin-right: 3rem;
+}
+
.mx-2 {
margin-left: 0.5rem;
margin-right: 0.5rem;
@@ -661,6 +670,14 @@ video {
margin-top: 0.75rem;
}
+.mt-4 {
+ margin-top: 1rem;
+}
+
+.mt-8 {
+ margin-top: 2rem;
+}
+
.inline-block {
display: inline-block;
}
@@ -936,14 +953,14 @@ video {
padding-bottom: 0.5rem;
}
-.pl-10 {
- padding-left: 2.5rem;
-}
-
.pl-5 {
padding-left: 1.25rem;
}
+.pt-4 {
+ padding-top: 1rem;
+}
+
.text-left {
text-align: left;
}
@@ -994,6 +1011,11 @@ video {
color: rgb(178 124 9 / var(--tw-text-opacity, 1));
}
+.text-brown {
+ --tw-text-opacity: 1;
+ color: rgb(62 56 52 / var(--tw-text-opacity, 1));
+}
+
.text-white {
--tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity, 1));
diff --git a/folkugat_web/assets/templates/fragments/header.html b/folkugat_web/assets/templates/fragments/header.html
index 0d2b7ea..68bb5b9 100644
--- a/folkugat_web/assets/templates/fragments/header.html
+++ b/folkugat_web/assets/templates/fragments/header.html
@@ -1,5 +1,8 @@
-
 }})
+
{{ page_title }}
Sessions de folk a Sant Cugat
diff --git a/folkugat_web/assets/templates/fragments/marquee.html b/folkugat_web/assets/templates/fragments/marquee.html
index 50f953b..d0886d9 100644
--- a/folkugat_web/assets/templates/fragments/marquee.html
+++ b/folkugat_web/assets/templates/fragments/marquee.html
@@ -1,6 +1,9 @@
-{% if session %}
-{% endif %}
diff --git a/folkugat_web/assets/templates/fragments/sessio/live/pagina.html b/folkugat_web/assets/templates/fragments/sessio/live/pagina.html
new file mode 100644
index 0000000..474b6b1
--- /dev/null
+++ b/folkugat_web/assets/templates/fragments/sessio/live/pagina.html
@@ -0,0 +1,2 @@
+{% include "fragments/menu.html" %}
+{% include "fragments/sessio/live/set_page.html" %}
diff --git a/folkugat_web/assets/templates/fragments/sessio/live/set_page.html b/folkugat_web/assets/templates/fragments/sessio/live/set_page.html
new file mode 100644
index 0000000..a8d7db5
--- /dev/null
+++ b/folkugat_web/assets/templates/fragments/sessio/live/set_page.html
@@ -0,0 +1,5 @@
+
+ {% include "fragments/sessio/set/set_page.html" %}
+
"
diff --git a/folkugat_web/assets/templates/fragments/sessions/live/start.html b/folkugat_web/assets/templates/fragments/sessio/live/start.html
similarity index 84%
rename from folkugat_web/assets/templates/fragments/sessions/live/start.html
rename to folkugat_web/assets/templates/fragments/sessio/live/start.html
index 7fdb560..bebee97 100644
--- a/folkugat_web/assets/templates/fragments/sessions/live/start.html
+++ b/folkugat_web/assets/templates/fragments/sessio/live/start.html
@@ -1,5 +1,5 @@