Afegir metadades per quan es comparteixen enllaços
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
.direnv
|
||||
|
||||
**/**.pyc
|
||||
|
||||
certs
|
||||
|
||||
@@ -62,6 +62,8 @@
|
||||
sqlite
|
||||
lazysql
|
||||
opencode
|
||||
# Local https
|
||||
mkcert
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
|
||||
@@ -13,6 +13,7 @@ def index(request: Request, logged_in: auth.LoggedIn):
|
||||
{
|
||||
"request": request,
|
||||
"page_title": "Folkugat",
|
||||
"page_description": "Sessions de folk a Sant Cugat",
|
||||
"content": "/api/content/sessions",
|
||||
"logged_in": logged_in,
|
||||
"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.fragments import set_page
|
||||
from folkugat_web.model import playlists
|
||||
from folkugat_web.services import auth
|
||||
from folkugat_web.services import playlists as playlists_service
|
||||
from folkugat_web.templates import templates
|
||||
|
||||
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}")
|
||||
def page(
|
||||
request: Request,
|
||||
@@ -14,11 +24,16 @@ def page(
|
||||
playlist_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(
|
||||
"index.html",
|
||||
{
|
||||
"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}",
|
||||
"logged_in": logged_in,
|
||||
}
|
||||
|
||||
@@ -1,27 +1,47 @@
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi import Form, Request
|
||||
from fastapi import HTTPException, Request
|
||||
from folkugat_web.api.router import get_router
|
||||
from folkugat_web.fragments import live
|
||||
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.temes import write as temes_service
|
||||
from folkugat_web.services import sessions as sessions_service
|
||||
from folkugat_web.templates import templates
|
||||
|
||||
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}")
|
||||
def page(
|
||||
request: Request,
|
||||
logged_in: auth.LoggedIn,
|
||||
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(
|
||||
"index.html",
|
||||
{
|
||||
"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}",
|
||||
"logged_in": logged_in,
|
||||
}
|
||||
|
||||
@@ -23,11 +23,17 @@ router = get_router()
|
||||
|
||||
@router.get("/tema/{tema_id}")
|
||||
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(
|
||||
"index.html",
|
||||
{
|
||||
"request": request,
|
||||
"page_title": "Folkugat",
|
||||
"page_title": "Folkugat - Tema",
|
||||
"page_description": tema.title,
|
||||
"page_card": "",
|
||||
"content": f"/api/tema/{tema_id}",
|
||||
"logged_in": logged_in,
|
||||
}
|
||||
|
||||
@@ -29,11 +29,16 @@ def page(
|
||||
order_params=order_params,
|
||||
)
|
||||
content_url = f"/api/content/temes?{temes_params}"
|
||||
if query:
|
||||
additional_description = f" - Resultats per a '{query}'"
|
||||
else:
|
||||
additional_description = ""
|
||||
return templates.TemplateResponse(
|
||||
"index.html",
|
||||
{
|
||||
"request": request,
|
||||
"page_title": "Folkugat",
|
||||
"page_title": "Folkugat - Temes",
|
||||
"page_description": f"Buscador de temes{additional_description}",
|
||||
"content": content_url,
|
||||
"logged_in": logged_in,
|
||||
"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">
|
||||
<a href="/">
|
||||
<img src="{{ url_for(request, 'static', path='img/folkugat.svg') }}"
|
||||
class="{% if animate %} opacity-0 animate-fade-in-one {% endif %} m-3"
|
||||
width="100"
|
||||
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>
|
||||
</div>
|
||||
|
||||
@@ -4,6 +4,16 @@
|
||||
<meta charset="utf-8">
|
||||
<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>
|
||||
<meta name="description" content="{{ page_description }}"/>
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
from fastapi import HTTPException, Request
|
||||
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.templates import templates
|
||||
|
||||
|
||||
Reference in New Issue
Block a user