add badges

This commit is contained in:
2025-12-09 03:33:27 +03:00
parent 1539486456
commit dbf0150a5e
43 changed files with 913 additions and 111 deletions

View File

@@ -138,6 +138,17 @@
</form>
{% endmacro %}
{% macro badge_button(badge) %}
{% set img_url = badge.file_path if badge.file_path else badge.get_image_url() %}
{% if badge.link %}
<a href="{{badge.link}}" rel="noopener noreferrer me" target="_blank">
{% endif %}
<img class="badge-button" src="{{img_url}}" alt="{{badge.label}}" title="{{badge.label}}"></img>
{% if badge.link %}
</a>
{% endif %}
{% endmacro %}
{% macro full_post(
post, render_sig = True, is_latest = False,
editing = False, active_user = None, no_reply = false,
@@ -161,6 +172,11 @@
{% if post['status'] %}
<em class="user-status">{{ post['status'] }}</em>
{% endif %}
<div class="badges-container">
{% for badge_data in (post.badges_json | fromjson) %}
{{ badge_button(badge_data) }}
{% endfor %}
</div>
</div>
</div>
@@ -306,3 +322,40 @@
</div>
</div>
{% endmacro %}
{% macro badge_editor_single(options={}, selected=none, fp_hidden=true, badge=none) %}
{% set defaults = options | selectattr('user_id', 'none') | list | sort(attribute='file_path') %}
{% set uploads = options | selectattr('user_id') | list %}
{% if selected is not none %}
{% set selected_href = (options | selectattr('id', 'equalto', selected) | list)[0].file_path %}
{% else %}
{% set selected_href = defaults[0].file_path %}
{% endif %}
<bitty-7-0 data-connect="{{ '/static/js/bitties/pyrom-bitty.js' | cachebust }} BadgeEditorBadge" data-listeners="click input submit change">
<div class="settings-badge-container" data-receive="deleteBadge">
<div class="settings-badge-select">
<select data-send="badgeUpdatePreview badgeToggleFilePicker" name="badge_choice[]" required>
<optgroup label="Default">
{% for option in defaults %}
<option data-file-path="{{ option.file_path }}" value="{{ option.id }}" {{ "selected" if selected==option.id else "" }}>{{option.file_path | basename_noext}}</option>
{% endfor %}
</optgroup>
<optgroup label="Your uploads">
{% for option in uploads %}
<option data-file-path="{{ option.file_path }}" value="{{ option.id }}" {{ "selected" if selected==option.id else "" }}>{{option.original_filename | basename_noext}}</option>
{% endfor %}
<option value="custom">Upload new...</option>
</optgroup>
</select>
<img class="badge-button" data-receive="badgeUpdatePreview badgeUpdatePreviewCustom" src="{{ selected_href }}"></img>
</div>
<div class="settings-badge-file-picker{{ " hidden" if fp_hidden else ""}}" data-receive="badgeToggleFilePicker">
<button data-send="openBadgeFilePicker" type=button>Browse&hellip;</button>
<input data-receive="openBadgeFilePicker badgeErrorSize badgeErrorDim badgeHideErrors" data-send="badgeUpdatePreviewCustom" type="file" accept="image/*" class="hidden" name="badge_file[]">
</div>
<input type="text" required placeholder="Label" name="badge_label[]" value="{{badge.label}}">
<input type="text" placeholder="(Optional) Link" name="badge_link[]" value="{{badge.link}}">
<button data-send="deleteBadge" type="button" class="critical" title="Delete">X</button>
</div>
</bitty-7-0>
{% endmacro %}