remotes/1693045480750635534/spooky-22
Aevann1 2021-11-11 20:58:09 +02:00
parent 138e604acf
commit 8ae70b9b04
26 changed files with 99 additions and 92 deletions

View File

@ -26,7 +26,7 @@ class BadgeDef(Base):
@lazy
def path(self):
return f"/assets/images/badges/{self.icon}.gif"
return f"/assets/images/badges/{self.icon}.webp"
@property
@lazy

View File

@ -213,11 +213,11 @@ class Submission(Base):
@property
@lazy
def thumb_url(self):
if self.over_18: return f"http://{site}/assets/images/nsfw.gif"
elif not self.url: return f"http://{site}/assets/images/{site_name}/default_text.gif"
if self.over_18: return f"http://{site}/assets/images/nsfw.webp"
elif not self.url: return f"http://{site}/assets/images/{site_name}/default_text.webp"
elif self.thumburl: return self.thumburl
elif "youtu.be" in self.domain or "youtube.com" in self.domain: return f"http://{site}/assets/images/default_thumb_yt.gif"
else: return f"http://{site}/assets/images/default_thumb_link.gif"
elif "youtu.be" in self.domain or "youtube.com" in self.domain: return f"http://{site}/assets/images/default_thumb_yt.webp"
else: return f"http://{site}/assets/images/default_thumb_link.webp"
@property
@lazy

View File

@ -255,7 +255,7 @@ class User(Base):
@property
@lazy
def bio_html_eager(self):
return self.bio_html.replace('data-src', 'src').replace('src="/assets/images/loading.gif"', '')
return self.bio_html.replace('data-src', 'src').replace('src="/assets/images/loading.webp"', '')
@property
@lazy
@ -400,14 +400,14 @@ class User(Base):
@lazy
def banner_url(self):
if self.bannerurl: return self.bannerurl
else: return f"http://{site}/assets/images/{site_name}/preview.gif"
else: return f"http://{site}/assets/images/{site_name}/preview.webp"
@property
@lazy
def profile_url(self):
if self.profileurl: return self.profileurl
elif "rama" in site: return f"http://{site}/assets/images/defaultpictures/{random.randint(1, 150)}.gif"
else: return f"http://{site}/assets/images/default-profile-pic.gif"
elif "rama" in site: return f"http://{site}/assets/images/defaultpictures/{random.randint(1, 150)}.webp"
else: return f"http://{site}/assets/images/default-profile-pic.webp"
@property
@lazy

View File

@ -133,7 +133,7 @@ def sanitize(sanitized, noimages=False):
tag["class"] = "in-comment-image"
tag["loading"] = "lazy"
tag["data-src"] = tag["src"]
tag["src"] = "/assets/images/loading.gif"
tag["src"] = "/assets/images/loading.webp"
link = soup.new_tag("a")
link["href"] = tag["data-src"]

View File

@ -175,7 +175,7 @@ def api_comment(v):
file=request.files["file"]
if not file.content_type.startswith('image/'): return {"error": "That wasn't an image!"}, 400
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.gif'
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.webp'
file.save(name)
url = request.host_url[:-1] + process_image(name)
@ -669,7 +669,7 @@ def edit_comment(cid, v):
file=request.files["file"]
if not file.content_type.startswith('image/'): return {"error": "That wasn't an image!"}, 400
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.gif'
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.webp'
file.save(name)
url = request.host_url[:-1] + process_image(name)

View File

@ -487,7 +487,7 @@ def thumbnail_thread(pid):
db.close()
return
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.gif'
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.webp'
with open(name, "wb") as file:
for chunk in image_req.iter_content(1024):
@ -749,7 +749,7 @@ def submit_post(v):
), 403
if file.content_type.startswith('image/'):
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.gif'
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.webp'
file.save(name)
new_post.url = request.host_url[:-1] + process_image(name)

View File

@ -117,7 +117,7 @@ def settings_profile_post(v):
if request.headers.get("Authorization"): return {"error": f"Image files only"}, 400
else: return render_template("settings_profile.html", v=v, error=f"Image files only."), 400
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.gif'
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.webp'
file.save(name)
url = request.host_url[:-1] + process_image(name)
@ -307,7 +307,7 @@ def settings_profile_post(v):
if request.headers.get("Authorization"): return {"error": f"Image files only"}, 400
else: return render_template("settings_profile.html", v=v, error=f"Image files only."), 400
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.gif'
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.webp'
file.save(name)
url = request.host_url[:-1] + process_image(name)
@ -683,13 +683,13 @@ def settings_images_profile(v):
file = request.files["profile"]
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.gif'
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.webp'
file.save(name)
highres = request.host_url[:-1] + process_image(name)
if not highres: abort(400)
name2 = name.replace('.gif', 'r.gif')
name2 = name.replace('.webp', 'r.webp')
copyfile(name, name2)
imageurl = request.host_url[:-1] + process_image(name2, True)
@ -717,7 +717,7 @@ def settings_images_banner(v):
file = request.files["banner"]
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.gif'
name = f'/images/{int(time.time())}{secrets.token_urlsafe(2)}.webp'
file.save(name)
bannerurl = request.host_url[:-1] + process_image(name)

