2022-11-16 09:25:50 +00:00
{%- macro plural(value, suffix='s') -%}
{%- if value != 1 -%}
{{suffix}}
{%- endif -%}
{%- endmacro -%}
2022-12-13 21:49:26 +00:00
{%- macro banner(src, href, alt, expand, class) %}
2022-11-15 01:38:50 +00:00
< a href = "{{href|default(src)}}" rel = "nofollow noopener" >
2022-11-16 17:03:14 +00:00
< img onclick = "{{expand|default('expandDesktopImage()')}}" class = "{{class|default('site-banner')}}" alt = "{{alt|default('site banner')}}" src = "{{src|default(live_banner())}}" >
2022-11-15 01:28:43 +00:00
< / a >
2022-11-16 09:25:50 +00:00
{% endmacro -%}
2022-11-15 01:28:43 +00:00
2022-11-21 04:57:20 +00:00
{%- macro live_banner() -%}
2022-12-07 08:59:40 +00:00
{% set path = "files/assets/images/" ~ SITE_NAME %}
2022-12-07 09:03:02 +00:00
{%- if not v and os_path.exists(path ~ "/cached.webp") -%}
2022-11-21 04:57:20 +00:00
{{ 'cached.webp' | asset_siteimg -}}
2022-12-07 09:03:02 +00:00
{% elif os_path.exists(path ~ "/banners") -%}
2022-11-21 04:57:20 +00:00
{{ random_image("banners") -}}
{% else -%}
{{ 'banner.webp' | asset_siteimg -}}
2022-11-15 01:28:43 +00:00
{% endif %}
2022-11-21 04:57:20 +00:00
{%- endmacro -%}
2022-11-15 01:28:43 +00:00
2022-11-21 04:57:20 +00:00
{%- macro random_image(assetdir) -%}
2022-12-07 08:59:40 +00:00
{% set path = "assets/images/" ~ SITE_NAME ~ "/" ~ assetdir -%}
2022-12-07 09:03:02 +00:00
{{- "/" ~ path ~ "/" ~ listdir('files/' ~ path)|random() ~ '?v=45' }}
2022-11-21 04:57:20 +00:00
{%- endmacro -%}
2022-11-19 19:54:07 +00:00
{% macro post_meta(p) %}
{% if p.sub %}
{% if not HOLE_STYLE_FLAIR -%}
< a class = "mr-2" href = '/h/{{p.sub}}' > /h/{{p.sub}}< / a >
{%- else -%}
< a href = '/h/{{p.sub}}' class = "sub-flair" > {{p.sub|capitalize}}< / a >
{%- endif %}
{% endif %}
{% if p.sub and p.author.exiled_from(p.sub) %}
< a > < i class = "fas fa-campfire text-danger" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "User has been exiled from {% if not HOLE_STYLE_FLAIR %}/h/{% endif %}{{p.sub}}" > < / i > < / a >
{% endif %}
{% if p.bannedfor %}
< i class = "fas fa-hammer-crash text-danger" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "User was banned for this post {{p.bannedfor}}" > < / i >
{% endif %}
{% if p.chuddedfor %}
< i class = "fas fa-face-sleeping text-danger" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "User was chudded for this post {{p.chuddedfor}}" > < / i >
{% endif %}
{% for a in p.awards %}
< i class = "{{a.class_list}} px-1" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "{{a.title}} Award given by @{{a.user.username}}" > < / i >
{% endfor %}
{% if v and v.admin_level >= PERMS['USER_SHADOWBAN'] and p.author.shadowbanned %}
2022-12-13 18:50:38 +00:00
< i class = "fas fa-user-times text-admin" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = 'Shadowbanned by @{{p.author.shadowbanner}} for "{{p.author.ban_reason}}"' > < / i >
2022-11-19 19:54:07 +00:00
{% endif %}
{% if p.stickied %}
< i id = 'pinned-{{p.id}}' class = "fas fa-thumbtack fa-rotate--45 pl-1 text-admin" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "Pinned by @{{p.stickied}}" { % if p . stickied_utc % } onmouseover = "pinned_timestamp('pinned-{{p.id}}')" data-timestamp = {{p.stickied_utc}} { % endif % } > < / i >
{% endif %}
{% if p.hole_pinned %}
< i id = 'hole-pinned-{{p.id}}' class = "fas fa-thumbtack fa-rotate--45 pl-1 text-blue" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "Pinned to /h/{{p.sub}} by @{{p.hole_pinned}}" > < / i >
{% endif %}
{% if p.distinguish_level %}< i class = "fas fa-broom text-admin" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "{{SITE_NAME}} Admin, speaking officially" > < / i > {% endif %}
{% if p.is_pinned and request.path != '/' %}< i class = "fas fa-thumbtack fa-rotate--45 pl-1 text-admin" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "Pinned to profile" > < / i > {% endif %}
{% if p.over_18 %}< span class = "badge badge-danger text-small-extra mr-1" > +18< / span > {% endif %}
{% if p.is_bot %} < i class = "fas fa-robot text-info" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "Bot" > < / i > {% endif %}
{% if p.is_blocking and not p.ghost %}< i class = "fas fa-user-minus text-warning" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "You're blocking this user, but you can see this post because you're an admin." > < / i > {% endif %}
{% if p.is_blocked %}< i class = "fas fa-user-minus text-danger" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "This user is blocking you." > < / i > {% endif %}
{% if p.private %}< span class = "badge border-warning border-1 text-small-extra" > Draft< / span > {% endif %}
2022-11-28 04:43:15 +00:00
{% if p.active_flags(v) %}< button type = "button" class = "btn btn-primary" style = "padding:1px 5px; font-size:10px" onclick = "document.getElementById('flaggers-{{p.id}}').classList.toggle('d-none')" > {{p.active_flags(v)}} Report{{plural(p.active_flags(v))}}< / button > {% endif %}
2022-11-19 19:54:07 +00:00
{% if p.ghost %}
< span { % if p . distinguish_level % } class = "mod" { % endif % } > 👻< / span >
{% else %}
{% if FEATURES['PATRON_ICONS'] and p.author.patron %}
< img loading = "lazy" src = "/i/{{SITE_NAME}}/patron_badges/2{{p.author.patron}}.webp?v=1" height = "20" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "{{p.author.patron_tooltip}}" alt = "{{p.author.patron_tooltip}}" >
{% endif %}
{% if FEATURES['HOUSES'] and p.author.house %}
< img loading = "lazy" src = "/i/{{SITE_NAME}}/houses/{{p.author.house}}.webp?v=2000" height = "20" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "House {{p.author.house}}" alt = "House {{p.author.house}}" >
{% endif %}
{% if p.author.verified %}< i class = "fas fa-badge-check align-middle ml-1 {% if p.author.verified=='Glowiefied' %}glow{% endif %}" style = "color:{% if p.author.verifiedcolor %}#{{p.author.verifiedcolor}}{% else %}#1DA1F2{% endif %}" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "{{p.author.verified}}" > < / i >
{% endif %}
< a class = "user-name text-decoration-none" href = "{{p.author.url}}" data-pop-info = '{{p.author.json_popover(v) | tojson}}' onclick = 'popclick(event)' data-bs-placement = "bottom" data-bs-toggle = "popover" data-bs-trigger = "click" data-content-id = "popover" tabindex = "0" style = "color: #{{p.author.name_color}}; font-weight: bold;" >
< div class = "profile-pic-30-wrapper" style = "margin-top:9px" >
< img loading = "lazy" src = "{{p.author.profile_url}}" class = "profile-pic-30 mr-2" >
{% if p.author.hat_active -%}
< img class = "profile-pic-30-hat hat" loading = "lazy" src = "{{p.author.hat_active}}?h=7" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "{{p.author.hat_tooltip(v)}}" >
{%- endif %}
< / div >
< span { % if p . author . patron and not p . distinguish_level % } class = "patron" style = "background-color:#{{p.author.name_color}};" { % elif p . distinguish_level % } class = "mod" { % endif % } > {{p.author_name}}< / span >
< / a >
{% if FEATURES['PRONOUNS'] %}
< span class = "pronouns" style = "color:#{{p.author.titlecolor}};border-color:#{{p.author.titlecolor}}" > {{p.author.pronouns}}< / span >
{% endif %}
{% if p.author.customtitle %}
< bdi class = "ml-2" style = "color: #{{p.author.titlecolor}}" > {{p.author.customtitle | safe}}< / bdi >
{% endif %}
{% endif %}
< span data-bs-toggle = "tooltip" data-bs-placement = "bottom" onmouseover = "timestamp('timestamp-{{p.id}}','{{p.created_utc}}')" id = "timestamp-{{p.id}}" > {{p.age_string}}< / span >
2022-12-09 10:54:29 +00:00
({% if p.is_image %}image post{% elif p.is_video %}video post{% elif p.is_audio %}audio post{% elif p.domain %}< a href = "/search/posts/?q=domain%3A{{p.domain}}&sort=new&t=all" class = "post-meta-domain" { % if v and v . newtab % } data-target = "t" target = "_blank" { % endif % } > {{p.domain|truncate(50, True)}}< / a > {% else %}text post{% endif %})
2022-11-19 19:54:07 +00:00
{% if p.edited_utc %}
< span class = "ml-2" > Edited < span data-bs-toggle = "tooltip" data-bs-placement = "bottom" id = "edited_timestamp-{{p.id}}" onmouseover = "timestamp('edited_timestamp-{{p.id}}','{{p.edited_utc}}')" > {{p.edited_string}}< / span > < / span >
{% endif %}
< span class = "ml-2" > {{p.views}} thread views< / span >
{% endmacro %}
2022-12-09 03:35:28 +00:00
{% macro comment_reply_box(target_fullname, html_id, wrapper_css_classes="", subwrapper_css_classes="", hide="", allow_file_upload=true, action="/comments/") %}
< div class = "comment-box-wrapper{% if wrapper_css_classes %} {{wrapper_css_classes}}{% endif %}" id = "{{html_id}}" >
{% if v %}
< div id = "comment-form-space-{{target_fullname}}" class = "comment-write {{subwrapper_css_classes}}" >
< form id = "reply-to-{{target_fullname}}" action = "{{action}}" method = "post" >
< input type = "hidden" name = "formkey" value = "{{v|formkey}}" >
< input type = "hidden" name = "parent_fullname" value = "{target_fullname}}" >
< textarea required autocomplete = "off" { % if not ( p and p . id in ADMIGGER_THREADS ) % } { % if v . longpost % } minlength = "280" { % elif v . bird % } maxlength = "140" { % endif % } { % endif % } minlength = "1" maxlength = "10000" data-preview = "form-preview-{{target_fullname}}" oninput = "markdown(this);charLimit('reply-form-body-{{target_fullname}}','charcount-{{target_fullname}}')" id = "reply-form-body-{{target_fullname}}" data-fullname = "{{target_fullname}}" class = "comment-box form-control rounded" name = "body" form = "reply-to-{{target_fullname}}" aria-label = "With textarea" placeholder = "Add your comment..." rows = "3" > < / textarea >
< div class = "text-small font-weight-bold mt-1" id = "charcount-{{target_fullname}}" style = "right: 1rem; bottom: 0.5rem; z-index: 3;" > < / div >
< div class = "comment-format" >
< label class = "btn btn-secondary format d-inline-block m-0" for = "gif-reply-btn-{{target_fullname}}" >
< span id = "gif-reply-btn-{{target_fullname}}" class = "font-weight-bolder text-uppercase" onclick = "commentForm('reply-form-body-{{target_fullname}}');getGif()" aria-hidden = "true" data-bs-toggle = "modal" data-bs-target = "#gifModal" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "Add GIF" > GIF< / span >
< / label >
< div onclick = "loadEmojis('reply-form-body-{{target_fullname}}')" class = "btn btn-secondary format d-inline-block m-0" id = "emoji-reply-btn-{{target_fullname}}" aria-hidden = "true" data-bs-toggle = "modal" data-bs-target = "#emojiModal" data-bs-toggle = "tooltip" data-bs-placement = "bottom" title = "Add Emoji" > < i class = "fas fa-smile-beam" > < / i > < / div >
{% if allow_file_upload %}
< label class = "format btn btn-secondary m-0 ml-1 {% if v %}d-inline-block{% else %}d-none{% endif %}" for = "file-upload-reply-{{target_fullname}}" >
< div id = "filename-show-reply-{{target_fullname}}" > < i class = "fas fa-file" > < / i > < / div >
< input autocomplete = "off" id = "file-upload-reply-{{target_fullname}}" accept = "image/*, video/*, audio/*" type = "file" multiple = "multiple" name = "file" { % if g . is_tor % } disabled { % endif % } onchange = "changename('filename-show-reply-{{target_fullname}}','file-upload-reply-{{target_fullname}}')" hidden >
< / label >
{% endif %}
< / div >
< button type = "button" id = "save-reply-to-{{target_fullname}}" form = "reply-to-{{target_fullname}}" class = "btn btn-primary text-whitebtn ml-auto fl-r" onclick = "postComment('{{target_fullname}}', '{{hide}}');remove_dialog();" > Comment< / button >
2022-12-13 18:26:25 +00:00
{% if target_fullname.startswith('c_') %}
< button type = "button" onclick = "document.getElementById('reply-to-{{target_fullname}}').classList.add('d-none');remove_dialog()" class = "btn btn-link text-muted ml-auto fl-r mr-3" > Cancel< / button >
{% endif %}
2022-12-09 03:35:28 +00:00
< / form >
< div id = "form-preview-{{target_fullname}}" class = "preview mb-3 mt-5" > < / div >
2022-12-09 10:54:29 +00:00
< div class = "form-text text-small p-0 m-0" > < a href = "/formatting" { % if v and v . newtab % } data-target = "t" target = "_blank" { % endif % } > Formatting help< / a > < / div >
2022-12-09 03:35:28 +00:00
< / div >
{% else %}
2022-12-10 15:25:34 +00:00
< div class = "comment-write mt-4 mb-3 mx-3" >
2022-12-09 03:35:28 +00:00
< textarea autocomplete = "off" maxlength = "10000" class = "comment-box form-control rounded" name = "body" aria-label = "With textarea" placeholder = "Add your comment..." rows = "3" onclick = "location.href='/login?redirect={{request.full_path | urlencode}}';" > < / textarea >
< / div >
< div class = "card border-0 mt-4" >
< div class = "card-body" >
< h5 class = "card-title" > Jump in the discussion.< / h5 >
< p class = "card-text" > No email address required.< / p >
< div >
< a href = "/signup?redirect={{request.full_path | urlencode}}" class = "btn btn-primary" > Sign up< / a >
< a href = "/login?redirect={{request.full_path | urlencode}}" class = "btn btn-link text-muted" > Sign in< / a >
< / div >
< / div >
< / div >
{% endif %}
< / div >
{% endmacro %}
2022-12-11 23:44:34 +00:00
{% macro ghost_box(text1, text2, mode, extra_css) %}
{# TODO: use in saved (search for "fa-ghost" in source) #}
{% if mode == 1 %}
< div class = "text-center py-7 ghost-town-box ghost-town-box-1" { % if extra_css % } style = "{{extra_css}}" { % endif % } >
< span class = "fa-stack fa-2x text-muted mb-4" >
< i class = "fas fa-square text-gray-500 opacity-25 fa-stack-2x" > < / i >
< i class = "fas text-gray-500 fa-ghost fa-stack-1x text-lg" > < / i >
< / span >
{% if text1 %}
< h5 > {{text1|safe}}< / h5 >
< p > < / p >
{% endif %}
{% if text2 %}
< p class = "text-muted" > {{text2|safe}}< / p >
{% endif %}
< / div >
{% elif mode == 2 %}
< div class = "text-center border-md rounded py-7 ghost-town-box ghost-town-box-2" { % if extra_css % } style = "{{extra_css}}" { % endif % } >
< i class = "fas fa-ghost text-gray-500 mb-3" style = "font-size: 3.5rem;" > < / i >
< p class = "font-weight-bold text-gray-500 mb-0" > {{text1|safe}}< / p >
< / div >
{% endif %}
{% endmacro %}
{% macro alert(msg, error=false) %}
< div class = "alert {% if error %}alert-danger{% else %}alert-success{% endif %} alert-dismissible fade show mb-3 mt-4" role = "alert" >
< i class = "fas {% if error %}fa-exclamation-circle{% else %}fa-check-circle{% endif %} my-auto" > < / i >
< span > {{msg}}< / span >
< button type = "button" class = "close" data-bs-dismiss = "alert" aria-label = "Close" >
< span aria-hidden = "true" > < i class = "far fa-times" > < / i > < / span >
< / button >
< / div >
{% endmacro %}