forked from rDrama/rDrama
split leaderboard tables for performance reasons
parent
fe7a05f971
commit
8457946267
|
@ -31,6 +31,7 @@ from .search import *
|
|||
from .settings import *
|
||||
from .static import *
|
||||
from .users import *
|
||||
from .leaderboard import *
|
||||
from .votes import *
|
||||
from .feeds import *
|
||||
if FEATURES['AWARDS']:
|
||||
|
|
|
@ -0,0 +1,161 @@
|
|||
from files.classes import *
|
||||
from files.classes.leaderboard import Leaderboard
|
||||
from files.helpers.config.const import *
|
||||
from files.routes.wrappers import *
|
||||
|
||||
from files.__main__ import app, limiter
|
||||
|
||||
@app.get("/leaderboard")
|
||||
@app.get("/leaderboard/coins")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_coins(v):
|
||||
leaderboard = Leaderboard("Coins", "coins", "coins", "Coins", None, Leaderboard.get_simple_lb, User.coins, v, lambda u:u.coins, g.db.query(User))
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/marseybux")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_marseybux(v):
|
||||
leaderboard = Leaderboard("Marseybux", "marseybux", "marseybux", "Marseybux", None, Leaderboard.get_simple_lb, User.marseybux, v, lambda u:u.marseybux, g.db.query(User))
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/spent")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_spent(v):
|
||||
leaderboard = Leaderboard("Coins spent on awards", "coins spent on awards", "spent", "Coins", None, Leaderboard.get_simple_lb, User.coins_spent, v, lambda u:u.coins_spent, g.db.query(User))
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/truescore")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_truescore(v):
|
||||
leaderboard = Leaderboard("Truescore", "truescore", "truescore", "Truescore", None, Leaderboard.get_simple_lb, User.truescore, v, lambda u:u.truescore, g.db.query(User))
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/followers")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_followers(v):
|
||||
leaderboard = Leaderboard("Followers", "followers", "followers", "Followers", "followers", Leaderboard.get_simple_lb, User.stored_subscriber_count, v, lambda u:u.stored_subscriber_count, g.db.query(User))
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/posts")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_posts(v):
|
||||
leaderboard = Leaderboard("Posts", "post count", "posts", "Posts", "posts", Leaderboard.get_simple_lb, User.post_count, v, lambda u:u.post_count, g.db.query(User))
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/comments")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_comments(v):
|
||||
leaderboard = Leaderboard("Comments", "comment count", "comments", "Comments", "comments", Leaderboard.get_simple_lb, User.comment_count, v, lambda u:u.comment_count, g.db.query(User))
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/received_awards")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_received_awards(v):
|
||||
leaderboard = Leaderboard("Received awards", "received awards", "received-awards", "Received Awards", None, Leaderboard.get_simple_lb, User.received_award_count, v, lambda u:u.received_award_count, g.db.query(User))
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/badges")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_badges(v):
|
||||
leaderboard = Leaderboard("Badges", "badges", "badges", "Badges", None, Leaderboard.get_badge_emoji_lb, Badge.user_id, v, None, None)
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/most_blocked")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_most_blocked(v):
|
||||
leaderboard = Leaderboard("Most blocked", "most blocked", "most-blocked", "Blocked By", "blockers", Leaderboard.get_blockers_lb, UserBlock.target_id, v, None, None)
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/owned_hats")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_owned_hats(v):
|
||||
leaderboard = Leaderboard("Owned hats", "owned hats", "owned-hats", "Owned Hats", None, Leaderboard.get_hat_lb, User.owned_hats, v, None, None)
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/designed_hats")
|
||||
@feature_required('HAT_SUBMISSIONS')
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_designed_hats(v):
|
||||
leaderboard = Leaderboard("Designed hats", "designed hats", "designed-hats", "Designed Hats", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, None)
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/emojis_made")
|
||||
@feature_required('EMOJI_SUBMISSIONS')
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_emojis_made(v):
|
||||
leaderboard = Leaderboard("Emojis made", "emojis made", "emojis-made", "Emojis Made", None, Leaderboard.get_badge_emoji_lb, Emoji.author_id, v, None, None)
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/upvotes_given")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_upvotes_given(v):
|
||||
leaderboard = Leaderboard("Upvotes given", "upvotes given", "upvotes-given", "Upvotes Given", "upvoting", Leaderboard.get_upvotes_lb, None, v, None, None)
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/downvotes_received")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_downvotes_received(v):
|
||||
leaderboard = Leaderboard("Downvotes received", "downvotes received", "downvotes-received", "Downvotes Received", "downvoters", Leaderboard.get_downvotes_lb, None, v, None, None)
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/casino_winnings_top")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_casino_winnings_top(v):
|
||||
leaderboard = Leaderboard("Casino winnings (top)", "casino winnings", "casino-winnings-top", "Casino Winnings", None, Leaderboard.get_winnings_lb, CasinoGame.winnings, v, None, None)
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/casino_winnings_bottom")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_casino_winnings_bottom(v):
|
||||
leaderboard = Leaderboard("Casino winnings (bottom)", "casino winnings", "casino-winnings-bottom", "Casino Winnings", None, Leaderboard.get_winnings_lb, CasinoGame.winnings, v, None, None, 25, False)
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/average_upvotes_per_post")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_average_upvotes_per_post(v):
|
||||
leaderboard = Leaderboard("Average upvotes per post", "average upvotes per post", "average-upvotes-per-post", "Average Upvotes per Post", "posts", Leaderboard.get_avg_upvotes_lb, Post, v, None, None)
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
||||
|
||||
@app.get("/leaderboard/average_upvotes_per_comment")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard_average_upvotes_per_comment(v):
|
||||
leaderboard = Leaderboard("Average upvotes per comment", "average upvotes per comment", "average-upvotes-per-comment", "Average Upvotes per Comment", "comments", Leaderboard.get_avg_upvotes_lb, Comment, v, None, None)
|
||||
return render_template("leaderboard.html", v=v, leaderboard=leaderboard)
|
|
@ -10,7 +10,6 @@ from sqlalchemy.orm import aliased, load_only
|
|||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from files.classes import *
|
||||
from files.classes.leaderboard import Leaderboard
|
||||
from files.classes.transactions import *
|
||||
from files.classes.views import *
|
||||
from files.helpers.actions import execute_under_siege
|
||||
|
@ -481,54 +480,6 @@ def transfer_coins(v, username):
|
|||
def transfer_bux(v, username):
|
||||
return transfer_currency(v, username, 'marseybux', False)
|
||||
|
||||
@cache.memoize()
|
||||
def leaderboard_cached(v):
|
||||
users = g.db.query(User)
|
||||
|
||||
coins = Leaderboard("Coins", "coins", "coins", "Coins", None, Leaderboard.get_simple_lb, User.coins, v, lambda u:u.coins, users)
|
||||
marseybux = Leaderboard("Marseybux", "marseybux", "marseybux", "Marseybux", None, Leaderboard.get_simple_lb, User.marseybux, v, lambda u:u.marseybux, users)
|
||||
subscribers = Leaderboard("Followers", "followers", "followers", "Followers", "followers", Leaderboard.get_simple_lb, User.stored_subscriber_count, v, lambda u:u.stored_subscriber_count, users)
|
||||
posts = Leaderboard("Posts", "post count", "posts", "Posts", "posts", Leaderboard.get_simple_lb, User.post_count, v, lambda u:u.post_count, users)
|
||||
comments = Leaderboard("Comments", "comment count", "comments", "Comments", "comments", Leaderboard.get_simple_lb, User.comment_count, v, lambda u:u.comment_count, users)
|
||||
received_awards = Leaderboard("Received awards", "received awards", "received-awards", "Received Awards", None, Leaderboard.get_simple_lb, User.received_award_count, v, lambda u:u.received_award_count, users)
|
||||
coins_spent = Leaderboard("Coins spent on awards", "coins spent on awards", "spent", "Coins", None, Leaderboard.get_simple_lb, User.coins_spent, v, lambda u:u.coins_spent, users)
|
||||
truescore = Leaderboard("Truescore", "truescore", "truescore", "Truescore", None, Leaderboard.get_simple_lb, User.truescore, v, lambda u:u.truescore, users)
|
||||
|
||||
badges = Leaderboard("Badges", "badges", "badges", "Badges", None, Leaderboard.get_badge_emoji_lb, Badge.user_id, v, None, None)
|
||||
|
||||
blocks = Leaderboard("Most blocked", "most blocked", "most-blocked", "Blocked By", "blockers", Leaderboard.get_blockers_lb, UserBlock.target_id, v, None, None)
|
||||
|
||||
owned_hats = Leaderboard("Owned hats", "owned hats", "owned-hats", "Owned Hats", None, Leaderboard.get_hat_lb, User.owned_hats, v, None, None)
|
||||
|
||||
leaderboards = [coins, marseybux, coins_spent, truescore, subscribers, posts, comments, received_awards, badges, blocks, owned_hats]
|
||||
|
||||
if FEATURES["HAT_SUBMISSIONS"]:
|
||||
leaderboards.append(Leaderboard("Designed hats", "designed hats", "designed-hats", "Designed Hats", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, None))
|
||||
|
||||
if FEATURES["EMOJI_SUBMISSIONS"]:
|
||||
leaderboards.append(Leaderboard("Emojis made", "emojis made", "emojis-made", "Emojis Made", None, Leaderboard.get_badge_emoji_lb, Emoji.author_id, v, None, None))
|
||||
|
||||
leaderboards.append(Leaderboard("Upvotes given", "upvotes given", "upvotes-given", "Upvotes Given", "upvoting", Leaderboard.get_upvotes_lb, None, v, None, None))
|
||||
|
||||
leaderboards.append(Leaderboard("Downvotes received", "downvotes received", "downvotes-received", "Downvotes Received", "downvoters", Leaderboard.get_downvotes_lb, None, v, None, None))
|
||||
|
||||
leaderboards.append(Leaderboard("Casino winnings (top)", "casino winnings", "casino-winnings-top", "Casino Winnings", None, Leaderboard.get_winnings_lb, CasinoGame.winnings, v, None, None))
|
||||
leaderboards.append(Leaderboard("Casino winnings (bottom)", "casino winnings", "casino-winnings-bottom", "Casino Winnings", None, Leaderboard.get_winnings_lb, CasinoGame.winnings, v, None, None, 25, False))
|
||||
|
||||
leaderboards.append(Leaderboard("Average upvotes per post", "average upvotes per post", "average-upvotes-per-post", "Average Upvotes per Post", "posts", Leaderboard.get_avg_upvotes_lb, Post, v, None, None))
|
||||
leaderboards.append(Leaderboard("Average upvotes per comment", "average upvotes per comment", "average-upvotes-per-comment", "Average Upvotes per Comment", "comments", Leaderboard.get_avg_upvotes_lb, Comment, v, None, None))
|
||||
|
||||
return render_template("leaderboard_cached.html", v=v, leaderboards=leaderboards)
|
||||
|
||||
@app.get("/leaderboard")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||
@auth_required
|
||||
def leaderboard(v):
|
||||
if SITE == 'watchpeopledie.tv':
|
||||
abort(403, "Leaderboard is temporarily disabled!")
|
||||
return render_template("leaderboard.html", v=v, leaderboard_cached=leaderboard_cached(v))
|
||||
|
||||
@app.get("/@<username>/css")
|
||||
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||
def get_css(username):
|
||||
|
|
|
@ -1,5 +1,76 @@
|
|||
{% extends "settings2.html" %}
|
||||
{% block pagetitle %}Leaderboard{% endblock %}
|
||||
{% block content %}
|
||||
{{leaderboard_cached | safe}}
|
||||
<header id="leaderboard-header" class="container text-center pb-3">
|
||||
<img loading="lazy" id="leaderboard-banner" alt="leaderboard banner" src="{{SITE_FULL_IMAGES}}/i/leaderboard.webp">
|
||||
</header>
|
||||
|
||||
<div class="mt-2" id="leaderboard-contents" style="text-align: center; margin-bottom: 1.5rem; font-size: 1.2rem">
|
||||
<a {% if request.path in ["/leaderboard", "/leaderboard/coins"] %}class="font-weight-bolder"{% endif %} href="/leaderboard/coins">Coins</a> •
|
||||
<a {% if request.path == "/leaderboard/marseybux" %}class="font-weight-bolder"{% endif %} href="/leaderboard/marseybux">Marseybux</a> •
|
||||
<a {% if request.path == "/leaderboard/spent" %}class="font-weight-bolder"{% endif %} href="/leaderboard/spent">Coins spent on awards</a> •
|
||||
<a {% if request.path == "/leaderboard/truescore" %}class="font-weight-bolder"{% endif %} href="/leaderboard/truescore">Truescore</a> •
|
||||
<a {% if request.path == "/leaderboard/followers" %}class="font-weight-bolder"{% endif %} href="/leaderboard/followers">Followers</a> •
|
||||
<a {% if request.path == "/leaderboard/posts" %}class="font-weight-bolder"{% endif %} href="/leaderboard/posts">Posts</a> •
|
||||
<a {% if request.path == "/leaderboard/comments" %}class="font-weight-bolder"{% endif %} href="/leaderboard/comments">Comments</a> •
|
||||
<a {% if request.path == "/leaderboard/received_awards" %}class="font-weight-bolder"{% endif %} href="/leaderboard/received_awards">Received awards</a> •
|
||||
<a {% if request.path == "/leaderboard/badges" %}class="font-weight-bolder"{% endif %} href="/leaderboard/badges">Badges</a> •
|
||||
<a {% if request.path == "/leaderboard/most_blocked" %}class="font-weight-bolder"{% endif %} href="/leaderboard/most_blocked">Most blocked</a> •
|
||||
<a {% if request.path == "/leaderboard/owned_hats" %}class="font-weight-bolder"{% endif %} href="/leaderboard/owned_hats">Owned hats</a> •
|
||||
{% if FEATURES["HAT_SUBMISSIONS"] %}
|
||||
<a {% if request.path == "/leaderboard/designed_hats" %}class="font-weight-bolder"{% endif %} href="/leaderboard/designed_hats">Designed hats</a> •
|
||||
{% endif %}
|
||||
{% if FEATURES["EMOJI_SUBMISSIONS"] %}
|
||||
<a {% if request.path == "/leaderboard/emojis_made" %}class="font-weight-bolder"{% endif %} href="/leaderboard/emojis_made">Emojis made</a> •
|
||||
{% endif %}
|
||||
<a {% if request.path == "/leaderboard/upvotes_given" %}class="font-weight-bolder"{% endif %} href="/leaderboard/upvotes_given">Upvotes given</a> •
|
||||
<a {% if request.path == "/leaderboard/downvotes_received" %}class="font-weight-bolder"{% endif %} href="/leaderboard/downvotes_received">Downvotes received</a> •
|
||||
<a {% if request.path == "/leaderboard/casino_winnings_top" %}class="font-weight-bolder"{% endif %} href="/leaderboard/casino_winnings_top">Casino winnings (top)</a> •
|
||||
<a {% if request.path == "/leaderboard/casino_winnings_bottom" %}class="font-weight-bolder"{% endif %} href="/leaderboard/casino_winnings_bottom">Casino winnings (bottom)</a> •
|
||||
<a {% if request.path == "/leaderboard/average_upvotes_per_post" %}class="font-weight-bolder"{% endif %} href="/leaderboard/average_upvotes_per_post">Average upvotes per post</a> •
|
||||
<a {% if request.path == "/leaderboard/average_upvotes_per_comment" %}class="font-weight-bolder"{% endif %} href="/leaderboard/average_upvotes_per_comment">Average upvotes per comment</a>
|
||||
</div>
|
||||
|
||||
{% macro format_user_in_table(user, style, position_no, value, user_relative_url) %}
|
||||
{% set value = value | int %}
|
||||
<tr {{style | safe}}>
|
||||
<td>{{position_no}}</td>
|
||||
<td>{% include "user_in_table.html" %}</td>
|
||||
{% if user_relative_url is not none %}
|
||||
<td><a href="/id/{{user.id}}">{{"{:,}".format(value)}}</a></td>
|
||||
{% else %}
|
||||
<td>{{"{:,}".format(value)}}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endmacro %}
|
||||
|
||||
<h5 class="font-weight-bolder text-center pt-2 pb-3"><span id="leaderboard-{{leaderboard.html_id}}">{% if leaderboard.desc %}Top{% else %}Bottom{% endif %} {{leaderboard.limit}} {% if leaderboard.table_header_name != 'most blocked' %}by{% endif %} {{leaderboard.table_header_name}}</span></h5>
|
||||
<div class="overflow-x-auto">
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Name</th>
|
||||
<th>{{leaderboard.table_column_name}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for user in leaderboard.all_users %}
|
||||
{% set user2 = leaderboard.user_func(user) %}
|
||||
{% if v.id == user2.id %}
|
||||
{% set style="class=\"self\"" %}
|
||||
{% endif %}
|
||||
{{format_user_in_table(user2, style, loop.index, leaderboard.value_func(user), leaderboard.user_relative_url)}}
|
||||
{% endfor %}
|
||||
{% if leaderboard.v_position and not leaderboard.v_appears_in_ranking %}
|
||||
{{format_user_in_table(v, "style=\"border-top:2px solid var(--primary)\"", leaderboard.v_position, leaderboard.v_value, leaderboard.user_relative_url)}}
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<a id="leader--top-btn" href="/leaderboard/contents"
|
||||
style="position: fixed; bottom: 5rem; right: 2rem; font-size: 3rem">
|
||||
<i class="fas fa-arrow-alt-circle-up"></i>
|
||||
</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
<header id="leaderboard-header" class="container text-center pb-3">
|
||||
<img loading="lazy" id="leaderboard-banner" alt="leaderboard banner" src="{{SITE_FULL_IMAGES}}/i/leaderboard.webp">
|
||||
</header>
|
||||
|
||||
<div class="mt-2" id="leaderboard-contents" style="text-align: center; margin-bottom: 1.5rem; font-size: 1.2rem">
|
||||
{% for lb in leaderboards %}
|
||||
{% if lb %}
|
||||
<a href="#leaderboard-{{lb.html_id}}">{{lb.header_name}}</a>{% if not loop.last %} •{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
{% macro format_user_in_table(user, style, position_no, value, user_relative_url) %}
|
||||
{% set value = value | int %}
|
||||
<tr {{style | safe}}>
|
||||
<td>{{position_no}}</td>
|
||||
<td>{% include "user_in_table.html" %}</td>
|
||||
{% if user_relative_url is not none %}
|
||||
<td><a href="/id/{{user.id}}">{{"{:,}".format(value)}}</a></td>
|
||||
{% else %}
|
||||
<td>{{"{:,}".format(value)}}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endmacro %}
|
||||
|
||||
{% macro leaderboard_table(lb) %}
|
||||
<h5 class="font-weight-bolder text-center pt-2 pb-3"><span id="leaderboard-{{lb.html_id}}">{% if lb.desc %}Top{% else %}Bottom{% endif %} {{lb.limit}} {% if lb.table_header_name != 'most blocked' %}by{% endif %} {{lb.table_header_name}}</span></h5>
|
||||
<div class="overflow-x-auto">
|
||||
<table class="table table-striped mb-5">
|
||||
<thead class="bg-primary text-white">
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Name</th>
|
||||
<th>{{lb.table_column_name}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for user in lb.all_users %}
|
||||
{% set user2 = lb.user_func(user) %}
|
||||
{% if v.id == user2.id %}
|
||||
{% set style="class=\"self\"" %}
|
||||
{% endif %}
|
||||
{{format_user_in_table(user2, style, loop.index, lb.value_func(user), lb.user_relative_url)}}
|
||||
{% endfor %}
|
||||
{% if lb.v_position and not lb.v_appears_in_ranking %}
|
||||
{{format_user_in_table(v, "style=\"border-top:2px solid var(--primary)\"", lb.v_position, lb.v_value, lb.user_relative_url)}}
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endmacro %}
|
||||
|
||||
{% for lb in leaderboards %}
|
||||
{% if lb %}
|
||||
{{leaderboard_table(lb)}}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<a id="leader--top-btn" href="#leaderboard-contents"
|
||||
style="position: fixed; bottom: 5rem; right: 2rem; font-size: 3rem">
|
||||
<i class="fas fa-arrow-alt-circle-up"></i>
|
||||
</a>
|
|
@ -15,7 +15,7 @@
|
|||
<div class="d-flex flex-row-reverse justify-content-end">
|
||||
<ul class="nav settings-nav" style="margin-left: -15px">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link{% if request.path == '/leaderboard' %} active{% endif %}" href="/leaderboard"><i class="fas fa-trophy pr-2"></i>Leaderboard</a>
|
||||
<a class="nav-link{% if request.path.startswith('/leaderboard') %} active{% endif %}" href="/leaderboard"><i class="fas fa-trophy pr-2"></i>Leaderboard</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link{% if request.path == '/admins' %} active{% endif %}" href="/admins"><i class="fas fa-crown pr-2"></i>Admins</a>
|
||||
|
@ -46,7 +46,7 @@
|
|||
<div class="d-flex flex-row-reverse justify-content-center">
|
||||
<ul class="nav settings-nav">
|
||||
<li class="nav-item">
|
||||
<a style="padding: 0.75rem 1rem" class="nav-link{% if request.path == '/leaderboard' %} active{% endif %}" href="/leaderboard"><i class="fas fa-trophy text-lg mr-0"></i></a>
|
||||
<a style="padding: 0.75rem 1rem" class="nav-link {% if request.path.startswith('/leaderboard') %}active{% endif %}" href="/leaderboard"><i class="fas fa-trophy text-lg mr-0"></i></a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a style="padding: 0.75rem 1rem" class="nav-link{% if request.path == '/admins' %} active{% endif %}" href="/admins"><i class="fas fa-crown text-lg mr-0"></i></a>
|
||||
|
|
Loading…
Reference in New Issue