View File

@ -209,7 +209,7 @@ def log_item(id, v):
@app.get("/assets/favicon.ico")
def favicon():
return send_file(f"./assets/images/{site_name}/icon.gif")
return send_file(f"./assets/images/{site_name}/icon.webp")
@app.get("/api")
@auth_desired
@ -251,6 +251,10 @@ def static_service(path):
resp.headers.remove("Cache-Control")
resp.headers.add("Cache-Control", "public, max-age=2628000")
if request.path.endswith('.webp'):
resp.headers.remove("Content-Type")
resp.headers.add("Content-Type", "image/webp")
return resp
@app.get('/images/<path:path>')
@ -260,6 +264,9 @@ def images(path):
resp = make_response(send_from_directory('/images', path))
resp.headers.remove("Cache-Control")
resp.headers.add("Cache-Control", "public, max-age=2628000")
if request.path.endswith('.webp'):
resp.headers.remove("Content-Type")
resp.headers.add("Content-Type", "image/webp")
return resp
@app.get("/robots.txt")

View File

@ -91,7 +91,7 @@
<div class="splash-overlay"></div>
<img loading="lazy" class="splash-img" src="/assets/images/{{'SITE_NAME' | app_config}}/cover.gif"></img>
<img loading="lazy" class="splash-img" src="/assets/images/{{'SITE_NAME' | app_config}}/cover.webp"></img>
</div>
</div>

View File

@ -299,7 +299,7 @@
{% endif %}
<a class="user-name text-decoration-none" data-bs-placement="bottom" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover-{{c.id}}" href="javascript:void(0)" tabindex="0" style="color:#{{c.author.namecolor}}; font-size:12px; font-weight:bold;"><img loading="lazy" src="{{c.author.profile_url}}" class="profile-pic-25 mr-2"><span {% if c.author.patron and not c.distinguish_level %}class="patron" style="background-color:#{{c.author.namecolor}};"{% elif c.distinguish_level and 'rama' in request.host %}class="mod"{% endif %}>{{c.author.username}}</span></a>
{% if c.author.customtitle %}&nbsp;<bdi style="color: #{{c.author.titlecolor}}">&nbsp;{% if c.author.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{c.author.quadrant}}.gif">{% endif %}{{c.author.customtitle | safe}}</bdi>{% endif %}
{% if c.author.customtitle %}&nbsp;<bdi style="color: #{{c.author.titlecolor}}">&nbsp;{% if c.author.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{c.author.quadrant}}.webp">{% endif %}{{c.author.customtitle | safe}}</bdi>{% endif %}
{% if c.parent_comment_id and not standalone and level<=7 %}<a href="#comment-{{ c.parent_comment_id }}-only" class="text-muted ml-2"><i class="fas fa-reply fa-sm fa-fw fa-flip-horizontal mr-1"></i>{{ c.parent_comment.author.username }}</a>{% endif %}

View File

