Make team profile pages use the shared errors component (#1589)

* Fix team pages to use the core errors alert component
* Closes #1585
This commit is contained in:
Kevin Chung
2020-08-08 04:09:13 -04:00
committed by GitHub
parent f597332c90
commit 69b4aafeac
3 changed files with 206 additions and 218 deletions

View File

@@ -154,6 +154,9 @@ def new():
@authed_only
@require_team_mode
def private():
infos = get_infos()
errors = get_errors()
user = get_current_user()
if not user.team_id:
return render_template("teams/team_enrollment.html")
@@ -167,6 +170,9 @@ def private():
place = team.place
score = team.score
if config.is_scoreboard_frozen():
infos.append("Scoreboard has been frozen")
return render_template(
"teams/private.html",
solves=solves,
@@ -176,6 +182,8 @@ def private():
score=score,
place=place,
score_frozen=config.is_scoreboard_frozen(),
infos=infos,
errors=errors,
)
@@ -184,6 +192,7 @@ def private():
@check_score_visibility
@require_team_mode
def public(team_id):
infos = get_infos()
errors = get_errors()
team = Teams.query.filter_by(id=team_id, banned=False, hidden=False).first_or_404()
solves = team.get_solves()
@@ -195,6 +204,9 @@ def public(team_id):
if errors:
return render_template("teams/public.html", team=team, errors=errors)
if config.is_scoreboard_frozen():
infos.append("Scoreboard has been frozen")
return render_template(
"teams/public.html",
solves=solves,
@@ -203,4 +215,6 @@ def public(team_id):
score=score,
place=place,
score_frozen=config.is_scoreboard_frozen(),
infos=infos,
errors=errors,
)

View File

@@ -154,139 +154,126 @@
</div>
</div>
<div class="container">
{% if errors %}
<div id='errors' class="row">
{% for error in errors %}
<h1>{{ error }}</h1>
{% include "components/errors.html" %}
<br>
<div class="row min-vh-25">
<div class="col-md-12">
<h3>Members</h3>
<table class="table table-striped">
<thead>
<tr>
<td><b>User Name</b></td>
<td><b>Score</b></td>
</tr>
</thead>
<tbody>
{% for member in team.members %}
<tr>
<td>
<a href="{{ url_for('users.public', user_id=member.id) }}">
{{ member.name }}
</a>
{% if team.captain_id == member.id %}
<span class="badge badge-primary ml-2">Captain</span>
{% endif %}
</td>
<td>{{ member.score }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% if solves %}
<div class="row">
<div class="col-md-6 d-none d-md-block d-lg-block">
<div id="keys-pie-graph" class="d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
<div class="col-md-6 d-none d-md-block d-lg-block">
<div id="categories-pie-graph" class="d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
<br class="clearfix">
<div class="col-md-12 d-none d-md-block d-lg-block">
<div id="score-graph" class="w-100 d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
{% if awards %}
<div class="row">
<div class="col-md-12">
<h3>Awards</h3>
</div>
{% for award in awards %}
<div class="col-md-3 col-sm-6">
<p class="text-center">
<i class="award-icon award-{{ award.icon }} fa-2x"></i>
<br>
<strong>{{ award.name }}</strong>
</p>
{% if award.category %}<p class="text-center">{{ award.category }}</p>{% endif %}
{% if award.description %}<p class="text-center">{{ award.description }}</p>{% endif %}
<p class="text-center">{{ award.value }}</p>
</div>
{% endfor %}
</div>
{% else %}
{% if score_frozen %}
<div class="row">
<h1 class="text-center">Scoreboard has been frozen.</h1>
</div>
<br>
{% endif %}
<br>
<div class="row min-vh-25">
<div class="row">
<div class="col-md-12">
<h3>Members</h3>
<h3>Solves</h3>
<table class="table table-striped">
<thead>
<tr>
<td><b>User Name</b></td>
<td><b>Score</b></td>
<td><b>Challenge</b></td>
<td class="d-none d-md-block d-lg-block"><b>Category</b></td>
<td><b>Value</b></td>
<td><b>Time</b></td>
</tr>
</thead>
<tbody>
{% for member in team.members %}
{% for solve in solves %}
<tr>
<td>
<a href="{{ url_for('users.public', user_id=member.id) }}">
{{ member.name }}
<a href="{{ url_for('challenges.listing') }}#{{ solve.challenge.name }}-{{ solve.challenge.id }}">
{{ solve.challenge.name }}
</a>
{% if team.captain_id == member.id %}
<span class="badge badge-primary ml-2">Captain</span>
{% endif %}
</td>
<td>{{ member.score }}</td>
<td class="d-none d-md-block d-lg-block">{{ solve.challenge.category }}</td>
<td>{{ solve.challenge.value }}</td>
<td class="solve-time">
<span data-time="{{ solve.date | isoformat }}">{{ solve.date }}</span>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% if solves %}
<div class="row">
<div class="col-md-6 d-none d-md-block d-lg-block">
<div id="keys-pie-graph" class="d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
<div class="col-md-6 d-none d-md-block d-lg-block">
<div id="categories-pie-graph" class="d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
<br class="clearfix">
<div class="col-md-12 d-none d-md-block d-lg-block">
<div id="score-graph" class="w-100 d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
{% if awards %}
<div class="row">
<div class="col-md-12">
<h3>Awards</h3>
</div>
{% for award in awards %}
<div class="col-md-3 col-sm-6">
<p class="text-center">
<i class="award-icon award-{{ award.icon }} fa-2x"></i>
<br>
<strong>{{ award.name }}</strong>
</p>
{% if award.category %}<p class="text-center">{{ award.category }}</p>{% endif %}
{% if award.description %}<p class="text-center">{{ award.description }}</p>{% endif %}
<p class="text-center">{{ award.value }}</p>
</div>
{% endfor %}
</div>
<br>
{% endif %}
<div class="row">
<div class="col-md-12">
<h3>Solves</h3>
<table class="table table-striped">
<thead>
<tr>
<td><b>Challenge</b></td>
<td class="d-none d-md-block d-lg-block"><b>Category</b></td>
<td><b>Value</b></td>
<td><b>Time</b></td>
</tr>
</thead>
<tbody>
{% for solve in solves %}
<tr>
<td>
<a href="{{ url_for('challenges.listing') }}#{{ solve.challenge.name }}-{{ solve.challenge.id }}">
{{ solve.challenge.name }}
</a>
</td>
<td class="d-none d-md-block d-lg-block">{{ solve.challenge.category }}</td>
<td>{{ solve.challenge.value }}</td>
<td class="solve-time">
<span data-time="{{ solve.date | isoformat }}">{{ solve.date }}</span>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% else %}
<div class="row min-vh-25">
<h3 class="opacity-50 text-center w-100 justify-content-center align-self-center">
No solves yet
</h3>
</div>
{% endif %}
{% else %}
<div class="row min-vh-25">
<h3 class="opacity-50 text-center w-100 justify-content-center align-self-center">
No solves yet
</h3>
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -54,136 +54,123 @@
</div>
</div>
<div class="container">
{% if errors %}
<div id='errors' class="row">
{% for error in errors %}
<h1>{{ error }}</h1>
{% include "components/errors.html" %}
<br>
<div class="row">
<div class="col-md-12">
<h3>Members</h3>
<table class="table table-striped">
<thead>
<tr>
<td><b>User Name</b></td>
<td><b>Score</b></td>
</tr>
</thead>
<tbody>
{% for member in team.members %}
<tr>
<td>
<a href="{{ url_for('users.public', user_id=member.id) }}">
{{ member.name }}
</a>
</td>
<td>{{ member.score }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% if solves %}
<div class="row">
<div class="col-md-6 d-none d-md-block d-lg-block">
<div id="keys-pie-graph" class="d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
<div class="col-md-6 d-none d-md-block d-lg-block">
<div id="categories-pie-graph" class="d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
<br class="clearfix">
<div class="col-md-12 d-none d-md-block d-lg-block">
<div id="score-graph" class="w-100 d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
{% if awards %}
<div class="row">
<div class="col-md-12">
<h3>Awards</h3>
</div>
{% for award in awards %}
<div class="col-md-3 col-sm-6">
<p class="text-center">
<i class="award-icon award-{{ award.icon }} fa-2x"></i>
<br>
<strong>{{ award.name }}</strong>
</p>
{% if award.category %}<p class="text-center">{{ award.category }}</p>{% endif %}
{% if award.description %}<p class="text-center">{{ award.description }}</p>{% endif %}
<p class="text-center">{{ award.value }}</p>
</div>
{% endfor %}
</div>
{% else %}
{% if score_frozen %}
<div class="row">
<h1 class="text-center">Scoreboard has been frozen.</h1>
</div>
<br>
{% endif %}
<br>
<div class="row">
<div class="col-md-12">
<h3>Members</h3>
<h3>Solves</h3>
<table class="table table-striped">
<thead>
<tr>
<td><b>User Name</b></td>
<td><b>Score</b></td>
<td><b>Challenge</b></td>
<td class="d-none d-md-block d-lg-block"><b>Category</b></td>
<td><b>Value</b></td>
<td><b>Time</b></td>
</tr>
</thead>
<tbody>
{% for member in team.members %}
{% for solve in solves %}
<tr>
<td>
<a href="{{ url_for('users.public', user_id=member.id) }}">
{{ member.name }}
<a href="{{ url_for('challenges.listing') }}#{{ solve.challenge.name }}-{{ solve.challenge.id }}">
{{ solve.challenge.name }}
</a>
</td>
<td>{{ member.score }}</td>
<td class="d-none d-md-block d-lg-block">{{ solve.challenge.category }}</td>
<td>{{ solve.challenge.value }}</td>
<td class="solve-time">
<span data-time="{{ solve.date | isoformat }}"></span>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% if solves %}
<div class="row">
<div class="col-md-6 d-none d-md-block d-lg-block">
<div id="keys-pie-graph" class="d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
<div class="col-md-6 d-none d-md-block d-lg-block">
<div id="categories-pie-graph" class="d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
<br class="clearfix">
<div class="col-md-12 d-none d-md-block d-lg-block">
<div id="score-graph" class="w-100 d-flex align-items-center">
<div class="text-center w-100">
<i class="fas fa-circle-notch fa-spin fa-3x fa-fw spinner"></i>
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
{% if awards %}
<div class="row">
<div class="col-md-12">
<h3>Awards</h3>
</div>
{% for award in awards %}
<div class="col-md-3 col-sm-6">
<p class="text-center">
<i class="award-icon award-{{ award.icon }} fa-2x"></i>
<br>
<strong>{{ award.name }}</strong>
</p>
{% if award.category %}<p class="text-center">{{ award.category }}</p>{% endif %}
{% if award.description %}<p class="text-center">{{ award.description }}</p>{% endif %}
<p class="text-center">{{ award.value }}</p>
</div>
{% endfor %}
</div>
<br>
{% endif %}
<div class="row">
<div class="col-md-12">
<h3>Solves</h3>
<table class="table table-striped">
<thead>
<tr>
<td><b>Challenge</b></td>
<td class="d-none d-md-block d-lg-block"><b>Category</b></td>
<td><b>Value</b></td>
<td><b>Time</b></td>
</tr>
</thead>
<tbody>
{% for solve in solves %}
<tr>
<td>
<a href="{{ url_for('challenges.listing') }}#{{ solve.challenge.name }}-{{ solve.challenge.id }}">
{{ solve.challenge.name }}
</a>
</td>
<td class="d-none d-md-block d-lg-block">{{ solve.challenge.category }}</td>
<td>{{ solve.challenge.value }}</td>
<td class="solve-time">
<span data-time="{{ solve.date | isoformat }}"></span>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% else %}
<div class="row min-vh-25">
<h3 class="opacity-50 text-center w-100 justify-content-center align-self-center">
No solves yet
</h3>
</div>
{% endif %}
{% else %}
<div class="row min-vh-25">
<h3 class="opacity-50 text-center w-100 justify-content-center align-self-center">
No solves yet
</h3>
</div>
{% endif %}
</div>
{% endblock %}