summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2014-10-18 15:17:56 -0500
committerDan McGee <dan@archlinux.org>2014-10-18 15:18:02 -0500
commitfff9cf9c5537d9f758a9e30fcb18df800c70f051 (patch)
tree52c502e9a3eec3c643bc70f999a203d315ec2ea4
parent2914fc55c4618d97a3ab5a7d519545979f526677 (diff)
downloadarchweb-fff9cf9c5537d9f758a9e30fcb18df800c70f051.tar.gz
archweb-fff9cf9c5537d9f758a9e30fcb18df800c70f051.zip
Convert bulk of package details page to Jinja2
We wrap the whole thing in a Django template so we don't have to convert our base template to Jinja2 (or have one for each templating engine). This also simplifies the static stuff so we can just keep using the Django tags. Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--packages/templatetags/package_extras.py26
-rw-r--r--templates/packages/details.html225
-rw-r--r--templates/packages/details.html.jinja221
3 files changed, 239 insertions, 233 deletions
diff --git a/packages/templatetags/package_extras.py b/packages/templatetags/package_extras.py
index 2784546d..f6d6ee73 100644
--- a/packages/templatetags/package_extras.py
+++ b/packages/templatetags/package_extras.py
@@ -6,6 +6,9 @@ except ImportError:
from django import template
from django.utils.html import escape
+from django_jinja import library
+
+from main.templatetags import pgp
register = template.Library()
@@ -14,11 +17,11 @@ def link_encode(url, query):
# massage the data into all utf-8 encoded strings first, so urlencode
# doesn't barf at the data we pass it
query = {k: unicode(v).encode('utf-8') for k, v in query.items()}
- data = urlencode(query).replace('&', '&amp;')
+ data = urlencode(query)
return "%s?%s" % (url, data)
-@register.filter
+@library.filter
def url_unquote(original_url):
try:
url = original_url
@@ -79,7 +82,7 @@ def pkg_details_link(pkg, link_title=None, honor_flagged=False):
return link % (pkg.get_absolute_url(), pkg.pkgname, link_content)
-@register.simple_tag
+@library.global_function
def maintainer_link(user):
if user:
# TODO don't hardcode
@@ -92,7 +95,7 @@ def maintainer_link(user):
return ''
-@register.simple_tag
+@library.global_function
def packager_link(user):
if user:
# TODO don't hardcode
@@ -105,7 +108,12 @@ def packager_link(user):
return ''
-@register.simple_tag
+@library.global_function
+def pgp_key_link(key_id, link_text=None):
+ return pgp.pgp_key_link(key_id, link_text)
+
+
+@library.global_function
def scm_link(package, operation):
parts = (package.repo.svn_root, operation, package.pkgbase)
linkbase = (
@@ -114,8 +122,8 @@ def scm_link(package, operation):
return linkbase % tuple(urlquote(part.encode('utf-8')) for part in parts)
-@register.simple_tag
-def get_wiki_link(package):
+@library.global_function
+def wiki_link(package):
url = "https://wiki.archlinux.org/index.php/Special:Search"
data = {
'search': package.pkgname,
@@ -123,7 +131,7 @@ def get_wiki_link(package):
return link_encode(url, data)
-@register.simple_tag
+@library.global_function
def bugs_list(package):
url = "https://bugs.archlinux.org/"
data = {
@@ -134,7 +142,7 @@ def bugs_list(package):
return link_encode(url, data)
-@register.simple_tag
+@library.global_function
def bug_report(package):
url = "https://bugs.archlinux.org/newtask"
data = {
diff --git a/templates/packages/details.html b/templates/packages/details.html
index c4c1f6b2..7a0f8e88 100644
--- a/templates/packages/details.html
+++ b/templates/packages/details.html
@@ -1,234 +1,11 @@
{% extends "base.html" %}
{% load static from staticfiles %}
-{% load package_extras %}
-{% load pgp %}
{% block title %}Arch Linux - {{ pkg.pkgname }} {{ pkg.full_version }} ({{ pkg.arch.name }}){% endblock %}
{% block navbarclass %}anb-packages{% endblock %}
-{% load package_extras %}
{% block content %}
-<div id="pkgdetails" class="box">
-
- <h2>{{ pkg.pkgname }} {{ pkg.full_version }}</h2>
-
- <div id="detailslinks" class="listing">
- <div id="actionlist">
- <h4>Package Actions</h4>
- <ul class="small">
- <li>
- <a href="{% scm_link pkg 'tree' %}" title="View source files for {{ pkg.pkgname }}">Source Files</a> /
- <a href="{% scm_link pkg 'log' %}" title="View changes for {{ pkg.pkgname }}">View Changes</a>
- </li>
- <li>
- <a href="{% bugs_list pkg %}" title="View existing bug tickets for {{ pkg.pkgname }}">Bug Reports</a> /
- <a href="{% bug_report pkg %}" title="Report new bug for {{ pkg.pkgname }}">Add New Bug</a>
- </li>
- <li><a href="{% get_wiki_link pkg %}" title="Search wiki for {{ pkg.pkgname }}">Search Wiki</a></li>
- {% if pkg.flag_date %}
- <li><span class="flagged">Flagged out-of-date on {{ pkg.flag_date|date }}</span></li>
- {% with pkg.in_testing as tp %}{% if tp %}
- <li><span class="flagged">Version
- <a href="{{ tp.get_absolute_url }}"
- title="Testing package details for {{ tp.pkgname }}">{{ tp.full_version }}</a>
- in testing</span></li>
- {% endif %}{% endwith %}
- {% if perms.main.change_package %}
- <li><a href="unflag/" title="Unflag this package">Click here to unflag</a></li>
- <li><a href="unflag/all/" title="Unflag all matching pkgbase">Click here to unflag all split packages</a></li>
- {% endif %}
- {% else %}
- <li><a href="flag/" title="Flag {{ pkg.pkgname }} as out-of-date">Flag Package Out-of-Date</a>
- <a href="/packages/flaghelp/"
- title="Get help on package flagging"
- onclick="return !window.open('/packages/flaghelp/','FlagHelp',
- 'height=350,width=450,location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=no');">(?)</a></li>
- {% endif %}
- <li><a href="download/" rel="nofollow" title="Download {{ pkg.pkgname }} from mirror">Download From Mirror</a></li>
- </ul>
-
- {% if perms.main.change_package %}
- <form id="pkg-action" method="post" action="/packages/update/">{% csrf_token %}
- <div><input type="hidden" name="pkgid" value="{{ pkg.id }}" /></div>
- <p>{% if user in pkg.maintainers %}
- <input title="Orphan this package" type="submit" name="disown" value="Disown"/>
- {% else %}
- <input title="Adopt this package" type="submit" name="adopt" value="Adopt"/>
- {% endif %}</p>
- </form>
- {% endif %}
- </div>
-
- {% with pkg.elsewhere as others %}{% if others %}
- <div id="elsewhere" class="widget">
- <h4>Versions Elsewhere</h4>
- <ul>
- {% for o in others %}
- <li><a href="{{ o.get_absolute_url }}"
- title="Package details for {{ o.pkgname }}">{{ o.pkgname }} {{ o.full_version }} [{{ o.repo.name|lower }}] ({{ o.arch.name }})</a></li>
- {% endfor %}
- </ul>
- </div>
- {% endif %}{% endwith %}
- </div>
-
- <div itemscope itemtype="http://schema.org/SoftwareApplication">
- <meta itemprop="name" content="{{ pkg.pkgname|escape }}"/>
- <meta itemprop="version" content="{{ pkg.full_version|escape }}"/>
- <meta itemprop="softwareVersion" content="{{ pkg.full_version|escape }}"/>
- <meta itemprop="fileSize" content="{{ pkg.compressed_size }}"/>
- <meta itemprop="dateCreated" content="{{ pkg.build_date|date:"Y-m-d" }}"/>
- <meta itemprop="datePublished" content="{{ pkg.last_update|date:"Y-m-d" }}"/>
- <meta itemprop="operatingSystem" content="Linux"/>
- <div style="display:none" itemprop="provider" itemscope itemtype="http://schema.org/Person">
- <meta itemprop="name" content="{{ pkg.packager.get_full_name|escape }}"/>
- </div>
- <table id="pkginfo">
- <tr>
- <th>Architecture:</th>
- <td><a href="/packages/?arch={{ pkg.arch.name }}"
- title="Browse packages for {{ pkg.arch.name }} architecture">{{ pkg.arch.name }}</a></td>
- </tr><tr>
- <th>Repository:</th>
- <td><a href="/packages/?repo={{ pkg.repo.name|capfirst }}"
- title="Browse the {{ pkg.repo.name|capfirst }} repository">{{ pkg.repo.name|capfirst }}</a></td>
- </tr>
- {% ifequal pkg.pkgname pkg.pkgbase %}
- {% with pkg.split_packages as splits %}{% if splits %}
- <tr>
- <th>Split Packages:</th>
- <td class="wrap relatedto">{% for s in splits %}<span class="related">{% pkg_details_link s %}{% if not forloop.last %}, {% endif %}</span>{% endfor %}</td>
- </tr>
- {% endif %}{% endwith %}
- {% else %}
- <tr>
- <th>Base Package:</th>
- {% with pkg.base_package as base %}{% if base %}
- <td>{% pkg_details_link base %}</td>
- {% else %}
- <td><a href="../{{ pkg.pkgbase }}/"
- title="Split package details for {{ pkg.pkgbase }}">{{ pkg.pkgbase }}</a></td>
- {% endif %}{% endwith %}
- </tr>
- {% endifequal %}
- <tr>
- <th>Description:</th>
- <td class="wrap" itemprop="description">{{ pkg.pkgdesc|default:"" }}</td>
- </tr><tr>
- <th>Upstream URL:</th>
- <td>{% if pkg.url %}<a itemprop="url" href="{{ pkg.url }}"
- title="Visit the website for {{ pkg.pkgname }}">{{ pkg.url|url_unquote }}</a>{% endif %}</td>
- </tr><tr>
- <th>License(s):</th>
- <td class="wrap">{{ pkg.licenses.all|join:", " }}</td>
- </tr>
- {% with pkg.groups.all as groups %}{% if groups %}
- <tr>
- <th>Groups:</th>
- <td class="wrap">{% for g in groups %}
- <a href="/groups/{{ pkg.arch.name }}/{{ g.name }}/"
- title="Group details for {{ g.name }}">{{ g.name }}</a>{% if not forloop.last %}, {% endif %}{% endfor %}
- </td>
- </tr>
- {% endif %}{% endwith %}
- {% with pkg.provides.all as all_related %}{% if all_related %}
- <tr>
- <th>Provides:</th>
- <td class="wrap relatedto">{% include "packages/details_relatedto.html.jinja" %}</td>
- </tr>
- {% endif %}{% endwith %}
- {% with pkg.replaces.all as all_related %}{% if all_related %}
- <tr>
- <th>Replaces:</th>
- <td class="wrap relatedto">{% include "packages/details_relatedto.html.jinja" %}</td>
- </tr>
- {% endif %}{% endwith %}
- {% with pkg.conflicts.all as all_related %}{% if all_related %}
- <tr>
- <th>Conflicts:</th>
- <td class="wrap relatedto">{% include "packages/details_relatedto.html.jinja" %}</td>
- </tr>
- {% endif %}{% endwith %}
- {% with pkg.reverse_conflicts as rev_conflicts %}{% if rev_conflicts %}
- <tr>
- <th>Reverse Conflicts:</th>
- <td class="wrap relatedto">{% for conflict in rev_conflicts %}
- <span class="related">{% pkg_details_link conflict %}{% if not forloop.last %}, {% endif %}</span>{% endfor %}</td>
- </tr>
- {% endif %}{% endwith %}
- <tr>
- <th>Maintainers:</th>
- {% with pkg.maintainers as maints %}
- <td>{% if maints %}
- {% for m in maints %}
- {% maintainer_link m %}<br/>
- {% endfor %}
- {% else %}Orphan{% endif %}
- </td>
- {% endwith %}
- </tr><tr>
- <th>Package Size:</th>
- <td>{{ pkg.compressed_size|filesizeformat }}</td>
- </tr><tr>
- <th>Installed Size:</th>
- <td>{{ pkg.installed_size|filesizeformat }}</td>
- </tr><tr>
- <th>Last Packager:</th>
- <td>{% with pkg.packager as pkgr %}{% if pkgr %}{% packager_link pkgr %}{% else %}{{ pkg.packager_str }}{% endif %}{% endwith %}</td>
- </tr><tr>
- <th>Build Date:</th>
- <td>{{ pkg.build_date|date:"DATETIME_FORMAT" }} UTC</td>
- </tr>{% if pkg.signature %}<tr>
- <th>Signed By:</th>
- <td>{% with pkg.signer as signer %}{% if signer %}{% pgp_key_link pkg.signature.key_id signer.get_full_name %}{% else %}Unknown ({% pgp_key_link pkg.signature.key_id %}){% endif %}{% endwith %}</td>
- </tr><tr>
- <th>Signature Date:</th>
- <td>{{ pkg.signature.creation_time|date:"DATETIME_FORMAT" }} UTC</td>
- </tr>{% else %}<tr>
- <th>Signed By:</th>
- <td>Unsigned</td>
- </tr>{% endif %}<tr>
- <th>Last Updated:</th>
- <td>{{ pkg.last_update|date:"DATETIME_FORMAT" }} UTC</td>
- </tr>
- {% if user.is_authenticated %}{% with pkg.flag_request as flag_request %}{% if flag_request %}<tr>
- <th>Last Flag Request:</th>
- <td class="wrap">From {{ flag_request.who }} on {{ flag_request.created|date }}:<br/>
- <div class="userdata">{{ flag_request.message|linebreaksbr|default:"{no message}" }}</div></td>
- </tr>{% endif %}{% endwith %}{% endif %}
- </table>
- </div>
-
- <div id="metadata">
- {% with pkg.get_depends as deps %}
- <div id="pkgdeps" class="listing">
- <h3 title="{{ pkg.pkgname }} has the following dependencies">
- Dependencies ({{deps|length}})</h3>
- {% if deps %}<ul id="pkgdepslist">
- {% for depend in deps %}{% include "packages/details_depend.html.jinja" %}{% endfor %}
- </ul>{% endif %}
- </div>
- {% endwith %}
- {% with pkg.get_requiredby as rqdby %}
- <div id="pkgreqs" class="listing">
- <h3 title="Packages that require {{ pkg.pkgname }}">
- Required By ({{rqdby|length}})</h3>
- {% if rqdby %}<ul id="pkgreqslist">
- {% for req in rqdby %}{% include "packages/details_requiredby.html.jinja" %}{% endfor %}
- </ul>{% endif %}
- </div>
- {% endwith %}
- <div id="pkgfiles" class="listing">
- <h3 title="Complete list of files contained within this package">
- Package Contents</h3>
- <div id="pkgfilelist">
- <p><a id="filelink" href="files/"
- title="Click to view the complete file list for {{ pkg.pkgname }}">
- View the file list for {{ pkg.pkgname }}</a></p>
- </div>
- </div>
- </div>
-</div>
+{% include "packages/details.html.jinja" %}
{% endblock %}
{% block script_block %}
diff --git a/templates/packages/details.html.jinja b/templates/packages/details.html.jinja
new file mode 100644
index 00000000..7ca5629c
--- /dev/null
+++ b/templates/packages/details.html.jinja
@@ -0,0 +1,221 @@
+{% import 'packages/details_link.html.jinja' as details %}
+<div id="pkgdetails" class="box">
+ <h2>{{ pkg.pkgname }} {{ pkg.full_version }}</h2>
+
+ <div id="detailslinks" class="listing">
+ <div id="actionlist">
+ <h4>Package Actions</h4>
+ <ul class="small">
+ <li>
+ <a href="{{ scm_link(pkg, 'tree') }}" title="View source files for {{ pkg.pkgname }}">Source Files</a> /
+ <a href="{{ scm_link(pkg, 'log') }}" title="View changes for {{ pkg.pkgname }}">View Changes</a>
+ </li>
+ <li>
+ <a href="{{ bugs_list(pkg) }}" title="View existing bug tickets for {{ pkg.pkgname }}">Bug Reports</a> /
+ <a href="{{ bug_report(pkg) }}" title="Report new bug for {{ pkg.pkgname }}">Add New Bug</a>
+ </li>
+ <li><a href="{{ wiki_link(pkg) }}" title="Search wiki for {{ pkg.pkgname }}">Search Wiki</a></li>
+ {% if pkg.flag_date %}
+ <li><span class="flagged">Flagged out-of-date on {{ pkg.flag_date|date }}</span></li>
+ {% with tp = pkg.in_testing() %}{% if tp %}
+ <li><span class="flagged">Version
+ <a href="{{ tp.get_absolute_url() }}"
+ title="Testing package details for {{ tp.pkgname }}">{{ tp.full_version }}</a>
+ in testing</span></li>
+ {% endif %}{% endwith %}
+ {% if perms.main.change_package %}
+ <li><a href="unflag/" title="Unflag this package">Click here to unflag</a></li>
+ <li><a href="unflag/all/" title="Unflag all matching pkgbase">Click here to unflag all split packages</a></li>
+ {% endif %}
+ {% else %}
+ <li><a href="flag/" title="Flag {{ pkg.pkgname }} as out-of-date">Flag Package Out-of-Date</a>
+ <a href="/packages/flaghelp/"
+ title="Get help on package flagging"
+ onclick="return !window.open('/packages/flaghelp/','FlagHelp',
+ 'height=350,width=450,location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=no');">(?)</a></li>
+ {% endif %}
+ <li><a href="download/" rel="nofollow" title="Download {{ pkg.pkgname }} from mirror">Download From Mirror</a></li>
+ </ul>
+
+ {% if perms.main.change_package %}
+ <form id="pkg-action" method="post" action="/packages/update/">{% csrf_token %}
+ <div><input type="hidden" name="pkgid" value="{{ pkg.id }}" /></div>
+ <p>{% if user in pkg.maintainers %}
+ <input title="Orphan this package" type="submit" name="disown" value="Disown"/>
+ {% else %}
+ <input title="Adopt this package" type="submit" name="adopt" value="Adopt"/>
+ {% endif %}</p>
+ </form>
+ {% endif %}
+ </div>
+
+ {% with others = pkg.elsewhere() %}{% if others %}
+ <div id="elsewhere" class="widget">
+ <h4>Versions Elsewhere</h4>
+ <ul>
+ {% for o in others %}
+ <li><a href="{{ o.get_absolute_url() }}"
+ title="Package details for {{ o.pkgname }}">{{ o.pkgname }} {{ o.full_version }} [{{ o.repo.name|lower }}] ({{ o.arch.name }})</a></li>
+ {% endfor %}
+ </ul>
+ </div>
+ {% endif %}{% endwith %}
+ </div>
+
+ <div itemscope itemtype="http://schema.org/SoftwareApplication">
+ <meta itemprop="name" content="{{ pkg.pkgname|escape }}"/>
+ <meta itemprop="version" content="{{ pkg.full_version|escape }}"/>
+ <meta itemprop="softwareVersion" content="{{ pkg.full_version|escape }}"/>
+ <meta itemprop="fileSize" content="{{ pkg.compressed_size }}"/>
+ <meta itemprop="dateCreated" content="{{ pkg.build_date|date("Y-m-d") }}"/>
+ <meta itemprop="datePublished" content="{{ pkg.last_update|date("Y-m-d") }}"/>
+ <meta itemprop="operatingSystem" content="Linux"/>
+ <div style="display:none" itemprop="provider" itemscope itemtype="http://schema.org/Person">
+ <meta itemprop="name" content="{{ pkg.packager.get_full_name()|escape }}"/>
+ </div>
+ <table id="pkginfo">
+ <tr>
+ <th>Architecture:</th>
+ <td><a href="/packages/?arch={{ pkg.arch.name }}"
+ title="Browse packages for {{ pkg.arch.name }} architecture">{{ pkg.arch.name }}</a></td>
+ </tr><tr>
+ <th>Repository:</th>
+ <td><a href="/packages/?repo={{ pkg.repo.name|capfirst }}"
+ title="Browse the {{ pkg.repo.name|capfirst }} repository">{{ pkg.repo.name|capfirst }}</a></td>
+ </tr>
+ {% if pkg.pkgname == pkg.pkgbase %}
+ {% with splits = pkg.split_packages() %}{% if splits %}
+ <tr>
+ <th>Split Packages:</th>
+ <td class="wrap relatedto">{% for s in splits %}<span class="related">{{ details.details_link(s) }}{% if not loop.last %}, {% endif %}</span>{% endfor %}</td>
+ </tr>
+ {% endif %}{% endwith %}
+ {% else %}
+ <tr>
+ <th>Base Package:</th>
+ {% with base = pkg.base_package %}{% if base %}
+ <td>{{ details.details_link(base) }}</td>
+ {% else %}
+ <td><a href="../{{ pkg.pkgbase }}/"
+ title="Split package details for {{ pkg.pkgbase }}">{{ pkg.pkgbase }}</a></td>
+ {% endif %}{% endwith %}
+ </tr>
+ {% endif %}
+ <tr>
+ <th>Description:</th>
+ <td class="wrap" itemprop="description">{{ pkg.pkgdesc|default("") }}</td>
+ </tr><tr>
+ <th>Upstream URL:</th>
+ <td>{% if pkg.url %}<a itemprop="url" href="{{ pkg.url }}"
+ title="Visit the website for {{ pkg.pkgname }}">{{ pkg.url|url_unquote }}</a>{% endif %}</td>
+ </tr><tr>
+ <th>License(s):</th>
+ <td class="wrap">{{ pkg.licenses.all()|join(", ") }}</td>
+ </tr>
+ {% with groups = pkg.groups.all() %}{% if groups %}
+ <tr>
+ <th>Groups:</th>
+ <td class="wrap">{% for g in groups %}
+ <a href="/groups/{{ pkg.arch.name }}/{{ g.name }}/"
+ title="Group details for {{ g.name }}">{{ g.name }}</a>{% if not loop.last %}, {% endif %}{% endfor %}
+ </td>
+ </tr>
+ {% endif %}{% endwith %}
+ {% with all_related = pkg.provides.all() %}{% if all_related %}
+ <tr>
+ <th>Provides:</th>
+ <td class="wrap relatedto">{% include "packages/details_relatedto.html.jinja" %}</td>
+ </tr>
+ {% endif %}{% endwith %}
+ {% with all_related = pkg.replaces.all() %}{% if all_related %}
+ <tr>
+ <th>Replaces:</th>
+ <td class="wrap relatedto">{% include "packages/details_relatedto.html.jinja" %}</td>
+ </tr>
+ {% endif %}{% endwith %}
+ {% with all_related = pkg.conflicts.all() %}{% if all_related %}
+ <tr>
+ <th>Conflicts:</th>
+ <td class="wrap relatedto">{% include "packages/details_relatedto.html.jinja" %}</td>
+ </tr>
+ {% endif %}{% endwith %}
+ {% with rev_conflicts = pkg.reverse_conflicts() %}{% if rev_conflicts %}
+ <tr>
+ <th>Reverse Conflicts:</th>
+ <td class="wrap relatedto">{% for conflict in rev_conflicts %}
+ <span class="related">{{ details.details_link(conflict) }}{% if not loop.last %}, {% endif %}</span>{% endfor %}</td>
+ </tr>
+ {% endif %}{% endwith %}
+ <tr>
+ <th>Maintainers:</th>
+ {% with maints = pkg.maintainers %}
+ <td>{% if maints %}
+ {% for m in maints %}
+ {{ maintainer_link(m)|safe }}<br/>
+ {% endfor %}
+ {% else %}Orphan{% endif %}
+ </td>
+ {% endwith %}
+ </tr><tr>
+ <th>Package Size:</th>
+ <td>{{ pkg.compressed_size|filesizeformat }}</td>
+ </tr><tr>
+ <th>Installed Size:</th>
+ <td>{{ pkg.installed_size|filesizeformat }}</td>
+ </tr><tr>
+ <th>Last Packager:</th>
+ <td>{% with pkgr = pkg.packager %}{% if pkgr %}{{ packager_link(pkgr)|safe }}{% else %}{{ pkg.packager_str }}{% endif %}{% endwith %}</td>
+ </tr><tr>
+ <th>Build Date:</th>
+ <td>{{ pkg.build_date|date("DATETIME_FORMAT") }} UTC</td>
+ </tr>{% if pkg.signature %}<tr>
+ <th>Signed By:</th>
+ <td>{% with signer = pkg.signer %}{% if signer %}{{ pgp_key_link(pkg.signature.key_id, signer.get_full_name())|safe }}{% else %}Unknown ({{ pgp_key_link(pkg.signature.key_id)|safe }}){% endif %}{% endwith %}</td>
+ </tr><tr>
+ <th>Signature Date:</th>
+ <td>{{ pkg.signature.creation_time|date("DATETIME_FORMAT") }} UTC</td>
+ </tr>{% else %}<tr>
+ <th>Signed By:</th>
+ <td>Unsigned</td>
+ </tr>{% endif %}<tr>
+ <th>Last Updated:</th>
+ <td>{{ pkg.last_update|date("DATETIME_FORMAT") }} UTC</td>
+ </tr>
+ {% if user.is_authenticated %}{% with flag_request = pkg.flag_request() %}{% if flag_request %}<tr>
+ <th>Last Flag Request:</th>
+ <td class="wrap">From {{ flag_request.who() }} on {{ flag_request.created|date }}:<br/>
+ <div class="userdata">{{ flag_request.message|linebreaksbr|default("{no message}") }}</div></td>
+ </tr>{% endif %}{% endwith %}{% endif %}
+ </table>
+ </div>
+
+ <div id="metadata">
+ {% with deps = pkg.get_depends() %}
+ <div id="pkgdeps" class="listing">
+ <h3 title="{{ pkg.pkgname }} has the following dependencies">
+ Dependencies ({{deps|length}})</h3>
+ {% if deps %}<ul id="pkgdepslist">
+ {% for depend in deps %}{% include "packages/details_depend.html.jinja" %}{% endfor %}
+ </ul>{% endif %}
+ </div>
+ {% endwith %}
+ {% with rqdby = pkg.get_requiredby() %}
+ <div id="pkgreqs" class="listing">
+ <h3 title="Packages that require {{ pkg.pkgname }}">
+ Required By ({{rqdby|length}})</h3>
+ {% if rqdby %}<ul id="pkgreqslist">
+ {% for req in rqdby %}{% include "packages/details_requiredby.html.jinja" %}{% endfor %}
+ </ul>{% endif %}
+ </div>
+ {% endwith %}
+ <div id="pkgfiles" class="listing">
+ <h3 title="Complete list of files contained within this package">
+ Package Contents</h3>
+ <div id="pkgfilelist">
+ <p><a id="filelink" href="files/"
+ title="Click to view the complete file list for {{ pkg.pkgname }}">
+ View the file list for {{ pkg.pkgname }}</a></p>
+ </div>
+ </div>
+ </div>
+</div>