Merge pull request #227 from TLSM/rework-assets

Rework assets to use automatic cachebusting (#127).
This commit is contained in:
JulianRota 2022-09-01 00:28:39 -04:00 committed by GitHub
commit 9657adbebf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
56 changed files with 237 additions and 191 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -4,6 +4,7 @@ from files.__main__ import Base, app
from os import environ
from files.helpers.lazy import lazy
from files.helpers.const import *
from files.helpers.assetcache import assetcache_path
from datetime import datetime
from json import loads
@ -61,7 +62,7 @@ class Badge(Base):
@property
@lazy
def path(self):
return f"/assets/images/badges/{self.badge_id}.webp"
return assetcache_path(f'images/badges/{self.badge_id}.webp')
@property
@lazy

View file

@ -9,6 +9,7 @@ from sqlalchemy.orm import relationship, deferred
from files.__main__ import Base
from files.helpers.const import *
from files.helpers.lazy import lazy
from files.helpers.assetcache import assetcache_path
from .flags import Flag
from .comment import Comment
from flask import g
@ -266,13 +267,18 @@ class Submission(Base):
@property
@lazy
def thumb_url(self):
if self.over_18: return f"{SITE_FULL}/assets/images/nsfw.webp?v=1"
elif not self.url: return f"{SITE_FULL}/assets/images/{SITE_ID}/default_text.webp?v=1"
if self.over_18:
return SITE_FULL + assetcache_path('images/nsfw.webp')
elif not self.url:
return SITE_FULL + assetcache_path(f'images/{SITE_ID}/default_text.webp')
elif self.thumburl:
if self.thumburl.startswith('/'): return SITE_FULL + self.thumburl
if self.thumburl.startswith('/'):
return SITE_FULL + self.thumburl
return self.thumburl
elif self.is_youtube or self.is_video: return f"{SITE_FULL}/assets/images/default_thumb_yt.webp?v=1"
else: return f"{SITE_FULL}/assets/images/default_thumb_link.webp?v=1"
elif self.is_youtube or self.is_video:
return SITE_FULL + assetcache_path('images/default_thumb_yt.webp')
else:
return SITE_FULL + assetcache_path('images/default_thumb_link.webp')
@property
@lazy

View file

@ -19,6 +19,7 @@ from .exiles import *
from .sub_block import *
from files.__main__ import app, Base, cache
from files.helpers.security import *
from files.helpers.assetcache import assetcache_path
import random
from datetime import datetime
from os import environ, remove, path
@ -528,16 +529,18 @@ class User(Base):
@property
@lazy
def banner_url(self):
if self.bannerurl: return self.bannerurl
else: return f"/assets/images/{SITE_ID}/site_preview.webp?v=1015"
if self.bannerurl:
return self.bannerurl
return assetcache_path(f'images/{SITE_ID}/site_preview.webp')
@property
@lazy
def profile_url(self):
if self.profileurl:
if self.profileurl.startswith('/'): return SITE_FULL + self.profileurl
if self.profileurl.startswith('/'):
return SITE_FULL + self.profileurl
return self.profileurl
return f"{SITE_FULL}/assets/images/default-profile-pic.webp?v=1008"
return assetcache_path('images/default-profile-pic.webp')
@lazy
def json_popover(self, v):

View file

@ -0,0 +1,30 @@
import os
import zlib
from collections import defaultdict
ASSET_DIR = 'files/assets'
ASSET_URL = '/assets/'
ASSET_CACHE = defaultdict(lambda: None)
def assetcache_build(asset_dir):
for root, dirs, files in os.walk(asset_dir):
for fname in files:
fpath = root + '/' + fname
relpath = fpath[len(asset_dir) + 1:].replace('\\', '/')
with open(fpath, 'rb') as f:
fhash = zlib.crc32(f.read())
ASSET_CACHE[relpath] = '%x' % fhash
def assetcache_hash(asset_path):
return ASSET_CACHE[asset_path]
def assetcache_path(asset_path):
cachehash = assetcache_hash(asset_path)
url = ASSET_URL + asset_path
if cachehash:
url += '?v=' + cachehash
return url
assetcache_build(ASSET_DIR)

View file

@ -3,6 +3,7 @@ from .get import *
from os import listdir, environ
from .const import *
import time
from files.helpers.assetcache import assetcache_path
@app.template_filter("post_embed")
def post_embed(id, v):
@ -46,6 +47,9 @@ def timestamp(timestamp):
years = int(months / 12)
return f"{years}yr ago"
@app.template_filter("asset")
def template_asset(asset_path):
return assetcache_path(asset_path)
@app.context_processor
def inject_constants():

View file

@ -11,6 +11,7 @@ from pusher_push_notifications import PushNotifications
from flask import *
from files.__main__ import app, limiter
from files.helpers.sanitize import filter_emojis_only
from files.helpers.assetcache import assetcache_path
import requests
from shutil import copyfile
from json import loads
@ -38,7 +39,7 @@ def pusher_thread(interests, c, username):
'title': f'New reply by @{username}',
'body': notifbody,
'deep_link': f'{SITE_FULL}/comment/{c.id}?context=8&read=true#context',
'icon': f'{SITE_FULL}/assets/images/{SITE_ID}/icon.webp?v=1015',
'icon': SITE_FULL + assetcache_path(f'images/{SITE_ID}/icon.webp'),
}
},
'fcm': {

View file

@ -6,6 +6,7 @@ from files.classes.views import ViewerRelationship
from files.helpers.alerts import *
from files.helpers.sanitize import *
from files.helpers.const import *
from files.helpers.assetcache import assetcache_path
from files.mail import *
from flask import *
from files.__main__ import app, limiter, db_session
@ -26,7 +27,7 @@ def pusher_thread2(interests, notifbody, username):
'title': f'New message from @{username}',
'body': notifbody,
'deep_link': f'{SITE_FULL}/notifications?messages=true',
'icon': f'{SITE_FULL}/assets/images/{SITE_ID}/icon.webp?v=1015',
'icon': SITE_FULL + assetcache_path(f'images/{SITE_ID}/icon.webp'),
}
},
'fcm': {
@ -707,7 +708,7 @@ def messagereply(v):
'title': f'New message from @{v.username}',
'body': notifbody,
'deep_link': f'{SITE_FULL}/notifications?messages=true',
'icon': f'{SITE_FULL}/assets/images/{SITE_ID}/icon.webp"a=1010',
'icon': SITE_FULL + assetcache_path(f'images/{SITE_ID}/icon.webp'),
}
},
'fcm': {

View file

@ -60,7 +60,7 @@
<label class="custom-control-label" for="{{badge.id}}"></label>
</div>
</td>
<td><label for="badge-{{badge.id}}"><img alt="{{badge.name}}" loading="lazy" src="/assets/images/badges/{{badge.id}}.webp?v=1016" width=64.16 height=70></label></td>
<td><label for="badge-{{badge.id}}"><img alt="{{badge.name}}" loading="lazy" src="{{ ('images/badges/'~badge.id~'.webp') | asset }}" width=64.16 height=70></label></td>
<td>{{badge.name}}</td>
<td>{{badge.description}}</td>
</tr>

View file

@ -60,7 +60,7 @@
<label class="custom-control-label" for="{{badge.id}}"></label>
</div>
</td>
<td><label for="badge-{{badge.id}}"><img alt="{{badge.name}}" loading="lazy" src="/assets/images/badges/{{badge.id}}.webp?v=1016" width=64.16 height=70></label></td>
<td><label for="badge-{{badge.id}}"><img alt="{{badge.name}}" loading="lazy" src="{{ ('images/badges/'~badge.id~'.webp') | asset }}" width=64.16 height=70></label></td>
<td>{{badge.name}}</td>
<td>{{badge.description}}</td>
</tr>

View file

@ -4,7 +4,7 @@
{% block content %}
<script src="/assets/js/sort_table.js?v=242"></script>
<script src="{{ 'js/sort_table.js' | asset }}"></script>
<pre class="d-none d-md-inline-block"></pre>
<h5 style="font-weight:bold;">Admins</h5>

View file

@ -15,15 +15,15 @@
{% if v %}
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=59">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~v.theme~'.css') | asset }}">
{% if v.css %}
<link rel="stylesheet" href="/@{{v.username}}/css">
{% endif %}
{% else %}
<style>:root{--primary:#{{config('DEFAULT_COLOR')}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{config('DEFAULT_THEME')}}.css?v=58">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~config('DEFAULT_THEME')~'.css') | asset }}">
{% endif %}
</head>
@ -94,7 +94,7 @@
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="/assets/images/{{SITE_ID}}/cover.webp?v=1014"></img>
<img alt="cover" loading="lazy" class="splash-img" src="{{ ('images/'~SITE_ID~'/cover.webp') | asset }}"></img>
</div>
</div>

View file

@ -44,4 +44,4 @@
</div>
</div>
<script src="/assets/js/award_modal.js?v=248" data-cfasync="false"></script>
<script src="{{ 'js/award_modal.js' | asset }}" data-cfasync="false"></script>

View file

@ -1,6 +1,6 @@
{% extends "default.html" %}
{% block content %}
<script src="/assets/js/sort_table.js?v=242"></script>
<script src="{{ 'js/sort_table.js' | asset }}"></script>
<pre>
@ -27,7 +27,7 @@
<tr>
<td>{{loop.index}}</td>
<td>{{badge.name}}</td>
<td><img alt="{{badge.name}}" loading="lazy" src="/assets/images/badges/{{badge.id}}.webp?v=1016" width=45.83 height=50>
<td><img alt="{{badge.name}}" loading="lazy" src="{{ ('images/badges/'~badge.id~'.webp') | asset }}" width=45.83 height=50>
<td>{{badge.description}}</td>
{%- set ct = counts[badge.id] if badge.id in counts else (0, 0) %}
<td class="badges-rarity-qty">{{ ct[0] }}</td>

View file

@ -1,5 +1,5 @@
<script src="/assets/js/ban_modal.js?v=241"></script>
<script src="{{ 'js/ban_modal.js' | asset }}"></script>
<div class="modal fade" id="banModal" tabindex="-1" role="dialog" aria-labelledby="banModalTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">

View file

@ -104,6 +104,6 @@
</nav>
{% endif %}
<script src="/assets/js/post_toast2.js?v=243"></script>
<script src="{{ 'js/post_toast2.js' | asset }}"></script>
{% endblock %}

View file

@ -9,13 +9,13 @@
<meta name="author" content="">
<link id="favicon" rel="icon" type="image/png" href="/assets/images/{{SITE_ID}}/icon.webp?v=1015">
<link id="favicon" rel="icon" type="image/png" href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}">
<title>Chat</title>
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=59">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~v.theme~'.css') | asset }}">
{% if v.css %}
<link rel="stylesheet" href="/@{{v.username}}/css">
{% endif %}
@ -101,7 +101,7 @@
</head>
<body>
<script src="/assets/js/bootstrap.js?v=249"></script>
<script src="{{ 'js/bootstrap.js' | asset }}"></script>
{% include "header.html" %}
@ -189,7 +189,7 @@
<script src="/chat.js?v=16"></script>
<script src="/assets/js/lozad.js?v=242"></script>
<script src="/assets/js/lite-youtube.js?v=240"></script>
<script src="{{ 'js/lozad.js' | asset }}"></script>
<script src="{{ 'js/lite-youtube.js' | asset }}"></script>
</body>

View file

@ -225,7 +225,7 @@
{% endif %}
{% if c.treasure_amount and c.treasure_amount != '0' %}
<img class="treasure" alt="treasure" src="/assets/images/chest.webp" width="20" />
<img class="treasure" alt="treasure" src="{{ 'images/chest.webp' | asset }}" width="20" />
{% if '-' in c.treasure_amount %}
<em>A Mimic Ate {{c.treasure_amount.replace('-', '')}} Coins!</em>
{% else %}
@ -839,26 +839,26 @@
{% endif %}
{% if v %}
<script src="/assets/js/vendor/purify.min.js?v=251"></script>
<script src="/assets/js/vendor/marked.min.js?v=251"></script>
<script src="/assets/js/marked.custom.js?v=252"></script>
<script src="/assets/js/comments_v.js?v=268"></script>
<script src="/assets/js/award_modal.js?v=1"></script>
<script src="{{ 'js/vendor/purify.min.js' | asset }}"></script>
<script src="{{ 'js/vendor/marked.min.js' | asset }}"></script>
<script src="{{ 'js/marked.custom.js' | asset }}"></script>
<script src="{{ 'js/comments_v.js' | asset }}"></script>
<script src="{{ 'js/award_modal.js' | asset }}"></script>
{% endif %}
<script src="/assets/js/clipboard.js?v=250"></script>
<script src="{{ 'js/clipboard.js' | asset }}"></script>
{% if v and v.admin_level > 1 %}
<script src="/assets/js/comments_admin.js?v=250"></script>
<script src="{{ 'js/comments_admin.js' | asset }}"></script>
{% if v.admin_level > 2 %}
<script src="/assets/js/filter_actions.js?v=8"></script>
<script src="{{ 'js/filter_actions.js' | asset }}"></script>
{% endif %}
{% endif %}
{% include "expanded_image_modal.html" %}
<script src="/assets/js/comments+submission_listing.js?v=259"></script>
<script src="/assets/js/comments.js?v=256"></script>
<script src="{{ 'js/comments+submission_listing.js' | asset }}"></script>
<script src="{{ 'js/comments.js' | asset }}"></script>
<script>
{% if p and (not v or v.highlightcomments) %}

View file

@ -4,23 +4,23 @@
<meta name="description" content="{{config('DESCRIPTION')}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline' 'unsafe-eval' ajax.cloudflare.com; connect-src 'self' tls-use1.fpapi.io api.fpjs.io {% if PUSHER_ID != 'blahblahblah' %}{{PUSHER_ID}}.pushnotifications.pusher.com{% endif %}; object-src 'none';">
<script src="/assets/js/bootstrap.js?v=245"></script>
<script src="/assets/js/micromodal.js?v=245"></script>
<script src="{{ 'js/bootstrap.js' | asset }}"></script>
<script src="{{ 'js/micromodal.js' | asset }}"></script>
{% if v %}
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=59">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~v.theme~'.css') | asset }}">
{% if v.css %}
<link rel="stylesheet" href="/@{{v.username}}/css">
{% endif %}
{% else %}
<style>:root{--primary:#{{config('DEFAULT_COLOR')}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{config('DEFAULT_THEME')}}.css?v=58">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~config('DEFAULT_THEME')~'.css') | asset }}">
{% endif %}
{% if request.path == '/catalog' %}
<link rel="stylesheet" href="/assets/css/catalog.css?v=1">
<link rel="stylesheet" href="{{ 'css/catalog.css' | asset }}">
{% endif %}
{% if sub and sub.css and not request.path.endswith('settings') %}
@ -38,16 +38,16 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="thumbnail" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<meta name="thumbnail" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<link rel="icon" type="image/png" href="/assets/images/{{SITE_ID}}/icon.webp?v=1015">
<link rel="icon" type="image/png" href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}">
{% block title %}
<title>{{SITE_TITLE}}</title>
<meta property="og:type" content="article">
<meta property="og:title" content="{{SITE_TITLE}}">
<meta property="og:site_name" content="{{request.host}}">
<meta property="og:image" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<meta property="og:image" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<meta property="og:url" content="{{SITE_FULL}}{{request.full_path}}">
<meta property="og:description" name="description" content="{{config('DESCRIPTION')}}">
<meta property="og:author" name="author" content="{{SITE_FULL}}">
@ -58,7 +58,7 @@
<meta name="twitter:title" content="{{SITE_TITLE}}">
<meta name="twitter:creator" content="{{SITE_FULL}}">
<meta name="twitter:description" content="{{config('DESCRIPTION')}}">
<meta name="twitter:image" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<meta name="twitter:image" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<meta name="twitter:url" content="{{SITE_FULL}}{{request.full_path}}">
{% endblock %}
@ -67,14 +67,14 @@
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" sizes="180x180" href="/assets/images/{{SITE_ID}}/icon.webp?v=1015">
<link rel="manifest" href="/assets/manifest_{{SITE_ID}}.json?v=1">
<link rel="mask-icon" href="/assets/images/{{SITE_ID}}/icon.webp?v=1015">
<link rel="shortcut icon" href="/assets/images/{{SITE_ID}}/icon.webp?v=1015">
<link rel="apple-touch-icon" sizes="180x180" href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}">
<link rel="manifest" href="{{ ('manifest_'~SITE_ID~'.json') | asset }}">
<link rel="mask-icon" href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}">
<link rel="shortcut icon" href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}">
<meta name="apple-mobile-web-app-title" content="{{SITE_TITLE}}">
<meta name="application-name" content="{{SITE_TITLE}}">
<meta name="msapplication-TileColor" content="#{{config('DEFAULT_COLOR')}}">
<meta name="msapplication-config" content="/assets/browserconfig.xml?v=2">
<meta name="msapplication-config" content="{{ 'browserconfig.xml' | asset }}">
<meta name="theme-color" content="#{{config('DEFAULT_COLOR')}}">
@ -82,127 +82,127 @@
<link
rel="apple-touch-startup-image"
sizes="320x480"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="640x960"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-icon"
sizes="640x1136"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-icon"
sizes="750x1334"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="768x1004"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="768x1024"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="828x1792"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="1024x748"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="1024x768"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="1125x2436"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="1242x2208"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="1242x2688"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="1334x750"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="1536x2008"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="1536x2048"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="1668x2224"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="1792x828"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="2048x1496"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="2048x1536"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="2048x2732"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="2208x1242"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="2224x1668"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="2436x1125"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="2668x1242"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
<link
rel="apple-touch-startup-image"
sizes="2737x2048"
href="/assets/images/{{SITE_ID}}/icon.webp?v=1015"
href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}"
>
{% block fixedMobileBarJS %}
@ -218,7 +218,7 @@
<img alt="/h/{{sub.name}} banner" class="primary_banner" role="button" data-bs-toggle="modal" data-bs-target="#expandImageModal" onclick="expandDesktopImage('{{sub.banner_url}}')" loading="lazy" src="{{sub.banner_url}}" width=100% style="object-fit:cover;max-height:25vw">
{% else %}
<a href="/">
<img alt="site banner" class="primary_banner" src="/assets/images/{{SITE_ID}}/banner.webp?v=1046" width="100%">
<img alt="site banner" class="primary_banner" src="{{ ('images/'~SITE_ID~'/banner.webp') | asset }}" width="100%">
</a>
{% endif %}
{% endif %}
@ -298,14 +298,14 @@
</div>
</div>
<script src="/assets/js/lozad.js?v=242"></script>
<script src="{{ 'js/lozad.js' | asset }}"></script>
{% if v %}
<script src="/assets/js/post_toast2.js?v=243"></script>
<script src="/assets/js/formatting.js?v=240"></script>
<script src="{{ 'js/post_toast2.js' | asset }}"></script>
<script src="{{ 'js/formatting.js' | asset }}"></script>
{% endif %}
<script src="/assets/js/lite-youtube.js?v=240"></script>
<script src="{{ 'js/lite-youtube.js' | asset }}"></script>
<script>
MicroModal.init();

