feat: autolink URLs in list items, link picker, and inline edit

- Add autolink Jinja2 filter to detect URLs and make them clickable
- Add link picker dropdown to insert existing link URLs into list item content
- Add inline edit with link picker on each list item row
- Apply autolink filter on list detail and focus available list items

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-03 17:58:21 +00:00
parent 7a2c6d3f2a
commit 97027f2de4
6 changed files with 199 additions and 8 deletions

View File

@@ -11,9 +11,11 @@ from datetime import date, datetime, timezone
from core.database import get_db
from core.base_repository import BaseRepository
from core.sidebar import get_sidebar_data
from core.template_filters import autolink
router = APIRouter(prefix="/focus", tags=["focus"])
templates = Jinja2Templates(directory="templates")
templates.env.filters["autolink"] = autolink
@router.get("/")

View File

@@ -11,9 +11,11 @@ from datetime import datetime, timezone
from core.database import get_db
from core.base_repository import BaseRepository
from core.sidebar import get_sidebar_data
from core.template_filters import autolink
router = APIRouter(prefix="/lists", tags=["lists"])
templates = Jinja2Templates(directory="templates")
templates.env.filters["autolink"] = autolink
@router.get("/")
@@ -187,11 +189,19 @@ async def list_detail(list_id: str, request: Request, db: AsyncSession = Depends
"""))
all_contacts = [dict(r._mapping) for r in result]
# All links for insert-into-content picker
result = await db.execute(text("""
SELECT id, label, url FROM links
WHERE is_deleted = false ORDER BY label
"""))
all_links = [dict(r._mapping) for r in result]
return templates.TemplateResponse("list_detail.html", {
"request": request, "sidebar": sidebar, "item": item,
"domain": domain, "project": project,
"list_items": top_items, "child_map": child_map,
"contacts": contacts, "all_contacts": all_contacts,
"all_links": all_links,
"page_title": item["name"], "active_nav": "lists",
})