docs: add block/mute user relations, emoji-sync CLI, and uid indexes

- Add `/block`, `/mute` endpoints with block/unblock and mute/unmute functionality in `routers/relations.py`, hiding blocked users' content everywhere except their own profile while muting only suppresses notifications
- Introduce `devplace emoji-sync` CLI command to regenerate `static/js/emoji-shortcodes.js` from the emoji library, documented in `CLAUDE.md` and wired in `cli.py`
- Create `get_blocked_uids()` database helper and apply it in `content.py` `load_detail()` to filter blocked users' posts from detail views
- Implement `_uid_index()` and `_drop_index()` helpers in `database.py` for unique uid indexes across tables, with `user_relations` added to `SOFT_DELETE_TABLES`
- Document new routes in `AGENTS.md` and `README.md`, including emoji shortcodes rendering behavior distinct from the emoji picker
This commit is contained in:
2026-06-19 08:06:09 +00:00
parent f3a4667fce
commit 741d7aade6
136 changed files with 3025 additions and 564 deletions
+3 -4
View File
@@ -3,7 +3,7 @@
<input type="hidden" name="target_uid" value="{{ _comment_target_uid }}">
<input type="hidden" name="target_type" value="{{ _comment_target_type }}">
{% set _user = user %}{% set _size = 32 %}{% set _size_class = "sm" %}{% include "_avatar_link.html" %}
<textarea name="content" placeholder="Your opinion goes here..." required maxlength="1000" class="emoji-picker-target" data-mention></textarea>
<textarea name="content" placeholder="Your opinion goes here..." required aria-required="true" aria-label="Comment" maxlength="1000" class="emoji-picker-target" data-mention></textarea>
<div class="comment-form-actions">
<dp-upload multiple
max-size="{{ max_upload_size_mb() }}"
@@ -14,10 +14,9 @@
</form>
{% else %}
<form class="comment-form comment-form-guest" onsubmit="return false">
<textarea name="content" placeholder="Your opinion goes here..." disabled aria-disabled="true"></textarea>
<textarea name="content" placeholder="Your opinion goes here..." disabled aria-disabled="true" aria-label="Comment"></textarea>
<div class="comment-form-actions">
<button type="button" class="comment-form-submit" disabled aria-disabled="true" title="Log in to participate"><span class="icon">&#x1F4E4;</span><span class="label"> Post</span></button>
{{ login_hint(user) }}
<button type="button" class="comment-form-submit" disabled aria-disabled="true"><span class="icon">&#x1F4E4;</span><span class="label"> Post</span></button>
</div>
</form>
{% endif %}