2018-12-21 17:06:52 +01:00
{% set query=package.name %}
2018-03-19 19:08:41 +01:00
{% extends "base.html" %}
{% block title %}
2018-03-20 03:17:33 +01:00
{{ package.title }}
2018-03-19 19:08:41 +01:00
{% endblock %}
2018-12-21 16:58:43 +01:00
{% block container %}
2018-12-21 17:36:54 +01:00
< header class = "jumbotron pb-3"
style="background: linear-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3)), url('{{ package.getMainScreenshotURL() }}');
background-size: cover;
background-repeat: no-repeat;
background-position: center;">
2018-12-21 16:58:43 +01:00
< div class = "container" >
2018-12-23 17:28:15 +01:00
< h1 class = "display-3" >
{{ package.title }}
< small > by {{ package.author.display_name }}< / small >
< / h1 >
2018-03-20 03:17:33 +01:00
2018-12-21 16:58:43 +01:00
< p class = "lead" >
{{ package.shortDesc }}
< / p >
2018-05-29 22:24:50 +02:00
2018-12-21 21:59:12 +01:00
< div class = "row" style = "margin-top: 2rem;" >
2018-12-21 17:36:54 +01:00
< div class = "col" >
< / div >
< div class = "btn-group-horizontal col-md-auto" >
2018-12-21 21:59:12 +01:00
{% if package.repo %}< a class = "btn btn-secondary" href = "{{ package.repo }}" > View Source< / a > {% endif %}
{% if package.forums %}< a class = "btn btn-secondary" href = "https://forum.minetest.net/viewtopic.php?t={{ package.forums }}" > Forums< / a > {% endif %}
{% if package.issueTracker %}< a class = "btn btn-secondary" href = "{{ package.issueTracker }}" > Issue Tracker< / a > {% endif %}
{% if package.website %}< a class = "btn btn-secondary" href = "{{ package.website }}" > Website< / a > {% endif %}
2018-12-21 17:36:54 +01:00
< / div >
2018-12-21 16:58:43 +01:00
< / div >
2018-05-21 23:42:02 +02:00
< / div >
2018-12-21 17:36:54 +01:00
< / header >
< main class = "container mt-4" >
2018-12-21 17:55:22 +01:00
{% if not package.approved %}
< div class = "alert alert-warning" >
< span class = "icon_message" > < / span >
{% if package.releases.count() == 0 %}
< h4 class = "alert-heading" > Release Required< / h4 >
{% if package.checkPerm(current_user, "MAKE_RELEASE") %}
< p > You need to create a release before this package can be approved.< / p >
< p >
A release is a single downloadable version of your {{ package.type.value | lower }}.
You need to create releases even if you use a rolling release development cycle,
as Minetest needs them to check for updates.
< / p >
< a class = "btn" href = "{{ package.getCreateReleaseURL() }}" > Create Release< / a >
{% else %}
A release is required before this package can be approved.
{% endif %}
{% elif (package.type == package.type.GAME or package.type == package.type.TXP) and package.screenshots.count() == 0 %}
You need to add at least one screenshot.
2018-12-22 21:13:43 +01:00
{% elif topic_error_lvl == "danger" %}
2018-12-21 17:55:22 +01:00
Please fix the below topic issue(s).
{% elif "Other" in package.license.name or "Other" in package.media_license.name %}
Please wait for the license to be added to CDB.
{% else %}
{% if package.screenshots.count() == 0 %}
< b > You should add at least one screenshot, but this isn't required.< / b > < br / >
{% endif %}
{% if not package.getDownloadRelease() %}
Please wait for the release to be approved.
{% elif package.checkPerm(current_user, "APPROVE_NEW") %}
< form class = "float-right" method = "post" action = "{{ package.getApproveURL() }}" >
< input type = "hidden" name = "csrf_token" value = "{{ csrf_token() }}" / >
< input class = "btn btn-sm btn-warning" type = "submit" value = "Approve" / >
< / form >
You can now approve this package if you're ready.
{% else %}
Please wait for the package to be approved.
{% endif %}
{% endif %}
< div style = "clear: both;" > < / div >
< / div >
{% if topic_error %}
< div class = "alert alert-{{ topic_error_lvl }}" >
< span class = "icon_message" > < / span >
{{ topic_error | safe }}
< div style = "clear: both;" > < / div >
< / div >
{% endif %}
{% if similar_topics %}
< div class = "alert alert-warning" >
Please make sure that this package has the right to
the name '{{ package.name }}'.
See the
< a href = "/policy_and_guidance/" > Inclusion Policy< / a >
for more info.
< / div >
{% endif %}
2018-12-22 21:13:43 +01:00
{% if not review_thread and (package.author == current_user or package.checkPerm(current_user, "APPROVE_NEW")) %}
< div class = "alert alert-info" >
< a class = "float-right btn btn-sm btn-info" href = "{{ url_for('new_thread_page', pid=package.id, title='Package approval comments') }}" > Open Thread< / a >
2018-12-21 17:55:22 +01:00
2018-12-22 21:13:43 +01:00
Privately ask a question or give feedback
< div style = "clear:both;" > < / div >
< / div >
2018-12-21 17:55:22 +01:00
{% endif %}
{% endif %}
2018-03-20 03:17:33 +01:00
2018-12-21 17:06:52 +01:00
< aside class = "float-right ml-4" style = "width: 18rem;" >
2018-12-21 18:00:16 +01:00
{% if package.getDownloadRelease() %}
2018-12-22 13:20:26 +01:00
< a class = "btn btn-download btn-lg btn-block"
2018-12-21 18:00:16 +01:00
href="{{ package.getDownloadURL() }}" class="btn_green">
Download
< / a >
{% else %}
No download available.
{% endif %}
< div class = "card my-4" >
2018-12-21 16:58:43 +01:00
< div class = "card-header" >
Details
2018-12-21 18:00:16 +01:00
< div class = "btn-group float-right" >
2018-12-21 16:58:43 +01:00
{% if package.checkPerm(current_user, "EDIT_PACKAGE") %}
2018-12-22 13:20:26 +01:00
< a class = "btn btn-default btn-sm mx-1" href = "{{ package.getEditURL() }}" > Edit< / a >
2018-12-21 18:00:16 +01:00
{% endif %}
2018-12-21 21:59:12 +01:00
{# {% if current_user.is_authenticated %}
2018-12-22 13:20:26 +01:00
< a class = "btn btn-default btn-sm mx-1" href = "{{ package.getCreateEditRequestURL() }}" > Suggest Changes< / a >
2018-12-21 21:59:12 +01:00
{% endif %} #}
2018-12-25 16:13:30 +01:00
{% if package.checkPerm(current_user, "DELETE_PACKAGE") or package.checkPerm(current_user, "UNAPPROVE_PACKAGE") %}
< a class = "btn btn-danger btn-sm mx-1" href = "{{ package.getRemoveURL() }}" > Remove< / a >
2018-12-21 16:58:43 +01:00
{% endif %}
2018-12-21 18:00:16 +01:00
< / div >
2018-12-21 16:58:43 +01:00
< / div >
2018-12-22 13:36:49 +01:00
{% if not package.license.is_foss and not package.media_license.is_foss and package.type != package.type.TXP %}
{% set package_warning="Non-free code and media." %}
{% elif not package.license.is_foss and package.type != package.type.TXP %}
{% set package_warning="Non-free code." %}
{% elif not package.media_license.is_foss %}
{% set package_warning="Non-free media." %}
{% endif %}
{% if package_warning %}
< div class = "card-body" >
2018-12-21 16:58:43 +01:00
< div class = "alert alert-danger" >
< b > Warning:< / b > {{ package_warning }}
< / div >
2018-12-22 13:36:49 +01:00
< / div >
{% endif %}
< table class = "table" >
< tr >
< td > Name< / td >
< td > {{ package.name }}< / td >
< / tr >
{% if package.provides %}
< tr >
< td > Provides< / td >
< td > {% for meta in package.provides %}
< a class = "badge badge-primary"
href="{{ url_for('meta_package_page', name=meta.name) }}">{{ meta.name }}< / a >
{% endfor %}< / td >
< / tr >
2018-12-21 16:58:43 +01:00
{% endif %}
2018-12-22 13:36:49 +01:00
< tr >
< td > Author< / td >
< td class = "{{ package.author.rank }}" >
< a href = "{{ url_for('user_profile_page', username=package.author.username) }}" >
{{ package.author.display_name }}
< / a >
< / td >
< / tr >
< tr >
< td > Type< / td >
< td > {{ package.type.value }}< / td >
< / tr >
< tr >
< td > License< / td >
< td >
{% if package.license == package.media_license %}
{{ package.license.name }}
{% elif package.type == package.type.TXP %}
{{ package.media_license.name }}
{% else %}
{{ package.license.name }} for code,< br / >
{{ package.media_license.name }} for media.
{% endif %}
< / td >
< / tr >
< tr >
< td > Added< / td >
< td > {{ package.created_at | datetime }}< / td >
< / tr >
< tr >
< td > Tags< / td >
< td >
{% for t in package.tags %}
< span class = "badge badge-primary" > {{ t.title }}< / span >
{% else %}
< i > No tags.< / i >
{% endfor %}
< / td >
< / table >
2018-12-21 16:58:43 +01:00
< / div >
2018-12-21 17:00:18 +01:00
2018-12-21 17:55:22 +01:00
{% if package.type == package.type.MOD %}
< div class = "card my-4" >
< div class = "card-header" > Dependencies< / div >
< div class = "card-body" >
{% for dep in package.dependencies %}
{% if dep.optional %}
{% set color="secondary" %}
{% else %}
{% set color="primary" %}
{% endif %}
2018-12-21 17:00:18 +01:00
{%- if dep.package %}
2018-12-21 17:55:22 +01:00
< a class = "badge badge-{{ color }}"
href="{{ dep.package.getDetailsURL() }}">
{{ dep.package.title }} by {{ dep.package.author.display_name }}
2018-12-21 17:00:18 +01:00
{% elif dep.meta_package %}
2018-12-21 17:55:22 +01:00
< a class = "badge badge-{{ color }}"
href="{{ url_for('meta_package_page', name=dep.meta_package.name) }}">
{{ dep.meta_package.name }}
2018-12-21 17:00:18 +01:00
{% else %}
{{ "Excepted package or meta_package in dep!" | throw }}
2018-12-21 17:55:22 +01:00
{% endif %}< / a >
{% else %}
2018-12-21 21:59:12 +01:00
< i > No dependencies< / i >
2018-12-21 17:55:22 +01:00
{% endfor %}
< / div >
< / div >
{% endif %}
2018-12-21 17:00:18 +01:00
< div class = "card my-4" >
< div class = "card-header" >
Releases
2019-01-28 22:49:29 +01:00
< div class = "float-right" >
{% if package.checkPerm(current_user, "MAKE_RELEASE") %}
< a href = "{{ package.getBulkReleaseURL() }}" > bulk< / a >
< a href = "{{ package.getCreateReleaseURL() }}" > +< / a >
{% endif %}
< / div >
2018-12-21 17:00:18 +01:00
< / div >
< ul class = "list-group list-group-flush" >
{% for rel in releases %}
{% if rel.approved or package.checkPerm(current_user, "MAKE_RELEASE") or package.checkPerm(current_user, "APPROVE_RELEASE") %}
2018-12-22 14:16:45 +01:00
< li class = "list-group-item" >
2018-12-21 17:36:54 +01:00
{% if package.checkPerm(current_user, "MAKE_RELEASE") or package.checkPerm(current_user, "APPROVE_RELEASE") %}
< a class = "btn btn-sm btn-primary float-right" href = "{{ rel.getEditURL() }}" > Edit
{% if not rel.task_id and not rel.approved and package.checkPerm(current_user, "APPROVE_RELEASE") %}
/ Approve
{% endif %}
< / a >
{% endif %}
2018-12-21 17:00:18 +01:00
{% if not rel.approved %}< i > {% endif %}
2018-12-21 17:36:54 +01:00
< a href = "{{ rel.getDownloadURL() }}" > {{ rel.title }}< / a > {% if rel.commit_hash %}
[{{ rel.commit_hash | truncate(5, end='') }}]{% endif %}< br >
2018-12-21 17:00:18 +01:00
< small > created {{ rel.releaseDate | datetime }}.< / small >
{% if rel.task_id %}
< a href = "{{ url_for('check_task', id=rel.task_id, r=package.getDetailsURL()) }}" > Importing...< / a >
{% elif not rel.approved %}
Waiting for approval.
{% endif %}
{% if not rel.approved %}< / i > {% endif %}
< / li >
{% endif %}
{% else %}
< li class = "list-group-item" > No releases available.< / li >
{% endfor %}
< / ul >
< / div >
< div class = "card my-4" " >
< div class = "card-header" >
{% if package.approved and package.checkPerm(current_user, "CREATE_THREAD") %}
2018-12-22 13:20:26 +01:00
< a class = "float-right"
href="{{ url_for('new_thread_page', pid=package.id) }}">+< / a >
2018-12-21 17:00:18 +01:00
{% endif %}
2018-12-22 13:20:26 +01:00
Threads
2018-12-21 17:00:18 +01:00
< / div >
< ul class = "list-group list-group-flush" >
{% from "macros/threads.html" import render_threadlist %}
{{ render_threadlist(threads, list_group=True) }}
< / ul >
< / div >
2019-01-28 20:41:24 +01:00
{% if package.approved and package.checkPerm(current_user, "CREATE_THREAD") and current_user != package.author and not current_user.rank.atLeast(current_user.rank.EDITOR) %}
< a class = "float-right"
href="{{ url_for('new_thread_page', pid=package.id) }}">
Report a problem with this listing
< / a >
{% endif %}
2018-12-21 16:58:43 +01:00
< / aside >
2018-03-20 03:17:33 +01:00
2018-12-22 21:13:43 +01:00
{% if not package.approved and (package.author == current_user or package.checkPerm(current_user, "APPROVE_NEW")) %}
{% if review_thread %}
< h2 > {% if review_thread.private %}🔒 {% endif %} {{ review_thread.title }}< / h2 >
{% if review_thread.private %}
< p > < i >
This thread is only visible to the package owner and users of
Editor rank or above.
< / i > < / p >
{% endif %}
{% from "macros/threads.html" import render_thread %}
{{ render_thread(review_thread, current_user) }}
{% endif %}
{% endif %}
2018-12-21 17:36:54 +01:00
< ul class = "screenshot_list mb-4" >
{% if package.checkPerm(current_user, "EDIT_PACKAGE") %}
< a class = "btn btn-primary float-right" href = "{{ package.getNewScreenshotURL() }}" > Add screenshot< / a >
{% endif %}
2018-12-21 16:58:43 +01:00
{% for ss in package.screenshots %}
{% if ss.approved or package.checkPerm(current_user, "ADD_SCREENSHOTS") %}
< li >
< a href = "{% if package.checkPerm(current_user, 'ADD_SCREENSHOTS') %}{{ ss.getEditURL() }}{% else %}{{ ss.url }}{% endif %}" >
< img src = "{{ ss.getThumbnailURL() }}" alt = "{{ ss.title }}" / >
< / a >
< / li >
{% endif %}
{% endfor %}
< / ul >
2018-03-20 19:20:30 +01:00
2018-12-21 16:58:43 +01:00
{{ package.desc | markdown }}
< div style = "clear: both;" > < / div >
{#
{% if current_user.is_authenticated or requests %}
< h3 > Edit Requests< / h3 >
2018-05-11 16:04:17 +02:00
2018-05-21 23:20:28 +02:00
< ul >
2018-12-21 16:58:43 +01:00
{% for r in requests %}
2018-05-27 22:31:11 +02:00
< li >
2018-12-21 16:58:43 +01:00
< a href = "{{ r.getURL() }}" > {{ r.title }}< / a >
by
< a href = "{{ url_for('user_profile_page', username=r.author.username) }}" > {{ r.author.display_name }}< / a >
2018-05-27 22:31:11 +02:00
< / li >
2018-05-21 23:20:28 +02:00
{% else %}
2018-12-21 16:58:43 +01:00
< li > No edit requests have been made.< / li >
2018-05-21 23:20:28 +02:00
{% endfor %}
< / ul >
2018-12-21 16:58:43 +01:00
{% endif %}
#}
{% if alternatives %}
< h3 > Related< / h3 >
2018-05-21 23:20:28 +02:00
2018-12-21 16:58:43 +01:00
{% from "macros/packagegridtile.html" import render_pkggrid %}
{{ render_pkggrid(alternatives) }}
{% endif %}
2018-05-29 21:51:42 +02:00
2018-12-21 16:58:43 +01:00
{% if similar_topics %}
< h3 > Similar Forum Topics< / h3 >
2018-05-29 21:51:42 +02:00
< ul >
2018-12-21 16:58:43 +01:00
{% for t in similar_topics %}
2018-05-29 21:51:42 +02:00
< li >
2018-12-21 16:58:43 +01:00
[{{ t.type.value }}]
< a href = "https://forum.minetest.net/viewtopic.php?t={{ t.topic_id }}" >
{{ t.title }} by {{ t.author.display_name }}
< / a >
{% if t.wip %}[WIP]{% endif %}
2018-05-29 21:51:42 +02:00
< / li >
{% endfor %}
< / ul >
{% endif %}
2018-12-21 16:58:43 +01:00
< / main >
2018-03-19 19:08:41 +01:00
{% endblock %}