View file

@ -1,4 +1,4 @@
<script src="/assets/js/delete_post_modal.js?v=240"></script>
<script src="{{ 'js/delete_post_modal.js' | asset }}"></script>
<div class="modal fade" id="deletePostModal" tabindex="-1" role="dialog" aria-labelledby="deletePostModalTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">

View file

@ -1,6 +1,6 @@
{% extends "default.html" %}
{% block content %}
<script src="/assets/js/followers.js?v=241"></script>
<script src="{{ 'js/followers.js' | asset }}"></script>
<pre>

View file

@ -1,6 +1,6 @@
{% extends "default.html" %}
{% block content %}
<script src="/assets/js/following.js?v=241"></script>
<script src="{{ 'js/following.js' | asset }}"></script>
<pre>

View file

@ -26,4 +26,4 @@
</div>
</div>
<script src="/assets/js/gif_modal.js?v=245"></script>
<script src="{{ 'js/gif_modal.js' | asset }}"></script>

View file

@ -12,7 +12,7 @@
<div class="navbar navbar-expand-md navbar-light" id="navbar">
<div class="container-fluid" style="padding:0;">
<a href="/" class="navbar-brand mr-auto">
<img alt="header icon" height=33 src="/assets/images/{{SITE_ID}}/headericon.webp?v=1019">
<img alt="header icon" height=33 src="{{ ('images/'~SITE_ID~'/headericon.webp') | asset }}">
</a>
{% if sub %}
@ -31,7 +31,7 @@
{% endif %}
</style>
<a href="/" class="flex-grow-1">
<img class="ml-1" id="logo" alt="logo" src="/assets/images/{{SITE_ID}}/logo.webp?v=1013" width=70>
<img class="ml-1" id="logo" alt="logo" src="{{ ('images/'~SITE_ID~'/logo.webp') | asset }}" width=70>
</a>
{% endif %}
@ -222,7 +222,7 @@
</div>
</nav>
<script src="/assets/js/header.js?v=267"></script>
<script src="{{ 'js/header.js' | asset }}"></script>
{% if v and not err %}
<div id="formkey" class="d-none">{{v.formkey}}</div>

