Tune editor
This commit is contained in:
@@ -41,3 +41,48 @@ def link_editor(
|
||||
tema_id=tema_id,
|
||||
link_id=link_id,
|
||||
)
|
||||
|
||||
|
||||
@router.get("/api/tema/{tema_id}/editor/link/{link_id}/url")
|
||||
def link_editor_url_input(
|
||||
request: Request,
|
||||
logged_in: auth.RequireLogin,
|
||||
tema_id: int,
|
||||
link_id: int,
|
||||
):
|
||||
return tema.link_editor_url(
|
||||
request=request,
|
||||
logged_in=logged_in,
|
||||
tema_id=tema_id,
|
||||
link_id=link_id,
|
||||
)
|
||||
|
||||
|
||||
@router.get("/api/tema/{tema_id}/editor/link/{link_id}/file")
|
||||
def link_editor_file_input(
|
||||
request: Request,
|
||||
logged_in: auth.RequireLogin,
|
||||
tema_id: int,
|
||||
link_id: int,
|
||||
):
|
||||
return tema.link_editor_file(
|
||||
request=request,
|
||||
logged_in=logged_in,
|
||||
tema_id=tema_id,
|
||||
link_id=link_id,
|
||||
)
|
||||
|
||||
|
||||
@router.get("/api/tema/{tema_id}/editor/property/{property_id}")
|
||||
def property_editor(
|
||||
request: Request,
|
||||
logged_in: auth.RequireLogin,
|
||||
tema_id: int,
|
||||
property_id: int,
|
||||
):
|
||||
return tema.property_editor(
|
||||
request=request,
|
||||
logged_in=logged_in,
|
||||
tema_id=tema_id,
|
||||
property_id=property_id,
|
||||
)
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
from typing import Annotated
|
||||
from typing import Annotated, Optional
|
||||
|
||||
from fastapi import Request
|
||||
from fastapi.params import Form, Param
|
||||
from fastapi import Request, UploadFile
|
||||
from fastapi.params import File, Form, Param
|
||||
from fastapi.responses import HTMLResponse
|
||||
from folkugat_web.api import router
|
||||
from folkugat_web.config import db
|
||||
from folkugat_web.fragments import tema, temes
|
||||
from folkugat_web.model import temes as model
|
||||
from folkugat_web.services import auth
|
||||
from folkugat_web.services import auth, files
|
||||
from folkugat_web.services.temes import write as temes_w
|
||||
from folkugat_web.services.temes.links import guess_link_type
|
||||
from folkugat_web.templates import templates
|
||||
@@ -30,6 +31,22 @@ def contingut(request: Request, logged_in: auth.LoggedIn, tema_id: int):
|
||||
return temes.tema(request, tema_id, logged_in)
|
||||
|
||||
|
||||
@router.delete("/api/tema/{tema_id}")
|
||||
def delete_tema(request: Request, _: auth.RequireLogin, tema_id: int):
|
||||
temes_w.delete_tema(tema_id=tema_id)
|
||||
return HTMLResponse(headers={
|
||||
'HX-Redirect': '/temes'
|
||||
})
|
||||
|
||||
|
||||
@router.post("/api/tema")
|
||||
def create_tema(request: Request, _: auth.RequireLogin, title: Annotated[str, Form()] = ""):
|
||||
new_tema = temes_w.create_tema(title=title)
|
||||
return HTMLResponse(headers={
|
||||
'HX-Redirect': f'/tema/{new_tema.id}'
|
||||
})
|
||||
|
||||
|
||||
@router.get("/api/tema/{tema_id}/title")
|
||||
def title(request: Request, logged_in: auth.LoggedIn, tema_id: int):
|
||||
return tema.title(request=request, tema_id=tema_id, logged_in=logged_in)
|
||||
@@ -98,24 +115,28 @@ def link(request: Request, logged_in: auth.LoggedIn, tema_id: int, link_id: int)
|
||||
|
||||
|
||||
@router.put("/api/tema/{tema_id}/link/{link_id}")
|
||||
def set_link(
|
||||
async def set_link(
|
||||
request: Request,
|
||||
logged_in: auth.RequireLogin,
|
||||
tema_id: int,
|
||||
link_id: int,
|
||||
content_type: Annotated[model.ContentType, Form()],
|
||||
url: Annotated[str, Form()] = "",
|
||||
title: Annotated[str, Form()] = "",
|
||||
title: Annotated[Optional[str], Form()] = None,
|
||||
url: Annotated[Optional[str], Form()] = None,
|
||||
upload_file: Annotated[Optional[UploadFile], File()] = None,
|
||||
):
|
||||
link_type = guess_link_type(url)
|
||||
if upload_file:
|
||||
url = await files.store_file(tema_id=tema_id, upload_file=upload_file)
|
||||
|
||||
link_type = guess_link_type(url or '')
|
||||
new_link = model.Link(
|
||||
id=link_id,
|
||||
content_type=content_type,
|
||||
link_type=link_type,
|
||||
url=url,
|
||||
title=title,
|
||||
url=url or '',
|
||||
title=title or '',
|
||||
)
|
||||
temes_w.update_link(tema_id=tema_id, link_id=link_id, link=new_link)
|
||||
new_tema = temes_w.update_link(tema_id=tema_id, link_id=link_id, link=new_link)
|
||||
return tema.link(request=request, logged_in=logged_in, tema_id=tema_id, link_id=link_id)
|
||||
|
||||
|
||||
@@ -144,7 +165,11 @@ def delete_link(
|
||||
link_id: int,
|
||||
):
|
||||
temes_w.delete_link(tema_id=tema_id, link_id=link_id)
|
||||
return HTMLResponse()
|
||||
return HTMLResponse(
|
||||
headers={
|
||||
"HX-Trigger": f"reload-tema-{tema_id}-score"
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@router.get("/api/tema/{tema_id}/link/{link_id}/icon")
|
||||
@@ -164,3 +189,79 @@ def link_icon(
|
||||
url=url,
|
||||
content_type=content_type,
|
||||
)
|
||||
|
||||
|
||||
@router.get("/api/tema/{tema_id}/score")
|
||||
def get_score(
|
||||
request: Request,
|
||||
logged_in: auth.LoggedIn,
|
||||
tema_id: int,
|
||||
):
|
||||
return tema.score(
|
||||
request=request,
|
||||
logged_in=logged_in,
|
||||
tema_id=tema_id,
|
||||
)
|
||||
|
||||
|
||||
@router.get("/api/tema/{tema_id}/property/{property_id}")
|
||||
def property_(request: Request, logged_in: auth.LoggedIn, tema_id: int, property_id: int):
|
||||
return tema.property_(request=request, logged_in=logged_in, tema_id=tema_id, property_id=property_id)
|
||||
|
||||
|
||||
@router.put("/api/tema/{tema_id}/property/{property_id}")
|
||||
def set_property(
|
||||
request: Request,
|
||||
logged_in: auth.RequireLogin,
|
||||
tema_id: int,
|
||||
property_id: int,
|
||||
field: Annotated[model.PropertyField, Form()],
|
||||
value: Annotated[str, Form()],
|
||||
):
|
||||
new_property = model.Property(id=property_id, field=field, value=value.strip())
|
||||
temes_w.update_property(tema_id=tema_id, property_id=property_id, prop=new_property)
|
||||
return tema.property_(request=request, logged_in=logged_in, tema_id=tema_id, property_id=property_id)
|
||||
|
||||
|
||||
@router.post("/api/tema/{tema_id}/property")
|
||||
def add_property(
|
||||
request: Request,
|
||||
logged_in: auth.RequireLogin,
|
||||
tema_id: int,
|
||||
):
|
||||
new_tema = temes_w.add_property(tema_id=tema_id)
|
||||
property_id = new_tema.properties[-1].id
|
||||
if property_id is None:
|
||||
raise RuntimeError("Invalid property_id on newly created property!")
|
||||
return tema.property_editor(
|
||||
request=request,
|
||||
logged_in=logged_in,
|
||||
tema_id=tema_id,
|
||||
property_id=property_id,
|
||||
)
|
||||
|
||||
|
||||
@router.delete("/api/tema/{tema_id}/property/{property_id}")
|
||||
def delete_property(_: auth.RequireLogin, tema_id: int, property_id: int):
|
||||
temes_w.delete_property(tema_id=tema_id, property_id=property_id)
|
||||
return HTMLResponse()
|
||||
|
||||
|
||||
@router.put("/api/tema/{tema_id}/visible")
|
||||
def set_visible(request: Request, logged_in: auth.RequireLogin, tema_id: int):
|
||||
new_tema = temes_w.set_visibility(tema_id=tema_id, hidden=False)
|
||||
return tema.visibility(
|
||||
request=request,
|
||||
logged_in=logged_in,
|
||||
tema=new_tema,
|
||||
)
|
||||
|
||||
|
||||
@router.put("/api/tema/{tema_id}/invisible")
|
||||
def set_invisible(request: Request, logged_in: auth.RequireLogin, tema_id: int):
|
||||
new_tema = temes_w.set_visibility(tema_id=tema_id, hidden=True)
|
||||
return tema.visibility(
|
||||
request=request,
|
||||
logged_in=logged_in,
|
||||
tema=new_tema,
|
||||
)
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
from typing import Annotated, Optional
|
||||
|
||||
from fastapi import Request
|
||||
from fastapi.params import Param
|
||||
from folkugat_web.api import router
|
||||
from folkugat_web.fragments import temes
|
||||
from folkugat_web.services import auth
|
||||
@@ -6,13 +9,17 @@ from folkugat_web.templates import templates
|
||||
|
||||
|
||||
@router.get("/temes")
|
||||
def page(request: Request, logged_in: auth.LoggedIn):
|
||||
def page(
|
||||
request: Request,
|
||||
logged_in: auth.LoggedIn,
|
||||
query: Annotated[str, Param()] = "",
|
||||
):
|
||||
return templates.TemplateResponse(
|
||||
"index.html",
|
||||
{
|
||||
"request": request,
|
||||
"page_title": "Folkugat",
|
||||
"content": "/api/content/temes",
|
||||
"content": f"/api/content/temes?query={query}",
|
||||
"logged_in": logged_in,
|
||||
"animate": False,
|
||||
}
|
||||
@@ -20,8 +27,12 @@ def page(request: Request, logged_in: auth.LoggedIn):
|
||||
|
||||
|
||||
@router.get("/api/content/temes")
|
||||
def content(request: Request, logged_in: auth.LoggedIn):
|
||||
return temes.temes_pagina(request, logged_in)
|
||||
def content(
|
||||
request: Request,
|
||||
logged_in: auth.LoggedIn,
|
||||
query: Annotated[str, Param()] = "",
|
||||
):
|
||||
return temes.temes_pagina(request, logged_in, query)
|
||||
|
||||
|
||||
@router.get("/api/temes/busca")
|
||||
|
||||
Reference in New Issue
Block a user