@ -11,7 +11,7 @@
{% if v and v.agendaposter %}
<script>
var BugDispatch={options:{minDelay:500,maxDelay:1E4,minBugs:2,maxBugs:20,minSpeed:5,maxSpeed:10,maxLargeTurnDeg:150,maxSmallTurnDeg:10,maxWiggleDeg:5,imageSprite:"fly-sprite.gif",bugWidth:13,bugHeight:14,num_frames:5,zoom:10,canFly:!0,canDie:!0,numDeathTypes:3,monitorMouseMovement:!1,eventDistanceToBug:40,minTimeBetweenMultipy:1E3,mouseOver:"random"},initialize:function(a){this.options=mergeOptions(this.options,a);this.options.minBugs>this.options.maxBugs&&(this.options.minBugs=this.options.maxBugs);
var BugDispatch={options:{minDelay:500,maxDelay:1E4,minBugs:2,maxBugs:20,minSpeed:5,maxSpeed:10,maxLargeTurnDeg:150,maxSmallTurnDeg:10,maxWiggleDeg:5,imageSprite:"fly-sprite.webp",bugWidth:13,bugHeight:14,num_frames:5,zoom:10,canFly:!0,canDie:!0,numDeathTypes:3,monitorMouseMovement:!1,eventDistanceToBug:40,minTimeBetweenMultipy:1E3,mouseOver:"random"},initialize:function(a){this.options=mergeOptions(this.options,a);this.options.minBugs>this.options.maxBugs&&(this.options.minBugs=this.options.maxBugs);
this.modes=["multiply","nothing"];this.options.canFly&&this.modes.push("fly","flyoff");this.options.canDie&&this.modes.push("die");-1==this.modes.indexOf(this.options.mouseOver)&&(this.options.mouseOver="random");this.transform=null;this.transforms={Moz:function(a){this.bug.style.MozTransform=a},webkit:function(a){this.bug.style.webkitTransform=a},O:function(a){this.bug.style.OTransform=a},ms:function(a){this.bug.style.msTransform=a},Khtml:function(a){this.bug.style.KhtmlTransform=a},w3c:function(a){this.bug.style.transform=
a}};if("transform"in document.documentElement.style)this.transform=this.transforms.w3c;else{var b=["Moz","webkit","O","ms","Khtml"],c=0;for(c=0;c<b.length;c++)if(b[c]+"Transform"in document.documentElement.style){this.transform=this.transforms[b[c]];break}}if(this.transform){this.bugs=[];b="multiply"===this.options.mouseOver?this.options.minBugs:this.random(this.options.minBugs,this.options.maxBugs,!0);c=0;var d=this;for(c=0;c<b;c++){a=JSON.parse(JSON.stringify(this.options));var e=SpawnBug();a.wingsOpen=
this.options.canFly?.5<Math.random()?!0:!1:!0;a.walkSpeed=this.random(this.options.minSpeed,this.options.maxSpeed);e.initialize(this.transform,a);this.bugs.push(e)}this.spawnDelay=[];for(c=0;c<b;c++)a=this.random(this.options.minDelay,this.options.maxDelay,!0),e=this.bugs[c],this.spawnDelay[c]=setTimeout(function(a){return function(){d.options.canFly?a.flyIn():a.walkIn()}}(e),a),d.add_events_to_bug(e);this.options.monitorMouseMovement&&(window.onmousemove=function(){d.check_if_mouse_close_to_bug()})}},
@ -20,7 +20,7 @@
a.pageX&&(b=a.pageX-(document.body.scrollLeft+document.documentElement.scrollLeft),c=a.pageY-(document.body.scrollTop+document.documentElement.scrollTop));a=this.bugs.length;var d;for(d=0;d<a;d++){var e=this.bugs[d].getPos();e&&Math.abs(e.top-c)+Math.abs(e.left-b)<this.options.eventDistanceToBug&&!this.bugs[d].flyperiodical&&this.near_bug(this.bugs[d])}}},near_bug:function(a){this.on_bug(a)},on_bug:function(a){if(a.alive){var b=this.options.mouseOver;"random"===b&&(b=this.modes[this.random(0,this.modes.length-
1,!0)]);if("fly"===b)a.stop(),a.flyRand();else if("nothing"!==b)if("flyoff"===b)a.stop(),a.flyOff();else if("die"===b)a.die();else if("multiply"===b&&!this.multiplyDelay&&this.bugs.length<this.options.maxBugs){var c=SpawnBug();b=JSON.parse(JSON.stringify(this.options));var d=a.getPos(),e=this;b.wingsOpen=this.options.canFly?.5<Math.random()?!0:!1:!0;b.walkSpeed=this.random(this.options.minSpeed,this.options.maxSpeed);c.initialize(this.transform,b);c.drawBug(d.top,d.left);b.canFly?(c.flyRand(),a.flyRand()):
(c.go(),a.go());this.bugs.push(c);this.multiplyDelay=!0;setTimeout(function(){e.add_events_to_bug(c);e.multiplyDelay=!1},this.options.minTimeBetweenMultipy)}}},random:function(a,b,c){if(a==b)return c?Math.round(a):a;var d=a-.5+Math.random()*(b-a+1);d>b?d=b:d<a&&(d=a);return c?Math.round(d):d}},BugController=function(){this.initialize.apply(this,arguments)};BugController.prototype=BugDispatch;
var SpiderController=function(){this.options=mergeOptions(this.options,{imageSprite:"spider-sprite.gif",bugWidth:69,bugHeight:90,num_frames:7,canFly:!1,canDie:!0,numDeathTypes:2,zoom:6,minDelay:200,maxDelay:3E3,minSpeed:6,maxSpeed:13,minBugs:3,maxBugs:10});this.initialize.apply(this,arguments)};SpiderController.prototype=BugDispatch;
var SpiderController=function(){this.options=mergeOptions(this.options,{imageSprite:"spider-sprite.webp",bugWidth:69,bugHeight:90,num_frames:7,canFly:!1,canDie:!0,numDeathTypes:2,zoom:6,minDelay:200,maxDelay:3E3,minSpeed:6,maxSpeed:13,minBugs:3,maxBugs:10});this.initialize.apply(this,arguments)};SpiderController.prototype=BugDispatch;
var Bug={options:{wingsOpen:!1,walkSpeed:2,flySpeed:40,edge_resistance:50,zoom:10},initialize:function(a,b){this.options=mergeOptions(this.options,b);this.NEAR_TOP_EDGE=1;this.NEAR_BOTTOM_EDGE=2;this.NEAR_LEFT_EDGE=4;this.NEAR_RIGHT_EDGE=8;this.directions={};this.directions[this.NEAR_TOP_EDGE]=270;this.directions[this.NEAR_BOTTOM_EDGE]=90;this.directions[this.NEAR_LEFT_EDGE]=0;this.directions[this.NEAR_RIGHT_EDGE]=180;this.directions[this.NEAR_TOP_EDGE+this.NEAR_LEFT_EDGE]=315;this.directions[this.NEAR_TOP_EDGE+
this.NEAR_RIGHT_EDGE]=225;this.directions[this.NEAR_BOTTOM_EDGE+this.NEAR_LEFT_EDGE]=45;this.directions[this.NEAR_BOTTOM_EDGE+this.NEAR_RIGHT_EDGE]=135;this.large_turn_angle_deg=this.angle_rad=this.angle_deg=0;this.near_edge=!1;this.edge_test_counter=10;this.fly_counter=this.large_turn_counter=this.small_turn_counter=0;this.toggle_stationary_counter=50*Math.random();this.zoom=this.random(this.options.zoom,10)/10;this.stationary=!1;this.bug=null;this.active=!0;this.wingsOpen=this.options.wingsOpen;
this.transform=a;this.flyIndex=this.walkIndex=0;this.alive=!0;this.twitchTimer=null;this.rad2deg_k=180/Math.PI;this.deg2rad_k=Math.PI/180;this.makeBug();this.angle_rad=this.deg2rad(this.angle_deg);this.angle_deg=this.random(0,360,!0)},go:function(){if(this.transform){this.drawBug();var a=this;this.animating=!0;this.going=requestAnimFrame(function(b){a.animate(b)})}},stop:function(){this.animating=!1;this.going&&(clearTimeout(this.going),this.going=null);this.flyperiodical&&(clearTimeout(this.flyperiodical),
@ -45,14 +45,14 @@
this.bug&&this.bug.style?{top:parseInt(this.bug.top,10),left:parseInt(this.bug.left,10)}:null}},SpawnBug=function(){var a={},b;for(b in Bug)Bug.hasOwnProperty(b)&&(a[b]=Bug[b]);return a},mergeOptions=function(a,b,c){"undefined"==typeof c&&(c=!0);a=c?cloneOf(a):a;for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);return a},cloneOf=function(a){if(null==a||"object"!=typeof a)return a;var b=a.constructor(),c;for(c in a)a.hasOwnProperty(c)&&(b[c]=cloneOf(a[c]));return b};
window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a,b){window.setTimeout(a,1E3/60)}}();
new BugController({
imageSprite: "/assets/images/fly-sprite.gif",
imageSprite: "/assets/images/fly-sprite.webp",
canDie: false,
minBugs: 5,
maxBugs: 30,
mouseOver: "fly"
});
new SpiderController({
imageSprite: "/assets/images/spider-sprite.gif",
imageSprite: "/assets/images/spider-sprite.webp",
canDie: false,
minBugs: 2,
maxBugs: 20,
@ -80,16 +80,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_NAME' | app_config}}/preview.gif">
<meta name="thumbnail" content="/assets/images/{{'SITE_NAME' | app_config}}/preview.webp">
<link rel="icon" type="image/png" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif">
<link rel="icon" type="image/png" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp">
{% block title %}
<title>{{'SITE_NAME' | app_config}}</title>
<meta property="og:type" content="article" >
<meta property="og:title" content="{{'SITE_NAME' | app_config}}" >
<meta property="og:site_name" content="{{request.host}}" >
<meta property="og:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.gif" >
<meta property="og:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.webp" >
<meta property="og:url" content="{{request.path | full_link}}">
<meta property="og:description" name="description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}">
<meta property="og:author" name="author" content="@{{request.host_url}}" >
@ -100,7 +100,7 @@
<meta name="twitter:title" content="{{'SITE_NAME' | app_config}}" >
<meta name="twitter:creator" content="@{{request.host_url}}">
<meta name="twitter:description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}" >
<meta name="twitter:image" content="/assets/images/{{'SITE_NAME' | app_config}}/preview.gif" >
<meta name="twitter:image" content="/assets/images/{{'SITE_NAME' | app_config}}/preview.webp" >
<meta name="twitter:url" content="{{request.path | full_link}}" >
{% endblock %}
@ -109,16 +109,16 @@
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
<link rel="apple-touch-icon" sizes="180x180" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif">
<!---<link rel="icon" type="image/png" sizes="32x32" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif">--->
<link rel="apple-touch-icon" sizes="180x180" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp">
<!---<link rel="icon" type="image/png" sizes="32x32" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp">--->
<link rel="manifest" href="/assets/manifest.json">
<link rel="mask-icon" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif" color="#{{'DEFAULT_COLOR' | app_config}}">
<link rel="shortcut icon" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif">
<link rel="mask-icon" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp" color="#{{'DEFAULT_COLOR' | app_config}}">
<link rel="shortcut icon" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp">
<meta name="apple-mobile-web-app-title" content="{{'SITE_NAME' | app_config}}">
<meta name="application-name" content="{{'SITE_NAME' | app_config}}">
<meta name="msapplication-TileColor" content="#{{'DEFAULT_COLOR' | app_config}}">
<meta name="msapplication-config" content="/assets/images/browserconfig.xml">
<meta name="msapplication-config" content="/assets/browserconfig.xml">
<meta name="theme-color" content="#{{'DEFAULT_COLOR' | app_config}}">
@ -126,127 +126,127 @@
<link
rel="apple-touch-startup-image"
sizes="320x480"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="640x960"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-icon"
sizes="640x1136"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-icon"
sizes="750x1334"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="768x1004"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="768x1024"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="828x1792"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="1024x748"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="1024x768"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="1125x2436"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="1242x2208"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="1242x2688"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="1334x750"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="1536x2008"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="1536x2048"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="1668x2224"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="1792x828"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="2048x1496"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="2048x1536"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="2048x2732"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="2208x1242"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="2224x1668"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="2436x1125"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="2668x1242"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>
<link
rel="apple-touch-startup-image"
sizes="2737x2048"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif"
href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp"
>

View File

@ -21,11 +21,11 @@
<div class="container-fluid" style="padding:0;">
<div class="flex-grow-1">
<a {% if v %}href="/"{% else %}href="/logged_out"{% endif %} class="navbar-brand mr-auto">
<img loading="lazy" height="30" src="/assets/images/{{'SITE_NAME' | app_config}}/headericon.gif">
<img loading="lazy" height="30" src="/assets/images/{{'SITE_NAME' | app_config}}/headericon.webp">
{% if "gigachadlife" in request.host %}
<span style="font-weight: bold; font-size: 1.2rem;">GigaChadLife</span>
{% else %}
<img loading="lazy" src="/assets/images/{{'SITE_NAME' | app_config}}/logo.gif" height="20">
<img loading="lazy" src="/assets/images/{{'SITE_NAME' | app_config}}/logo.webp" height="20">
{% endif %}
</a>
</div>

View File

@ -107,7 +107,7 @@
<div class="splash-overlay"></div>
<img loading="lazy" class="splash-img" src="/assets/images/{{'SITE_NAME' | app_config}}/cover.gif"></img>
<img loading="lazy" class="splash-img" src="/assets/images/{{'SITE_NAME' | app_config}}/cover.webp"></img>
</div>
</div>

View File

@ -92,7 +92,7 @@
<div class="splash-overlay"></div>
<img loading="lazy" class="splash-img" src="/assets/images/{{'SITE_NAME' | app_config}}/cover.gif"></img>
<img loading="lazy" class="splash-img" src="/assets/images/{{'SITE_NAME' | app_config}}/cover.webp"></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.gif" class="empty-state-img mb-3" alt="success state">
<img loading="lazy" src="/assets/images/ruckus.webp" class="empty-state-img mb-3" alt="success state">
<div class="font-weight-bold text-muted mb-4">{{title}}</div>
<p class="text-muted">{{text}}</p>

View File

@ -15,7 +15,7 @@
<td style="font-weight:bold;">{{loop.index}}</td>
<td><a style="color:#{{row['namecolor']}}; font-weight:bold;" href="/@{{row['username']}}"><img loading="lazy" src="/uid/{{uid}}/pic" class="pp20"><span {% if row['patron'] %}class="patron" style="background-color:#{{row['namecolor']}};"{% endif %}>{{row['username']}}</span></a></td>
<td><img loading="lazy" width=32 height=32 src="/assets/images/badges/patron-{{row['patron']}}.gif"></td>
<td><img loading="lazy" width=32 height=32 src="/assets/images/badges/patron-{{row['patron']}}.webp"></td>
<td style="font-weight:bold;">
{% for (a,count) in row['awards'].values() %}

View File

@ -32,13 +32,13 @@
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" type="image/png" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif">
<link rel="icon" type="image/png" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp">
<title>{% block pagetitle %}Settings - {{'SITE_NAME' | app_config}}{% endblock %}</title>
<meta property="og:type" content="article" >
<meta property="og:title" content="{{'SITE_NAME' | app_config}}" >
<meta property="og:site_name" content="{{request.host}}" >
<meta property="og:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.gif" >
<meta property="og:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.webp" >
<meta property="og:url" content="{{request.host}}">
<meta property="og:description" name="description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}">
<meta property="og:author" name="author" content="@{{request.host_url}}" >
@ -49,7 +49,7 @@
<meta name="twitter:title" content="{{'SITE_NAME' | app_config}}" >
<meta name="twitter:creator" content="@{{request.host_url}}">
<meta name="twitter:description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}" >
<meta name="twitter:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.gif" >
<meta name="twitter:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.webp" >
<meta name="twitter:url" content="{{request.host}}" >
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,600&display=swap" rel="stylesheet">

View File

@ -11,13 +11,13 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<meta name="thumbnail" content="/assets/images/{{'SITE_NAME' | app_config}}/preview.gif">
<link rel="icon" type="image/png" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif">
<meta name="thumbnail" content="/assets/images/{{'SITE_NAME' | app_config}}/preview.webp">
<link rel="icon" type="image/png" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp">
<meta property="og:type" content="article" >
<meta property="og:title" content="{{'SITE_NAME' | app_config}}" >
<meta property="og:site_name" content="{{request.host}}" >
<meta property="og:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.gif" >
<meta property="og:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.webp" >
<meta property="og:url" content="{{request.path | full_link}}">
<meta property="og:description" name="description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}">
<meta property="og:author" name="author" content="{{request.host_url}}" >
@ -28,7 +28,7 @@
<meta name="twitter:title" content="{{'SITE_NAME' | app_config}}" >
<meta name="twitter:creator" content="{{request.host_url}}">
<meta name="twitter:description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}" >
<meta name="twitter:image" content="/assets/images/{{'SITE_NAME' | app_config}}/preview.gif" >
<meta name="twitter:image" content="/assets/images/{{'SITE_NAME' | app_config}}/preview.webp" >
<meta name="twitter:url" content="{{request.path | full_link}}" >

View File

@ -6,7 +6,7 @@
{% include "emoji_modal.html" %}
{% include "gif_modal.html" %}
<script src="/assets/js/settings_profile.js?v=56"></script>
<script src="/assets/js/settings_profile.js?v=57"></script>
<script>
document.onpaste = function(event) {

View File

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

View File

@ -17,7 +17,7 @@
<meta property="og:type" content="article" >
<meta property="og:title" content="{{'SITE_NAME' | app_config}}" >
<meta property="og:site_name" content="{{request.host}}" >
<meta property="og:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.gif" >
<meta property="og:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.webp" >
<meta property="og:url" content="{{request.host}}">
<meta property="og:description" name="description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}">
<meta property="og:author" name="author" content="{{request.host_url}}" >
@ -28,7 +28,7 @@
<meta name="twitter:title" content="{{'SITE_NAME' | app_config}}" >
<meta name="twitter:creator" content="{{request.host_url}}">
<meta name="twitter:description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}" >
<meta name="twitter:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.gif" >
<meta name="twitter:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.webp" >
<meta name="twitter:url" content="{{request.host}}" >
<title>{% if ref_user %}{{ref_user.username}} invites you to {{'SITE_NAME' | app_config}}{% else %}Sign up - {{'SITE_NAME' | app_config}}{% endif %}</title>
@ -154,7 +154,7 @@
<div class="splash-overlay"></div>
<img loading="lazy" class="splash-img" src="/assets/images/{{'SITE_NAME' | app_config}}/cover.gif"></img>
<img loading="lazy" class="splash-img" src="/assets/images/{{'SITE_NAME' | app_config}}/cover.webp"></img>
</div>
</div>

View File

@ -12,7 +12,7 @@
<meta property="og:type" content="article" >
<meta property="og:title" content="{{'SITE_NAME' | app_config}}" >
<meta property="og:site_name" content="{{request.host}}" >
<meta property="og:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.gif" >
<meta property="og:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.webp" >
<meta property="og:url" content="{{request.host}}">
<meta property="og:description" name="description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}">
<meta property="og:author" name="author" content="{{request.host_url}}" >
@ -23,7 +23,7 @@
<meta name="twitter:title" content="{{'SITE_NAME' | app_config}}" >
<meta name="twitter:creator" content="{{request.host_url}}">
<meta name="twitter:description" content="{{'SITE_NAME' | app_config}} - {{'SLOGAN' | app_config}}" >
<meta name="twitter:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.gif" >
<meta name="twitter:image" content="{{'SITE_NAME' | app_config}}/assets/images/{{'SITE_NAME' | app_config}}/preview.webp" >
<meta name="twitter:url" content="{{request.host}}" >
<title>{% if ref_user %}{{ref_user.username}} invites you to {{'SITE_NAME' | app_config}}{% else %}{{'SITE_NAME' | app_config}}{% endif %}</title>
@ -83,7 +83,7 @@
<div class="splash-overlay"></div>
<img loading="lazy" class="splash-img" src="/assets/images/{{'SITE_NAME' | app_config}}/cover.gif"></img>
<img loading="lazy" class="splash-img" src="/assets/images/{{'SITE_NAME' | app_config}}/cover.webp"></img>
</div>
</div>

View File

@ -158,12 +158,12 @@
{% endif %}
{% if p.award_count("shit") %}
<script src="/assets/js/bugs.js?v=54"></script>
<script src="/assets/js/bugs.js?v=55"></script>
{% set minbugs = 10*p.award_count("shit") if p.award_count("shit") < 3 else 20 %}
{% set maxbugs = 20*p.award_count("shit") if p.award_count("shit") < 3 else 40 %}
<script>
new BugController({
imageSprite: "/assets/images/fly-sprite.gif",
imageSprite: "/assets/images/fly-sprite.webp",
canDie: false,
minBugs: {{minbugs}},
maxBugs: {{maxbugs}},
@ -174,12 +174,12 @@
{% if p.award_count("fireflies") %}
<script src="/assets/js/fireflies.js?v=54"></script>
<script src="/assets/js/fireflies.js?v=55"></script>
{% set minbugs = 10*p.award_count("fireflies") if p.award_count("fireflies") < 3 else 20 %}
{% set maxbugs = 20*p.award_count("fireflies") if p.award_count("fireflies") < 3 else 40 %}
<script>
new BugController({
imageSprite: "/assets/images/fireflies.gif",
imageSprite: "/assets/images/fireflies.webp",
canDie: false,
minBugs: {{minbugs}},
maxBugs: {{maxbugs}},
@ -446,7 +446,7 @@
{% if p.active_flags %}<a class="btn btn-primary" href="javascript:void(0)" style="padding:1px 5px; font-size:10px;" onclick="document.getElementById('flaggers').classList.toggle('d-none')">{{p.active_flags}} Reports</a>{% endif %}
{% if p.author.verified %}<i class="fas fa-badge-check align-middle ml-1" style="color:{% if p.author.verifiedcolor %}#{{p.author.verifiedcolor}}{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{p.author.verified}}"></i>
{% endif %}
<a class="user-name text-decoration-none" data-bs-placement="bottom" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover-{{p.id}}" href="javascript:void(0)" tabindex="0" style="color: #{{p.author.namecolor}}; font-weight: bold;" class="user-name"><img loading="lazy" src="{{p.author.profile_url}}" class="profile-pic-25 mr-2"><span {% if p.author.patron and not p.distinguish_level %}class="patron" style="background-color:#{{p.author.namecolor}};"{% elif p.distinguish_level and 'rama' in request.host %}class="mod"{% endif %}>{{p.author.username}}</span></a>{% if p.author.customtitle %}&nbsp;<bdi style="color: #{{p.author.titlecolor}}">&nbsp;{% if p.author.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{p.author.quadrant}}.gif">{% endif %}{{p.author.customtitle | safe}}</bdi>{% endif %}
<a class="user-name text-decoration-none" data-bs-placement="bottom" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover-{{p.id}}" href="javascript:void(0)" tabindex="0" style="color: #{{p.author.namecolor}}; font-weight: bold;" class="user-name"><img loading="lazy" src="{{p.author.profile_url}}" class="profile-pic-25 mr-2"><span {% if p.author.patron and not p.distinguish_level %}class="patron" style="background-color:#{{p.author.namecolor}};"{% elif p.distinguish_level and 'rama' in request.host %}class="mod"{% endif %}>{{p.author.username}}</span></a>{% if p.author.customtitle %}&nbsp;<bdi style="color: #{{p.author.titlecolor}}">&nbsp;{% if p.author.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{p.author.quadrant}}.webp">{% endif %}{{p.author.customtitle | safe}}</bdi>{% endif %}
<span data-bs-toggle="tooltip" data-bs-placement="bottom" id="timestamp">&nbsp;{{p.age_string}}</span>
({% if p.realurl(v) %}<a href="/search/posts/?q=domain%3A{{p.domain}}&sort=new&t=all" {% if not v or v.newtabexternal %}target="_blank"{% endif %}>{{p.domain}}</a>{% else %}text post{% endif %})

View File

@ -216,7 +216,7 @@
{% if p.active_flags %}<a class="btn btn-primary" href="javascript:void(0)" style="padding:1px 5px; font-size:10px;" onclick="document.getElementById('flaggers-{{p.id}}').classList.toggle('d-none')">{{p.active_flags}} Reports</a>{% endif %}
{% if p.author.verified %}<i class="fas fa-badge-check align-middle ml-1" style="color:{% if p.author.verifiedcolor %}#{{p.author.verifiedcolor}}{% else %}#1DA1F2{% endif %}" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{p.author.verified}}"></i>
{% endif %}
<a class="user-name text-decoration-none" data-bs-placement="bottom" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover-{{p.id}}" href="javascript:void(0)" tabindex="0" style="color: #{{p.author.namecolor}}; font-weight: bold;"><img loading="lazy" src="{{p.author.profile_url}}" class="profile-pic-25 mr-2"><span {% if p.author.patron and not p.distinguish_level %}class="patron" style="background-color:#{{p.author.namecolor}};"{% elif p.distinguish_level and 'rama' in request.host %}class="mod"{% endif %}>{{p.author.username}}</span></a>{% if p.author.customtitle %}<bdi style="color: #{{p.author.titlecolor}}">&nbsp;&nbsp;{% if p.author.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{p.author.quadrant}}.gif">{% endif %}{{p.author.customtitle | safe}}</bdi>{% endif %}
<a class="user-name text-decoration-none" data-bs-placement="bottom" data-bs-toggle="popover" data-bs-trigger="focus" data-content-id="popover-{{p.id}}" href="javascript:void(0)" tabindex="0" style="color: #{{p.author.namecolor}}; font-weight: bold;"><img loading="lazy" src="{{p.author.profile_url}}" class="profile-pic-25 mr-2"><span {% if p.author.patron and not p.distinguish_level %}class="patron" style="background-color:#{{p.author.namecolor}};"{% elif p.distinguish_level and 'rama' in request.host %}class="mod"{% endif %}>{{p.author.username}}</span></a>{% if p.author.customtitle %}<bdi style="color: #{{p.author.titlecolor}}">&nbsp;&nbsp;{% if p.author.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{p.author.quadrant}}.webp">{% endif %}{{p.author.customtitle | safe}}</bdi>{% endif %}
<span data-bs-toggle="tooltip" data-bs-placement="bottom" id="timestamp-{{p.id}}">&nbsp;{{p.age_string}}</span>
&nbsp;
({% if p.realurl(v) %}<a href="/search/posts/?q=domain%3A{{p.domain}}&sort=new&t=all" target="_blank">{{p.domain}}</a>{% else %}text post{% endif %})
@ -511,7 +511,7 @@
{% if p.is_image and not p.over_18 and ((v and v.cardview) or (not v and environ.get('CARD_VIEW') == '1')) %}
<div style="text-align: center" class="mt-3 mb-4">
<a target="_blank" rel="nofollow noopener noreferrer" href="{{p.url}}">
<img loading="lazy" src="/assets/images/loading.gif" data-src="{{p.url}}" class="img-fluid" style="max-height:500px;" alt="Unable to load image">
<img loading="lazy" src="/assets/images/loading.webp" data-src="{{p.url}}" class="img-fluid" style="max-height:500px;" alt="Unable to load image">
</a>
</div>
{% endif %}

View File

@ -10,7 +10,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" type="image/png" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.gif">
<link rel="icon" type="image/png" href="/assets/images/{{'SITE_NAME' | app_config}}/icon.webp">
{% include "emoji_modal.html" %}
{% include "gif_modal.html" %}

View File

@ -155,7 +155,7 @@
</div>
</div>
{% if u.customtitle %}<p class="font-weight-bolder" style="color: #{{u.titlecolor}}">{% if u.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{u.quadrant}}.gif">{% endif %}{{u.customtitle | safe}}</p>{% endif %}
{% if u.customtitle %}<p class="font-weight-bolder" style="color: #{{u.titlecolor}}">{% if u.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{u.quadrant}}.webp">{% endif %}{{u.customtitle | safe}}</p>{% endif %}
<div class="font-weight-bolder">
<span id="profile-coins-amount">{{u.coins}}</span>
<img class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{'COINS_NAME' | app_config}}" height="20" src="/assets/images/emojis/marseycoin.webp">&nbsp;&nbsp;
@ -431,7 +431,7 @@
{% if v and v.has_follower(u) and not v.is_nofollow %}
<span class="followsyou text-primary badge badge-secondary text-small align-middle mx-1">Follows you</span>
{% endif %}
{% if u.customtitle %}<p style="color: #{{u.titlecolor}}">{% if u.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{u.quadrant}}.gif">{% endif %}{{u.customtitle | safe}}</p>{% endif %}
{% if u.customtitle %}<p style="color: #{{u.titlecolor}}">{% if u.quadrant %}<img loading="lazy" height="20" src="/assets/images/PCM/quadrants/{{u.quadrant}}.webp">{% endif %}{{u.customtitle | safe}}</p>{% endif %}
<div class="font-weight-normal">
<span id="profile-coins-amount-mobile" class="font-weight-bold">{{u.coins}}</span>
<img class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="" data-bs-original-title="{{'COINS_NAME' | app_config}}" height="15" src="/assets/images/emojis/marseycoin.webp">&nbsp;&nbsp;