mirror of
https://github.com/minetest/contentdb.git
synced 2024-12-22 22:12:24 +01:00
Upgrade to Bootstrap v5 (#457)
This commit is contained in:
parent
70362ff7a6
commit
9df80d212e
@ -26,6 +26,9 @@ from sqlalchemy.orm import joinedload, subqueryload
|
||||
from sqlalchemy.sql.expression import func
|
||||
|
||||
|
||||
PKGS_PER_ROW = 5
|
||||
|
||||
|
||||
@bp.route("/gamejam/")
|
||||
def gamejam():
|
||||
return redirect("https://forum.minetest.net/viewtopic.php?t=28802")
|
||||
@ -55,18 +58,18 @@ def home():
|
||||
Package.collections.any(and_(Collection.name == "spotlight", Collection.author.has(username="ContentDB")))) \
|
||||
.order_by(func.random()).limit(6).all()
|
||||
|
||||
new = package_load(query.order_by(db.desc(Package.approved_at))).limit(4).all()
|
||||
pop_mod = package_load(query.filter_by(type=PackageType.MOD).order_by(db.desc(Package.score))).limit(8).all()
|
||||
pop_gam = package_load(query.filter_by(type=PackageType.GAME).order_by(db.desc(Package.score))).limit(8).all()
|
||||
pop_txp = package_load(query.filter_by(type=PackageType.TXP).order_by(db.desc(Package.score))).limit(8).all()
|
||||
new = package_load(query.order_by(db.desc(Package.approved_at))).limit(PKGS_PER_ROW).all()
|
||||
pop_mod = package_load(query.filter_by(type=PackageType.MOD).order_by(db.desc(Package.score))).limit(2*PKGS_PER_ROW).all()
|
||||
pop_gam = package_load(query.filter_by(type=PackageType.GAME).order_by(db.desc(Package.score))).limit(2*PKGS_PER_ROW).all()
|
||||
pop_txp = package_load(query.filter_by(type=PackageType.TXP).order_by(db.desc(Package.score))).limit(2*PKGS_PER_ROW).all()
|
||||
high_reviewed = package_load(query.order_by(db.desc(Package.score - Package.score_downloads))) \
|
||||
.filter(Package.reviews.any()).limit(4).all()
|
||||
.filter(Package.reviews.any()).limit(PKGS_PER_ROW).all()
|
||||
|
||||
updated = package_load(db.session.query(Package).select_from(PackageRelease).join(Package)
|
||||
.filter_by(state=PackageState.APPROVED)
|
||||
.order_by(db.desc(PackageRelease.releaseDate))
|
||||
.limit(20)).all()
|
||||
updated = updated[:4]
|
||||
updated = updated[:PKGS_PER_ROW]
|
||||
|
||||
reviews = review_load(PackageReview.query.filter(PackageReview.rating > 3)
|
||||
.order_by(db.desc(PackageReview.created_at))).limit(5).all()
|
||||
|
@ -289,7 +289,7 @@ def handle_create_edit(package: typing.Optional[Package], form: PackageForm, aut
|
||||
"danger")
|
||||
else:
|
||||
flash(markupsafe.Markup(
|
||||
f"<a class='btn btn-sm btn-danger float-right' href='{package.get_url('packages.view')}'>View</a>" +
|
||||
f"<a class='btn btn-sm btn-danger float-end' href='{package.get_url('packages.view')}'>View</a>" +
|
||||
gettext("Package already exists")), "danger")
|
||||
return None
|
||||
|
||||
|
@ -10,9 +10,9 @@ as it was submitted as university coursework. To learn about the history and dev
|
||||
|
||||
ContentDB is open source software, licensed under AGPLv3.0.
|
||||
|
||||
<a href="https://github.com/minetest/contentdb/" class="btn btn-primary mr-1">Source code</a>
|
||||
<a href="https://github.com/minetest/contentdb/issues/" class="btn btn-secondary mr-1">Issue tracker</a>
|
||||
<a href="https://rubenwardy.com/contact/" class="btn btn-secondary mr-1">Contact admin</a>
|
||||
<a href="https://github.com/minetest/contentdb/" class="btn btn-primary me-1">Source code</a>
|
||||
<a href="https://github.com/minetest/contentdb/issues/" class="btn btn-secondary me-1">Issue tracker</a>
|
||||
<a href="https://rubenwardy.com/contact/" class="btn btn-secondary me-1">Contact admin</a>
|
||||
<a href="https://monitor.rubenwardy.com/d/3ELzFy3Wz/contentdb" class="btn btn-secondary">Stats / monitoring</a>
|
||||
|
||||
## Why was ContentDB created?
|
||||
@ -36,4 +36,4 @@ for a guide to making mods and games using Minetest.
|
||||
You can donate to rubenwardy to cover ContentDB's costs and support future
|
||||
development.
|
||||
|
||||
<a href="https://rubenwardy.com/donate/" class="btn btn-primary mr-1">Donate</a>
|
||||
<a href="https://rubenwardy.com/donate/" class="btn btn-primary me-1">Donate</a>
|
||||
|
@ -75,11 +75,11 @@ function addPackage(pkg) {
|
||||
<article class="card my-3" data-id="${escapeHtml(id)}">
|
||||
<div class="card-body">
|
||||
<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">
|
||||
<button class="btn btn-sm btn-danger remove-package float-right" type="button" aria-label="Remove">
|
||||
<button class="btn btn-sm btn-danger remove-package float-end" type="button" aria-label="Remove">
|
||||
<i class="fas fa-trash"></i>
|
||||
</button>
|
||||
<h5>
|
||||
@ -90,14 +90,14 @@ function addPackage(pkg) {
|
||||
<p class="text-muted">
|
||||
${escapeHtml(pkg.short_description)}
|
||||
</p>
|
||||
<div class="form-group">
|
||||
<label for="descriptions-${nextId}">Short Description</label>
|
||||
<input id="package_ids-${nextId}" name="package_ids-${nextId}" type="hidden" value="${id}">
|
||||
<input id="package_removed-${nextId}" name="package_removed-${nextId}" type="hidden" value="0">
|
||||
<div>
|
||||
<label for="descriptions-${nextId}" class="form-label">Short Description</label>
|
||||
<input class="form-control" id="descriptions-${nextId}" maxlength="500" minlength="0"
|
||||
name="descriptions-${nextId}" type="text" value="">
|
||||
<small class="form-text text-muted">You can replace the description with your own</small>
|
||||
</div>
|
||||
<input id="package_ids-${nextId}" name="package_ids-${nextId}" type="hidden" value="${id}">
|
||||
<input id="package_removed-${nextId}" name="package_removed-${nextId}" type="hidden" value="0">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -128,7 +128,7 @@ function updateResults(packages) {
|
||||
result.innerText = `${pkg.title} by ${pkg.author}`;
|
||||
if (alreadyAdded.includes(`${pkg.author}/${pkg.name}`)) {
|
||||
result.classList.add("active");
|
||||
result.innerHTML = "<i class='fas fa-check mr-3 text-success'></i>" + result.innerHTML;
|
||||
result.innerHTML = "<i class='fas fa-check me-3 text-success'></i>" + result.innerHTML;
|
||||
}
|
||||
result.addEventListener("click", () => addPackage(pkg));
|
||||
results.appendChild(result);
|
||||
|
16
app/public/static/libs/bootstrap.min.css
vendored
16
app/public/static/libs/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
8
app/public/static/libs/bootstrap.min.js
vendored
8
app/public/static/libs/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
@ -78,12 +78,12 @@ function add_summary_card(title, icon, value, extra) {
|
||||
<div class="card h-100">
|
||||
<div class="card-body align-items-center text-center">
|
||||
<div class="mt-0 mb-3">
|
||||
<i class="fas fa-${icon} mr-1"></i>
|
||||
<i class="fas fa-${icon} me-1"></i>
|
||||
<span class="summary-title"></span>
|
||||
</div>
|
||||
<div class="my-0 h4">
|
||||
<span class="summary-value"></span>
|
||||
<small class="text-muted ml-2 summary-extra"></small>
|
||||
<small class="text-muted ms-2 summary-extra"></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -58,7 +58,7 @@ $(function() {
|
||||
}
|
||||
})
|
||||
|
||||
const btn = $("#forums").parent().find("label").append("<a class='ml-3 btn btn-sm btn-primary'>Open</a>");
|
||||
const btn = $("#forums").parent().find("label").append("<a class='ms-3 btn btn-sm btn-primary'>Open</a>");
|
||||
btn.click(function() {
|
||||
const id = $("#forums").val();
|
||||
if (/^\d+$/.test(id)) {
|
||||
|
@ -19,8 +19,9 @@ function setVoteCount(button, count) {
|
||||
if (!badge) {
|
||||
badge = document.createElement("span")
|
||||
badge.classList.add("badge");
|
||||
badge.classList.add("badge-light");
|
||||
badge.classList.add("badge-ml-1");
|
||||
badge.classList.add("bg-light");
|
||||
badge.classList.add("text-dark");
|
||||
badge.classList.add("ms-1");
|
||||
button.appendChild(badge);
|
||||
}
|
||||
|
||||
|
@ -50,7 +50,7 @@
|
||||
text = text.substr(0, idx);
|
||||
}
|
||||
|
||||
$('<span class="badge badge-pill badge-primary"/>')
|
||||
$('<span class="badge roaded-pill bg-primary"/>')
|
||||
.text(text + ' ')
|
||||
.data("id", id)
|
||||
.append('<a>x</a>')
|
||||
|
@ -9,8 +9,8 @@ document.querySelectorAll(".video-embed").forEach(ele => {
|
||||
if (url.host == "www.youtube.com") {
|
||||
ele.addEventListener("click", () => {
|
||||
ele.parentNode.classList.add("d-block");
|
||||
ele.classList.add("embed-responsive");
|
||||
ele.classList.add("embed-responsive-16by9");
|
||||
ele.classList.add("ratio");
|
||||
ele.classList.add("ratio-16x9");
|
||||
ele.innerHTML = `
|
||||
<iframe title="YouTube video player" frameborder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
|
@ -32,6 +32,14 @@
|
||||
}
|
||||
}
|
||||
|
||||
.badge {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.badge:hover {
|
||||
filter: brightness(0.9);
|
||||
}
|
||||
|
||||
.bulletselector {
|
||||
height: auto !important;
|
||||
display: inline-block !important;
|
||||
@ -51,6 +59,7 @@
|
||||
white-space: nowrap;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.bulletselector .badge {
|
||||
float: left;
|
||||
padding: 0.4em 0.8em;
|
||||
@ -272,3 +281,7 @@ blockquote {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 1rem !important;
|
||||
}
|
||||
|
@ -123,8 +123,9 @@ pre {
|
||||
|
||||
.jumbotron {
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background: #111 no-repeat center;
|
||||
padding: 3rem 0 1rem 0;
|
||||
color: white;
|
||||
|
||||
.btn-outline-secondary {
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
@ -180,11 +181,11 @@ pre {
|
||||
}
|
||||
|
||||
#featuredCarousel {
|
||||
.embed-responsive-item {
|
||||
.ratio > * {
|
||||
filter: brightness(0.85);
|
||||
object-fit: cover;
|
||||
}
|
||||
.carousel-item, .embed-responsive-item {
|
||||
.carousel-item, .ratio {
|
||||
max-height: 50vh;
|
||||
}
|
||||
.carousel-inner {
|
||||
|
@ -78,3 +78,14 @@
|
||||
padding: 0;
|
||||
margin: 0 0.75em;
|
||||
}
|
||||
|
||||
.jumbotron {
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
|
||||
padding: 2rem 1rem;
|
||||
margin-bottom: 2rem;
|
||||
background-color: #303030;
|
||||
border-radius: .3rem;
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -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 %}
|
||||
|
@ -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 %} roaded-pill">
|
||||
{{ l.is_foss and "Free" or "Non-free"}}
|
||||
</span>
|
||||
{{ l.name }}
|
||||
|
@ -28,14 +28,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>
|
||||
|
@ -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>
|
||||
|
@ -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 %}
|
||||
@ -23,7 +23,7 @@
|
||||
{% endif %}
|
||||
{{ render_submit_field(form.submit) }}
|
||||
{% if tag %}
|
||||
<a class="ml-5" target="_blank" href="{{ url_for('packages.list_all', tag=tag.name) }}">
|
||||
<a class="ms-5" target="_blank" href="{{ url_for('packages.list_all', tag=tag.name) }}">
|
||||
View packages with tag
|
||||
</a>
|
||||
{% endif %}
|
||||
|
@ -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>
|
||||
|
@ -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 %}
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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 %}
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -15,7 +15,7 @@
|
||||
<meta name="og:description" content="{{ self.description() | normalize_whitespace }}">
|
||||
{%- endif %}
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/static/libs/bootstrap.min.css">
|
||||
<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=42">
|
||||
<link rel="search" type="application/opensearchdescription+xml" href="/static/opensearch.xml" title="ContentDB" />
|
||||
|
||||
@ -29,12 +29,12 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="/">{{ config.USER_APP_NAME }}</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor01" aria-controls="navbarColor01" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarColor01" aria-controls="navbarColor01" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</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>
|
||||
@ -51,24 +51,22 @@
|
||||
<a class="nav-link" href="{{ url_for('flatpage', path='help') }}">{{ _("Help") }}</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 %}
|
||||
<div class="input-group mx-0 my-0">
|
||||
<div class="input-group m-0">
|
||||
<input class="form-control" name="q" type="text"
|
||||
placeholder="{% if query_hint %}{{ _('Search %(type)s', type=query_hint | lower) }}{% else %}{{ _('Search all packages') }}{% endif %}"
|
||||
value="{{ query or ''}}">
|
||||
<div class="input-group-append">
|
||||
<button type="submit" class="btn btn-secondary" title="{{ _('Search') }}">
|
||||
<i class="fas fa-search"></i>
|
||||
</button>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-secondary" title="{{ _('Search') }}">
|
||||
<i class="fas fa-search"></i>
|
||||
</button>
|
||||
</div>
|
||||
<!-- <input class="btn btn-secondary my-2 my-sm-0"
|
||||
data-toggle="tooltip" data-placement="bottom"
|
||||
data-bs-toggle="tooltip" data-bs-placement="bottom"
|
||||
title="Go to the first found result for this query."
|
||||
type="submit" name="lucky" value="First" /> -->
|
||||
</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">
|
||||
@ -77,7 +75,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 roaded-pill badge-notify">{{ todo_list_count }}</span>
|
||||
{% else %}
|
||||
<i class="fas fa-inbox" ></i>
|
||||
{% endif %}
|
||||
@ -101,11 +99,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 roaded-pill badge-notify badge-emoji">
|
||||
😢
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="badge badge-pill badge-notify">
|
||||
<span class="badge roaded-pill badge-notify">
|
||||
{{ num_notifs }}
|
||||
</span>
|
||||
{% endif %}
|
||||
@ -124,7 +122,7 @@
|
||||
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle"
|
||||
data-toggle="dropdown"
|
||||
data-bs-toggle="dropdown"
|
||||
role="button"
|
||||
aria-expanded="false">
|
||||
{{ current_user.display_name }}
|
||||
@ -192,7 +190,7 @@
|
||||
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle"
|
||||
data-toggle="dropdown"
|
||||
data-bs-toggle="dropdown"
|
||||
role="button"
|
||||
aria-expanded="false">
|
||||
<i class="fas fa-language"></i>
|
||||
@ -279,7 +277,7 @@
|
||||
</footer>
|
||||
|
||||
<script src="/static/libs/jquery.min.js"></script>
|
||||
<script src="/static/libs/bootstrap.min.js"></script>
|
||||
<script src="/static/libs/bootstrap.min.js?v=2"></script>
|
||||
<script src="/static/libs/easymde.min.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/static/libs/easymde.min.css">
|
||||
<link href="/static/fa/css/all.css" rel="stylesheet">
|
||||
|
@ -10,13 +10,13 @@
|
||||
|
||||
{% block scriptextra %}
|
||||
<script src="/static/libs/jquery-ui.min.js"></script>
|
||||
<script src="/static/collection_editor.js?v=7"></script>
|
||||
<script src="/static/collection_editor.js?v=8"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% from "macros/forms.html" import render_field, render_submit_field, render_checkbox_field, render_field_prefix_button %}
|
||||
<form method="POST" action="" enctype="multipart/form-data">
|
||||
{{ render_submit_field(form.submit, class_="btn btn-primary float-right") }}
|
||||
{{ render_submit_field(form.submit, class_="btn btn-primary float-end") }}
|
||||
<h1>{{ self.title() }}</h1>
|
||||
|
||||
{{ form.hidden_tag() }}
|
||||
@ -36,10 +36,10 @@
|
||||
{{ render_field(form.long_description, fieldclass="form-control markdown") }}
|
||||
{% endif %}
|
||||
|
||||
{% if collection and collection.items %}
|
||||
{% if collection %}
|
||||
<h2>{{ _("Packages") }}</h2>
|
||||
<div class="mb-5">
|
||||
<label for="add_package" class="sr-only">Add package</label>
|
||||
<label for="add_package" class="visually-hidden">Add package</label>
|
||||
<input id="add_package" type="search" class="form-control d-none" placeholder="Add package">
|
||||
<p id="add_package_empty" class="mt-2" style="display: none;">
|
||||
<i>{{ _("No results") }}</i>
|
||||
@ -52,11 +52,11 @@
|
||||
<article class="card my-3" data-id="{{ package.get_id() }}">
|
||||
<div class="card-body">
|
||||
<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">
|
||||
<button class="btn btn-sm btn-danger remove-package float-right"
|
||||
<button class="btn btn-sm btn-danger remove-package float-end"
|
||||
type="button" aria-label="{{ _('Remove') }}">
|
||||
<i class="fas fa-trash"></i>
|
||||
</button>
|
||||
@ -68,9 +68,9 @@
|
||||
<p class="text-muted">
|
||||
{{ package.short_desc }}
|
||||
</p>
|
||||
{{ render_field(form.descriptions[loop.index - 1], hint=_("You can replace the description with your own")) }}
|
||||
{{ form.package_ids[loop.index - 1]() }}
|
||||
{{ form.package_removed[loop.index - 1]() }}
|
||||
{{ render_field(form.descriptions[loop.index - 1], hint=_("You can replace the description with your own"), no_class=True) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -10,7 +10,7 @@
|
||||
<h3 class="card-header">{{ self.title() }}</h3>
|
||||
<div class="card-body">
|
||||
<p>{{ _("Deleting is permanent") }}</p>
|
||||
<a class="btn btn-secondary mr-3" href="{{ collection.get_url('collections.create_edit') }}">{{ _("Cancel") }}</a>
|
||||
<a class="btn btn-secondary me-3" href="{{ collection.get_url('collections.create_edit') }}">{{ _("Cancel") }}</a>
|
||||
<input type="submit" value="{{ _('Delete') }}" class="btn btn-danger" />
|
||||
</div>
|
||||
</form>
|
||||
|
@ -17,7 +17,7 @@
|
||||
{% block content %}
|
||||
{% if user %}
|
||||
{% if current_user == user or (current_user.is_authenticated and current_user.rank.at_least(current_user.rank.EDITOR)) %}
|
||||
<a class="btn btn-primary float-right" href="{{ url_for('collections.create_edit', author=user.username) }}">
|
||||
<a class="btn btn-primary float-end" href="{{ url_for('collections.create_edit', author=user.username) }}">
|
||||
{{ _("Create") }}
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -30,17 +30,17 @@
|
||||
{% for collection in collections -%}
|
||||
<a class="list-group-item list-group-item-action" href="{{ collection.get_url('collections.view') }}">
|
||||
{% if collection.private %}
|
||||
<i class="fas fa-lock mr-1" style="color:#ffac33;"></i>
|
||||
<i class="fas fa-lock me-1" style="color:#ffac33;"></i>
|
||||
{% endif %}
|
||||
{% if collection.name == 'favorites' %}
|
||||
<i class="fas fa-star mr-1 text-info"></i>
|
||||
<i class="fas fa-star me-1 text-info"></i>
|
||||
{% endif %}
|
||||
{% if user != collection.author %}
|
||||
{{ _("%(title)s by %(author)s", title=collection.title, author=collection.author.display_name) }}
|
||||
{% else %}
|
||||
{{ collection.title }}
|
||||
{% endif %}
|
||||
<span class="text-muted ml-4">
|
||||
<span class="text-muted ms-4">
|
||||
{{ collection.short_description }}
|
||||
</span>
|
||||
</a>
|
||||
|
@ -5,7 +5,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<a href="{{ url_for('collections.create_edit', package=package.get_id()) }}" class="btn btn-primary float-right">
|
||||
<a href="{{ url_for('collections.create_edit', package=package.get_id()) }}" class="btn btn-primary float-end">
|
||||
{{ _("Create Collection") }}
|
||||
</a>
|
||||
<h1>{{ self.title() }}</h1>
|
||||
@ -20,16 +20,16 @@
|
||||
<button type="submit"
|
||||
class="list-group-item list-group-item-action {% if active %}active{% endif %}">
|
||||
{% if active %}
|
||||
<i class="fas fa-check mr-3 text-success"></i>
|
||||
<i class="fas fa-check me-3 text-success"></i>
|
||||
{% else %}
|
||||
<i class="fas fa-square mr-3 text-muted"></i>
|
||||
<i class="fas fa-square me-3 text-muted"></i>
|
||||
{% endif -%}
|
||||
{% if collection.author != current_user %}{{ collection.author.display_name }}: {% endif -%}
|
||||
{% if collection.name == 'favorites' %}
|
||||
<i class="fas fa-star mr-1 text-info"></i>
|
||||
<i class="fas fa-star me-1 text-info"></i>
|
||||
{% endif %}
|
||||
{% if collection.private %}
|
||||
<i class="fas fa-lock mr-1" style="color:#ffac33;"></i>
|
||||
<i class="fas fa-lock me-1" style="color:#ffac33;"></i>
|
||||
{% endif %}
|
||||
{{ collection.title }}
|
||||
</button>
|
||||
|
@ -22,12 +22,12 @@
|
||||
{%- endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="float-right">
|
||||
<div class="float-end">
|
||||
<a class="btn btn-secondary" href="{{ url_for('collections.list_all', author=collection.author.username) }}">
|
||||
{{ _("%(author)s's collections", author=collection.author.display_name) }}
|
||||
</a>
|
||||
{% if current_user.is_authenticated %}
|
||||
<form method="POST" action="{{ collection.get_url('collections.clone') }}" class="d-inline-block ml-2">
|
||||
<form method="POST" action="{{ collection.get_url('collections.clone') }}" class="d-inline-block ms-2">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
||||
<button type="submit" class="btn btn-secondary">
|
||||
{{ _("Make a copy") }}
|
||||
@ -35,10 +35,10 @@
|
||||
</form>
|
||||
{% endif %}
|
||||
{% if collection.check_perm(current_user, "EDIT_COLLECTION") %}
|
||||
<a class="btn btn-danger ml-2" href="{{ collection.get_url('collections.delete') }}">
|
||||
<a class="btn btn-danger ms-2" href="{{ collection.get_url('collections.delete') }}">
|
||||
{{ _("Delete") }}
|
||||
</a>
|
||||
<a class="btn btn-primary ml-2" href="{{ collection.get_url('collections.create_edit') }}">
|
||||
<a class="btn btn-primary ms-2" href="{{ collection.get_url('collections.create_edit') }}">
|
||||
{{ _("Edit") }}
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -46,8 +46,8 @@
|
||||
<h1>{{ self.title() }}</h1>
|
||||
<p class="text-muted">
|
||||
{% if collection.private %}
|
||||
<span class="badge badge-secondary mr-1">
|
||||
<i class="fas fa-lock mr-1" style="color:#ffac33;"></i>
|
||||
<span class="badge bg-secondary me-1">
|
||||
<i class="fas fa-lock me-1" style="color:#ffac33;"></i>
|
||||
{{ _("Private") }}
|
||||
</span>
|
||||
{% endif %}
|
||||
@ -63,7 +63,7 @@
|
||||
{% endif %}
|
||||
|
||||
<section class="mt-5">
|
||||
<h2 class="sr-only">{{ _("Packages") }}</h2>
|
||||
<h2 class="visually-hidden">{{ _("Packages") }}</h2>
|
||||
{% if not items %}
|
||||
<p class="text-muted">
|
||||
{{ _("To add a package, go to the package's page and click 'Add to collection'") }}
|
||||
@ -78,12 +78,12 @@
|
||||
{% endset %}
|
||||
<div>
|
||||
<article class="card">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<img class="card-img-top embed-responsive-item" src="{{ item.package.get_thumb_or_placeholder(4) }}" alt="{{ item.package.title }} screenshot">
|
||||
<div class="ratio ratio-16x9">
|
||||
<img class="card-img-top" src="{{ item.package.get_thumb_or_placeholder(4) }}" alt="{{ item.package.title }} screenshot">
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if item.package.state.name != "APPROVED" %}
|
||||
<span class="badge badge-warning float-right">
|
||||
<span class="badge bg-warning float-end">
|
||||
{{ item.package.state.value }}
|
||||
</span>
|
||||
{% endif %}
|
||||
|
@ -27,7 +27,7 @@
|
||||
style="max-height: 22px; max-width: 22px;"
|
||||
src="{{ package.get_thumb_or_placeholder() }}" />
|
||||
|
||||
<span class="pl-2">
|
||||
<span class="ps-2">
|
||||
{{ package.title }}
|
||||
</span>
|
||||
</a>
|
||||
@ -38,11 +38,11 @@
|
||||
</div>
|
||||
|
||||
<div class="col-sm-auto">
|
||||
<a href="{{ package.get_url('packages.view') }}" class="btn btn-sm btn-secondary mr-1">
|
||||
<a href="{{ package.get_url('packages.view') }}" class="btn btn-sm btn-secondary me-1">
|
||||
{{ _("View package") }}
|
||||
</a>
|
||||
<a href="{{ package.donate_url_actual }}" class="btn btn-sm btn-primary" rel="nofollow">
|
||||
<i class="fas fa-heart mr-1"></i>
|
||||
<i class="fas fa-heart me-1"></i>
|
||||
{{ _("Donate") }}
|
||||
</a>
|
||||
</div>
|
||||
|
@ -22,26 +22,29 @@
|
||||
}
|
||||
</script>
|
||||
{% if current_user.is_authenticated %}
|
||||
<script src="/static/quick_review_voting.js"></script>
|
||||
<script src="/static/quick_review_voting.js?v=2"></script>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% from "macros/packagegridtile.html" import render_pkggrid %}
|
||||
<div id="featuredCarousel" class="carousel slide my-0" data-ride="carousel" data-interval="7500">
|
||||
<ol class="carousel-indicators">
|
||||
<div id="featuredCarousel" class="carousel slide mt-0 mb-5" data-bs-ride="carousel" data-bs-interval="7500">
|
||||
<div class="carousel-indicators">
|
||||
{% for package in spotlight_pkgs %}
|
||||
<li data-target="#featuredCarousel" data-slide-to="{{ loop.index - 1 }}" {% if loop.index == 1 %}class="active"{% endif %}></li>
|
||||
<button
|
||||
data-bs-target="#featuredCarousel"
|
||||
data-bs-slide-to="{{ loop.index - 1 }}"
|
||||
{% if loop.index == 1 %}class="active" aria-current="true"{% endif %}></button>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</div>
|
||||
<div class="carousel-inner">
|
||||
{% for package in spotlight_pkgs %}
|
||||
{% set cover_image = package.get_cover_image_url() %}
|
||||
{% set tags = package.tags | sort(attribute="views", reverse=True) %}
|
||||
<div class="carousel-item {% if loop.index == 1 %}active{% endif %}">
|
||||
<a href="{{ package.get_url('packages.view') }}">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<img class="embed-responsive-item" src="{{ cover_image }}"
|
||||
<div class="ratio ratio-16x9">
|
||||
<img src="{{ cover_image }}"
|
||||
alt="{{ _('%(title)s by %(author)s', title=package.title, author=package.author.display_name) }}">
|
||||
</div>
|
||||
<div class="carousel-caption text-shadow">
|
||||
@ -57,17 +60,17 @@
|
||||
</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] %}
|
||||
<span class="badge badge-primary" title="{{ t.description or '' }}">
|
||||
<span class="badge bg-primary" title="{{ t.description or '' }}">
|
||||
{{ t.title }}
|
||||
</span>
|
||||
{% endfor %}
|
||||
@ -88,51 +91,51 @@
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<a class="carousel-control-prev" href="#featuredCarousel" role="button" data-slide="prev">
|
||||
<button class="carousel-control-prev" role="button" data-bs-target="#featuredCarousel" data-bs-slide="prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="sr-only">{{ _("Previous") }}</span>
|
||||
</a>
|
||||
<a class="carousel-control-next" href="#featuredCarousel" role="button" data-slide="next">
|
||||
<span class="visually-hidden">{{ _("Previous") }}</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" role="button" data-bs-target="#featuredCarousel" data-bs-slide="next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="sr-only">{{ _("Next") }}</span>
|
||||
</a>
|
||||
<span class="visually-hidden">{{ _("Next") }}</span>
|
||||
</button>
|
||||
</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>
|
||||
@ -148,20 +151,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 roaded-pill bg-light text-dark 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>
|
||||
|
@ -27,7 +27,7 @@
|
||||
style="max-height: 22px;"
|
||||
src="{{ entry.causer.get_profile_pic_url() }}" />
|
||||
|
||||
<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>
|
||||
|
||||
|
@ -8,16 +8,16 @@
|
||||
{% 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 for="{{ field.id }}" {% if not label_visible %}class="visually-hidden"{% else %}class="form-label"{% endif %}>
|
||||
{{ label|safe }}
|
||||
</label>
|
||||
{% if field.flags.required and label_visible %}
|
||||
<span class="ml-1 text-danger">
|
||||
<span class="ms-1 text-danger">
|
||||
<small>
|
||||
<i class="fas fa-asterisk"></i>
|
||||
</small>
|
||||
</span>
|
||||
<span class="ml-3 text-muted">
|
||||
<span class="ms-3 text-muted">
|
||||
{{ _("Required") }}
|
||||
</span>
|
||||
{% endif %}
|
||||
@ -25,8 +25,8 @@
|
||||
{% endif %}
|
||||
{% endmacro %}
|
||||
|
||||
{% macro render_field(field, label=None, label_visible=true, right_url=None, right_label=None, fieldclass=None, hint=None) -%}
|
||||
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
||||
{% macro render_field(field, label=None, label_visible=true, right_url=None, right_label=None, fieldclass=None, hint=None, no_class=False) -%}
|
||||
<div class="{% if not no_class %}form-group mb-3{% endif %} {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
||||
{{ render_label(field, label, label_visible) }}
|
||||
{{ field(class_=fieldclass or 'form-control', **kwargs) }}
|
||||
{% if hint %}
|
||||
@ -37,12 +37,10 @@
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro render_field_prefix(field, label=None, prefix="@", label_visible=true, right_url=None, right_label=None, fieldclass=None) -%}
|
||||
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
||||
<div class="form-group mb-3 {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
||||
{{ render_label(field, label, label_visible) }}
|
||||
<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) }}
|
||||
</div>
|
||||
|
||||
@ -51,12 +49,10 @@
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro render_field_prefix_button(field, label=None, prefix="@", label_visible=true, right_url=None, right_label=None, fieldclass=None, has_view=False, hint=None) -%}
|
||||
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
||||
<div class="form-group mb-3 {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
||||
{{ render_label(field, label, label_visible) }}
|
||||
<div class="input-group mb-1">
|
||||
<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) }}
|
||||
{% if has_view %}
|
||||
<a class="btn btn-secondary" id="{{ field.name }}-button">
|
||||
@ -75,7 +71,7 @@
|
||||
{% macro form_scripts() -%}
|
||||
<link href="/static/libs/jquery-ui.min.css" rel="stylesheet" type="text/css">
|
||||
<script src="/static/libs/jquery-ui.min.js"></script>
|
||||
<script src="/static/tagselector.js?v=4"></script>
|
||||
<script src="/static/tagselector.js?v=5"></script>
|
||||
{% endmacro %}
|
||||
|
||||
{% macro package_lists() -%}
|
||||
@ -113,7 +109,7 @@
|
||||
{% endmacro %}
|
||||
|
||||
{% macro render_multiselect_field(field, label=None, label_visible=true, right_url=None, right_label=None) -%}
|
||||
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
||||
<div class="form-group mb-3 {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
||||
{{ render_label(field, label, label_visible) }}
|
||||
<div class="multichoice_selector bulletselector form-control">
|
||||
<input type="text" placeholder="{{ _('Start typing to see suggestions') }}">
|
||||
@ -127,15 +123,16 @@
|
||||
|
||||
{% 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', class_="mr-2", **kwargs) }} {{ label }}
|
||||
<div class="form-check {{ kwargs.pop('class_', '') }}">
|
||||
{{ field(type='checkbox', class_="form-check-input", **kwargs) }}
|
||||
<label class="form-check-label" for="{{ field.name }}">
|
||||
{{ label }}
|
||||
</label>
|
||||
</div>
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro render_radio_field(field, hint=None, label=None, label_visible=true) -%}
|
||||
<div class="form-group {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
||||
<div class="form-group mb-3 {% if field.errors %}has-danger{% endif %} {{ kwargs.pop('class_', '') }}">
|
||||
{{ render_label(field, label, label_visible) }}
|
||||
{% for value, label, checked in field.iter_choices() %}
|
||||
<div class="form-check my-1">
|
||||
@ -153,17 +150,17 @@
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro render_toggle_field(field, icons=[]) -%}
|
||||
<div class="btn-group btn-group-toggle {{ kwargs.pop('class_', '') }}" data-toggle="buttons">
|
||||
{% for value, label, checked in field.iter_choices() %}
|
||||
<label class="btn btn-primary{% if checked %} active{% endif %}">
|
||||
{% set icon = icons[value] %}
|
||||
{% if icon %}
|
||||
<i class="fas {{ icon }} mr-2"></i>
|
||||
{% endif %}
|
||||
<input type="radio" name="{{ field.id }}" id="{{ field.id }}" value="{{ value }}" autocomplete="off" {% if checked %} checked{% endif %}>
|
||||
{{ label }}
|
||||
</label>
|
||||
{% endfor %}
|
||||
<div class="btn-group" role="group" >
|
||||
{% for value, label, checked in field.iter_choices() %}
|
||||
<input type="radio" class="btn-check" name="{{ field.id }}" id="{{ field.id }}-{{ value }}" value="{{ value }}" autocomplete="off" {% if checked %} checked{% endif %}>
|
||||
<label class="btn btn-primary" for="{{ field.id }}-{{ value }}">
|
||||
{% set icon = icons[value] %}
|
||||
{% if icon %}
|
||||
<i class="fas {{ icon }} me-2"></i>
|
||||
{% endif %}
|
||||
{{ label }}
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{%- endmacro %}
|
||||
|
||||
|
@ -18,11 +18,11 @@
|
||||
{% set message %}
|
||||
{% if package.check_perm(current_user, "MAKE_RELEASE") %}
|
||||
{% if package.update_config %}
|
||||
<a class="btn btn-sm btn-warning float-right" href="{{ package.get_url('packages.create_release') }}">
|
||||
<a class="btn btn-sm btn-warning float-end" href="{{ package.get_url('packages.create_release') }}">
|
||||
{{ _("Create release") }}
|
||||
</a>
|
||||
{% else %}
|
||||
<a class="btn btn-sm btn-warning float-right" href="{{ package.get_url('packages.setup_releases') }}">
|
||||
<a class="btn btn-sm btn-warning float-end" href="{{ package.get_url('packages.setup_releases') }}">
|
||||
{{ _("Set up releases") }}
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -95,7 +95,7 @@
|
||||
|
||||
{% if conflicting_modnames %}
|
||||
<div class="alert alert-warning">
|
||||
<a class="float-right btn btn-sm btn-warning" href="{{ package.get_url('packages.similar') }}">
|
||||
<a class="float-end btn btn-sm btn-warning" href="{{ package.get_url('packages.similar') }}">
|
||||
More info
|
||||
</a>
|
||||
{% if conflicting_modnames | length > 4 %}
|
||||
@ -108,7 +108,7 @@
|
||||
|
||||
{% if not package.review_thread and (package.author == current_user or package.check_perm(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>
|
||||
|
||||
|
@ -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 %}
|
||||
|
@ -2,7 +2,7 @@
|
||||
{% for rel in releases %}
|
||||
<a class="list-group-item list-group-item-action" href="{{ rel.get_edit_url() }}">
|
||||
{{ 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.check_perm(current_user, "MAKE_RELEASE") or rel.check_perm(current_user, "APPROVE_RELEASE") %}
|
||||
<a class="list-group-item list-group-item-action" href="{{ rel.get_download_url() }}">
|
||||
{{ 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.get_edit_url() }}">
|
||||
<a class="btn btn-sm btn-primary float-end" href="{{ rel.get_edit_url() }}">
|
||||
{% if not rel.task_id and not rel.approved and rel.check_perm(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 %}
|
||||
|
@ -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 text-dark 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 text-dark 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.get_profile_pic_url() }}">
|
||||
</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.rating > 3 %}
|
||||
<i class="fas fa-thumbs-up" style="color:#6f6;"></i>
|
||||
{% elif review.rating < 3 %}
|
||||
@ -49,7 +49,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>
|
||||
@ -57,7 +57,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.get_url('packages.review') }}">
|
||||
<i class="fas fa-pen"></i>
|
||||
</a>
|
||||
@ -71,16 +71,16 @@
|
||||
|
||||
<div class="btn-toolbar mt-2 mb-0">
|
||||
{% if show_package_link %}
|
||||
<a class="btn btn-primary mr-1" href="{{ review.package.get_url('packages.view') }}">
|
||||
<a class="btn btn-primary me-1" href="{{ review.package.get_url('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,18 +111,21 @@
|
||||
{{ _("Do you recommend this %(type)s?", type=package.type.text | lower) }}
|
||||
</p>
|
||||
|
||||
<div class="btn-group btn-group-toggle" data-toggle="buttons">
|
||||
<label class="btn btn-primary">
|
||||
<i class="fas fa-thumbs-up mr-2"></i>
|
||||
<input type="radio" name="rating" value="5" autocomplete="off"> {{ _("Yes") }}
|
||||
<div class="btn-group" role="group">
|
||||
<input type="radio" class="btn-check" name="rating" id="rating-5" value="5" autocomplete="off">
|
||||
<label class="btn btn-primary" for="rating-5">
|
||||
<i class="fas fa-thumbs-up me-2"></i>
|
||||
{{ _("Yes") }}
|
||||
</label>
|
||||
<label class="btn btn-primary">
|
||||
<i class="fas fa-minus mr-2"></i>
|
||||
<input type="radio" name="rating" value="3" autocomplete="off"> {{ _("Neutral") }}
|
||||
<input type="radio" class="btn-check" name="rating" id="rating-3" value="3" autocomplete="off">
|
||||
<label class="btn btn-primary" for="rating-3">
|
||||
<i class="fas fa-minus me-2"></i>
|
||||
{{ _("Neutral") }}
|
||||
</label>
|
||||
<label class="btn btn-primary">
|
||||
<i class="fas fa-thumbs-down mr-2"></i>
|
||||
<input type="radio" name="rating" value="1" autocomplete="off"> {{ _("No") }}
|
||||
<input type="radio" class="btn-check" name="rating" id="rating-1" value="1" autocomplete="off">
|
||||
<label class="btn btn-primary" for="rating-1">
|
||||
<i class="fas fa-thumbs-down me-2"></i>
|
||||
{{ _("No") }}
|
||||
</label>
|
||||
</div>
|
||||
|
||||
@ -130,14 +133,14 @@
|
||||
{{ _("Why or why not? Try to be constructive") }}
|
||||
</p>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="title">{{ _("Title") }}</label>
|
||||
<span class="ml-1 text-danger">
|
||||
<div class="form-group mb-3">
|
||||
<label for="title" class="form-label">{{ _("Title") }}</label>
|
||||
<span class="ms-1 text-danger">
|
||||
<small>
|
||||
<i class="fas fa-asterisk"></i>
|
||||
</small>
|
||||
</span>
|
||||
<span class="ml-3 text-muted">
|
||||
<span class="ms-3 text-muted">
|
||||
{{ _("Required") }}
|
||||
</span>
|
||||
<input class="form-control" id="title" name="title" required="" type="text">
|
||||
@ -163,23 +166,23 @@
|
||||
</p>
|
||||
|
||||
<div class="btn-toolbar" role="toolbar">
|
||||
<div class="btn-group mr-2">
|
||||
<div class="btn-group me-2">
|
||||
<button class="btn btn-primary" name="rating" value="5">
|
||||
<i class="fas fa-thumbs-up mr-1"></i>
|
||||
<i class="fas fa-thumbs-up me-1"></i>
|
||||
{{ _("Yes") }}
|
||||
</button>
|
||||
<button class="btn btn-primary" name="rating" value="3">
|
||||
<i class="fas fa-minus mr-1"></i>
|
||||
<i class="fas fa-minus me-1"></i>
|
||||
{{ _("Neutral") }}
|
||||
</button>
|
||||
<button class="btn btn-primary" name="rating" value="1">
|
||||
<i class="fas fa-thumbs-down mr-1"></i>
|
||||
<i class="fas fa-thumbs-down me-1"></i>
|
||||
{{ _("No") }}
|
||||
</button>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-secondary" href="{{ package.issueTracker or url_for('threads.new', pid=package.id) }}" rel="ugc">
|
||||
<i class="fas fa-bug mr-1"></i>
|
||||
<i class="fas fa-bug me-1"></i>
|
||||
{{ _("Report an Issue") }}
|
||||
</a>
|
||||
</div>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<script src="/static/libs/chart.min.js"></script>
|
||||
<script src="/static/libs/chartjs-adapter-date-fns.bundle.min.js"></script>
|
||||
<script src="/static/libs/chartjs-plugin-annotation.min.js"></script>
|
||||
<script src="/static/package_charts.js?v=11"></script>
|
||||
<script src="/static/package_charts.js?v=12"></script>
|
||||
{% endmacro %}
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
{% macro render_daterange_selector(options, is_active) %}
|
||||
<nav class="dropdown d-inline-block mr-2">
|
||||
<nav class="dropdown d-inline-block me-2">
|
||||
<button class="btn {% if is_active %}btn-primary{% else %}btn-secondary{% endif %} dropdown-toggle" type="button" id="dropdownDateRange" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{{ _("Date range...") }}
|
||||
</button>
|
||||
@ -69,7 +69,7 @@
|
||||
<div class="card h-100">
|
||||
<div class="card-body align-items-center text-center">
|
||||
<div class="mt-0 mb-3">
|
||||
<i class="fas fa-download mr-1"></i>
|
||||
<i class="fas fa-download me-1"></i>
|
||||
{{ _("Lifetime unique downloads") }}
|
||||
</div>
|
||||
<div class="my-0 h4">
|
||||
|
@ -10,29 +10,29 @@
|
||||
<div class="col pr-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.get_title() }}
|
||||
</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>
|
||||
@ -40,26 +40,26 @@
|
||||
|
||||
<div class="card-body markdown">
|
||||
{% if r.check_perm(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.first_reply == 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.get_url('packages.review') }}">
|
||||
<i class="fas fa-pen"></i>
|
||||
</a>
|
||||
{% elif r.check_perm(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>
|
||||
@ -94,7 +94,7 @@
|
||||
{{ r.comment | markdown }}
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<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>
|
||||
@ -116,7 +116,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 %}
|
||||
@ -125,8 +125,8 @@
|
||||
<div class="row mt-1">
|
||||
<div class="col-md-1 p-1"></div>
|
||||
<div class="col">
|
||||
<a class="btn btn-primary ml-3" href="{{ url_for('threads.view', id=thread.id) }}">
|
||||
<i class="fas fa-reply mr-1"></i>
|
||||
<a class="btn btn-primary ms-3" href="{{ url_for('threads.view', id=thread.id) }}">
|
||||
<i class="fas fa-reply me-1"></i>
|
||||
{{ _("Reply") }}
|
||||
</a>
|
||||
</div>
|
||||
@ -231,13 +231,13 @@
|
||||
{% else %}
|
||||
<i class="fas fa-minus" style="color:#999"></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>
|
||||
@ -245,7 +245,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 %}
|
||||
|
||||
@ -261,14 +261,14 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2 text-muted text-right">
|
||||
<div class="col-md-2 text-muted text-end">
|
||||
{% if t.package %}
|
||||
<img
|
||||
class="img-fluid"
|
||||
style="max-height: 22px; max-width: 22px;"
|
||||
src="{{ t.package.get_thumb_or_placeholder() }}" /><br />
|
||||
|
||||
<span class="pl-2">
|
||||
<span class="ps-2">
|
||||
{{ t.package.title }}
|
||||
</span>
|
||||
{% endif %}
|
||||
|
@ -10,7 +10,7 @@
|
||||
style="max-height: 22px; max-width: 22px;"
|
||||
src="{{ package.get_thumb_or_placeholder() }}" />
|
||||
|
||||
<span class="pl-2">
|
||||
<span class="ps-2">
|
||||
{{ package.title }}
|
||||
</span>
|
||||
</a>
|
||||
@ -30,21 +30,21 @@
|
||||
<div class="col-sm-auto">
|
||||
{% if not show_config %}
|
||||
{% if package.check_perm(current_user, "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.check_perm(current_user, "MAKE_RELEASE") %}
|
||||
<a class="btn btn-sm btn-secondary" href="{{ package.get_url('packages.update_config') }}">
|
||||
<i class="fas fa-cog mr-1"></i>
|
||||
<i class="fas fa-cog me-1"></i>
|
||||
{{ _("Update settings") }}
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -68,7 +68,7 @@
|
||||
style="max-height: 22px; max-width: 22px;"
|
||||
src="{{ package.get_thumb_or_placeholder() }}" />
|
||||
|
||||
<span class="pl-2">
|
||||
<span class="ps-2">
|
||||
{{ package.title }}
|
||||
</span>
|
||||
</div>
|
||||
|
@ -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.get_thumb_or_placeholder() }}" />
|
||||
|
||||
<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.get_thumb_or_placeholder() }}" />
|
||||
|
||||
<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;"
|
||||
|
@ -9,7 +9,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<a class="btn btn-primary float-right" href="{{ package.get_url('packages.alias_create_edit') }}">
|
||||
<a class="btn btn-primary float-end" href="{{ package.get_url('packages.alias_create_edit') }}">
|
||||
{{ _("Create") }}
|
||||
</a>
|
||||
<h1>{{ _("Aliases for %(title)s by %(author)s", title=self.link(), author=package.author.display_name) }}</h1>
|
||||
|
@ -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>
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
<script src="/static/polltask.js"></script>
|
||||
<script src="/static/package_create.js?v=5"></script>
|
||||
{% endif %}
|
||||
<script src="/static/package_edit.js?v=4"></script>
|
||||
<script src="/static/package_edit.js?v=5"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
@ -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>
|
||||
|
@ -26,35 +26,35 @@
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
<a href="{{ url_for('packages.list_all', sort='approved_at', order='desc', game=package.get_id()) }}" class="btn btn-secondary float-right">
|
||||
<a href="{{ url_for('packages.list_all', sort='approved_at', order='desc', game=package.get_id()) }}" 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', game=package.get_id()) }}" class="btn btn-secondary float-right">
|
||||
<a href="{{ url_for('packages.list_all', sort='last_release', order='desc', game=package.get_id()) }}" 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='mod', sort='score', order='desc', game=package.get_id()) }}" class="btn btn-secondary float-right">
|
||||
<a href="{{ url_for('packages.list_all', type='mod', sort='score', order='desc', game=package.get_id()) }}" 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', game=package.get_id()) }}" class="btn btn-secondary float-right">
|
||||
<a href="{{ url_for('packages.list_all', type='txp', sort='score', order='desc', game=package.get_id()) }}" class="btn btn-secondary float-end">
|
||||
{{ _("See more") }}
|
||||
</a>
|
||||
<h2 class="my-3">{{ _("Top Texture Packs") }}</h2>
|
||||
{{ render_pkggrid(pop_txp) }}
|
||||
|
||||
|
||||
<a href="{{ url_for('packages.list_all', sort='reviews', order='desc', game=package.get_id()) }}" class="btn btn-secondary float-right">
|
||||
<a href="{{ url_for('packages.list_all', sort='reviews', order='desc', game=package.get_id()) }}" class="btn btn-secondary float-end">
|
||||
{{ _("See more") }}
|
||||
</a>
|
||||
<h2 class="my-3">{{ _("Highest Reviewed") }}</h2>
|
||||
|
@ -5,7 +5,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<a class="float-right btn btn-secondary" href="{{ url_for('flatpage', path='help/game_support') }}">
|
||||
<a class="float-end btn btn-secondary" href="{{ url_for('flatpage', path='help/game_support') }}">
|
||||
{{ _("Documentation") }}
|
||||
</a>
|
||||
<h2 class="mt-0">{{ self.title() }}</h2>
|
||||
@ -22,7 +22,7 @@
|
||||
<span class="col-5">
|
||||
{{ _("Source") }}
|
||||
</span>
|
||||
<span class="col-2 text-right">
|
||||
<span class="col-2 text-end">
|
||||
{{ _("Supported?") }}
|
||||
</span>
|
||||
</div>
|
||||
@ -53,11 +53,11 @@
|
||||
{{ support.confidence }}
|
||||
{% endif %}
|
||||
</span>
|
||||
<span class="col-2 text-right">
|
||||
<span class="col-2 text-end">
|
||||
{% if support.supports %}
|
||||
<span class="badge badge-success">Yes</span>
|
||||
<span class="badge bg-success">Yes</span>
|
||||
{% else %}
|
||||
<span class="badge badge-danger">No</span>
|
||||
<span class="badge bg-danger">No</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
|
@ -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 roaded-pill bg-light text-dark 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 roaded-pill bg-light text-dark ms-1">{{ count }}</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
@ -12,7 +12,7 @@
|
||||
<img class="img-fluid user-photo img-thumbnail img-thumbnail-1"
|
||||
src="{{ package.get_thumb_or_placeholder(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>
|
||||
|
@ -72,7 +72,7 @@
|
||||
{% if release.check_perm(current_user, "DELETE_RELEASE") %}
|
||||
<form method="POST" action="{{ release.get_delete_url() }}" 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>
|
||||
|
@ -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.get_url('packages.update_config') }}">{{ _("Settings") }}</a>
|
||||
<a class="float-end btn btn-sm btn-secondary" href="{{ package.get_url('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.get_url('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.get_url('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.get_url('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.get_url('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>
|
||||
|
@ -5,7 +5,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<a class="btn btn-secondary float-right" href="{{ package.get_url('packages.view') }}">
|
||||
<a class="btn btn-secondary float-end" href="{{ package.get_url('packages.view') }}">
|
||||
{{ _("Later") }}
|
||||
</a>
|
||||
<h1>{{ self.title() }}</h1>
|
||||
@ -33,10 +33,10 @@
|
||||
<a class="btn btn-primary" href="{{ package.get_url('packages.update_config', trigger='commit') }}">
|
||||
{{ _("Rolling Release") }}
|
||||
</a>
|
||||
<a class="btn btn-primary ml-2" href="{{ package.get_url('packages.update_config', trigger='tag') }}">
|
||||
<a class="btn btn-primary ms-2" href="{{ package.get_url('packages.update_config', trigger='tag') }}">
|
||||
{{ _("On Git Tag") }}
|
||||
</a>
|
||||
{# <a class="btn btn-secondary ml-2" href="{{ package.get_url('packages.update_config') }}">#}
|
||||
{# <a class="btn btn-secondary ms-2" href="{{ package.get_url('packages.update_config') }}">#}
|
||||
{# {{ _("Advanced") }}#}
|
||||
{# </a>#}
|
||||
</p>
|
||||
@ -48,7 +48,7 @@
|
||||
<a class="btn btn-secondary" href="{{ package.get_url('packages.update_config', action='notification') }}">
|
||||
{{ _("With reminders") }}
|
||||
</a>
|
||||
<a class="btn btn-secondary ml-2" href="{{ package.get_url('packages.create_release') }}">
|
||||
<a class="btn btn-secondary ms-2" href="{{ package.get_url('packages.create_release') }}">
|
||||
{{ _("No reminders") }}
|
||||
</a>
|
||||
</p>
|
||||
@ -68,10 +68,10 @@
|
||||
<a class="btn btn-primary" href="{{ package.get_url('packages.create_edit') }}">
|
||||
{{ _("Add Git repo") }}
|
||||
</a>
|
||||
<a class="btn btn-secondary ml-2" href="{{ package.get_url('packages.create_release') }}">
|
||||
<a class="btn btn-secondary ms-2" href="{{ package.get_url('packages.create_release') }}">
|
||||
{{ _("Create releases manually") }}
|
||||
</a>
|
||||
<a class="btn btn-secondary ml-2" href="{{ package.get_url('packages.view') }}">
|
||||
<a class="btn btn-secondary ms-2" href="{{ package.get_url('packages.view') }}">
|
||||
{{ _("Later") }}
|
||||
</a>
|
||||
</p>
|
||||
|
@ -6,26 +6,26 @@
|
||||
|
||||
{% block content %}
|
||||
{% if package.check_perm(current_user, "MAKE_RELEASE") %}
|
||||
<p class="float-right">
|
||||
<p class="float-end">
|
||||
{% if package.update_config %}
|
||||
<a class="btn btn-secondary" href="{{ package.get_url('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.get_url('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.get_url('packages.bulk_change_release') }}">
|
||||
<i class="fas fa-wrench mr-1"></i>
|
||||
<a class="btn btn-secondary ms-1" href="{{ package.get_url('packages.bulk_change_release') }}">
|
||||
<i class="fas fa-wrench me-1"></i>
|
||||
{{ _("Bulk update") }}
|
||||
</a>
|
||||
|
||||
<a class="btn btn-primary ml-1" href="{{ package.get_url('packages.create_release') }}">
|
||||
<i class="fas fa-plus mr-1"></i>
|
||||
<a class="btn btn-primary ms-1" href="{{ package.get_url('packages.create_release') }}">
|
||||
<i class="fas fa-plus me-1"></i>
|
||||
{{ _("Create") }}
|
||||
</a>
|
||||
</p>
|
||||
|
@ -23,14 +23,14 @@ Remove {{ package.title }}
|
||||
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
||||
|
||||
<div class="form-group">
|
||||
<label for="reason">{{ _("Reason") }}</label>
|
||||
<span class="ml-1 text-danger">
|
||||
<div class="form-group mb-3">
|
||||
<label for="reason" class="form-label">{{ _("Reason") }}</label>
|
||||
<span class="ms-1 text-danger">
|
||||
<small>
|
||||
<i class="fas fa-asterisk"></i>
|
||||
</small>
|
||||
</span>
|
||||
<span class="ml-3 text-muted">
|
||||
<span class="ms-3 text-muted">
|
||||
{{ _("Required") }}
|
||||
</span>
|
||||
<input id="reason" class="form-control" type="text" name="reason" required minlength="5">
|
||||
@ -39,9 +39,9 @@ Remove {{ package.title }}
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<a class="btn btn-secondary float-right" href="{{ package.get_url('packages.view') }}">{{ _("Cancel") }}</a>
|
||||
<a class="btn btn-secondary float-end" href="{{ package.get_url('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" />
|
||||
|
@ -52,7 +52,7 @@
|
||||
{% if review %}
|
||||
<form method="POST" action="{{ review.get_delete_url() }}" 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>
|
||||
|
@ -55,11 +55,11 @@
|
||||
<tr>
|
||||
<th colspan="2">
|
||||
{% if review.rating > 3 %}
|
||||
<i class="fas fa-thumbs-up text-success mr-2"></i>
|
||||
<i class="fas fa-thumbs-up text-success me-2"></i>
|
||||
{% elif review.rating < 3 %}
|
||||
<i class="fas fa-thumbs-down text-danger mr-2"></i>
|
||||
<i class="fas fa-thumbs-down text-danger me-2"></i>
|
||||
{% else %}
|
||||
<i class="fas fa-minus mr-2"></i>
|
||||
<i class="fas fa-minus me-2"></i>
|
||||
{% endif %}
|
||||
<a href="{{ review.thread.get_view_url() }}">
|
||||
{{ review.thread.title }}
|
||||
@ -70,7 +70,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 %}
|
||||
@ -79,7 +79,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 %}
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
{% block scriptextra %}
|
||||
{% if current_user.is_authenticated %}
|
||||
<script src="/static/quick_review_voting.js"></script>
|
||||
<script src="/static/quick_review_voting.js?v=2"></script>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
|
@ -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.get_thumb_url() }}" alt="{{ screenshot.title }}" />
|
||||
</a>
|
||||
</div>
|
||||
|
@ -6,8 +6,8 @@
|
||||
|
||||
{% block content %}
|
||||
{% if package.check_perm(current_user, "ADD_SCREENSHOTS") %}
|
||||
<a href="{{ package.get_url('packages.create_screenshot') }}" class="btn btn-primary float-right">
|
||||
<i class="fas fa-plus mr-1"></i>
|
||||
<a href="{{ package.get_url('packages.create_screenshot') }}" class="btn btn-primary float-end">
|
||||
<i class="fas fa-plus me-1"></i>
|
||||
{{ _("Add Image") }}
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -19,7 +19,7 @@
|
||||
{% if ss.approved or package.check_perm(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">
|
||||
@ -32,32 +32,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.get_delete_url() }}" method="POST" class="col-auto text-right" role="form">
|
||||
<form action="{{ ss.get_delete_url() }}" 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.get_edit_url() }}">
|
||||
<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>
|
||||
@ -91,7 +91,7 @@
|
||||
</p>
|
||||
<div class="client-preview d-flex flex-row align-items-center">
|
||||
<img class="mt-thumb" src="{{ package.get_thumb_or_placeholder(1) }}" alt="{{ _('Thumbnail') }}">
|
||||
<div class="flex-grow desc align-self-stretch">
|
||||
<div class="flex-grow-1 desc align-self-stretch">
|
||||
<p>
|
||||
<span class="title">{{ package.title }}</span> by {{ package.author.username }}
|
||||
</p>
|
||||
|
@ -12,9 +12,9 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="float-right">
|
||||
<a class="btn btn-secondary mr-2" href="{{ package.get_url('packages.stats_csv') }}">
|
||||
<i class="fas fa-download mr-1"></i>
|
||||
<div class="float-end">
|
||||
<a class="btn btn-secondary me-2" href="{{ package.get_url('packages.stats_csv') }}">
|
||||
<i class="fas fa-download me-1"></i>
|
||||
{{ _("Download (.csv)") }}
|
||||
</a>
|
||||
{{ render_daterange_selector(options, start or end) }}
|
||||
|
@ -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 %}
|
||||
|
@ -18,9 +18,9 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block scriptextra %}
|
||||
<script src="/static/video_embed.js"></script>
|
||||
<script src="/static/video_embed.js?v=2"></script>
|
||||
{% if current_user.is_authenticated %}
|
||||
<script src="/static/quick_review_voting.js"></script>
|
||||
<script src="/static/quick_review_voting.js?v=2"></script>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
|
||||
{% block download_btn %}
|
||||
{% if release %}
|
||||
<a class="btn btn-block btn-download" rel="nofollow" download="{{ release.get_download_filename() }}"
|
||||
<a class="btn d-block btn-download" rel="nofollow" download="{{ release.get_download_filename() }}"
|
||||
href="{{ release.get_download_url() }}">
|
||||
<div>
|
||||
{{ _("Download") }}
|
||||
@ -66,7 +66,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>
|
||||
@ -109,28 +109,28 @@
|
||||
{% endif %}
|
||||
|
||||
{% set cover_image = package.get_cover_image_url() %}
|
||||
<header class="jumbotron pb-3"
|
||||
<header class="jumbotron"
|
||||
style="background: linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.7)), url('{{ cover_image }}');
|
||||
background-size: cover;
|
||||
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.check_perm(current_user, "EDIT_PACKAGE") %}
|
||||
<a class="btn btn-primary" href="{{ package.get_url('packages.create_edit') }}">
|
||||
<i class="fas fa-pen mr-1"></i>
|
||||
<i class="fas fa-pen me-1"></i>
|
||||
{{ _("Edit") }}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if package.check_perm(current_user, "MAKE_RELEASE") %}
|
||||
<a class="btn btn-primary" href="{{ package.get_url('packages.create_release') }}">
|
||||
<i class="fas fa-plus mr-1"></i>
|
||||
<i class="fas fa-plus me-1"></i>
|
||||
{{ _("Release") }}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if package.check_perm(current_user, "DELETE_PACKAGE") or package.check_perm(current_user, "UNAPPROVE_PACKAGE") %}
|
||||
<a class="btn btn-danger" href="{{ package.get_url('packages.remove') }}">
|
||||
<i class="fas fa-trash mr-1"></i>
|
||||
<i class="fas fa-trash me-1"></i>
|
||||
{{ _("Remove") }}
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -146,32 +146,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 }}
|
||||
@ -251,8 +251,8 @@
|
||||
{% set screenshots = package.screenshots.all() %}
|
||||
|
||||
{% if package.check_perm(current_user, "ADD_SCREENSHOTS") %}
|
||||
<a href="{{ package.get_url('packages.screenshots') }}" class="btn btn-primary float-right">
|
||||
<i class="fas fa-images mr-1"></i>
|
||||
<a href="{{ package.get_url('packages.screenshots') }}" class="btn btn-primary float-end">
|
||||
<i class="fas fa-images me-1"></i>
|
||||
{{ _("Edit") }}
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -355,12 +355,12 @@
|
||||
<div class="d-flex mt-3 mb-4">
|
||||
<form method="POST" action="{{ package.get_url('collections.package_toggle_favorite') }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
||||
<button type="submit" class="btn {% if is_favorited %}text-info{% endif %} btn-secondary mr-2" aria-label="{{ _('Favorite') }}">
|
||||
<button type="submit" class="btn {% if is_favorited %}text-info{% endif %} btn-secondary me-2" aria-label="{{ _('Favorite') }}">
|
||||
<i class="fas fa-star"></i>
|
||||
</button>
|
||||
</form>
|
||||
<div class="flex-grow">
|
||||
<a href="{{ package.get_url('collections.package_add') }}" class="btn btn-block btn-secondary">
|
||||
<div class="flex-grow-1">
|
||||
<a href="{{ package.get_url('collections.package_add') }}" class="btn d-block btn-secondary">
|
||||
{{ _("Add to collection...") }}
|
||||
</a>
|
||||
</div>
|
||||
@ -377,16 +377,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.get_url('packages.update_config') }}">
|
||||
<i class="fas fa-cog mr-1"></i>
|
||||
<i class="fas fa-cog me-1"></i>
|
||||
{{ _("Update settings") }}
|
||||
</a>
|
||||
</div>
|
||||
@ -394,7 +394,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 %}
|
||||
@ -402,15 +402,15 @@
|
||||
{% if package.donate_url_actual %}
|
||||
<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.donate_url_actual }}" rel="nofollow">
|
||||
<i class="fas fa-heart mr-2"></i>
|
||||
<a class="btn d-block btn-primary" href="{{ package.donate_url_actual }}" rel="nofollow">
|
||||
<i class="fas fa-heart me-2"></i>
|
||||
{{ _("Donate now") }}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if package.type == package.type.GAME %}
|
||||
<a href="{{ package.get_url('packages.game_hub') }}" class="btn btn-lg btn-block mb-4 btn-primary">
|
||||
<a href="{{ package.get_url('packages.game_hub') }}" class="btn btn-lg d-block mb-4 btn-primary">
|
||||
{{ _("View content for game") }}
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -422,13 +422,13 @@
|
||||
<dd>
|
||||
{% for dep in package.get_sorted_hard_dependencies() %}
|
||||
{%- if dep.package %}
|
||||
<a class="badge badge-primary"
|
||||
<a class="badge bg-primary"
|
||||
href="{{ dep.package.get_url('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('modnames.view', name=dep.meta_package.name) }}">
|
||||
{{ dep.meta_package.name }}
|
||||
</a>
|
||||
@ -446,12 +446,12 @@
|
||||
<dd>
|
||||
{% for dep in optional_deps %}
|
||||
{%- if dep.package %}
|
||||
<a class="badge badge-secondary"
|
||||
<a class="badge bg-secondary"
|
||||
href="{{ dep.package.get_url('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('modnames.view', name=dep.meta_package.name) }}">
|
||||
{{ dep.meta_package.name }}
|
||||
{% else %}
|
||||
@ -471,7 +471,7 @@
|
||||
{% if supported_games or unsupported_games or package.type == package.type.MOD %}
|
||||
<h3>
|
||||
{% if package.check_perm(current_user, "EDIT_PACKAGE") %}
|
||||
<a href="{{ package.get_url('packages.game_support') }}" class="btn btn-secondary btn-sm float-right">
|
||||
<a href="{{ package.get_url('packages.game_support') }}" class="btn btn-secondary btn-sm float-end">
|
||||
<i class="fas fa-pen"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -491,7 +491,7 @@
|
||||
{% if supported_games %}
|
||||
<div style="max-height: 300px; overflow: hidden auto;" class="mb-3">
|
||||
{% for support in supported_games %}
|
||||
<a class="badge badge-secondary"
|
||||
<a class="badge bg-secondary"
|
||||
href="{{ support.game.get_url('packages.view') }}">
|
||||
{{ _("%(title)s by %(display_name)s",
|
||||
title=support.game.title, display_name=support.game.author.display_name) }}
|
||||
@ -522,9 +522,9 @@
|
||||
</p>
|
||||
<div style="max-height: 300px; overflow: hidden auto;">
|
||||
{% for support in unsupported_games %}
|
||||
<a class="badge badge-danger"
|
||||
<a class="badge bg-danger"
|
||||
href="{{ support.game.get_url('packages.view') }}">
|
||||
<i class="fas fa-times mr-1"></i>
|
||||
<i class="fas fa-times me-1"></i>
|
||||
{{ _("%(title)s by %(display_name)s",
|
||||
title=support.game.title, display_name=support.game.author.display_name) }}
|
||||
</a>
|
||||
@ -542,7 +542,7 @@
|
||||
{% elif package.check_perm(current_user, "EDIT_PACKAGE") %}
|
||||
<p class="alert alert-warning">
|
||||
{% if package.check_perm(current_user, "EDIT_PACKAGE") %}
|
||||
<a href="{{ package.get_url('packages.game_support') }}" class="btn btn-warning btn-sm float-right">
|
||||
<a href="{{ package.get_url('packages.game_support') }}" class="btn btn-warning btn-sm float-end">
|
||||
<i class="fas fa-pen"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
@ -582,7 +582,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>
|
||||
@ -598,7 +598,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('modnames.view', name=meta.name) }}">{{ meta.name }}</a>
|
||||
{% endfor %}</dd>
|
||||
{% endif %}
|
||||
@ -606,7 +606,7 @@
|
||||
|
||||
<h3>
|
||||
{% if package.check_perm(current_user, "MAKE_RELEASE") %}
|
||||
<a class="btn btn-primary btn-sm float-right" href="{{ package.get_url('packages.create_release') }}"><i class="fas fa-plus"></i></a>
|
||||
<a class="btn btn-primary btn-sm float-end" href="{{ package.get_url('packages.create_release') }}"><i class="fas fa-plus"></i></a>
|
||||
{% endif %}
|
||||
{{ _("Releases") }}
|
||||
</h3>
|
||||
@ -624,7 +624,7 @@
|
||||
|
||||
<h3>
|
||||
{% if package.approved and package.check_perm(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 %}
|
||||
@ -638,7 +638,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 %}
|
||||
|
@ -16,7 +16,7 @@
|
||||
{{ _("Please sign in or contact the admin in another way") }}
|
||||
</p>
|
||||
<p>
|
||||
<a href="{{ url_for('users.login') }}" class="btn btn-primary mr-2">Login</a>
|
||||
<a href="{{ url_for('users.login') }}" class="btn btn-primary me-2">Login</a>
|
||||
<a href="https://rubenwardy.com/contact/" class="btn btn-secondary">Contact the admin</a>
|
||||
</p>
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
<div class="card-body">
|
||||
<p>{{ _("Deleting is permanent") }}</p>
|
||||
|
||||
<a class="btn btn-secondary mr-3" href="{{ thread.get_view_url() }}">{{ _("Cancel") }}</a>
|
||||
<a class="btn btn-secondary me-3" href="{{ thread.get_view_url() }}">{{ _("Cancel") }}</a>
|
||||
<input type="submit" value="{{ _('Delete') }}" class="btn btn-danger" />
|
||||
</div>
|
||||
</form>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<div class="card-body">
|
||||
<p>{{ _("Deleting is permanent") }}</p>
|
||||
|
||||
<a class="btn btn-secondary mr-3" href="{{ thread.get_view_url() }}">{{ _("Cancel") }}</a>
|
||||
<a class="btn btn-secondary me-3" href="{{ thread.get_view_url() }}">{{ _("Cancel") }}</a>
|
||||
<input type="submit" value="{{ _('Delete') }}" class="btn btn-danger" />
|
||||
</div>
|
||||
</form>
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
{% block content %}
|
||||
{% if current_user.is_authenticated and package %}
|
||||
<a href="{{ url_for('threads.new', pid=package and package.id) }}" class="btn btn-primary float-right">{{ _("New Thread") }}</a>
|
||||
<a href="{{ url_for('threads.new', pid=package and package.id) }}" class="btn btn-primary float-end">{{ _("New Thread") }}</a>
|
||||
{% endif %}
|
||||
<h1>{{ self.title() }}</h1>
|
||||
|
||||
|
@ -25,29 +25,29 @@
|
||||
<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.first_reply %}
|
||||
<a class="badge badge-primary" href="{{ r.thread.get_view_url() }}">
|
||||
<a class="badge bg-primary" href="{{ r.thread.get_view_url() }}">
|
||||
{{ r.thread.title }}
|
||||
</a>
|
||||
{% else %}
|
||||
<i class="fas fa-reply mr-2"></i>
|
||||
<a class="badge badge-dark" href="{{ r.thread.get_view_url() }}">
|
||||
<i class="fas fa-reply me-2"></i>
|
||||
<a class="badge bg-dark" href="{{ r.thread.get_view_url() }}">
|
||||
{{ _("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>
|
||||
|
@ -27,40 +27,40 @@
|
||||
|
||||
{% block scriptextra %}
|
||||
{% if current_user.is_authenticated %}
|
||||
<script src="/static/quick_review_voting.js"></script>
|
||||
<script src="/static/quick_review_voting.js?v=2"></script>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% if current_user.is_authenticated %}
|
||||
{% if current_user in thread.watchers %}
|
||||
<form method="post" action="{{ thread.get_unsubscribe_url() }}" class="float-right">
|
||||
<form method="post" action="{{ thread.get_unsubscribe_url() }}" 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.get_subscribe_url() }}" class="float-right">
|
||||
<form method="post" action="{{ thread.get_subscribe_url() }}" 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.check_perm(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.review and thread.review.check_perm(current_user, "DELETE_REVIEW") and current_user.username != thread.review.author.username %}
|
||||
<form method="post" action="{{ thread.review.get_delete_url() }}" class="float-right mr-2">
|
||||
<form method="post" action="{{ thread.review.get_delete_url() }}" class="float-end me-2">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
||||
<input type="submit" class="btn btn-danger" value="{{ _('Convert to Thread') }}" />
|
||||
</form>
|
||||
{% endif %}
|
||||
{% if thread.check_perm(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>
|
||||
@ -69,7 +69,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.get_url('packages.review') }}">
|
||||
<i class="fas fa-pen"></i>
|
||||
{{ _("Edit Review") }}
|
||||
@ -79,11 +79,11 @@
|
||||
<h1>
|
||||
{% if thread.review %}
|
||||
{% if thread.review.rating > 3 %}
|
||||
<i class="fas fa-thumbs-up mr-2" style="color:#6f6;"></i>
|
||||
<i class="fas fa-thumbs-up me-2" style="color:#6f6;"></i>
|
||||
{% elif thread.review.rating < 3 %}
|
||||
<i class="fas fa-thumbs-down mr-2" style="color:#f66;"></i>
|
||||
<i class="fas fa-thumbs-down me-2" style="color:#f66;"></i>
|
||||
{% else %}
|
||||
<i class="fas fa-minus mr-2" style="color:#999"></i>
|
||||
<i class="fas fa-minus me-2" style="color:#999"></i>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if thread.private %}🔒 {% endif %}{{ thread.title }}
|
||||
@ -104,7 +104,7 @@
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="d-flex flex-row justify-content-end flex-wrap align-items-center" style="gap: 0.5em;">
|
||||
<span class="text-muted mr-2" title="{{ _('This thread is visible to the following users') }}">
|
||||
<span class="text-muted me-2" title="{{ _('This thread is visible to the following users') }}">
|
||||
{{ _("Visible to:") }}
|
||||
</span>
|
||||
{% for viewer in thread.get_visible_to() %}
|
||||
|
@ -9,7 +9,7 @@
|
||||
{% if can_approve_scn 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.get_url('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.get_edit_url() }}">{{ r.title }}</a>
|
||||
on
|
||||
@ -108,13 +108,13 @@
|
||||
<div class="list-group list-group-flush">
|
||||
{% for p in license_needed %}
|
||||
<a href="{{ p.get_url('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.get_url('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 }}
|
||||
@ -189,7 +189,7 @@
|
||||
|
||||
<div class="mt-5"></div>
|
||||
{% if current_user.rank.at_least(current_user.rank.MODERATOR) %}
|
||||
<a class="btn btn-secondary float-right" href="{{ url_for('admin.audit') }}">
|
||||
<a class="btn btn-secondary float-end" href="{{ url_for('admin.audit') }}">
|
||||
{{ _("View All") }}
|
||||
</a>
|
||||
{% endif %}
|
||||
|
@ -5,7 +5,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<a class="btn btn-secondary float-right" href="/help/game_support/">{{ _("Help") }}</a>
|
||||
<a class="btn btn-secondary float-end" href="/help/game_support/">{{ _("Help") }}</a>
|
||||
<h1 class="mb-5">{{ self.title() }}</h1>
|
||||
<p>
|
||||
{{ _("You should specify the games supported by your mods and texture packs.") }}
|
||||
@ -24,13 +24,13 @@
|
||||
style="max-height: 22px; max-width: 22px;"
|
||||
src="{{ package.get_thumb_or_placeholder() }}" />
|
||||
|
||||
<span class="pl-2">
|
||||
<span class="ps-2">
|
||||
{{ package.title }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="col">
|
||||
{% if package.supports_all_games %}
|
||||
<span class="text-muted pr-2">
|
||||
<span class="text-muted pe-2">
|
||||
<i>
|
||||
{{ _("Supports all games") }}
|
||||
</i>
|
||||
@ -40,7 +40,7 @@
|
||||
{% set supported_games = package.get_sorted_game_support_pair()[0] %}
|
||||
{% if supported_games %}
|
||||
{% for support in supported_games %}
|
||||
<a class="badge badge-secondary"
|
||||
<a class="badge bg-secondary"
|
||||
href="{{ support.game.get_url('packages.view') }}">
|
||||
{{ _("%(title)s by %(display_name)s",
|
||||
title=support.game.title, display_name=support.game.author.display_name) }}
|
||||
|
@ -6,8 +6,8 @@
|
||||
|
||||
{% block content %}
|
||||
<h1>{{ self.title() }}</h1>
|
||||
<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") }}
|
||||
|
@ -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") }}
|
||||
|
@ -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") }}
|
||||
|
@ -8,16 +8,14 @@
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<form method="GET">
|
||||
<label for="q" class="sr-only">{{ _('Search all packages') }}</label>
|
||||
<label for="q" class="visually-hidden">{{ _('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="form-control" id="q" name="q" type="text" placeholder="{{ _('Search all packages') }}">>
|
||||
<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>
|
||||
|
@ -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 %}
|
||||
|
@ -26,7 +26,7 @@
|
||||
style="max-height: 22px; max-width: 22px;"
|
||||
src="{{ package.get_thumb_or_placeholder() }}" />
|
||||
|
||||
<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>
|
||||
@ -65,10 +65,10 @@
|
||||
|
||||
<div class="mb-4"></div>
|
||||
|
||||
<a class="btn btn-secondary float-right" href="/help/game_support/">
|
||||
<a class="btn btn-secondary float-end" href="/help/game_support/">
|
||||
{{ _("Help") }}
|
||||
</a>
|
||||
<a class="btn btn-secondary float-right mr-2" href="{{ url_for('todo.all_game_support', username=user.username) }}">
|
||||
<a class="btn btn-secondary float-end me-2" href="{{ url_for('todo.all_game_support', username=user.username) }}">
|
||||
{{ _("See game support for your packages") }}
|
||||
</a>
|
||||
<h2>{{ _("Missing Game Support") }}</h2>
|
||||
@ -86,7 +86,7 @@
|
||||
style="max-height: 22px; max-width: 22px;"
|
||||
src="{{ package.get_thumb_or_placeholder() }}" />
|
||||
|
||||
<span class="pl-2">
|
||||
<span class="ps-2">
|
||||
{{ package.title }}
|
||||
</span>
|
||||
</a>
|
||||
@ -106,7 +106,7 @@
|
||||
style="max-height: 22px; max-width: 22px;"
|
||||
src="{{ package.get_thumb_or_placeholder() }}" />
|
||||
|
||||
<span class="pl-2">
|
||||
<span class="ps-2">
|
||||
{{ package.title }}
|
||||
</span>
|
||||
</a>
|
||||
@ -125,13 +125,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>
|
||||
@ -146,7 +146,7 @@
|
||||
style="max-height: 22px; max-width: 22px;"
|
||||
src="{{ package.get_thumb_or_placeholder() }}" />
|
||||
|
||||
<span class="pl-2">
|
||||
<span class="ps-2">
|
||||
{{ package.title }}
|
||||
</span>
|
||||
</div>
|
||||
@ -155,13 +155,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 %}
|
||||
@ -175,7 +175,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>
|
||||
@ -189,7 +189,7 @@
|
||||
style="max-height: 22px; max-width: 22px;"
|
||||
src="{{ package.get_thumb_or_placeholder() }}" />
|
||||
|
||||
<span class="pl-2">
|
||||
<span class="ps-2">
|
||||
{{ package.title }}
|
||||
</span>
|
||||
</a>
|
||||
|
@ -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.at_least(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 %}
|
||||
|
@ -14,10 +14,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">
|
||||
|
@ -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 roaded-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 roaded-pill bg-dark me-2">{{ _("Option 2") }}</span>
|
||||
{{ _("Verification token") }}
|
||||
</div>
|
||||
|
||||
|
@ -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.at_least(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>
|
||||
|
@ -33,17 +33,17 @@
|
||||
<div class="col-sm-2 {{ user.rank }}"
|
||||
title="{{ _('Rank: %(rank)s.', rank=user.rank.get_title()) }}">
|
||||
{% 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.get_title() }}
|
||||
@ -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 %}
|
||||
|
@ -20,17 +20,17 @@
|
||||
{{ _("Forgot my password") }}
|
||||
</a>
|
||||
</div>
|
||||
{{ render_submit_field(form.submit, tabindex=140, class_="btn btn-lg btn-primary btn-block") }}
|
||||
{{ render_submit_field(form.submit, tabindex=140, class_="btn btn-lg btn-primary d-block") }}
|
||||
|
||||
<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>
|
||||
|
@ -58,14 +58,14 @@
|
||||
{% else %}
|
||||
<form method="POST" action="{{ url_for('users.modtools_ban', username=user.username) }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
||||
<div class="form-group">
|
||||
<label for="message">{{ _("Message") }}</label>
|
||||
<span class="ml-1 text-danger">
|
||||
<div class="form-group mb-3">
|
||||
<label for="message" class="form-label">{{ _("Message") }}</label>
|
||||
<span class="ms-1 text-danger">
|
||||
<small>
|
||||
<i class="fas fa-asterisk"></i>
|
||||
</small>
|
||||
</span>
|
||||
<span class="ml-3 text-muted">
|
||||
<span class="ms-3 text-muted">
|
||||
{{ _("Required") }}
|
||||
</span>
|
||||
<input id="message" class="form-control" type="text" name="message" required minlength="5">
|
||||
@ -73,8 +73,8 @@
|
||||
{{ _("Message to display to banned user") }}
|
||||
</small>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="expires_at">{{ _("Expires At") }}</label>
|
||||
<div class="form-group mb-3">
|
||||
<label for="expires_at" class="form-label">{{ _("Expires At") }}</label>
|
||||
<input id="expires_at" class="form-control" type="date" name="expires_at">
|
||||
<small class="form-text text-muted">
|
||||
{{ _("Expiry date. Leave blank for permanent ban") }}
|
||||
@ -87,8 +87,8 @@
|
||||
<h3>{{ _("Change Email and Send Password Reset") }}</h3>
|
||||
<form method="POST" action="{{ url_for('users.modtools_set_email', username=user.username) }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
||||
<div class="form-group">
|
||||
<label for="email">{{ _("Email Address") }}</label>
|
||||
<div class="form-group mb-3">
|
||||
<label for="email" class="form-label">{{ _("Email Address") }}</label>
|
||||
<input type="email" class="form-control" name="email" id="email" value="{{ user.email or '' }}" />
|
||||
</div>
|
||||
<input type="submit" value="{{ _('Save') }}" class="btn btn-primary" />
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
{% block scriptextra %}
|
||||
{% if current_user.is_authenticated %}
|
||||
<script src="/static/quick_review_voting.js"></script>
|
||||
<script src="/static/quick_review_voting.js?v=2"></script>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@ -21,41 +21,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.at_least(current_user.rank.MODERATOR) %}
|
||||
{% if not user.rank.at_least(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 %}
|
||||
@ -157,7 +157,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!") }}
|
||||
@ -167,10 +167,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>
|
||||
@ -201,7 +201,7 @@
|
||||
</div>
|
||||
|
||||
{% if value < target * 0.2 %}
|
||||
<div class="ml-3 d-flex align-items-center text-muted h-100">
|
||||
<div class="ms-3 d-flex align-items-center text-muted h-100">
|
||||
{{ _("%(value)d / %(target)d", value=medal.progress[0], target=medal.progress[1]) }}
|
||||
</div>
|
||||
{% endif %}
|
||||
@ -213,9 +213,9 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="float-right">
|
||||
<div class="float-end">
|
||||
{% if packages %}
|
||||
<div class="btn-group btn-group-sm mr-2" role="group" aria-label="Sorting">
|
||||
<div class="btn-group btn-group-sm me-2" role="group" aria-label="Sorting">
|
||||
<span class="btn btn-sm btn-primary">
|
||||
{{ _("Alphabetical") }}
|
||||
</span>
|
||||
@ -229,7 +229,7 @@
|
||||
</a>
|
||||
</div>
|
||||
{% if current_user == user or (current_user.is_authenticated and current_user.rank.at_least(current_user.rank.EDITOR)) %}
|
||||
<a class="btn btn-sm btn-secondary mr-2"
|
||||
<a class="btn btn-sm btn-secondary me-2"
|
||||
href="{{ url_for('todo.tags', author=user.username) }}">
|
||||
{{ _("View list of tags") }}
|
||||
</a>
|
||||
@ -238,7 +238,7 @@
|
||||
{% if current_user == user or user.check_perm(current_user, "CHANGE_AUTHOR") %}
|
||||
<a class="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 %}
|
||||
|
@ -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">
|
||||
|
@ -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.get_profile_pic_url() }}" 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>
|
||||
|
@ -12,7 +12,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="float-right">
|
||||
<div class="float-end">
|
||||
{{ render_daterange_selector(options, start or end) }}
|
||||
{{ render_package_selector(user, package=None) }}
|
||||
</div>
|
||||
|
@ -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 %}
|
||||
|
@ -5,7 +5,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<a class="btn btn-secondary float-right" href="{{ url_for('zipgrep.zipgrep_search') }}">New Query</a>
|
||||
<a class="btn btn-secondary float-end" href="{{ url_for('zipgrep.zipgrep_search') }}">New Query</a>
|
||||
<h1>{{ _("Search in Package Releases") }}</h1>
|
||||
<h2>{{ query }}</h2>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user