Compare commits

...

1 Commits

Author SHA1 Message Date
rubenwardy b652cfd857 Update to Bootstrap v5 2022-01-27 20:00:33 +00:00
67 changed files with 313 additions and 321 deletions

View File

@ -145,7 +145,7 @@ class User(db.Model, UserMixin):
github_access_token = db.Column(db.String(50), nullable=True, server_default=None)
# User email information
email = db.Column(db.String(255), nullable=True, unique=True)
email = db.Column(db.String(320), nullable=True, unique=True)
email_confirmed_at = db.Column(db.DateTime(), nullable=True, server_default=None)
locale = db.Column(db.String(10), nullable=True, default=None)
@ -291,7 +291,7 @@ class User(db.Model, UserMixin):
class UserEmailVerification(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
email = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(320), nullable=False)
token = db.Column(db.String(32), nullable=True)
user = db.relationship("User", foreign_keys=[user_id], back_populates="email_verifications")
is_password_reset = db.Column(db.Boolean, nullable=False, default=False)
@ -300,7 +300,7 @@ class UserEmailVerification(db.Model):
class EmailSubscription(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(100), nullable=False, unique=True)
email = db.Column(db.String(320), nullable=False, unique=True)
blacklisted = db.Column(db.Boolean, nullable=False, default=False)
token = db.Column(db.String(32), nullable=True, default=None)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -7,7 +7,7 @@ document.querySelectorAll(".video-embed").forEach(ele => {
ele.addEventListener("click", () => {
ele.parentNode.classList.add("d-block");
ele.classList.add("embed-responsive");
ele.classList.add("embed-responsive-16by9");
ele.classList.add("embed-responsive-16x9");
ele.innerHTML = `
<iframe title="YouTube video player" frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"

View File

@ -272,3 +272,7 @@ blockquote {
margin-bottom: 0 !important;
}
}
.form-group {
margin-bottom: 1rem !important;
}

View File

@ -78,3 +78,15 @@
padding: 0;
margin: 0 0.75em;
}
.jumbotron {
padding: 4rem 2rem;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
padding: 2rem 1rem;
margin-bottom: 2rem;
background-color: #303030;
border-radius: .3rem;
}

View File

@ -6,7 +6,7 @@
{% block content %}
{% if entry.url %}
<a class="float-right btn btn-primary" href="{{ entry.url }}">View</a>
<a class="float-end btn btn-primary" href="{{ entry.url }}">View</a>
{% endif %}
<h1>{{ entry.title }}</h1>

View File

@ -9,7 +9,7 @@
{% endblock %}
{% block content %}
<a class="btn btn-primary float-right" href="{{ url_for('admin.create_edit_license') }}">New License</a>
<a class="btn btn-primary float-end" href="{{ url_for('admin.create_edit_license') }}">New License</a>
<a class="btn btn-secondary mb-4" href="{{ url_for('admin.license_list') }}">Back to list</a>
{% from "macros/forms.html" import render_field, render_checkbox_field, render_submit_field %}

View File

@ -5,7 +5,7 @@ Licenses
{% endblock %}
{% block content %}
<a class="btn btn-primary float-right" href="{{ url_for('admin.create_edit_license') }}">{{ _("New License") }}</a>
<a class="btn btn-primary float-end" href="{{ url_for('admin.create_edit_license') }}">{{ _("New License") }}</a>
<h1>{{ _("Licenses") }}</h1>
@ -13,7 +13,7 @@ Licenses
{% for l in licenses %}
<a class="list-group-item list-group-item-action"
href="{{ url_for('admin.create_edit_license', name=l.name) }}">
<span class="float-right badge {% if l.is_foss %}badge-primary{% else %}badge-warning{% endif %} badge-pill">
<span class="float-end badge {% if l.is_foss %}bg-primary{% else %}bg-warning{% endif %} rounded-pill">
{{ l.is_foss and "Free" or "Non-free"}}
</span>
{{ l.name }}

View File

@ -26,14 +26,14 @@
<form method="post" action="" class="card-body">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<div class="row px-3">
<select name="action" class="custom-select col">
<select name="action" class="form-select col">
{% for id, action in actions.items() %}
<option value="{{ id }}" {% if loop.first %}selected{% endif %}>
{{ action["title"] }}
</option>
{% endfor %}
</select>
<input type="submit" value="Perform" class="col-sm-auto btn btn-primary ml-2" />
<input type="submit" value="Perform" class="col-sm-auto btn btn-primary ms-2" />
</div>
</form>
</div>
@ -45,12 +45,12 @@
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input type="hidden" name="action" value="restore" />
<div class="row px-3">
<select name="package" class="custom-select col">
<select name="package" class="form-select col">
{% for p in deleted_packages %}
<option value={{ p.id }}>{{ p.id}}) {{ p.title }} by {{ p.author.display_name }}</option>
{% endfor %}
</select>
<input type="submit" value="Restore" class="col-sm-auto btn btn-primary ml-2" />
<input type="submit" value="Restore" class="col-sm-auto btn btn-primary ms-2" />
</div>
</form>

View File

@ -11,7 +11,7 @@
<form method="post" action="" class="card-body">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<div class="">
<select name="package" class="custom-select px-3" required>
<select name="package" class="form-select px-3" required>
<option disabled selected>-- please select --</option>
{% for p in deleted_packages %}
<option value="{{ p.id }}">
@ -21,8 +21,8 @@
</select>
<div class="mt-3">
<input type="submit" name="submit" value="To Draft" class="col-sm-auto btn btn-warning" />
<input type="submit" name="submit" value="To Changes Needed" class="col-sm-auto btn btn-danger ml-2" />
<input type="submit" name="submit" value="To Ready for Review" class="col-sm-auto btn btn-success ml-2" />
<input type="submit" name="submit" value="To Changes Needed" class="col-sm-auto btn btn-danger ms-2" />
<input type="submit" name="submit" value="To Ready for Review" class="col-sm-auto btn btn-success ms-2" />
</div>
</div>
</form>

View File

@ -9,7 +9,7 @@
{% endblock %}
{% block content %}
<a class="btn btn-primary float-right" href="{{ url_for('admin.create_edit_tag') }}">New Tag</a>
<a class="btn btn-primary float-end" href="{{ url_for('admin.create_edit_tag') }}">New Tag</a>
<a class="btn btn-secondary mb-4" href="{{ url_for('admin.tag_list') }}">Back to list</a>
{% from "macros/forms.html" import render_field, render_submit_field, render_checkbox_field %}

View File

@ -5,11 +5,11 @@
{% endblock %}
{% block content %}
<a class="btn btn-primary float-right" href="{{ url_for('admin.create_edit_tag') }}">{{ _("New Tag") }}</a>
<a class="btn btn-primary float-end" href="{{ url_for('admin.create_edit_tag') }}">{{ _("New Tag") }}</a>
<h1>{{ _("Tags") }}</h1>
<p class="float-right">
<p class="float-end">
Sort by:
<a href="{{ url_set_query(sort='name') }}">Name</a> |
<a href="{{ url_set_query(sort='views') }}">Views</a>

View File

@ -9,7 +9,7 @@
{% endblock %}
{% block content %}
<a class="btn btn-primary float-right" href="{{ url_for('admin.create_edit_version') }}">New Version</a>
<a class="btn btn-primary float-end" href="{{ url_for('admin.create_edit_version') }}">New Version</a>
<a class="btn btn-secondary mb-4" href="{{ url_for('admin.version_list') }}">Back to list</a>
{% from "macros/forms.html" import render_field, render_submit_field %}

View File

@ -5,7 +5,7 @@
{% endblock %}
{% block content %}
<a class="btn btn-primary float-right" href="{{ url_for('admin.create_edit_version') }}">{{ _("New Version") }}</a>
<a class="btn btn-primary float-end" href="{{ url_for('admin.create_edit_version') }}">{{ _("New Version") }}</a>
<h1>{{ _("Minetest Versions") }}</h1>

View File

@ -9,7 +9,7 @@
{% endblock %}
{% block content %}
<a class="btn btn-primary float-right" href="{{ url_for('admin.create_edit_warning') }}">New Warning</a>
<a class="btn btn-primary float-end" href="{{ url_for('admin.create_edit_warning') }}">New Warning</a>
<a class="btn btn-secondary mb-4" href="{{ url_for('admin.warning_list') }}">Back to list</a>
{% from "macros/forms.html" import render_field, render_submit_field %}

View File

@ -5,7 +5,7 @@
{% endblock %}
{% block content %}
<a class="btn btn-primary float-right" href="{{ url_for('admin.create_edit_warning') }}">{{ _("New Warning") }}</a>
<a class="btn btn-primary float-end" href="{{ url_for('admin.create_edit_warning') }}">{{ _("New Warning") }}</a>
<h1>{{ _("Warnings") }}</h1>

View File

@ -12,7 +12,7 @@
{% block content %}
{% if token %}
<form class="float-right" method="POST" action="{{ url_for('api.delete_token', username=token.owner.username, id=token.id) }}">
<form class="float-end" method="POST" action="{{ url_for('api.delete_token', username=token.owner.username, id=token.id) }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<input class="btn btn-danger" type="submit" value="{{ _('Delete') }}">
</form>

View File

@ -5,8 +5,8 @@
{% endblock %}
{% block pane %}
<a class="btn btn-primary float-right" href="{{ url_for('api.create_edit_token', username=user.username) }}">{{ _("Create") }}</a>
<a class="btn btn-secondary mr-2 float-right" href="/help/api/">{{ _("API Documentation") }}</a>
<a class="btn btn-primary float-end" href="{{ url_for('api.create_edit_token', username=user.username) }}">{{ _("Create") }}</a>
<a class="btn btn-secondary me-2 float-end" href="/help/api/">{{ _("API Documentation") }}</a>
<h2 class="mt-0">{{ _("API Tokens") }}</h2>
<div class="list-group">

View File

@ -5,8 +5,8 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}title{% endblock %} - {{ config.USER_APP_NAME }}</title>
<link rel="stylesheet" type="text/css" href="/static/libs/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="/static/custom.css?v=34">
<link rel="stylesheet" type="text/css" href="/static/libs/bootstrap.min.css?v=2">
<link rel="stylesheet" type="text/css" href="/static/custom.css?v=35">
<link rel="search" type="application/opensearchdescription+xml" href="/static/opensearch.xml" title="ContentDB" />
<link rel="shortcut icon" href="/favicon-16.png" sizes="16x16">
<link rel="icon" href="/favicon-128.png" sizes="128x128">
@ -22,7 +22,7 @@
</button>
<div class="collapse navbar-collapse" id="navbarColor01">
<ul class="navbar-nav mr-auto">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link" href="{{ url_for('packages.list_all', type='mod') }}">{{ _("Mods") }}</a>
</li>
@ -42,18 +42,14 @@
<a class="nav-link" href="{{ url_for('threads.list_all') }}">{{ _("Threads") }}</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0" method="GET" action="/packages/">
<form class="d-flex my-2 my-lg-0" method="GET" action="/packages/">
{% if type %}<input type="hidden" name="type" value="{{ type }}" />{% endif %}
<input class="form-control" name="q" type="text"
<input class="form-control me-1" name="q" type="text"
placeholder="{% if query_hint %}{{ _('Search %(type)s', type=query_hint | lower) }}{% else %}{{ _('Search all packages') }}{% endif %}"
value="{{ query or ''}}">
<input class="btn btn-secondary my-2 my-sm-0 mr-sm-2" type="submit" value="{{ _('Search') }}" />
<!-- <input class="btn btn-secondary my-2 my-sm-0"
data-toggle="tooltip" data-placement="bottom"
title="Go to the first found result for this query."
type="submit" name="lucky" value="First" /> -->
<input class="btn btn-secondary" type="submit" value="{{ _('Search') }}" />
</form>
<ul class="navbar-nav ml-auto">
<ul class="navbar-nav ms-auto">
{% if current_user.is_authenticated %}
{% if todo_list_count is not none %}
<li class="nav-item">
@ -62,7 +58,7 @@
title="{{ _('Work Queue') }}">
{% if todo_list_count > 0 %}
<i class="fas fa-inbox"></i>
<span class="badge badge-pill badge-notify">{{ todo_list_count }}</span>
<span class="badge rounded-pill badge-notify">{{ todo_list_count }}</span>
{% else %}
<i class="fas fa-inbox" ></i>
{% endif %}
@ -86,11 +82,11 @@
<i class="fas fa-bell"></i>
{% set num_notifs = current_user.notifications | length %}
{% if num_notifs > 60 %}
<span class="badge badge-pill badge-notify badge-emoji">
<span class="badge rounded-pill badge-notify badge-emoji">
😢
</span>
{% else %}
<span class="badge badge-pill badge-notify">
<span class="badge rounded-pill badge-notify">
{{ num_notifs }}
</span>
{% endif %}

View File

@ -46,7 +46,7 @@
<body>
<div style="font-family: 'Arial', 'sans-serif'; max-width: 700px; margin: auto; padding: 0;">
<div style="background: #2C3E50; padding: 1.2rem 1.2rem 1.2rem 2em; color: white;">
<h1 style="margin: 0; font-size: 120%; font-weight: normal;">ContentDB</h1>
<h1 style="margin: 0; font-size: 120%;" class="m-0 fw-normal">ContentDB</h1>
</div>
<div style="padding: 2em; background: white;">
{% block content %}

View File

@ -33,7 +33,7 @@
{% set tags = package.tags | sort(attribute="views", reverse=True) %}
<div class="carousel-item {% if loop.index == 1 %}active{% endif %}">
<a href="{{ package.getURL("packages.view") }}">
<div class="embed-responsive embed-responsive-16by9">
<div class="embed-responsive embed-responsive-16x9">
<img class="embed-responsive-item" src="{{ cover_image }}"
alt="{{ _('%(title)s by %(author)s', title=package.title, author=package.author.display_name) }}">
</div>
@ -50,18 +50,18 @@
</p>
{% if package.author %}
<div class="d-none d-md-block">
<span class="mr-2">
<span class="me-2">
{{ package.type.text }}
</span>
{% for warning in package.content_warnings %}
<span class="badge badge-warning" title="{{ warning.description }}">
<span class="badge bg-warning" title="{{ warning.description }}">
<i class="fas fa-exclamation-circle" style="margin-right: 0.3em;"></i>
{{ warning.title }}
</span>
{% endfor %}
{% for t in tags[:3] %}
{% if t.name != "featured" %}
<span class="badge badge-primary" title="{{ t.description or '' }}">
<span class="badge bg-primary" title="{{ t.description or '' }}">
{{ t.title }}
</span>
{% endif %}
@ -90,42 +90,42 @@
<span class="sr-only">{{ _("Next") }}</span>
</a>
</div>
<div class="text-right mb-5 text-muted" style="opacity: 0.4;">
<div class="text-end mb-5 text-muted" style="opacity: 0.4;">
<a href="/help/featured/" class="btn">
<i class="fas fa-question-circle mr-1"></i>
<i class="fas fa-question-circle me-1"></i>
{{ _("Featured") }}
</a>
</div>
<a href="{{ url_for('packages.list_all', sort='approved_at', order='desc') }}" class="btn btn-secondary float-right">
<a href="{{ url_for('packages.list_all', sort='approved_at', order='desc') }}" class="btn btn-secondary float-end">
{{ _("See more") }}
</a>
<h2 class="my-3">{{ _("Recently Added") }}</h2>
{{ render_pkggrid(new) }}
<a href="{{ url_for('packages.list_all', sort='last_release', order='desc') }}" class="btn btn-secondary float-right">
<a href="{{ url_for('packages.list_all', sort='last_release', order='desc') }}" class="btn btn-secondary float-end">
{{ _("See more") }}
</a>
<h2 class="my-3">{{ _("Recently Updated") }}</h2>
{{ render_pkggrid(updated) }}
<a href="{{ url_for('packages.list_all', type='game', sort='score', order='desc') }}" class="btn btn-secondary float-right">
<a href="{{ url_for('packages.list_all', type='game', sort='score', order='desc') }}" class="btn btn-secondary float-end">
{{ _("See more") }}
</a>
<h2 class="my-3">{{ _("Top Games") }}</h2>
{{ render_pkggrid(pop_gam) }}
<a href="{{ url_for('packages.list_all', type='mod', sort='score', order='desc') }}" class="btn btn-secondary float-right">
<a href="{{ url_for('packages.list_all', type='mod', sort='score', order='desc') }}" class="btn btn-secondary float-end">
{{ _("See more") }}
</a>
<h2 class="my-3">{{ _("Top Mods") }}</h2>
{{ render_pkggrid(pop_mod) }}
<a href="{{ url_for('packages.list_all', type='txp', sort='score', order='desc') }}" class="btn btn-secondary float-right">
<a href="{{ url_for('packages.list_all', type='txp', sort='score', order='desc') }}" class="btn btn-secondary float-end">
{{ _("See more") }}
</a>
<h2 class="my-3">{{ _("Top Texture Packs") }}</h2>
@ -141,20 +141,20 @@
title="{{ tag.description or '' }}"
href="{{ url_for('packages.list_all', tag=tag.name) }}">
{{ tag.title }}
<span class="badge badge-pill badge-light ml-1">{{ count }}</span>
<span class="badge rounded-pill bg-light ms-1">{{ count }}</span>
</a>
{% endfor %}
<div class="clearfix mb-4"></div>
<a href="{{ url_for('packages.list_all', sort='reviews', order='desc') }}" class="btn btn-secondary float-right">
<a href="{{ url_for('packages.list_all', sort='reviews', order='desc') }}" class="btn btn-secondary float-end">
{{ _("See more") }}
</a>
<h2 class="my-3">{{ _("Highest Reviewed") }}</h2>
{{ render_pkggrid(high_reviewed) }}
<a href="{{ url_for('packages.list_reviews') }}" class="btn btn-secondary float-right">
<a href="{{ url_for('packages.list_reviews') }}" class="btn btn-secondary float-end">
{{ _("See more") }}
</a>
<h2 class="my-3">{{ _("Recent Positive Reviews") }}</h2>

View File

@ -27,7 +27,7 @@
style="max-height: 22px;"
src="{{ entry.causer.getProfilePicURL() }}" />
<span class="pl-2">{{ entry.causer.username }}</span>
<span class="ps-2">{{ entry.causer.username }}</span>
{% else %}
<i>{{ _("Deleted User") }}</i>
{% endif %}
@ -37,13 +37,13 @@
{{ entry.title}}
{% if entry.description %}
<i class="fas fa-paperclip ml-3"></i>
<i class="fas fa-paperclip ms-3"></i>
{% endif %}
</div>
{% if entry.package %}
<div class="col-sm-auto text-muted">
<span class="pr-2">
<span class="pe-2">
{{ entry.package.title }}
</span>

View File

@ -8,7 +8,7 @@
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
{% if field.type != 'HiddenField' %}
{% if not label and label != "" %}{% set label=field.label.text %}{% endif %}
{% if label %}<label for="{{ field.id }}" {% if not label_visible %}class="sr-only"{% endif %}>{{ label|safe }}</label>{% endif %}
{% if label %}<label for="{{ field.id }}" {% if not label_visible %}class="sr-only"{% else %}class="form-label"{% endif %}>{{ label|safe }}</label>{% endif %}
{% endif %}
{{ field(class_=fieldclass or 'form-control', **kwargs) }}
{% if hint %}
@ -22,13 +22,11 @@
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
{% if field.type != 'HiddenField' and label_visible %}
{% if not label and label != "" %}{% set label=field.label.text %}{% endif %}
{% if label %}<label for="{{ field.id }}">{{ label|safe }}</label>{% endif %}
{% if label %}<label for="{{ field.id }}" class="form-label">{{ label|safe }}</label>{% endif %}
{% endif %}
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon1">{{ prefix }}</span>
</div>
<span class="input-group-text" id="{{ field.name }}">{{ prefix }}</span>
{{ field(class_=fieldclass or 'form-control', **kwargs) }}
</div>
@ -40,13 +38,11 @@
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
{% if field.type != 'HiddenField' and label_visible %}
{% if not label and label != "" %}{% set label=field.label.text %}{% endif %}
{% if label %}<label for="{{ field.id }}">{{ label|safe }}</label>{% endif %}
{% if label %}<label for="{{ field.id }}" class="form-label">{{ label|safe }}</label>{% endif %}
{% endif %}
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon1">{{ prefix }}</span>
</div>
<span class="input-group-text" id="basic-addon1">{{ prefix }}</span>
{{ field(class_=fieldclass or 'form-control', **kwargs) }}
<a class="btn btn-secondary" id="{{ field.name }}-button">
{{ _("View") }}
@ -101,7 +97,7 @@
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
{% if field.type != 'HiddenField' and label_visible %}
{% if not label %}{% set label=field.label.text %}{% endif %}
<label for="{{ field.id }}">{{ label|safe }}</label>
<label for="{{ field.id }}" class="form-label">{{ label|safe }}</label>
{% endif %}
<div class="multichoice_selector bulletselector form-control">
<input type="text" placeholder="{{ _('Start typing to see suggestions') }}">
@ -115,9 +111,10 @@
{% macro render_checkbox_field(field, label=None) -%}
{% if not label %}{% set label=field.label.text %}{% endif %}
<div class="checkbox {{ kwargs.pop('class_', '') }}">
<label>
{{ field(type='checkbox', **kwargs) }} {{ label }}
<div class="form-sheck {{ kwargs.pop('class_', '') }}">
{{ field(type='checkbox', class_="form-check-input", **kwargs) }}
<label class="form-check-label" for="{{ field.id }}">
{{ label }}
</label>
</div>
{%- endmacro %}
@ -149,7 +146,7 @@
<label class="btn btn-primary{% if checked %} active{% endif %}">
{% set icon = icons[value] %}
{% if icon %}
<i class="fas {{ icon }} mr-2"></i>
<i class="fas {{ icon }} me-2"></i>
{% endif %}
<input type="radio" name="{{ field.id }}" id="{{ field.id }}" value="{{ value }}" autocomplete="off" {% if checked %} checked{% endif %}>
{{ label }}

View File

@ -18,11 +18,11 @@
{% set message %}
{% if package.checkPerm(current_user, "MAKE_RELEASE") %}
{% if package.update_config %}
<a class="btn btn-sm btn-warning float-right" href="{{ package.getURL("packages.create_release") }}">
<a class="btn btn-sm btn-warning float-end" href="{{ package.getURL("packages.create_release") }}">
{{ _("Create first release") }}
</a>
{% else %}
<a class="btn btn-sm btn-warning float-right" href="{{ package.getURL("packages.setup_releases") }}">
<a class="btn btn-sm btn-warning float-end" href="{{ package.getURL("packages.setup_releases") }}">
{{ _("Set up releases") }}
</a>
{% endif %}
@ -90,7 +90,7 @@
{% if conflicting_modnames %}
<div class="alert alert-warning">
<a class="float-right btn btn-sm btn-warning" href="{{ package.getURL('packages.similar') }}">
<a class="float-end btn btn-sm btn-warning" href="{{ package.getURL('packages.similar') }}">
More info
</a>
{% if conflicting_modnames | length > 4 %}
@ -103,7 +103,7 @@
{% if not package.review_thread and (package.author == current_user or package.checkPerm(current_user, "APPROVE_NEW")) %}
<div class="alert alert-secondary">
<a class="float-right btn btn-sm btn-secondary" href="{{ url_for('threads.new', pid=package.id, title='Package approval comments') }}">
<a class="float-end btn btn-sm btn-secondary" href="{{ url_for('threads.new', pid=package.id, title='Package approval comments') }}">
{{ _("Open Thread") }}
</a>

View File

@ -10,7 +10,7 @@
<small>{{ package.author.display_name }}</small>
{% endif %}
{% if not package.approved %}
<span class="badge ml-1 {% if package.state == package.state.CHANGES_NEEDED %}bg-danger{% else %}bg-warning{% endif %}">
<span class="badge ms-1 {% if package.state == package.state.CHANGES_NEEDED %}bg-danger{% else %}bg-warning{% endif %}">
{{ package.state.value }}
</span>
{% endif %}

View File

@ -2,7 +2,7 @@
{% for rel in releases %}
<a class="list-group-item list-group-item-action" href="{{ rel.getEditURL() }}">
{{ rel.title }}
<span class="text-muted ml-1">
<span class="text-muted ms-1">
{% if rel.min_rel and rel.max_rel %}
[MT {{ rel.min_rel.name }}-{{ rel.max_rel.name }}]
{% elif rel.min_rel %}
@ -29,7 +29,7 @@
{% if rel.approved or package.checkPerm(current_user, "MAKE_RELEASE") or rel.checkPerm(current_user, "APPROVE_RELEASE") %}
<a class="list-group-item list-group-item-action" href="{{ rel.getDownloadURL() }}">
{{ rel.title }}
<span class="text-muted ml-1">
<span class="text-muted ms-1">
{% if rel.min_rel and rel.max_rel %}
[MT {{ rel.min_rel.name }}-{{ rel.max_rel.name }}]
{% elif rel.min_rel %}
@ -55,7 +55,7 @@
{% macro render_releases(releases, package, current_user) -%}
{% for rel in releases %}
<div class="list-group-item">
<a class="btn btn-sm btn-primary float-right" href="{{ rel.getEditURL() }}">
<a class="btn btn-sm btn-primary float-end" href="{{ rel.getEditURL() }}">
{% if not rel.task_id and not rel.approved and rel.checkPerm(current_user, "APPROVE_RELEASE") %}
{{ _("Edit / Approve") }}
{% else %}
@ -69,7 +69,7 @@
{{ rel.title }}
</a>
<span class="text-muted ml-1">
<span class="text-muted ms-1">
{% if rel.min_rel and rel.max_rel %}
[MT {{ rel.min_rel.name }}-{{ rel.max_rel.name }}]
{% elif rel.min_rel %}

View File

@ -6,13 +6,13 @@
<button class="btn {% if is_positive == true %}btn-primary{% else %}btn-secondary{% endif %}" name="is_positive" value="yes">
{{ _("Helpful") }}
{% if positive > 0 %}
<span class="badge badge-light ml-1">{{ positive }}</span>
<span class="badge bg-light ms-1">{{ positive }}</span>
{% endif %}
</button>
<button class="btn {% if is_positive == false %}btn-primary{% else %}btn-secondary{% endif %}" name="is_positive" value="no">
{{ _("Unhelpful") }}
{% if negative > 0 %}
<span class="badge badge-light ml-1">{{ negative }}</span>
<span class="badge bg-light ms-1">{{ negative }}</span>
{% endif %}
</button>
</div>
@ -30,7 +30,7 @@
<img class="img-fluid user-photo img-thumbnail img-thumbnail-1" src="{{ review.author.getProfilePicURL() }}">
</a>
</div>
<div class="col-md-auto pl-1 pr-3 pt-2 text-center" style=" font-size: 200%;">
<div class="col-md-auto ps-1 pe-3 pt-2 text-center" style=" font-size: 200%;">
{% if review.recommends %}
<i class="fas fa-thumbs-up" style="color:#6f6;"></i>
{% else %}
@ -39,7 +39,7 @@
</div>
{% if review.thread %}
{% set reply = review.thread.replies[0] %}
<div class="col pr-0">
<div class="col pe-0">
<div class="card">
<div class="card-header">
<a class="author {{ review.author.rank.name }}"
@ -47,7 +47,7 @@
{{ review.author.display_name }}
</a>
<a name="reply-{{ reply.id }}" class="text-muted float-right"
<a name="reply-{{ reply.id }}" class="text-muted float-end"
href="{{ url_for('threads.view', id=review.thread.id) }}#reply-{{ reply.id }}">
{{ review.created_at | datetime }}
</a>
@ -55,7 +55,7 @@
<div class="card-body markdown">
{% if current_user == review.author %}
<a class="btn btn-primary btn-sm ml-1 float-right"
<a class="btn btn-primary btn-sm ms-1 float-end"
href="{{ review.package.getURL("packages.review") }}">
<i class="fas fa-pen"></i>
</a>
@ -69,16 +69,16 @@
<div class="btn-toolbar mt-2 mb-0">
{% if show_package_link %}
<a class="btn btn-primary mr-1" href="{{ review.package.getURL("packages.view") }}">
<a class="btn btn-primary me-1" href="{{ review.package.getURL("packages.view") }}">
{{ _("%(title)s by %(author)s",
title="<b>" | safe + review.package.title + "</b>" | safe,
author=review.package.author.display_name) }}
</a>
{% endif %}
<a class="btn {% if review.thread.replies.count() > 1 %} btn-primary {% else %} btn-secondary {% endif %} mr-1"
<a class="btn {% if review.thread.replies.count() > 1 %} btn-primary {% else %} btn-secondary {% endif %} me-1"
href="{{ url_for('threads.view', id=review.thread.id) }}">
<i class="fas fa-comments mr-2"></i>
<i class="fas fa-comments me-2"></i>
{{ _("%(num)d comments", num=review.thread.replies.count() - 1) }}
</a>
@ -111,11 +111,11 @@
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-primary">
<i class="fas fa-thumbs-up mr-2"></i>
<i class="fas fa-thumbs-up me-2"></i>
<input type="radio" name="recommends" value="yes" autocomplete="off"> {{ _("Yes") }}
</label>
<label class="btn btn-primary">
<i class="fas fa-thumbs-down mr-2"></i>
<i class="fas fa-thumbs-down me-2"></i>
<input type="radio" name="recommends" value="no" autocomplete="off"> {{ _("No") }}
</label>
</div>
@ -150,11 +150,11 @@
<div class="btn-group">
<button class="btn btn-primary" name="recommends" value="yes">
<i class="fas fa-thumbs-up mr-2"></i>
<i class="fas fa-thumbs-up me-2"></i>
{{ _("Yes") }}
</button>
<button class="btn btn-primary" name="recommends" value="no">
<i class="fas fa-thumbs-down mr-2"></i>
<i class="fas fa-thumbs-down me-2"></i>
{{ _("No") }}
</button>
</div>

View File

@ -10,32 +10,32 @@
<img class="img-fluid user-photo img-thumbnail img-thumbnail-1" src="{{ r.author.getProfilePicURL() }}">
</a>
</div>
<div class="col pr-0">
<div class="col pe-0">
<div class="card">
<div class="card-header">
<a class="author {{ r.author.rank.name }} mr-3"
<a class="author {{ r.author.rank.name }} me-3"
href="{{ url_for('users.profile', username=r.author.username) }}">
{{ r.author.display_name }}
</a>
{% if r.author.username != r.author.display_name %}
<span class="text-muted small mr-2">
<span class="text-muted small me-2">
({{ r.author.username }})
</span>
{% endif %}
{% if r.author in thread.package.maintainers %}
<span class="badge badge-dark">
<span class="badge bg-dark">
{{ _("Maintainer") }}
</span>
{% endif %}
{% if r.author.rank == r.author.rank.BOT %}
<span class="badge badge-dark">
<span class="badge bg-dark">
{{ r.author.rank.getTitle() }}
</span>
{% endif %}
<a name="reply-{{ r.id }}" class="text-muted float-right"
<a name="reply-{{ r.id }}" class="text-muted float-end"
href="{{ r.get_url() }}">
{{ r.created_at | datetime }}
</a>
@ -43,26 +43,26 @@
<div class="card-body markdown">
{% if r.checkPerm(current_user, "DELETE_REPLY") %}
<a class="float-right btn btn-secondary btn-sm ml-2"
<a class="float-end btn btn-secondary btn-sm ms-2"
href="{{ url_for('threads.delete_reply', id=thread.id, reply=r.id) }}">
<i class="fas fa-trash"></i>
</a>
{% endif %}
{% if current_user != r.author %}
<a class="float-right btn-secondary btn-sm ml-2"
<a class="float-end btn-secondary btn-sm ms-2"
title="{{ _('Report') }}"
href="{{ url_for('report.report', url=r.get_url()) }}">
<i class="fas fa-flag mr-1"></i>
<i class="fas fa-flag me-1"></i>
</a>
{% endif %}
{% if current_user == thread.author and thread.review and thread.replies[0] == r %}
<a class="float-right btn btn-primary btn-sm ml-2"
<a class="float-end btn btn-primary btn-sm ms-2"
href="{{ thread.review.package.getURL('packages.review') }}">
<i class="fas fa-pen"></i>
</a>
{% elif r.checkPerm(current_user, "EDIT_REPLY") %}
<a class="float-right btn btn-primary btn-sm ml-2"
<a class="float-end btn btn-primary btn-sm ms-2"
href="{{ url_for('threads.edit_reply', id=thread.id, reply=r.id) }}">
<i class="fas fa-pen"></i>
</a>
@ -82,7 +82,7 @@
{% if thread.locked %}
<p class="my-0 py-4 text-center">
<i class="fas fa-lock mr-3"></i>
<i class="fas fa-lock me-3"></i>
{{ _("This thread has been locked by a moderator.") }}
</p>
{% endif %}
@ -93,7 +93,7 @@
<img class="img-fluid user-photo img-thumbnail img-thumbnail-1"
src="{{ current_user.getProfilePicURL() }}">
</div>
<div class="col pr-0">
<div class="col pe-0">
<div class="card">
<div class="card-header {{ current_user.rank.name }}">
{{ current_user.display_name }}
@ -171,13 +171,13 @@
{% else %}
<i class="fas fa-thumbs-down" style="color:#f66;"></i>
{% endif %}
<strong class="ml-1">
<strong class="ms-1">
{{ t.title }}
</strong><br />
<span>
{{ t.author.display_name }}
</span>
<span class="text-muted ml-3">
<span class="text-muted ms-3">
{{ t.created_at | datetime }}
</span>
</div>
@ -185,7 +185,7 @@
{% if replies > 0 %}
<span class="col-md-auto text-muted">
{{ replies }}
<i class="fas fa-comment ml-1"></i>
<i class="fas fa-comment ms-1"></i>
</span>
{% endif %}
@ -202,13 +202,13 @@
</div>
{% if t.package %}
<div class="col-md-2 text-muted text-right">
<div class="col-md-2 text-muted text-end">
<img
class="img-fluid"
style="max-height: 22px; max-width: 22px;"
src="{{ t.package.getThumbnailOrPlaceholder() }}" /><br />
<span class="pl-2">
<span class="ps-2">
{{ t.package.title }}
</span>
</div>

View File

@ -11,7 +11,7 @@
style="max-height: 22px; max-width: 22px;"
src="{{ package.getThumbnailOrPlaceholder() }}" />
<span class="pl-2">
<span class="ps-2">
{{ package.title }}
</span>
</a>
@ -32,21 +32,21 @@
<div class="col-sm-auto">
{% if not show_config %}
{% if package.checkPerm(current_player, "MAKE_RELEASE") %}
<a class="btn btn-sm btn-primary mr-2" href="{{ config.get_create_release_url() }}">
<i class="fas fa-plus mr-1"></i>
<a class="btn btn-sm btn-primary me-2" href="{{ config.get_create_release_url() }}">
<i class="fas fa-plus me-1"></i>
{{ _("Release") }}
</a>
{% endif %}
{% endif %}
<a class="btn btn-sm btn-secondary mr-2" href="{{ package.repo }}">
<i class="fas fa-code-branch mr-1"></i>
<a class="btn btn-sm btn-secondary me-2" href="{{ package.repo }}">
<i class="fas fa-code-branch me-1"></i>
{{ _("Repo") }}
</a>
{% if package.checkPerm(current_player, "MAKE_RELEASE") %}
<a class="btn btn-sm btn-secondary" href="{{ package.getURL("packages.update_config") }}">
<i class="fas fa-cog mr-1"></i>
<i class="fas fa-cog me-1"></i>
{{ _("Update settings") }}
</a>
{% endif %}

View File

@ -6,11 +6,11 @@
{% block content %}
{% if current_user.notifications %}
<form method="post" action="{{ url_for('notifications.clear') }}" class="float-right">
<form method="post" action="{{ url_for('notifications.clear') }}" class="float-end">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input type="submit" class="btn btn-primary" value="Clear All" />
</form>
<a href="{{ url_for('users.email_notifications', username=current_user.username) }}" class="btn btn-secondary float-right mr-3">
<a href="{{ url_for('users.email_notifications', username=current_user.username) }}" class="btn btn-secondary float-end me-3">
{{ _("Edit email notification settings") }}
</a>
{% endif %}
@ -38,7 +38,7 @@
style="max-height: 22px; max-width: 22px;"
src="{{ n.package.getThumbnailOrPlaceholder() }}" />
<span class="pl-2">
<span class="ps-2">
{{ n.package.title }}
</span>
</div>
@ -48,8 +48,8 @@
{{ n.title}}
</div>
<div class="col-sm-auto text-muted text-right">
<span class="pr-2">{{ n.causer.display_name }}</span>
<div class="col-sm-auto text-muted text-end">
<span class="pe-2">{{ n.causer.display_name }}</span>
<img
class="img-fluid user-photo img-thumbnail img-thumbnail-1"
style="max-height: 22px;"
@ -76,7 +76,7 @@
style="max-height: 22px; max-width: 22px;"
src="{{ n.package.getThumbnailOrPlaceholder() }}" />
<span class="pl-2">
<span class="ps-2">
{{ n.package.title }}
</span>
</div>
@ -86,8 +86,8 @@
{{ n.title}}
</div>
<div class="col-sm-auto text-muted text-right">
<span class="pr-2">{{ n.causer.display_name }}</span>
<div class="col-sm-auto text-muted text-end">
<span class="pe-2">{{ n.causer.display_name }}</span>
<img
class="img-fluid user-photo img-thumbnail img-thumbnail-1"
style="max-height: 22px;"

View File

@ -9,7 +9,7 @@
{% endblock %}
{% block content %}
<a class="btn btn-primary float-right" href="{{ package.getURL("packages.alias_create_edit") }}">
<a class="btn btn-primary float-end" href="{{ package.getURL("packages.alias_create_edit") }}">
{{ _("Create") }}
</a>
<h1>{{ _("Aliases for %(title)s by %(author)s", title=self.link(), author=package.author.display_name) }}</h1>

View File

@ -5,7 +5,7 @@
{% endblock %}
{% block content %}
<a class="btn btn-secondary float-right" href="/help/update_config/">{{ _("Help") }}</a>
<a class="btn btn-secondary float-end" href="/help/update_config/">{{ _("Help") }}</a>
<h1 class="mb-5">{{ self.title() }}</h1>
<h2>{{ _("Packages with Update Settings") }}</h2>

View File

@ -38,13 +38,13 @@
{% if not package %}
<div class="alert alert-info">
<a class="float-right btn btn-sm btn-default" href="{{ url_for('flatpage', path='policy_and_guidance') }}">{{ _("View") }}</a>
<a class="float-end btn btn-sm btn-default" href="{{ url_for('flatpage', path='policy_and_guidance') }}">{{ _("View") }}</a>
{{ _("Have you read the Package Inclusion Policy and Guidance yet?") }}
</div>
{% else %}
<div class="alert alert-secondary">
<a class="float-right btn btn-sm btn-default" href="/help/package_config/#cdbjson">{{ _("Read more") }}</a>
<a class="float-end btn btn-sm btn-default" href="/help/package_config/#cdbjson">{{ _("Read more") }}</a>
{{ _("You can include a .cdb.json file in your %(type)s to update these details automatically.", type=package.type.text.lower()) }}
</div>
@ -81,11 +81,8 @@
{{ render_multiselect_field(form.content_warnings, class_="pkg_meta") }}
<div class="pkg_meta row">
{{ render_field(form.license, class_="not_txp col-sm-6") }}
{{ render_field(form.media_license, class_="col-sm-6") }}
</div>
<div class="pkg_meta row">
<div class="not_txp col-sm-6"></div>
<div class="not_txp col-sm-6">{{ _("If there is no media, set the Media License to the same as the License.") }}</div>
{{ render_field(form.media_license, class_="col-sm-6",
hint=_("If there is no media, set the Media License to the same as the License.")) }}
</div>
{{ render_field(form.desc, class_="pkg_meta", fieldclass="form-control markdown") }}
</fieldset>

View File

@ -34,14 +34,14 @@
title="{{ tag.description or '' }}"
href="{{ url_set_query(page=1, _remove={ 'tag': tag.name }) }}">
{{ tag.title }}
<span class="badge badge-pill badge-light ml-1">{{ count }}</span>
<span class="badge rounded-pill bg-light ms-1">{{ count }}</span>
</a>
{% else %}
<a class="btn btn-sm btn-secondary m-1" rel="nofollow"
title="{{ tag.description or '' }}"
href="{{ url_set_query(page=1, _add={ 'tag': tag.name }) }}">
{{ tag.title }}
<span class="badge badge-pill badge-light ml-1">{{ count }}</span>
<span class="badge rounded-pill bg-light ms-1">{{ count }}</span>
</a>
{% endif %}
{% endfor %}

View File

@ -12,7 +12,7 @@
<img class="img-fluid user-photo img-thumbnail img-thumbnail-1"
src="{{ package.getThumbnailOrPlaceholder(1) }}" alt="{{ _('Thumbnail') }}" style="max-height: 20px;">
</span>
<span class="col m-0 p-0 pl-2">
<span class="col m-0 p-0 ps-2">
{{ package.title }}
</span>
</span>

View File

@ -32,8 +32,6 @@
<p class="mt-3">
{{ _("Note: Min and max versions will be used to hide the package on
platforms not within the range.") }}
{{ _("You cannot select the oldest version for min or the newest version
for max as this does not make sense - you can't predict the future.") }}
<br />
{{ _("Leave both as None if in doubt.") }}
</p>

View File

@ -62,11 +62,6 @@
{{ _("You can <a href='/help/package_config/'>set this automatically</a> in the .conf of your package.") }}
</p>
<p>
{{ _("You cannot select the oldest version for min or the newest version
for max as this does not make sense - you can't predict the future.") }}
</p>
<p class="mt-5">
{{ render_submit_field(form.submit) }}
</p>
@ -77,7 +72,7 @@
{% if release.checkPerm(current_user, "DELETE_RELEASE") %}
<form method="POST" action="{{ release.getDeleteURL() }}" class="alert alert-secondary mb-5">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input class="btn btn-sm btn-danger float-right" type="submit" value="{{ _('Delete') }}">
<input class="btn btn-sm btn-danger float-end" type="submit" value="{{ _('Delete') }}">
<b>{{ _("This is permanent.") }}</b>
{{ _("Any associated uploads will not be deleted immediately, but the release will no longer be listed.") }}
<div style="clear:both;"></div>

View File

@ -9,7 +9,7 @@
{% if package.update_config %}
<p class="alert alert-secondary mb-4">
<a class="float-right btn btn-sm btn-secondary" href="{{ package.getURL("packages.update_config") }}">{{ _("Settings") }}</a>
<a class="float-end btn btn-sm btn-secondary" href="{{ package.getURL("packages.update_config") }}">{{ _("Settings") }}</a>
{% if package.update_config.make_release %}
{{ _("You have automatic releases enabled.") }}
{% else %}
@ -20,13 +20,13 @@
{% else %}
<p class="alert alert-info mb-4">
{% if package.repo %}
<a class="float-right btn btn-sm btn-info" href="{{ package.getURL("packages.setup_releases") }}">{{ _("Set up") }}</a>
<i class="fas fa-info mr-2"></i>
<a class="float-end btn btn-sm btn-info" href="{{ package.getURL("packages.setup_releases") }}">{{ _("Set up") }}</a>
<i class="fas fa-info me-2"></i>
{{ _("You can create releases automatically when you push commits or tags to your repository.") }}
{% else %}
<a class="float-right btn btn-sm btn-info" href="{{ package.getURL("packages.create_edit") }}">{{ _("Add Git repo") }}</a>
<i class="fas fa-info mr-2"></i>
<a class="float-end btn btn-sm btn-info" href="{{ package.getURL("packages.create_edit") }}">{{ _("Add Git repo") }}</a>
<i class="fas fa-info me-2"></i>
{{ _("Using Git would allow you to create releases automatically when you push code or tags.") }}
{% endif %}
@ -71,7 +71,7 @@
</p>
<p>
<i class="fas fa-exclamation-circle mr-2"></i>
<i class="fas fa-exclamation-circle me-2"></i>
{{ _("The .conf of your package can <a href='/help/package_config/'>set this automatically</a>,
which will override your selection.") }}
</p>
@ -82,10 +82,6 @@
<br />
{{ _("Leave both as None if in doubt.") }}
</p>
<p>
{{ _("You cannot select the oldest version for min or the newest version
for max as this does not make sense - you can't predict the future.") }}
</p>
<p class="mt-5">
{{ render_submit_field(form.submit) }}

View File

@ -5,7 +5,7 @@
{% endblock %}
{% block content %}
<a class="btn btn-secondary float-right" href="{{ package.getURL("packages.view") }}">
<a class="btn btn-secondary float-end" href="{{ package.getURL("packages.view") }}">
{{ _("Later") }}
</a>
<h1>{{ self.title() }}</h1>
@ -33,10 +33,10 @@
<a class="btn btn-primary" href="{{ package.getURL("packages.update_config", trigger="commit") }}">
{{ _("Rolling Release") }}
</a>
<a class="btn btn-primary ml-2" href="{{ package.getURL("packages.update_config", trigger="tag") }}">
<a class="btn btn-primary ms-2" href="{{ package.getURL("packages.update_config", trigger="tag") }}">
{{ _("On Git Tag") }}
</a>
{# <a class="btn btn-secondary ml-2" href="{{ package.getURL("packages.update_config") }}">#}
{# <a class="btn btn-secondary ms-2" href="{{ package.getURL("packages.update_config") }}">#}
{# {{ _("Advanced") }}#}
{# </a>#}
</p>
@ -48,7 +48,7 @@
<a class="btn btn-secondary" href="{{ package.getURL("packages.update_config", action="notification") }}">
{{ _("With reminders") }}
</a>
<a class="btn btn-secondary ml-2" href="{{ package.getURL("packages.create_release") }}">
<a class="btn btn-secondary ms-2" href="{{ package.getURL("packages.create_release") }}">
{{ _("No reminders") }}
</a>
</p>
@ -68,10 +68,10 @@
<a class="btn btn-primary" href="{{ package.getURL("packages.create_edit") }}">
{{ _("Add Git repo") }}
</a>
<a class="btn btn-secondary ml-2" href="{{ package.getURL("packages.create_release") }}">
<a class="btn btn-secondary ms-2" href="{{ package.getURL("packages.create_release") }}">
{{ _("Create releases manually") }}
</a>
<a class="btn btn-secondary ml-2" href="{{ package.getURL("packages.view") }}">
<a class="btn btn-secondary ms-2" href="{{ package.getURL("packages.view") }}">
{{ _("Later") }}
</a>
</p>

View File

@ -6,26 +6,26 @@
{% block content %}
{% if package.checkPerm(current_user, "MAKE_RELEASE") %}
<p class="float-right">
<p class="float-end">
{% if package.update_config %}
<a class="btn btn-secondary" href="{{ package.getURL("packages.update_config") }}">
<i class="fas fa-cog mr-1"></i>
<i class="fas fa-cog me-1"></i>
{{ _("Update settings") }}
</a>
{% elif package.repo %}
<a class="btn btn-secondary" href="{{ package.getURL("packages.setup_releases") }}">
<i class="fas fa-hat-wizard mr-1"></i>
<i class="fas fa-hat-wizard me-1"></i>
{{ _("Set up automatic releases") }}
</a>
{% endif %}
<a class="btn btn-secondary ml-1" href="{{ package.getURL("packages.bulk_change_release") }}">
<i class="fas fa-wrench mr-1"></i>
<a class="btn btn-secondary ms-1" href="{{ package.getURL("packages.bulk_change_release") }}">
<i class="fas fa-wrench me-1"></i>
{{ _("Bulk update") }}
</a>
<a class="btn btn-primary ml-1" href="{{ package.getURL("packages.create_release") }}">
<i class="fas fa-plus mr-1"></i>
<a class="btn btn-primary ms-1" href="{{ package.getURL("packages.create_release") }}">
<i class="fas fa-plus me-1"></i>
{{ _("Create") }}
</a>
</p>

View File

@ -24,16 +24,16 @@ Remove {{ package.title }}
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<div class="form-group">
<label for="reason">{{ _("Reason") }}</label>
<label for="reason" class="form-label">{{ _("Reason") }}</label>
<input id="reason" class="form-control" type="text" name="reason" required minlength="5">
<small class="form-text text-muted">
{{ _("Reason for unapproval / deletion, this is shown in the audit log") }}
</small>
</div>
<a class="btn btn-secondary float-right" href="{{ package.getURL("packages.view") }}">{{ _("Cancel") }}</a>
<a class="btn btn-secondary float-end" href="{{ package.getURL("packages.view") }}">{{ _("Cancel") }}</a>
<input type="submit" name="delete" value="Remove" class="btn btn-danger mr-2" />
<input type="submit" name="delete" value="Remove" class="btn btn-danger me-2" />
{% if package.approved %}
<input type="submit" name="unapprove" value="Unapprove" class="btn btn-warning" />

View File

@ -52,7 +52,7 @@
{% if review %}
<form method="POST" action="{{ review.getDeleteURL() }}" class="alert alert-secondary my-5">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input class="btn btn-sm btn-danger float-right" type="submit" value="{{ _('Delete') }}">
<input class="btn btn-sm btn-danger float-end" type="submit" value="{{ _('Delete') }}">
<b>{{ _("Delete review.") }}</b>
{{ _("This will convert the review into a thread, keeping the comments but removing its effect on the package's rating.") }}
<div style="clear:both;"></div>

View File

@ -55,9 +55,9 @@
<tr>
<th colspan="2">
{% if review.recommends %}
<i class="fas fa-thumbs-up text-success mr-2"></i>
<i class="fas fa-thumbs-up text-success me-2"></i>
{% else %}
<i class="fas fa-thumbs-down text-danger mr-2"></i>
<i class="fas fa-thumbs-down text-danger me-2"></i>
{% endif %}
<a href="{{ review.thread.getViewURL() }}">
{{ review.thread.title }}
@ -68,7 +68,7 @@
<td>
{% for vote in review.votes %}
{% if vote.is_positive %}
<a href="{{ url_for('users.profile', username=vote.user.username) }}" class="badge badge-secondary">
<a href="{{ url_for('users.profile', username=vote.user.username) }}" class="badge bg-secondary">
{{ vote.user.username }}
</a>
{% endif %}
@ -77,7 +77,7 @@
<td>
{% for vote in review.votes %}
{% if not vote.is_positive %}
<a href="{{ url_for('users.profile', username=vote.user.username) }}" class="badge badge-secondary">
<a href="{{ url_for('users.profile', username=vote.user.username) }}" class="badge bg-secondary">
{{ vote.user.username }}
</a>
{% endif %}
@ -86,4 +86,4 @@
</tr>
{% endfor %}
</table>
{% endblock %}
{% endblock %}

View File

@ -23,7 +23,7 @@
{{ render_submit_field(form.submit) }}
</form>
<a href="{{ screenshot.url }}" class="col-md-4 text-right">
<a href="{{ screenshot.url }}" class="col-md-4 text-end">
<img src="{{ screenshot.getThumbnailURL() }}" alt="{{ screenshot.title }}" />
</a>
</div>

View File

@ -6,8 +6,8 @@
{% block content %}
{% if package.checkPerm(current_user, "ADD_SCREENSHOTS") %}
<a href="{{ package.getURL('packages.create_screenshot') }}" class="btn btn-primary float-right">
<i class="fas fa-plus mr-1"></i>
<a href="{{ package.getURL('packages.create_screenshot') }}" class="btn btn-primary float-end">
<i class="fas fa-plus me-1"></i>
{{ _("Add Image") }}
</a>
{% endif %}
@ -22,7 +22,7 @@
{% if ss.approved or package.checkPerm(current_user, "ADD_SCREENSHOTS") %}
<li class="list-group-item" data-id="{{ ss.id }}">
<div class="row">
<div class="col-auto text-muted pr-2">
<div class="col-auto text-muted pe-2">
<i class="fas fa-bars"></i>
</div>
<div class="col-auto">
@ -35,32 +35,32 @@
{{ ss.width }} x {{ ss.height }}
{% if ss.is_low_res() %}
{% if ss.is_very_small() %}
<span class="badge badge-danger ml-3">
<span class="badge bg-danger ms-3">
{{ _("Way too small") }}
</span>
{% elif ss.is_too_small() %}
<span class="badge badge-warning ml-3">
<span class="badge bg-warning ms-3">
{{ _("Too small") }}
</span>
{% else %}
<span class="badge badge-secondary ml-3">
<span class="badge bg-secondary ms-3">
{{ _("Not HD") }}
</span>
{% endif %}
{% endif %}
{% if not ss.approved %}
<span class="ml-3">
<span class="ms-3">
{{ _("Awaiting approval") }}
</span>
{% endif %}
</div>
</div>
<form action="{{ ss.getDeleteURL() }}" method="POST" class="col-auto text-right" role="form">
<form action="{{ ss.getDeleteURL() }}" method="POST" class="col-auto text-end" role="form">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<a class="btn btn-sm btn-primary" href="{{ ss.getEditURL() }}">
<i class="fas fa-pen"></i>
</a>
<button type="submit" class="btn btn-sm btn-danger ml-2">
<button type="submit" class="btn btn-sm btn-danger ms-2">
<i class="fas fa-trash"></i>
</button>
</form>

View File

@ -5,7 +5,7 @@
{% endblock %}
{% block content %}
<a class="btn btn-secondary float-right" href="/help/update_config/">{{ _("Help") }}</a>
<a class="btn btn-secondary float-end" href="/help/update_config/">{{ _("Help") }}</a>
<h1>{{ _("Configure Git Update Detection") }}</h1>
<p>
@ -46,7 +46,7 @@
<p class="mt-5 pt-4">
{{ render_submit_field(form.submit) }}
{{ render_submit_field(form.disable, class_="btn btn-secondary ml-2") }}
{{ render_submit_field(form.disable, class_="btn btn-secondary ms-2") }}
</p>
</form>
{% endblock %}

View File

@ -31,7 +31,7 @@
{% block download_btn %}
{% if release %}
<a class="btn btn-block btn-download" rel="nofollow" download="{{ release.getDownloadFileName() }}"
<a class="btn w-100 btn-download btn-lg" rel="nofollow" download="{{ release.getDownloadFileName() }}"
href="{{ package.getURL('packages.download') }}">
<div>
{{ _("Download") }}
@ -63,7 +63,7 @@
<p class="text-center mt-1 mb-4">
<a href="{{ installing_url }}">
<small>
<i class="fas fa-question-circle mr-1"></i>
<i class="fas fa-question-circle me-1"></i>
{{ _("How do I install this?") }}
</small>
</a>
@ -91,22 +91,22 @@
background-repeat: no-repeat;
background-position: center;">
<div class="container">
<div class="btn-group float-right mb-4">
<div class="btn-group float-end mb-4">
{% if package.checkPerm(current_user, "EDIT_PACKAGE") %}
<a class="btn btn-primary" href="{{ package.getURL('packages.create_edit') }}">
<i class="fas fa-pen mr-1"></i>
<i class="fas fa-pen me-1"></i>
{{ _("Edit") }}
</a>
{% endif %}
{% if package.checkPerm(current_user, "MAKE_RELEASE") %}
<a class="btn btn-primary" href="{{ package.getURL('packages.create_release') }}">
<i class="fas fa-plus mr-1"></i>
<i class="fas fa-plus me-1"></i>
{{ _("Release") }}
</a>
{% endif %}
{% if package.checkPerm(current_user, "DELETE_PACKAGE") or package.checkPerm(current_user, "UNAPPROVE_PACKAGE") %}
<a class="btn btn-danger" href="{{ package.getURL('packages.remove') }}">
<i class="fas fa-trash mr-1"></i>
<i class="fas fa-trash me-1"></i>
{{ _("Remove") }}
</a>
{% endif %}
@ -122,32 +122,32 @@
<p>
{% if package.dev_state.name == "LOOKING_FOR_MAINTAINER" or package.dev_state.name == "DEPRECATED" %}
<span class="badge badge-warning" title="{{ package.dev_state.get_desc() }}">
<span class="badge bg-warning" title="{{ package.dev_state.get_desc() }}">
<i class="fas fa-exclamation-circle" style="margin-right: 0.3em;"></i>
{{ package.dev_state.value }}
</span>
{% endif %}
{% if package_warning %}
<a class="badge badge-danger" href="/help/non_free/">
<a class="badge bg-danger" href="/help/non_free/">
<i class="fas fa-exclamation-circle" style="margin-right: 0.3em;"></i>
{{ package_warning }}
</a>
{% endif %}
{% for warning in package.content_warnings %}
<a class="badge badge-warning" rel="nofollow" href="/help/content_flags/"
<a class="badge bg-warning" rel="nofollow" href="/help/content_flags/"
title="{{ warning.description }}">
<i class="fas fa-exclamation-circle" style="margin-right: 0.3em;"></i>
{{ warning.title }}
</a>
{% endfor %}
{% if package.dev_state.name == "WIP" %}
<span class="badge badge-info" title="{{ package.dev_state.get_desc() }}">
<span class="badge bg-info" title="{{ package.dev_state.get_desc() }}">
<i class="fas fa-tools" style="margin-right: 0.3em;"></i>
{{ _("Work in Progress") }}
</span>
{% endif %}
{% for t in package.tags %}
<a class="badge badge-primary" rel="nofollow"
<a class="badge bg-primary" rel="nofollow"
title="{{ t.description or '' }}"
href="{{ url_for('packages.list_all', tag=t.name) }}">
{{ t.title }}
@ -242,8 +242,8 @@
{% set screenshots = package.screenshots.all() %}
{% if package.checkPerm(current_user, "ADD_SCREENSHOTS") %}
<a href="{{ package.getURL('packages.screenshots') }}" class="btn btn-primary float-right">
<i class="fas fa-images mr-1"></i>
<a href="{{ package.getURL('packages.screenshots') }}" class="btn btn-primary float-end">
<i class="fas fa-images me-1"></i>
{{ _("Edit") }}
</a>
{% endif %}
@ -268,7 +268,7 @@
<a href="{{ ss.url }}" class="gallery-image">
<img src="{{ ss.getThumbnailURL() }}" alt="{{ ss.title }}" />
{% if not ss.approved %}
<span class="badge bg-dark badge-tr">{{ _("Awaiting review") }}</span>
<span class="badge bg-dark badge-topright">{{ _("Awaiting review") }}</span>
{% endif %}
</a>
</li>
@ -339,16 +339,16 @@
{{ config.get_message() }}
</p>
<p class="mt-0 my-1" style="font-size: 80%; opacity: 85%;">
<i class="fas fa-lock mr-1"></i>
<i class="fas fa-lock me-1"></i>
{{ _("Only visible to the author and Editors.") }}
</p>
<div class="btn-group btn-group-sm my-0">
<a class="btn btn-warning" href="{{ config.get_create_release_url() }}">
<i class="fas fa-plus mr-1"></i>
<i class="fas fa-plus me-1"></i>
{{ _("Release") }}
</a>
<a class="btn btn-warning" href="{{ package.getURL("packages.update_config") }}">
<i class="fas fa-cog mr-1"></i>
<i class="fas fa-cog me-1"></i>
{{ _("Update settings") }}
</a>
</div>
@ -356,7 +356,7 @@
{% endif %}
{% if package_warning %}
<p class="alert alert-danger">
<a href="/help/non_free/" class="float-right">Info</a>
<a href="/help/non_free/" class="float-end">Info</a>
<b>{{ _("Warning") }}:</b> {{ package_warning }}
</p>
{% endif %}
@ -365,7 +365,7 @@
<div class="alert alert-secondary mb-4">
<p>{{ _("Like this package? Help support its development by making a donation", display_name=package.author.display_name) }}</p>
<a class="btn btn-block btn-primary" href="{{ package.author.donate_url }}" rel="nofollow">
<i class="fas fa-heart mr-2"></i>
<i class="fas fa-heart me-2"></i>
{{ _("Donate now") }}
</a>
</div>
@ -378,13 +378,13 @@
<dd>
{% for dep in package.getSortedHardDependencies() %}
{%- if dep.package %}
<a class="badge badge-primary"
<a class="badge bg-primary"
href="{{ dep.package.getURL("packages.view") }}">
{{ _("%(title)s by %(display_name)s",
title=dep.package.title, display_name=dep.package.author.display_name) }}
</a>
{% elif dep.meta_package %}
<a class="badge badge-primary"
<a class="badge bg-primary"
href="{{ url_for('metapackages.view', name=dep.meta_package.name) }}">
{{ dep.meta_package.name }}
</a>
@ -402,12 +402,12 @@
<dd>
{% for dep in optional_deps %}
{%- if dep.package %}
<a class="badge badge-secondary"
<a class="badge bg-secondary"
href="{{ dep.package.getURL("packages.view") }}">
{{ _("%(title)s by %(display_name)s",
title=dep.package.title, display_name=dep.package.author.display_name) }}
{% elif dep.meta_package %}
<a class="badge badge-secondary"
<a class="badge bg-secondary"
href="{{ url_for('metapackages.view', name=dep.meta_package.name) }}">
{{ dep.meta_package.name }}
{% else %}
@ -450,7 +450,7 @@
<dt>{{ _("Maintainers") }}</dt>
<dd>
{% for user in package.maintainers %}
<a class="badge badge-secondary"
<a class="badge bg-secondary"
href="{{ url_for('users.profile', username=user.username) }}">
{{ user.display_name }}
</a>
@ -466,7 +466,7 @@
{% if package.provides %}
<dt>{{ _("Provides") }}</dt>
<dd>{% for meta in package.provides %}
<a class="badge badge-secondary"
<a class="badge bg-secondary"
href="{{ url_for('metapackages.view', name=meta.name) }}">{{ meta.name }}</a>
{% endfor %}</dd>
{% endif %}
@ -474,7 +474,7 @@
<h3>
{% if package.checkPerm(current_user, "MAKE_RELEASE") %}
<a class="btn btn-primary btn-sm float-right" href="{{ package.getURL("packages.create_release") }}"><i class="fas fa-plus"></i></a>
<a class="btn btn-primary btn-sm float-end" href="{{ package.getURL("packages.create_release") }}"><i class="fas fa-plus"></i></a>
{% endif %}
{{ _("Releases") }}
</h3>
@ -492,7 +492,7 @@
<h3>
{% if package.approved and package.checkPerm(current_user, "CREATE_THREAD") %}
<div class="btn-group float-right">
<div class="btn-group float-end">
<a class="btn btn-primary btn-sm mx-1" href="{{ url_for('threads.new', pid=package.id) }}"><i class="fas fa-plus"></i></a>
</div>
{% endif %}
@ -506,7 +506,7 @@
<p class="mt-3">
{% if package.approved and current_user != package.author %}
<a href="{{ url_for('report.report', url=url_current()) }}">
<i class="fas fa-flag mr-1"></i>
<i class="fas fa-flag me-1"></i>
{{ _("Report") }}
</a>
{% endif %}

View File

@ -15,7 +15,7 @@
<div class="card-body">
<p>{{ _("Deleting is permanent") }}</p>
<a class="btn btn-secondary mr-3" href="{{ thread.getViewURL() }}">{{ _("Cancel") }}</a>
<a class="btn btn-secondary me-3" href="{{ thread.getViewURL() }}">{{ _("Cancel") }}</a>
<input type="submit" value="{{ _('Delete') }}" class="btn btn-danger" />
</div>
</form>

View File

@ -15,7 +15,7 @@
<div class="card-body">
<p>{{ _("Deleting is permanent") }}</p>
<a class="btn btn-secondary mr-3" href="{{ thread.getViewURL() }}">{{ _("Cancel") }}</a>
<a class="btn btn-secondary me-3" href="{{ thread.getViewURL() }}">{{ _("Cancel") }}</a>
<input type="submit" value="{{ _('Delete') }}" class="btn btn-danger" />
</div>
</form>

View File

@ -21,33 +21,33 @@
<img class="img-fluid user-photo img-thumbnail img-thumbnail-1" src="{{ r.author.getProfilePicURL() }}">
</a>
</div>
<div class="col pr-0">
<div class="col pe-0">
<div class="card">
<div class="card-header">
<a class="author {{ r.author.rank.name }} mr-3"
<a class="author {{ r.author.rank.name }} me-3"
href="{{ url_for('users.profile', username=r.author.username) }}">
{{ r.author.display_name }}
</a>
{% if r.author.username != r.author.display_name %}
<span class="text-muted small mr-2">
<span class="text-muted small me-2">
({{ r.author.username }})
</span>
{% endif %}
{% if r == r.thread.replies[0] %}
<a class="badge badge-primary" href="{{ r.thread.getViewURL() }}">
<a class="badge bg-primary" href="{{ r.thread.getViewURL() }}">
{{ r.thread.title }}
</a>
{% else %}
<i class="fas fa-reply mr-2"></i>
<a class="badge badge-dark" href="{{ r.thread.getViewURL() }}">
<i class="fas fa-reply me-2"></i>
<a class="badge bg-dark" href="{{ r.thread.getViewURL() }}">
{{ _("Reply to <b>%(title)s</b>", title=r.thread.title) }}
</a>
{% endif %}
<a name="reply-{{ r.id }}" class="text-muted float-right"
<a name="reply-{{ r.id }}" class="text-muted float-end"
href="{{ url_for('threads.view', id=r.thread.id) }}#reply-{{ r.id }}">
{{ r.created_at | datetime }}
</a>

View File

@ -26,27 +26,27 @@
{% block content %}
{% if current_user.is_authenticated %}
{% if current_user in thread.watchers %}
<form method="post" action="{{ thread.getUnsubscribeURL() }}" class="float-right">
<form method="post" action="{{ thread.getUnsubscribeURL() }}" class="float-end">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input type="submit" class="btn btn-primary" value="{{ _('Unsubscribe') }}" />
</form>
{% else %}
<form method="post" action="{{ thread.getSubscribeURL() }}" class="float-right">
<form method="post" action="{{ thread.getSubscribeURL() }}" class="float-end">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input type="submit" class="btn btn-primary" value="{{ _('Subscribe') }}" />
</form>
{% endif %}
{% if thread and thread.checkPerm(current_user, "DELETE_THREAD") %}
<a href="{{ url_for('threads.delete_thread', id=thread.id) }}" class="float-right mr-2 btn btn-danger">{{ _('Delete') }}</a>
<a href="{{ url_for('threads.delete_thread', id=thread.id) }}" class="float-end me-2 btn btn-danger">{{ _('Delete') }}</a>
{% endif %}
{% if thread and thread.checkPerm(current_user, "LOCK_THREAD") %}
{% if thread.locked %}
<form method="post" action="{{ url_for('threads.set_lock', id=thread.id, lock=0) }}" class="float-right mr-2">
<form method="post" action="{{ url_for('threads.set_lock', id=thread.id, lock=0) }}" class="float-end me-2">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input type="submit" class="btn btn-secondary" value="{{ _('Unlock') }}" />
</form>
{% else %}
<form method="post" action="{{ url_for('threads.set_lock', id=thread.id, lock=1) }}" class="float-right mr-2">
<form method="post" action="{{ url_for('threads.set_lock', id=thread.id, lock=1) }}" class="float-end me-2">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input type="submit" class="btn btn-secondary" value="{{ _('Lock') }}" />
</form>
@ -55,7 +55,7 @@
{% endif %}
{% if current_user == thread.author and thread.review %}
<a class="btn btn-primary ml-1 float-right mr-2"
<a class="btn btn-primary ms-1 float-end me-2"
href="{{ thread.review.package.getURL("packages.review") }}">
<i class="fas fa-pen"></i>
{{ _("Edit Review") }}
@ -65,9 +65,9 @@
<h1>
{% if thread.review %}
{% if thread.review.recommends %}
<i class="fas fa-thumbs-up mr-2" style="color:#6f6;"></i>
<i class="fas fa-thumbs-up me-2" style="color:#6f6;"></i>
{% else %}
<i class="fas fa-thumbs-down mr-2" style="color:#f66;"></i>
<i class="fas fa-thumbs-down me-2" style="color:#f66;"></i>
{% endif %}
{% endif %}
{% if thread.private %}&#x1f512; {% endif %}{{ thread.title }}

View File

@ -9,7 +9,7 @@
{% if canApproveScn and screenshots %}
<div class="card my-4">
<h3 class="card-header">{{ _("Screenshots") }}
<form class="float-right" method="post" action="{{ url_for('todo.view_editor') }}">
<form class="float-end" method="post" action="{{ url_for('todo.view_editor') }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input type="hidden" name="action" value="screenshots_approve_all" />
<input class="btn btn-sm btn-primary" type="submit" value="{{ _('Approve All') }}" />
@ -47,16 +47,16 @@
<div class="list-group list-group-flush">
{% for p in packages %}
<a href="{{ p.getURL("packages.view") }}" class="list-group-item list-group-item-action">
<span class="float-right" title="Created {{ p.created_at | datetime }}">
<span class="float-end" title="Created {{ p.created_at | datetime }}">
<small>
{{ p.created_at | timedelta }} ago
</small>
</span>
{% if "Other" in p.license.name or "Other" in p.media_license.name %}
<span class="mr-2 badge badge-info">License</span>
<span class="me-2 badge bg-info">License</span>
{% else %}
<span class="mr-2 badge badge-success">Ready</span>
<span class="me-2 badge bg-success">Ready</span>
{% endif %}
{{ p.title }} by {{ p.author.display_name }}
@ -77,7 +77,7 @@
{% for r in releases %}
<li class="list-group-item">
{% if r.task_id %}
<span class="mr-2 badge badge-warning">{{ _("Importing") }}</span>
<span class="me-2 badge bg-warning">{{ _("Importing") }}</span>
{% endif %}
<a href="{{ r.getEditURL() }}">{{ r.title }}</a>
on
@ -108,13 +108,13 @@
<div class="list-group list-group-flush">
{% for p in license_needed %}
<a href="{{ p.getURL("packages.view") }}" class="list-group-item list-group-item-action">
<span class="float-right" title="Created {{ p.created_at | datetime }}">
<span class="float-end" title="Created {{ p.created_at | datetime }}">
<small>
{{ p.created_at | timedelta }} ago
</small>
</span>
<span class="mr-2 badge badge-{{ p.state.color }}">{{ p.state.value }}</span>
<span class="me-2 badge bg-{{ p.state.color }}">{{ p.state.value }}</span>
{{ p.title }} by {{ p.author.display_name }}
</a>
@ -142,7 +142,7 @@
{% if unfulfilled_meta_packages %}
<h2 class="mt-5">
<span class="fas fa-exclamation-triangle pr-2" style="color: orange;"></span>
<span class="fas fa-exclamation-triangle pe-2" style="color: orange;"></span>
{{ unfulfilled_meta_packages }}
{{ _("Unfulfilled Dependencies") }}
</h2>
@ -165,16 +165,16 @@
<div class="list-group list-group-flush" style="max-height: 300px; overflow: hidden auto;">
{% for p in wip_packages %}
<a href="{{ p.getURL("packages.view") }}" class="list-group-item list-group-item-action">
<span class="float-right" title="Created {{ p.created_at | datetime }}">
<span class="float-end" title="Created {{ p.created_at | datetime }}">
<small>
{{ p.created_at | timedelta }} ago
</small>
</span>
{% if p.state == p.state.WIP %}
<span class="mr-2 badge badge-warning">{{ _("WIP") }}</span>
<span class="me-2 badge bg-warning">{{ _("WIP") }}</span>
{% else %}
<span class="mr-2 badge badge-danger">{{ p.state.value }}</span>
<span class="me-2 badge bg-danger">{{ p.state.value }}</span>
{% endif %}
{{ p.title }} by {{ p.author.display_name }}

View File

@ -5,8 +5,8 @@
{% endblock %}
{% block content %}
<div class="btn-toolbar float-right">
<div class="btn-group btn-group-sm mr-2">
<div class="btn-toolbar float-end">
<div class="btn-group btn-group-sm me-2">
{% if is_mtm_only %}
<a class="btn btn-sm btn-primary active" href="{{ url_set_query(mtm=0) }}">
{{ _("Minetest-Mods org only") }}

View File

@ -11,13 +11,11 @@
<label for="q" class="sr-only">{{ _('Search all packages') }}</label>
<div class="input-group">
<input class="form-control" id="q" name="q" type="text" placeholder="{{ _('Search all packages') }}">
<div class="input-group-append">
<input class="btn btn-primary" type="submit" value="{{ _('Search') }}">
</div>
<input class="btn btn-primary" type="submit" value="{{ _('Search') }}">
</div>
</form>
</div>
<div class="col-md-6 text-right">
<div class="col-md-6 text-end">
{% if only_no_tags %}
<a class="btn btn-primary" href="{{ url_set_query(no_tags=0) }}">
{{ _("Missing tags only") }}
@ -28,7 +26,7 @@
</a>
{% endif %}
{% if check_global_perm(current_user, "EDIT_TAGS") %}
<a class="btn btn-secondary ml-2" href="{{ url_for('admin.tag_list') }}">{{ _("Edit Tags") }}</a>
<a class="btn btn-secondary ms-2" href="{{ url_for('admin.tag_list') }}">{{ _("Edit Tags") }}</a>
{% endif %}
</div>
</div>
@ -57,12 +55,12 @@
</td>
<td class="tags">
{% for tag in package.tags %}
<a class="badge badge-primary mr-1"
<a class="badge bg-primary me-1"
href="{{ url_set_query(_add={ 'tag': tag.name }) }}">
{{ tag.title }}
</a>
{% endfor %}
<!-- <a class="badge badge-secondary add-btn px-2" href="#">
<!-- <a class="badge bg-secondary add-btn px-2" href="#">
<i class="fas fa-plus"></i>
</a> -->
</td>

View File

@ -5,8 +5,8 @@ Topics to be Added
{% endblock %}
{% block content %}
<div class="float-right">
<div class="btn-group btn-group-sm mr-2">
<div class="float-end">
<div class="btn-group btn-group-sm me-2">
<a class="btn btn-secondary {% if sort_by=='date' %}active{% endif %}"
href="{{ url_for('todo.topics', q=query, show_discarded=show_discarded, n=n, sort='date') }}">
{{ _("Sort by date") }}
@ -69,7 +69,7 @@ Topics to be Added
<input type="hidden" name="n" value={{ n }} />
<input type="hidden" name="sort" value={{ sort_by or "date" }} />
<input name="q" type="text" placeholder="Search topics" value="{{ query or ''}}">
<input class="btn btn-secondary my-2 my-sm-0 mr-sm-2" type="submit" value="Search" />
<input class="btn btn-secondary my-2 my-sm-0 me-sm-2" type="submit" value="Search" />
</form>
{% from "macros/topics.html" import render_topics_table %}

View File

@ -26,7 +26,7 @@
style="max-height: 22px; max-width: 22px;"
src="{{ package.getThumbnailOrPlaceholder() }}" />
<span class="pl-2">
<span class="ps-2">
{{ package.title }}
</span>
</div>
@ -41,14 +41,14 @@
{% endfor %}
</div>
<a class="btn btn-secondary float-right" href="/help/update_config/">
<a class="btn btn-secondary float-end" href="/help/update_config/">
{{ _("Help") }}
</a>
<a class="btn btn-secondary float-right mr-2" href="{{ url_for('packages.bulk_update_config', username=user.username) }}">
<a class="btn btn-secondary float-end me-2" href="{{ url_for('packages.bulk_update_config', username=user.username) }}">
{{ _("See all Update Settings") }}
</a>
{% if outdated_packages %}
<form class="float-right mr-2" method="post" action="{{ url_for('todo.apply_all_updates', username=user.username) }}">
<form class="float-end me-2" method="post" action="{{ url_for('todo.apply_all_updates', username=user.username) }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input class="btn btn-primary" type="submit" value="{{ _("Create All Releases") }}" />
</form>
@ -73,13 +73,13 @@
{{ _("The recommended resolution is 1920x1080, and screenshots must be at least %(width)dx%(height)d.",
width=920, height=517) }}
<span class="badge badge-danger ml-3">
<span class="badge bg-danger ms-3">
{{ _("Way too small") }}
</span>
<span class="badge badge-warning">
<span class="badge bg-warning">
{{ _("Too small") }}
</span>
<span class="badge badge-secondary">
<span class="badge bg-secondary">
{{ _("Not HD") }}
</span>
</p>
@ -94,7 +94,7 @@
style="max-height: 22px; max-width: 22px;"
src="{{ package.getThumbnailOrPlaceholder() }}" />
<span class="pl-2">
<span class="ps-2">
{{ package.title }}
</span>
</div>
@ -103,13 +103,13 @@
{% for ss in package.screenshots %}
{% if ss.is_low_res() %}
{% if ss.is_very_small() %}
{% set badge_color = "badge-danger" %}
{% set badge_color = "bg-danger" %}
{% elif ss.is_too_small() %}
{% set badge_color = "badge-warning" %}
{% set badge_color = "bg-warning" %}
{% else %}
{% set badge_color = "badge-secondary" %}
{% set badge_color = "bg-secondary" %}
{% endif %}
<span class="badge {{ badge_color }} ml-2" title="{{ ss.title }}">
<span class="badge {{ badge_color }} ms-2" title="{{ ss.title }}">
{{ ss.width }} x {{ ss.height }}
</span>
{% endif %}
@ -123,7 +123,7 @@
</div>
<a class="btn btn-secondary float-right" href="{{ url_for('todo.tags', author=user.username) }}">
<a class="btn btn-secondary float-end" href="{{ url_for('todo.tags', author=user.username) }}">
{{_ ("See All") }}</a>
<h2>{{ _("Packages Without Tags") }}</h2>
<p>
@ -137,7 +137,7 @@
style="max-height: 22px; max-width: 22px;"
src="{{ package.getThumbnailOrPlaceholder() }}" />
<span class="pl-2">
<span class="ps-2">
{{ package.title }}
</span>
</a>

View File

@ -53,7 +53,7 @@
</a>
{% if user == current_user %}
<a class="btn btn-secondary ml-2" href="{{ url_for('github.view_permissions') }}">
<a class="btn btn-secondary ms-2" href="{{ url_for('github.view_permissions') }}">
{{ _("View ContentDB's GitHub Permissions") }}
</a>
{% endif %}
@ -69,7 +69,7 @@
</table>
{% if current_user.rank.atLeast(current_user.rank.MODERATOR) %}
<a class="btn btn-secondary float-right" href="{{ url_for('admin.audit', username=user.username) }}">
<a class="btn btn-secondary float-end" href="{{ url_for('admin.audit', username=user.username) }}">
{{ _("View All") }}
</a>
{% endif %}

View File

@ -18,10 +18,10 @@
</p>
<p class="mt-5">
<a class="btn btn-primary mr-3" href="{{ url_for('users.claim_forums') }}">
<a class="btn btn-primary me-3" href="{{ url_for('users.claim_forums') }}">
{{ _("<b>Yes</b>, I have a forums account") }}
</a>
<a class="btn btn-primary mr-3" href="{{ url_for('users.register') }}">
<a class="btn btn-primary me-3" href="{{ url_for('users.register') }}">
{{ _("<b>No</b>, I don't have one") }}
</a>
<a class="btn btn-secondary" href="https://forum.minetest.net/ucp.php?mode=register">

View File

@ -23,7 +23,7 @@ Create Account from Forums User
<div class="col-sm-6">
<div class="card">
<div class="card-header">
<span class="badge badge-pill badge-dark mr-2">{{ _("Option 1") }}</span>
<span class="badge rounded-pill bg-dark me-2">{{ _("Option 1") }}</span>
{{ _("Use GitHub field in forum profile") }}
</div>
@ -52,7 +52,7 @@ Create Account from Forums User
<div class="col-sm-6">
<div class="card">
<div class="card-header">
<span class="badge badge-pill badge-dark mr-2">{{ _("Option 2") }}</span>
<span class="badge rounded-pill bg-dark me-2">{{ _("Option 2") }}</span>
{{ _("Verification token") }}
</div>

View File

@ -26,7 +26,7 @@
</p>
{% endif %}
<a class="btn btn-secondary mr-3" href="{{ url_for('users.account', username=user.username) }}">
<a class="btn btn-secondary me-3" href="{{ url_for('users.account', username=user.username) }}">
{{ _("Cancel") }}
</a>
<input type="submit"
@ -37,7 +37,7 @@
{% endif %}
class="btn btn-danger" />
{% if not can_delete and current_user.rank.atLeast(current_user.rank.ADMIN) %}
<input type="submit" name="delete" value="{{ _('Delete Anyway') }}" class="btn btn-danger ml-3" />
<input type="submit" name="delete" value="{{ _('Delete Anyway') }}" class="btn btn-danger ms-3" />
{% endif %}
</div>
</form>

View File

@ -33,17 +33,17 @@
<div class="col-sm-2 {{ user.rank }}"
title="{{ _('Rank: %(rank)s.', rank=user.rank.getTitle()) }}">
{% if user.rank == user.rank.ADMIN %}
<i class="fas fa-user-cog mr-2"></i>
<i class="fas fa-user-cog me-2"></i>
{% elif user.rank == user.rank.MODERATOR %}
<i class="fas fa-user-shield mr-2"></i>
<i class="fas fa-user-shield me-2"></i>
{% elif user.rank == user.rank.EDITOR %}
<i class="fas fa-user-edit mr-2"></i>
<i class="fas fa-user-edit me-2"></i>
{% elif user.rank == user.rank.APPROVER %}
<i class="fas fa-user-check mr-2"></i>
<i class="fas fa-user-check me-2"></i>
{% elif user.rank == user.rank.BOT %}
<i class="fas fa-robot mr-2"></i>
<i class="fas fa-robot me-2"></i>
{% else %}
<i class="fas fa-user mr-2"></i>
<i class="fas fa-user me-2"></i>
{% endif %}
{{ user.rank.getTitle() }}
@ -52,7 +52,7 @@
<span class="col-sm {{ user.rank }}">
{{ user.display_name }}
{% if user.username != user.display_name %}
<span class="text-muted small ml-2">
<span class="text-muted small ms-2">
({{ user.username }})
</span>
{% endif %}

View File

@ -10,7 +10,7 @@
<form class="signin" method="POST">
{{ form.hidden_tag() }}
<h1 class="h3 mb-4 font-weight-normal">{{ self.title() }}</h1>
<h1 class="h3 mb-4 fw-normal">{{ self.title() }}</h1>
{{ render_field(form.username, tabindex=110, label_visible=False, placeholder=_("Username or email")) }}
{{ render_field(form.password, tabindex=120, label_visible=False, placeholder=_("Password")) }}
@ -25,12 +25,12 @@
<hr class="my-5" />
<p>
<a class="btn btn-secondary mr-3" href="{{ url_for('github.start') }}">
<i class="fab fa-github mr-1"></i>
<a class="btn btn-secondary me-3" href="{{ url_for('github.start') }}">
<i class="fab fa-github me-1"></i>
{{ _("GitHub") }}
</a>
<a class="btn btn-secondary" href="{{ url_for('users.claim') }}">
<i class="fas fa-user-plus mr-1"></i>
<i class="fas fa-user-plus me-1"></i>
{{ _("Register") }}
</a>
</p>

View File

@ -12,41 +12,41 @@
</div>
<div class="col">
{% if user.can_see_edit_profile(current_user) %}
<a class="btn btn-primary float-right" href="{{ url_for('users.profile_edit', username=user.username) }}">
<i class="fas fa-pen mr-1"></i>
<a class="btn btn-primary float-end" href="{{ url_for('users.profile_edit', username=user.username) }}">
<i class="fas fa-pen me-1"></i>
{{ _("Edit Profile") }}
</a>
<a class="btn btn-secondary float-right mr-3" href="{{ url_for('todo.view_user', username=user.username) }}">
<i class="fas fa-tasks mr-1"></i>
<a class="btn btn-secondary float-end me-3" href="{{ url_for('todo.view_user', username=user.username) }}">
<i class="fas fa-tasks me-1"></i>
{{ _("To Do List") }}
</a>
{% endif %}
<a class="btn btn-secondary float-right mr-3" href="{{ url_for('report.report', url=url_current()) }}">
<i class="fas fa-flag mr-1"></i>
<a class="btn btn-secondary float-end me-3" href="{{ url_for('report.report', url=url_current()) }}">
<i class="fas fa-flag me-1"></i>
{{ _("Report") }}
</a>
{% if current_user.is_authenticated and current_user.rank.atLeast(current_user.rank.MODERATOR) %}
{% if not user.rank.atLeast(current_user.rank) %}
<a class="btn btn-secondary float-right mr-3" href="{{ url_for('users.modtools', username=user.username) }}">
<i class="fas fa-user-shield mr-1"></i>
<a class="btn btn-secondary float-end me-3" href="{{ url_for('users.modtools', username=user.username) }}">
<i class="fas fa-user-shield me-1"></i>
{{ _("Moderator Tools") }}
</a>
{% endif %}
{% if user.email %}
<a class="btn btn-secondary float-right mr-3" href="{{ url_for('admin.send_single_email', username=user.username) }}">
<i class="fas fa-envelope mr-1"></i>
<a class="btn btn-secondary float-end me-3" href="{{ url_for('admin.send_single_email', username=user.username) }}">
<i class="fas fa-envelope me-1"></i>
{{ _("Send Email") }}
</a>
{% endif %}
{% endif %}
<h1 class="ml-3 my-0 {{ user.rank.name }}">
<h1 class="ms-3 my-0 {{ user.rank.name }}">
{{ user.display_name }}
{% if user.username != user.display_name %}
<span class="text-muted small ml-2">
<span class="text-muted small ms-2">
({{ user.username }})
</span>
{% endif %}
@ -129,7 +129,7 @@
{% if not current_user.is_authenticated and user.rank == user.rank.NOT_JOINED and user.forums_username %}
<div class="alert alert-secondary mb-5">
<a class="float-right btn btn-default btn-sm"
<a class="float-end btn btn-default btn-sm"
href="{{ url_for('users.claim_forums', username=user.forums_username) }}">{{ _("Claim") }}</a>
{{ _("Is this you? Claim your account now!") }}
@ -139,10 +139,10 @@
{% for medal in medals_unlocked %}
<div class="col-md-4">
<div class="card h-100">
<div class="card-body media align-items-center">
<i class="fas {{ medal.icon }} ml-2 mr-4 text-size"
<div class="card-body d-flex align-items-center">
<i class="flex-shrink-0 fas {{ medal.icon }} ms-2 me-4 text-size"
style="font-size: 45px; color: {{ medal.color }};"></i>
<div class="media-body">
<div class="flex-grow-1 ms-3">
<h5 class="mt-0">
{{ medal.title }}
</h5>
@ -176,14 +176,14 @@
{% endif %}
{% if current_user == user or user.checkPerm(current_user, "CHANGE_AUTHOR") %}
<a class="float-right btn btn-sm btn-primary"
<a class="float-end btn btn-sm btn-primary"
href="{{ url_for('packages.create_edit', author=user.username) }}">
<i class="fas fa-plus mr-1"></i>
<i class="fas fa-plus me-1"></i>
{{ _("Create package") }}
</a>
{% endif %}
{% if current_user == user or (current_user.is_authenticated and current_user.rank.atLeast(current_user.rank.EDITOR)) %}
<a class="float-right btn btn-sm btn-secondary mr-2"
<a class="float-end btn btn-sm btn-secondary me-2"
href="{{ url_for('todo.tags', author=user.username) }}">
{{ _("View list of tags") }}
</a>

View File

@ -7,7 +7,7 @@
{% block content %}
{% from "macros/forms.html" import render_field, render_checkbox_field, render_submit_field %}
<div class="card w-50 text-left" style="margin: 2em auto;">
<div class="card w-50 text-start" style="margin: 2em auto;">
<h2 class="card-header">{{ self.title() }}</h2>
<form action="" method="POST" class="form card-body" role="form">

View File

@ -9,7 +9,7 @@
<span class="col-auto m-0 p-0">
<img class="img-fluid user-photo img-thumbnail img-thumbnail-1" src="{{ user.getProfilePicURL() }}" alt="Profile picture" style="max-height: 20px;">
</span>
<span class="col m-0 p-0 pl-2">
<span class="col m-0 p-0 ps-2">
{{ user.display_name }}
</span>
</span>

View File

@ -53,7 +53,7 @@
<div class="button-group mt-4">
{% if user %}
<a class="btn btn-primary mr-3" href="{{ url_for('users.email_notifications', username=user.username) }}">
<a class="btn btn-primary me-3" href="{{ url_for('users.email_notifications', username=user.username) }}">
{{ _("Edit Notification Preferences") }}
</a>
{% endif %}