Afegir metadades per quan es comparteixen enllaços
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,5 @@
|
|||||||
.direnv
|
.direnv
|
||||||
|
|
||||||
**/**.pyc
|
**/**.pyc
|
||||||
|
|
||||||
|
certs
|
||||||
|
|||||||
@@ -62,6 +62,8 @@
|
|||||||
sqlite
|
sqlite
|
||||||
lazysql
|
lazysql
|
||||||
opencode
|
opencode
|
||||||
|
# Local https
|
||||||
|
mkcert
|
||||||
];
|
];
|
||||||
|
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ def index(request: Request, logged_in: auth.LoggedIn):
|
|||||||
{
|
{
|
||||||
"request": request,
|
"request": request,
|
||||||
"page_title": "Folkugat",
|
"page_title": "Folkugat",
|
||||||
|
"page_description": "Sessions de folk a Sant Cugat",
|
||||||
"content": "/api/content/sessions",
|
"content": "/api/content/sessions",
|
||||||
"logged_in": logged_in,
|
"logged_in": logged_in,
|
||||||
"animate": True,
|
"animate": True,
|
||||||
|
|||||||
@@ -1,12 +1,22 @@
|
|||||||
from fastapi import Request
|
from fastapi import HTTPException, Request
|
||||||
from folkugat_web.api.router import get_router
|
from folkugat_web.api.router import get_router
|
||||||
from folkugat_web.fragments import set_page
|
from folkugat_web.fragments import set_page
|
||||||
|
from folkugat_web.model import playlists
|
||||||
from folkugat_web.services import auth
|
from folkugat_web.services import auth
|
||||||
|
from folkugat_web.services import playlists as playlists_service
|
||||||
from folkugat_web.templates import templates
|
from folkugat_web.templates import templates
|
||||||
|
|
||||||
router = get_router()
|
router = get_router()
|
||||||
|
|
||||||
|
|
||||||
|
def set_description(set_: playlists.Set) -> str:
|
||||||
|
tema_names = [tis.tema.title if tis.tema else "Desconegut" for tis in set_.temes]
|
||||||
|
return " i ".join(filter(bool, [
|
||||||
|
", ".join(tema_names[:-1]),
|
||||||
|
tema_names[-1]
|
||||||
|
]))
|
||||||
|
|
||||||
|
|
||||||
@router.get("/playlist/{playlist_id}/set/{set_id}")
|
@router.get("/playlist/{playlist_id}/set/{set_id}")
|
||||||
def page(
|
def page(
|
||||||
request: Request,
|
request: Request,
|
||||||
@@ -14,11 +24,16 @@ def page(
|
|||||||
playlist_id: int,
|
playlist_id: int,
|
||||||
set_id: int,
|
set_id: int,
|
||||||
):
|
):
|
||||||
|
set_ = playlists_service.get_set(playlist_id=playlist_id, set_id=set_id)
|
||||||
|
if not set_:
|
||||||
|
raise HTTPException(status_code=404, detail="Set not found")
|
||||||
|
set_ = playlists_service.add_temes_to_set(set_)
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
"index.html",
|
"index.html",
|
||||||
{
|
{
|
||||||
"request": request,
|
"request": request,
|
||||||
"page_title": "Folkugat",
|
"page_title": "Folkugat - Set",
|
||||||
|
"page_description": set_description(set_=set_),
|
||||||
"content": f"/api/content/playlist/{playlist_id}/set/{set_id}",
|
"content": f"/api/content/playlist/{playlist_id}/set/{set_id}",
|
||||||
"logged_in": logged_in,
|
"logged_in": logged_in,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,27 +1,47 @@
|
|||||||
from typing import Annotated
|
from fastapi import HTTPException, Request
|
||||||
|
|
||||||
from fastapi import Form, Request
|
|
||||||
from folkugat_web.api.router import get_router
|
from folkugat_web.api.router import get_router
|
||||||
from folkugat_web.fragments import live
|
from folkugat_web.fragments import live
|
||||||
from folkugat_web.fragments.sessio import page as sessio
|
from folkugat_web.fragments.sessio import page as sessio
|
||||||
|
from folkugat_web.model.sessions import Session
|
||||||
from folkugat_web.services import auth
|
from folkugat_web.services import auth
|
||||||
from folkugat_web.services.temes import write as temes_service
|
from folkugat_web.services import sessions as sessions_service
|
||||||
from folkugat_web.templates import templates
|
from folkugat_web.templates import templates
|
||||||
|
|
||||||
router = get_router()
|
router = get_router()
|
||||||
|
|
||||||
|
|
||||||
|
def session_description(session: Session) -> str:
|
||||||
|
date_names = sessions_service.get_date_names(session.date)
|
||||||
|
date_str = f"{date_names.day_name} {date_names.day} {date_names.month_name} de {date_names.year}"
|
||||||
|
location_str = f"A {session.venue.name}" if session.venue else ""
|
||||||
|
time_str = f"de {session.start_time.strftime('%H:%M')} a {session.end_time.strftime('%H:%M')}"
|
||||||
|
location_time_str = " ".join([location_str, time_str])
|
||||||
|
if location_time_str:
|
||||||
|
location_time_str = location_time_str[0].upper() + location_time_str[1:]
|
||||||
|
notes_str = session.notes or ""
|
||||||
|
return "\n".join(filter(bool, [
|
||||||
|
date_str,
|
||||||
|
location_time_str,
|
||||||
|
notes_str,
|
||||||
|
]))
|
||||||
|
|
||||||
|
|
||||||
@router.get("/sessio/{session_id}")
|
@router.get("/sessio/{session_id}")
|
||||||
def page(
|
def page(
|
||||||
request: Request,
|
request: Request,
|
||||||
logged_in: auth.LoggedIn,
|
logged_in: auth.LoggedIn,
|
||||||
session_id: int,
|
session_id: int,
|
||||||
):
|
):
|
||||||
|
session = sessions_service.get_session(session_id=session_id)
|
||||||
|
if not session:
|
||||||
|
raise HTTPException(status_code=404, detail="Could not find session")
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
"index.html",
|
"index.html",
|
||||||
{
|
{
|
||||||
"request": request,
|
"request": request,
|
||||||
"page_title": "Folkugat",
|
"page_title": "Folkugat - Sessió",
|
||||||
|
"page_description": session_description(session),
|
||||||
|
"page_card": session.cartell_url,
|
||||||
"content": f"/api/content/sessio/{session_id}",
|
"content": f"/api/content/sessio/{session_id}",
|
||||||
"logged_in": logged_in,
|
"logged_in": logged_in,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,11 +23,17 @@ router = get_router()
|
|||||||
|
|
||||||
@router.get("/tema/{tema_id}")
|
@router.get("/tema/{tema_id}")
|
||||||
def page(request: Request, logged_in: auth.LoggedIn, tema_id: int):
|
def page(request: Request, logged_in: auth.LoggedIn, tema_id: int):
|
||||||
|
tema = temes_q.get_tema_by_id(tema_id)
|
||||||
|
if not tema:
|
||||||
|
raise HTTPException(status_code=404, detail="Could not find tune")
|
||||||
|
tema = scores_service.add_scores_to_tema(tema)
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
"index.html",
|
"index.html",
|
||||||
{
|
{
|
||||||
"request": request,
|
"request": request,
|
||||||
"page_title": "Folkugat",
|
"page_title": "Folkugat - Tema",
|
||||||
|
"page_description": tema.title,
|
||||||
|
"page_card": "",
|
||||||
"content": f"/api/tema/{tema_id}",
|
"content": f"/api/tema/{tema_id}",
|
||||||
"logged_in": logged_in,
|
"logged_in": logged_in,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,11 +29,16 @@ def page(
|
|||||||
order_params=order_params,
|
order_params=order_params,
|
||||||
)
|
)
|
||||||
content_url = f"/api/content/temes?{temes_params}"
|
content_url = f"/api/content/temes?{temes_params}"
|
||||||
|
if query:
|
||||||
|
additional_description = f" - Resultats per a '{query}'"
|
||||||
|
else:
|
||||||
|
additional_description = ""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
"index.html",
|
"index.html",
|
||||||
{
|
{
|
||||||
"request": request,
|
"request": request,
|
||||||
"page_title": "Folkugat",
|
"page_title": "Folkugat - Temes",
|
||||||
|
"page_description": f"Buscador de temes{additional_description}",
|
||||||
"content": content_url,
|
"content": content_url,
|
||||||
"logged_in": logged_in,
|
"logged_in": logged_in,
|
||||||
"animate": False,
|
"animate": False,
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
BIN
folkugat_web/assets/static/img/folkugat_card.jpg
Normal file
BIN
folkugat_web/assets/static/img/folkugat_card.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 218 KiB |
@@ -1,8 +1,10 @@
|
|||||||
<div class="h-4/5 min-h-[400px] flex flex-col items-center justify-center">
|
<div class="h-4/5 min-h-[400px] flex flex-col items-center justify-center">
|
||||||
|
<a href="/">
|
||||||
<img src="{{ url_for(request, 'static', path='img/folkugat.svg') }}"
|
<img src="{{ url_for(request, 'static', path='img/folkugat.svg') }}"
|
||||||
class="{% if animate %} opacity-0 animate-fade-in-one {% endif %} m-3"
|
class="{% if animate %} opacity-0 animate-fade-in-one {% endif %} m-3"
|
||||||
width="100"
|
width="100"
|
||||||
alt="Folkugat"/>
|
alt="Folkugat"/>
|
||||||
<h1 class="text-3xl sm:text-8xl text-beige m-3 {% if animate %} opacity-0 animate-fade-in-one {% endif %}">{{ page_title }}</h1>
|
</a>
|
||||||
|
<h1 class="text-3xl sm:text-8xl text-beige m-3 {% if animate %} opacity-0 animate-fade-in-one {% endif %}">Folkugat</h1>
|
||||||
<h2 class="text-center sm:text-3xl m-6 {% if animate %} opacity-0 animate-fade-in-two {% endif %}">Sessions de folk a Sant Cugat</h2>
|
<h2 class="text-center sm:text-3xl m-6 {% if animate %} opacity-0 animate-fade-in-two {% endif %}">Sessions de folk a Sant Cugat</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,16 @@
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/>
|
||||||
|
|
||||||
|
<!-- Essential Open Graph (Facebook, WhatsApp, etc.) -->
|
||||||
|
<meta property="og:title" content="{{ page_title }}">
|
||||||
|
<meta property="og:description" content="{{ page_description }}">
|
||||||
|
<meta property="og:image" content="{{ page_card or url_for(request, 'static', path='img/folkugat_card.jpg') }}">
|
||||||
|
|
||||||
|
<!-- Twitter Card (optional but recommended) -->
|
||||||
|
<meta name="twitter:title" content="{{ page_title }}">
|
||||||
|
<meta name="twitter:description" content="{{ page_description }}">
|
||||||
|
<meta name="twitter:image" content="{{ page_card or url_for(request, 'static', path='img/folkugat_card.jpg') }}">
|
||||||
|
|
||||||
<title>{{ page_title }}</title>
|
<title>{{ page_title }}</title>
|
||||||
<meta name="description" content="{{ page_description }}"/>
|
<meta name="description" content="{{ page_description }}"/>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
from fastapi import HTTPException, Request
|
from fastapi import HTTPException, Request
|
||||||
from folkugat_web.model.pagines import Pages
|
from folkugat_web.model.pagines import Pages
|
||||||
from folkugat_web.services import playlists as playlists_service
|
|
||||||
from folkugat_web.services import sessions as sessions_service
|
from folkugat_web.services import sessions as sessions_service
|
||||||
from folkugat_web.templates import templates
|
from folkugat_web.templates import templates
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user