View file

@ -27,7 +27,7 @@
script.onload = resolve;
script.onerror = reject;
script.async = true;
script.src = "/assets/js/fp.js?v=240";
script.src = "{{ 'js/fp.js' | asset }}";
document.head.appendChild(script);
})
.then(() => FingerprintJS.load({token: '{{environ.get("FP")}}'}));
@ -154,7 +154,7 @@
{% if PUSHER_ID != 'blahblahblah' and v %}
<div class="d-none" id="strid">{{request.host}}{{v.id}}</div>
<div class="d-none" id="pusherid">{{PUSHER_ID}}</div>
<script src="/assets/js/pusher.js?v=242"></script>
<script src="{{ 'js/pusher.js' | asset }}"></script>
<script>
if (typeof Android != 'undefined') {
Android.Subscribe('{{request.host}}{{v.id}}');

View file

@ -6,15 +6,15 @@
{% block content %}
{% if v %}
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=59">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~v.theme~'.css') | asset }}">
{% if v.css %}
<link rel="stylesheet" href="/@{{v.username}}/css">
{% endif %}
{% else %}
<style>:root{--primary:#{{config('DEFAULT_COLOR')}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{config('DEFAULT_THEME')}}.css?v=58">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~config('DEFAULT_THEME')~'.css') | asset }}">
{% endif %}
<div class="row justify-content-around">
@ -126,6 +126,6 @@
</div>
</div>
<script src="/assets/js/clipboard.js?v=240"></script>
<script src="{{ 'js/clipboard.js' | asset }}"></script>
{% endblock %}

View file

@ -6,7 +6,7 @@
<meta name="description" content="{{config('DESCRIPTION')}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
<script src="/assets/js/bootstrap.js?v=245"></script>
<script src="{{ 'js/bootstrap.js' | asset }}"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
@ -18,8 +18,8 @@
{% endblock %}
<style>:root{--primary:#{{config('DEFAULT_COLOR')}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{config('DEFAULT_THEME')}}.css?v=58">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~config('DEFAULT_THEME')~'.css') | asset }}">
</head>
@ -109,7 +109,7 @@
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="/assets/images/{{SITE_ID}}/cover.webp?v=1014"></img>
<img alt="cover" loading="lazy" class="splash-img" src="{{ ('images/'~SITE_ID~'/cover.webp') | asset }}"></img>
</div>
</div>

View file

@ -14,8 +14,8 @@
<title>2-Step Login - {{SITE_TITLE}}</title>
<style>:root{--primary:#{{config('DEFAULT_COLOR')}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{config('DEFAULT_THEME')}}.css?v=58">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~config('DEFAULT_THEME')~'.css') | asset }}">
</head>
@ -93,7 +93,7 @@
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="/assets/images/{{SITE_ID}}/cover.webp?v=1014"></img>
<img alt="cover" loading="lazy" class="splash-img" src="{{ ('images/'~SITE_ID~'/cover.webp') | asset }}"></img>
</div>
</div>

View file

@ -9,7 +9,7 @@
{% block content %}
<div class="text-center py-7 py-md-8">
<img loading="lazy" src="/assets/images/ruckus.webp" class="empty-state-img mb-3" alt="success state">
<img loading="lazy" src="{{ 'images/ruckus.webp' | asset }}" class="empty-state-img mb-3" alt="success state">
<div class="font-weight-bold text-muted mb-4">{{title}}</div>
<p class="text-muted">{{message}}</p>

View file

@ -50,4 +50,4 @@
</div>
</div>
<script src="/assets/js/mobile_navigation_bar.js?v=240"></script>
<script src="{{ 'js/mobile_navigation_bar.js' | asset }}"></script>

View file

@ -14,7 +14,7 @@
<td>{{loop.index}}</td>
<td><a style="color:#{{u.namecolor}}" href="/@{{u.username}}"><img loading="lazy" src="{{u.profile_url}}" class="pp20"><span {% if u.patron %}class="patron" style="background-color:#{{u.namecolor}}"{% endif %}>{{u.username}}</span></a></td>
<td><img alt="2{{u.patron}}" loading="lazy" width=29.33 height=32 src="/assets/images/badges/2{{u.patron}}.webp?v=1016"></td>
<td><img alt="2{{u.patron}}" loading="lazy" width=29.33 height=32 src="{{ ('images/badges/2'~u.patron~'.webp') | asset }}"></td>
</tr>
{% endfor %}
</table>

View file

@ -32,4 +32,4 @@
</div>
</div>
<script src="/assets/js/report_post_modal.js?v=241"></script>
<script src="{{ 'js/report_post_modal.js' | asset }}"></script>

View file

@ -5,20 +5,20 @@
<meta name="description" content="{{config('DESCRIPTION')}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
<script src="/assets/js/bootstrap.js?v=245"></script>
<script src="{{ 'js/bootstrap.js' | asset }}"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="">
<link rel="icon" type="image/png" href="/assets/images/{{SITE_ID}}/icon.webp?v=1015">
<link rel="icon" type="image/png" href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}">
<title>{% block pagetitle %}Settings - {{SITE_TITLE}}{% endblock %}</title>
<meta property="og:type" content="article">
<meta property="og:title" content="{{SITE_TITLE}}">
<meta property="og:site_name" content="{{request.host}}">
<meta property="og:image" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<meta property="og:image" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<meta property="og:url" content="{{request.host}}">
<meta property="og:description" name="description" content="{{config('DESCRIPTION')}}">
<meta property="og:author" name="author" content="{{SITE_FULL}}">
@ -29,13 +29,13 @@
<meta name="twitter:title" content="{{SITE_TITLE}}">
<meta name="twitter:creator" content="{{SITE_FULL}}">
<meta name="twitter:description" content="{{config('DESCRIPTION')}}">
<meta name="twitter:image" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<meta name="twitter:image" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<meta name="twitter:url" content="{{request.host}}">
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=59">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~v.theme~'.css') | asset }}">
{% if v.css and not request.path.startswith('/settings/css') %}
<link rel="stylesheet" href="/@{{v.username}}/css">
{% endif %}
@ -241,7 +241,7 @@
{% block onload %}{% endblock %}
<script src="/assets/js/clipboard.js?v=240"></script>
<script src="{{ 'js/clipboard.js' | asset }}"></script>
</body>

View file

@ -6,19 +6,19 @@
<meta name="description" content="{{config('DESCRIPTION')}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
<script src="/assets/js/bootstrap.js?v=245"></script>
<script src="{{ 'js/bootstrap.js' | asset }}"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="">
<meta name="thumbnail" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<link rel="icon" type="image/png" href="/assets/images/{{SITE_ID}}/icon.webp?v=1015">
<meta name="thumbnail" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<link rel="icon" type="image/png" href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}">
<meta property="og:type" content="article">
<meta property="og:title" content="{{SITE_TITLE}}">
<meta property="og:site_name" content="{{request.host}}">
<meta property="og:image" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<meta property="og:image" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<meta property="og:url" content="{{SITE_FULL}}{{request.full_path}}">
<meta property="og:description" name="description" content="{{config('DESCRIPTION')}}">
<meta property="og:author" name="author" content="{{SITE_FULL}}">
@ -29,7 +29,7 @@
<meta name="twitter:title" content="{{SITE_TITLE}}">
<meta name="twitter:creator" content="{{SITE_FULL}}">
<meta name="twitter:description" content="{{config('DESCRIPTION')}}">
<meta name="twitter:image" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<meta name="twitter:image" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<meta name="twitter:url" content="{{SITE_FULL}}{{request.full_path}}">
@ -39,12 +39,12 @@
{% if v %}
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=59">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~v.theme~'.css') | asset }}">
{% else %}
<style>:root{--primary:#{{config('DEFAULT_COLOR')}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{config('DEFAULT_THEME')}}.css?v=58">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~config('DEFAULT_THEME')~'.css') | asset }}">
{% endif %}
</head>

View file

@ -4,7 +4,7 @@
{% block content %}
<script src="/assets/js/settings_blocks.js?v=241"></script>
<script src="{{ 'js/settings_blocks.js' | asset }}"></script>
<div class="row">

View file

@ -501,7 +501,7 @@
</div>
<script src="/assets/js/settings_profile.js?v=251"></script>
<script src="{{ 'js/settings_profile.js' | asset }}"></script>
{% include "gif_modal.html" %}

View file

@ -257,6 +257,6 @@
</div>
</div>
<script src="/assets/js/settings_security.js?v=241"></script>
<script src="{{ 'js/settings_security.js' | asset }}"></script>
{% endblock %}

View file

@ -8,7 +8,7 @@
{% block Banner %}
<header class="container pb-1 text-center">
<img alt="shop banner" src="/assets/images/shop.webp" width="50%">
<img alt="shop banner" src="{{ 'images/shop.webp' | asset }}" width="50%">
<h3 class="mt-4">Stir drama. Earn coins.</h5>
<h5 class="mt-4">Total sales: {{sales}} coins</h5>
<h5 class="mt-4">Coins spent by you: {{v.coins_spent}} coins</h5>

View file

@ -5,7 +5,7 @@
<meta name="description" content="{{config('DESCRIPTION')}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
<script src="/assets/js/bootstrap.js?v=245"></script>
<script src="{{ 'js/bootstrap.js' | asset }}"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
@ -14,7 +14,7 @@
<meta property="og:type" content="article">
<meta property="og:title" content="{{SITE_TITLE}}">
<meta property="og:site_name" content="{{request.host}}">
<meta property="og:image" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<meta property="og:image" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<meta property="og:url" content="{{request.host}}">
<meta property="og:description" name="description" content="{{config('DESCRIPTION')}}">
<meta property="og:author" name="author" content="{{SITE_FULL}}">
@ -25,14 +25,14 @@
<meta name="twitter:title" content="{{SITE_TITLE}}">
<meta name="twitter:creator" content="{{SITE_FULL}}">
<meta name="twitter:description" content="{{config('DESCRIPTION')}}">
<meta name="twitter:image" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<meta name="twitter:image" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<meta name="twitter:url" content="{{request.host}}">
<title>{% if ref_user %}{{ref_user.username}} invites you to {{SITE_TITLE}}{% else %}Sign up - {{SITE_TITLE}}{% endif %}</title>
<style>:root{--primary:#{{config('DEFAULT_COLOR')}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{config('DEFAULT_THEME')}}.css?v=58">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~config('DEFAULT_THEME')~'.css') | asset }}">
</head>
@ -140,7 +140,7 @@
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="/assets/images/{{SITE_ID}}/cover.webp?v=1014"></img>
<img alt="cover" loading="lazy" class="splash-img" src="{{ ('images/'~SITE_ID~'/cover.webp') | asset }}"></img>
</div>
</div>
@ -148,10 +148,10 @@
</div>
</div>
<script src="/assets/js/signup.js?v=240"></script>
<script src="{{ 'js/signup.js' | asset }}"></script>
{% if hcaptcha %}
<script src="/assets/js/hcaptcha.js?v=240"></script>
<script src="{{ 'js/hcaptcha.js' | asset }}"></script>
{% endif %}
</body>

View file

@ -6,7 +6,7 @@
<meta name="description" content="{{config('DESCRIPTION')}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
<script src="/assets/js/bootstrap.js?v=245"></script>
<script src="{{ 'js/bootstrap.js' | asset }}"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
@ -15,7 +15,7 @@
<meta property="og:type" content="article">
<meta property="og:title" content="{{SITE_TITLE}}">
<meta property="og:site_name" content="{{request.host}}">
<meta property="og:image" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<meta property="og:image" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<meta property="og:url" content="{{request.host}}">
<meta property="og:description" name="description" content="{{config('DESCRIPTION')}}">
<meta property="og:author" name="author" content="{{SITE_FULL}}">
@ -26,14 +26,14 @@
<meta name="twitter:title" content="{{SITE_TITLE}}">
<meta name="twitter:creator" content="{{SITE_FULL}}">
<meta name="twitter:description" content="{{config('DESCRIPTION')}}">
<meta name="twitter:image" content="/assets/images/{{SITE_ID}}/site_preview.webp?v=1015">
<meta name="twitter:image" content="{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}">
<meta name="twitter:url" content="{{request.host}}">
<title>{% if ref_user %}{{ref_user.username}} invites you to {{SITE_TITLE}}{% else %}{{SITE_TITLE}}{% endif %}</title>
<style>:root{--primary:#{{config('DEFAULT_COLOR')}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{config('DEFAULT_THEME')}}.css?v=58">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~config('DEFAULT_THEME')~'.css') | asset }}">
</head>
@ -84,7 +84,7 @@
<div class="splash-overlay"></div>
<img alt="cover" loading="lazy" class="splash-img" src="/assets/images/{{SITE_ID}}/cover.webp?v=1014"></img>
<img alt="cover" loading="lazy" class="splash-img" src="{{ ('images/'~SITE_ID~'/cover.webp') | asset }}"></img>
</div>
</div>

View file

@ -1,6 +1,6 @@
{% extends "default.html" %}
{% block content %}
<script src="/assets/js/sort_table.js?v=242"></script>
<script src="{{ 'js/sort_table.js' | asset }}"></script>
<pre>

View file

@ -43,7 +43,7 @@
<meta property="og:description" name="description" content="{{comment_info.plainbody(v)}}">
<meta property="og:author" name="author" content="{{'@'+comment_info.author_name}}">
<meta property="og:title" content="{{'@'+comment_info.author_name}} comments on {{p.plaintitle(v)}} - {{SITE_TITLE}}">
<meta property="og:image" content="{% if p.is_image %}{{p.realurl(v)}}{% elif p.has_thumb%}{{p.thumb_url}}{% else %}{{SITE_ID}}/assets/images/{{SITE_ID}}/site_preview.webp?v=1015{% endif %}">
<meta property="og:image" content="{% if p.is_image %}{{p.realurl(v)}}{% elif p.has_thumb%}{{p.thumb_url}}{% else %}{{SITE_FULL}}{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}{% endif %}">
{% if p.is_video %}
<meta property="og:video" content="{{p.realurl(v)}}">
{% endif %}
@ -55,7 +55,7 @@
<meta name="twitter:title" content="{{'@'+comment_info.author_name}} comments on {{p.plaintitle(v)}} - {{SITE_TITLE}}">
<meta name="twitter:creator" content="{{'@'+comment_info.author_name}}">
<meta name="twitter:description" content="{{comment_info.plainbody(v)}}">
<meta name="twitter:image" content="{% if p.is_image %}{{p.realurl(v)}}{% elif p.has_thumb%}{{p.thumb_url}}{% else %}{{SITE_ID}}/assets/images/{{SITE_ID}}/site_preview.webp?v=1015{% endif %}">
<meta name="twitter:image" content="{% if p.is_image %}{{p.realurl(v)}}{% elif p.has_thumb%}{{p.thumb_url}}{% else %}{{SITE_FULL}}{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}{% endif %}">
<meta name="twitter:url" content="{{p.permalink}}">
{% else %}
@ -68,7 +68,7 @@
<meta property="og:description" name="description" content="{{p.plainbody(v)}}">
{% if p.author %}<meta property="og:author" name="author" content="{{'@'+p.author_name}}">{% endif %}
<meta property="og:title" content="{{p.plaintitle(v)}} - {{SITE_TITLE}}">
<meta property="og:image" content="{% if p.is_image %}{{p.realurl(v)}}{% elif p.has_thumb%}{{p.thumb_url}}{% else %}{{SITE_ID}}/assets/images/{{SITE_ID}}/site_preview.webp?v=1015{% endif %}">
<meta property="og:image" content="{% if p.is_image %}{{p.realurl(v)}}{% elif p.has_thumb%}{{p.thumb_url}}{% else %}{{SITE_FULL}}{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}{% endif %}">
{% if p.url and p.is_video %}
<meta property="og:video" content="{{p.realurl(v)}}">
{% endif %}
@ -80,7 +80,7 @@
<meta name="twitter:title" content="{{p.plaintitle(v)}} - {{SITE_TITLE}}">
{% if p.author %}<meta name="twitter:creator" content="{{'@'+p.author_name}}">{% endif %}
<meta name="twitter:description" content="{{p.plainbody(v)}}">
<meta name="twitter:image" content="{% if p.is_image %}{{p.realurl(v)}}{% elif p.has_thumb %}{{p.thumb_url}}{% else %}{{SITE_ID}}/assets/images/{{SITE_ID}}/site_preview.webp?v=1015{% endif %}">
<meta name="twitter:image" content="{% if p.is_image %}{{p.realurl(v)}}{% elif p.has_thumb %}{{p.thumb_url}}{% else %}{{SITE_FULL}}{{ ('images/'~SITE_ID~'/site_preview.webp') | asset }}{% endif %}">
<meta name="twitter:url" content="{{p.permalink}}">
{% endif %}
@ -246,9 +246,9 @@
{% if p.domain == "twitter.com" %}
{{p.embed_url | safe}}
{% if v and v.theme.split("_")[0] in ["light", "coffee", "4chan"] %}
<script src="/assets/js/twitterlight.js?v=243"></script>
<script src="{{ 'js/twitterlight.js' | asset }}"></script>
{% else %}
<script src="/assets/js/twitter.js?v=243"></script>
<script src="{{ 'js/twitter.js' | asset }}"></script>
{% endif %}
{% elif p.domain in ['youtu.be','youtube.com'] and p.embed_url and p.embed_url.startswith('<lite-youtube') %}
{{p.embed_url | safe}}
@ -595,28 +595,28 @@
{% endif %}
{% if v and (v.id == p.author_id or v.admin_level > 1 and v.admin_level > 2) %}
<script src="/assets/js/togglePostEdit.js?v=240"></script>
<script src="{{ 'js/togglePostEdit.js' | asset }}"></script>
{% endif %}
{% if not v or v.highlightcomments %}
<script src="/assets/js/new_comments_count.js?v=242"></script>
<script src="{{ 'js/new_comments_count.js' | asset }}"></script>
{% endif %}
<script src="/assets/js/clipboard.js?v=240"></script>
<script src="{{ 'js/clipboard.js' | asset }}"></script>
{% if not p.replies %}
{% include "comments.html" %}
{% endif %}
{% if p.award_count("shit") %}
<script src="/assets/js/critters.js?v=240"></script>
<script src="/assets/js/bugs.js?v=241"></script>
<script src="{{ 'js/critters.js' | asset }}"></script>
<script src="{{ 'js/bugs.js' | asset }}"></script>
{% endif %}
{% if p.award_count("fireflies") %}
<script src="/assets/js/critters.js?v=240"></script>
<script src="/assets/js/fireflies.js?v=241"></script>
<script src="{{ 'js/critters.js' | asset }}"></script>
<script src="{{ 'js/fireflies.js' | asset }}"></script>
{% endif %}

View file

@ -1,11 +1,11 @@
{% set cc='COUNTRY CLUB' %}
{% if not v or v.highlightcomments %}
<script src="/assets/js/new_comments_count.js?v=242"></script>
<script src="{{ 'js/new_comments_count.js' | asset }}"></script>
{% endif %}
{% if v and v.admin_level > 2 %}
<script src="/assets/js/filter_actions.js?v=8"></script>
<script src="{{ 'js/filter_actions.js' | asset }}"></script>
{% endif %}
<div style="display:none" id="popover">
@ -417,6 +417,6 @@
{% endif %}
{% include "expanded_image_modal.html" %}
<script src="/assets/js/clipboard.js?v=240"></script>
<script src="/assets/js/comments+submission_listing.js?v=259"></script>
<script src="/assets/js/submission_listing.js?v=240"></script>
<script src="{{ 'js/clipboard.js' | asset }}"></script>
<script src="{{ 'js/comments+submission_listing.js' | asset }}"></script>
<script src="{{ 'js/submission_listing.js' | asset }}"></script>

View file

@ -4,13 +4,13 @@
<meta name="description" content="{{config('DESCRIPTION')}}">
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; connect-src 'self'; object-src 'none';">
<script src="/assets/js/bootstrap.js?v=245"></script>
<script src="{{ 'js/bootstrap.js' | asset }}"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="author" content="">
<link rel="icon" type="image/png" href="/assets/images/{{SITE_ID}}/icon.webp?v=1015">
<link rel="icon" type="image/png" href="{{ ('images/'~SITE_ID~'/icon.webp') | asset }}">
{% block title %}
<title>Create a post - {{SITE_TITLE}}</title>
@ -20,15 +20,15 @@
{% block stylesheets %}
{% if v %}
<style>:root{--primary:#{{v.themecolor}}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{v.theme}}.css?v=49">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~v.theme~'.css') | asset }}">
{% if v.css %}
<link rel="stylesheet" href="/@{{v.username}}/css">
{% endif %}
{% else %}
<style>:root{--primary:#{{config('DEFAULT_COLOR')}}</style>
<link rel="stylesheet" href="/assets/css/main.css?v=254">
<link rel="stylesheet" href="/assets/css/{{config('DEFAULT_THEME')}}.css?v=49">
<link rel="stylesheet" href="{{ 'css/main.css' | asset }}">
<link rel="stylesheet" href="{{ ('css/'~config('DEFAULT_THEME')~'.css') | asset }}">
{% endif %}
{% endblock %}
@ -169,11 +169,11 @@
</script>
{% endif %}
<script src="/assets/js/vendor/purify.min.js?v=251"></script>
<script src="/assets/js/vendor/marked.min.js?v=251"></script>
<script src="/assets/js/marked.custom.js?v=252"></script>
<script src="/assets/js/formatting.js?v=240"></script>
<script src="/assets/js/submit.js?v=255"></script>
<script src="{{ 'js/vendor/purify.min.js' | asset }}"></script>
<script src="{{ 'js/vendor/marked.min.js' | asset }}"></script>
<script src="{{ 'js/marked.custom.js' | asset }}"></script>
<script src="{{ 'js/formatting.js' | asset }}"></script>
<script src="{{ 'js/submit.js' | asset }}"></script>
{% include "gif_modal.html" %}

View file

@ -299,9 +299,9 @@
<div>
{% for b in u.badges %}
{% if b.url %}
<a rel="nofollow noopener noreferrer" href="{{b.url}}"><img alt="{{b.name}}" width=55 height=60 loading="lazy" src="{{b.path}}?v=1016" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}"></a>
<a rel="nofollow noopener noreferrer" href="{{b.url}}"><img alt="{{b.name}}" width=55 height=60 loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}"></a>
{% else %}
<img alt="{{b.name}}" width=55 height=60 loading="lazy" src="{{b.path}}?v=1016" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}">
<img alt="{{b.name}}" width=55 height=60 loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}">
{% endif %}
{% endfor %}
</div>
@ -420,9 +420,9 @@
<div class="mb-3">
{% for b in u.badges %}
{% if b.url %}
<a rel="nofollow noopener noreferrer" href="{{b.url}}"><img alt="{{b.name}}" width=29.33 height=32 loading="lazy" src="{{b.path}}?v=1016" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}"></a>
<a rel="nofollow noopener noreferrer" href="{{b.url}}"><img alt="{{b.name}}" width=29.33 height=32 loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}"></a>
{% else %}
<img alt="{{b.name}}" width=29.33 height=32 loading="lazy" src="{{b.path}}?v=1016" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}">
<img alt="{{b.name}}" width=29.33 height=32 loading="lazy" src="{{b.path}}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}">
{% endif %}
{% endfor %}
</div>
@ -667,11 +667,11 @@
{% if v %}
<div id='tax' class="d-none">{% if v.patron or u.patron or v.alts_patron or u.alts_patron %}0{% else %}0.03{% endif %}</div>
<script src="/assets/js/userpage_v.js?v=244"></script>
<script src="{{ 'js/userpage_v.js' | asset }}"></script>
<div id="username" class="d-none">{{u.username}}</div>
{% endif %}
<script src="/assets/js/userpage.js?v=241"></script>
<script src="{{ 'js/userpage.js' | asset }}"></script>
{% endblock %}
@ -697,9 +697,9 @@
</nav>
{% endif %}
<script src="/assets/js/vendor/purify.min.js?v=251"></script>
<script src="/assets/js/vendor/marked.min.js?v=252"></script>
<script src="/assets/js/marked.custom.js?v=251"></script>
<script src="{{ 'js/vendor/purify.min.js' | asset }}"></script>
<script src="{{ 'js/vendor/marked.min.js' | asset }}"></script>
<script src="{{ 'js/marked.custom.js' | asset }}"></script>
{% endblock %}

View file

@ -114,9 +114,9 @@
{% if v %}
<div id='tax' class="d-none">{% if v.patron or u.patron %}0{% else %}0.03{% endif %}</div>
<script src="/assets/js/userpage_v.js?v=244"></script>
<script src="{{ 'js/userpage_v.js' | asset }}"></script>
<div id="username" class="d-none">{{u.username}}</div>
{% endif %}
<script src="/assets/js/userpage.js?v=241"></script>
<script src="{{ 'js/userpage.js' | asset }}"></script>
{% endblock %}

View file

@ -32,9 +32,9 @@
{% if v %}
<div id='tax' class="d-none">{% if v.patron or u.patron %}0{% else %}0.03{% endif %}</div>
<script src="/assets/js/userpage_v.js?v=244"></script>
<script src="{{ 'js/userpage_v.js' | asset }}"></script>
<div id="username" class="d-none">{{u.username}}</div>
{% endif %}
<script src="/assets/js/userpage.js?v=241"></script>
<script src="{{ 'js/userpage.js' | asset }}"></script>
{% endblock %}