mirror of
https://github.com/aljazceru/CTFd.git
synced 2026-02-19 21:24:25 +01:00
Squashed 'CTFd/themes/core-beta/' changes from 9126d77d..5ce3003b
5ce3003b Merge pull request #47 from aCursedComrade/patch-1 c9887cb1 Fix team template git-subtree-dir: CTFd/themes/core-beta git-subtree-split: 5ce3003b4d68352e629ee2d390bc999e7d6b071e
This commit is contained in:
19
templates/components/errors.html
Normal file
19
templates/components/errors.html
Normal file
@@ -0,0 +1,19 @@
|
||||
<div>
|
||||
{% for info in infos %}
|
||||
<div class="alert alert-info alert-dismissible text-center" role="alert">
|
||||
<span>{{ info }}</span>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"></span>
|
||||
</button>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{% for error in errors %}
|
||||
<div class="alert alert-danger alert-dismissible text-center" role="alert">
|
||||
<span>{{ error }}</span>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true"></span>
|
||||
</button>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
186
templates/components/navbar.html
Normal file
186
templates/components/navbar.html
Normal file
@@ -0,0 +1,186 @@
|
||||
<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
|
||||
<div class="container">
|
||||
<a href="{{ url_for('views.static_html', route='/') }}" class="navbar-brand">
|
||||
{% if Configs.ctf_logo %}
|
||||
<img
|
||||
class="img-responsive ctf_logo"
|
||||
src="{{ url_for('views.files', path=Configs.ctf_logo) }}"
|
||||
alt="{{ Configs.ctf_name }}"
|
||||
height="25"
|
||||
>
|
||||
{% else %}
|
||||
{{ Configs.ctf_name }}
|
||||
{% endif %}
|
||||
</a>
|
||||
|
||||
<button
|
||||
class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#base-navbars"
|
||||
aria-controls="base-navbars" aria-expanded="false" aria-label="Toggle navigation"
|
||||
>
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="base-navbars">
|
||||
<ul class="navbar-nav me-auto">
|
||||
{% for page in Plugins.user_menu_pages %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ page.route }}">{{ page.title }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
||||
{% if Configs.account_visibility != 'admins' %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('users.listing') }}">
|
||||
{% trans %}Users{% endtrans %}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{% if Configs.user_mode == 'teams' %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('teams.listing') }}">
|
||||
{% trans %}Teams{% endtrans %}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if Configs.account_visibility != 'admins' and Configs.score_visibility != 'admins' %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('scoreboard.listing') }}">
|
||||
{% trans %}Scoreboard{% endtrans %}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('challenges.listing') }}">
|
||||
{% trans %}Challenges{% endtrans %}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<hr class="d-sm-flex d-md-flex d-lg-none">
|
||||
|
||||
<ul class="navbar-nav ms-md-auto d-block d-sm-flex d-md-flex">
|
||||
{% if authed() %}
|
||||
|
||||
{% if is_admin() %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('admin.view') }}">
|
||||
<span
|
||||
class="d-block"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-placement="bottom"
|
||||
title="Admin Panel"
|
||||
>
|
||||
<i class="fas fa-wrench d-none d-md-block d-lg-none"></i>
|
||||
</span>
|
||||
<span class="d-sm-block d-md-none d-lg-block">
|
||||
<i class="fas fa-wrench pe-1"></i>
|
||||
{% trans %}Admin Panel{% endtrans %}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('views.notifications') }}">
|
||||
<span
|
||||
class="d-block" data-bs-toggle="tooltip" data-bs-placement="bottom"
|
||||
title="Notifications"
|
||||
>
|
||||
<i class="fas fa-bell d-none d-md-block d-lg-none"></i>
|
||||
</span>
|
||||
<span class="d-sm-block d-md-none d-lg-block">
|
||||
<i class="fas fa-bell pe-1"></i>
|
||||
<span x-data x-show="$store.unread_count > 0" x-text="$store.unread_count" class="badge rounded-pill bg-danger badge-notification"></span>
|
||||
{% trans %}Notifications{% endtrans %}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{% if Configs.user_mode == "teams" %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('teams.private') }}">
|
||||
<span class="d-block" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Team">
|
||||
<i class="fas fa-users d-none d-md-block d-lg-none"></i>
|
||||
</span>
|
||||
<span class="d-sm-block d-md-none d-lg-block">
|
||||
<i class="fas fa-users pe-1"></i>
|
||||
{% trans %}Team{% endtrans %}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('users.private') }}">
|
||||
<span class="d-block" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Profile">
|
||||
<i class="fas fa-user-circle d-none d-md-block d-lg-none"></i>
|
||||
</span>
|
||||
<span class="d-sm-block d-md-none d-lg-block">
|
||||
<i class="fas fa-user-circle pe-1"></i>
|
||||
{% trans %}Profile{% endtrans %}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('views.settings') }}">
|
||||
<span class="d-block" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Settings">
|
||||
<i class="fas fa-cogs d-none d-md-block d-lg-none"></i>
|
||||
</span>
|
||||
<span class="d-sm-block d-md-none d-lg-block">
|
||||
<i class="fas fa-cogs pe-1"></i>
|
||||
{% trans %}Settings{% endtrans %}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('auth.logout') }}">
|
||||
<span class="d-block" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Logout">
|
||||
<i class="fas fa-sign-out-alt d-none d-md-block d-lg-none"></i>
|
||||
</span>
|
||||
<span class="d-sm-block d-md-none d-lg-block">
|
||||
<i class="fas fa-sign-out-alt pe-1"></i><span class="d-lg-none">
|
||||
{% trans %}Logout{% endtrans %}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
|
||||
{% if registration_visible() %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('auth.register') }}">
|
||||
<span
|
||||
class="d-block" data-bs-toggle="tooltip" data-bs-placement="bottom"
|
||||
title="Register"
|
||||
>
|
||||
<i class="fas fa-user-plus d-none d-md-block d-lg-none"></i>
|
||||
</span>
|
||||
<span class="d-sm-block d-md-none d-lg-block">
|
||||
<i class="fas fa-user-plus pe-1"></i>
|
||||
{% trans %}Register{% endtrans %}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('auth.login') }}">
|
||||
<span class="d-block" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Login">
|
||||
<i class="fas fa-sign-in-alt d-none d-md-block d-lg-none"></i>
|
||||
</span>
|
||||
<span class="d-sm-block d-md-none d-lg-block">
|
||||
<i class="fas fa-sign-in-alt pe-1"></i>
|
||||
{% trans %}Login{% endtrans %}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
33
templates/components/notifications.html
Normal file
33
templates/components/notifications.html
Normal file
@@ -0,0 +1,33 @@
|
||||
<div x-data>
|
||||
<div class="position-fixed bottom-0 end-0 p-3" style="z-index: 11">
|
||||
<div x-ref="toast" class="toast hide" role="alert" aria-live="assertive" aria-atomic="true">
|
||||
<div class="toast-header">
|
||||
<strong class="me-auto" x-text="$store.toast.title"></strong>
|
||||
<small>just now</small>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="toast-body" x-html="$store.toast.html">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div x-data>
|
||||
<div class="modal" x-ref="modal" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" x-text="$store.modal.title"></h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p x-html="$store.modal.html"></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">Got it!</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user