palette tooltip: contextual description per lock state; earned date below Unlocked in green — TDD
- _palettes_for_user: shoptalk→description; "available by default" / "explore to unlock" / "recognized via {Title}"; unlocked_date key carries earned_at ISO for Note-unlocked
- template: data-shoptalk→data-description; data-unlocked-date now holds ISO datetime (was literal "Default")
- dashboard.js: lockText drops "— Default"; dateLine renders "Apr 22, 2026 · 3:05 AM" after Unlocked line
- _palette-picker.scss: tt-shoptalk→tt-description in display:block list; tt-date added
- _tooltips.scss: .tt-date mirrors .tt-expiry w. --priGn colour
Code architected by Disco DeDisco <discodedisco@outlook.com>
Git commit message Co-Authored-By:
Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -51,7 +51,10 @@ PALETTES = _PALETTE_DEFS
|
||||
|
||||
def _palettes_for_user(user):
|
||||
if not (user and user.is_authenticated):
|
||||
return [dict(p, shoptalk="Placeholder") for p in _PALETTE_DEFS]
|
||||
return [
|
||||
dict(p, description="available by default" if not p["locked"] else "explore to unlock")
|
||||
for p in _PALETTE_DEFS
|
||||
]
|
||||
granted = {
|
||||
r.palette: r
|
||||
for r in Note.objects.filter(user=user, palette__isnull=False).exclude(palette="")
|
||||
@@ -63,9 +66,12 @@ def _palettes_for_user(user):
|
||||
if r and p["locked"]:
|
||||
entry["locked"] = False
|
||||
title = _NOTE_TITLES.get(r.slug, r.slug.capitalize())
|
||||
entry["shoptalk"] = f"{title} · {r.earned_at.strftime('%b %d, %Y').replace(' 0', ' ')}"
|
||||
entry["description"] = f"recognized via {title}"
|
||||
entry["unlocked_date"] = r.earned_at.isoformat()
|
||||
elif not p["locked"]:
|
||||
entry["description"] = "available by default"
|
||||
else:
|
||||
entry["shoptalk"] = "Placeholder"
|
||||
entry["description"] = "explore to unlock"
|
||||
result.append(entry)
|
||||
return result
|
||||
|
||||
|
||||
Reference in New Issue
Block a user