summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/context_processors.py1
-rw-r--r--main/templatetags/details_link.py98
-rw-r--r--main/templatetags/flags.py37
3 files changed, 136 insertions, 0 deletions
diff --git a/main/context_processors.py b/main/context_processors.py
index 96a45dcf..5d12e6f8 100644
--- a/main/context_processors.py
+++ b/main/context_processors.py
@@ -4,6 +4,7 @@ def secure(request):
def branding(request):
from django.conf import settings
return {
+ 'WEB_URL': settings.WEB_URL,
'BUGTRACKER_URL': settings.BUGTRACKER_URL,
'MAILMAN_BASE_URL': settings.MAILMAN_BASE_URL,
'PROJECTS_URL': settings.PROJECTS_URL,
diff --git a/main/templatetags/details_link.py b/main/templatetags/details_link.py
new file mode 100644
index 00000000..d922e301
--- /dev/null
+++ b/main/templatetags/details_link.py
@@ -0,0 +1,98 @@
+from urllib import urlencode, quote as urlquote, unquote
+from django import template
+from main.templatetags import pgp
+
+register = template.Library()
+
+
+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)
+ return "%s?%s" % (url, data)
+
+
+@register.inclusion_tag('packages/details_link.html')
+def details_link(pkg):
+ return {'pkg': pkg}
+
+
+@register.simple_tag
+def scm_link(package, operation):
+ parts = ("abslibre", operation, package.repo.name.lower(), package.pkgbase)
+ linkbase = (
+ "https://projects.parabola.nu/%s.git/%s/%s/%s")
+ return linkbase % tuple(urlquote(part.encode('utf-8')) for part in parts)
+
+
+@register.simple_tag
+def bugs_list(package):
+ if package.arch.name == 'mips64el':
+ project = "mips64el"
+ else:
+ project = "issue-tracker"
+ url = "https://labs.parabola.nu/projects/%s/search" % project
+ data = {
+ 'titles_only': '1',
+ 'issues': '1',
+ 'q': package.pkgname,
+ }
+ return link_encode(url, data)
+
+
+@register.simple_tag
+def bug_report(package):
+ url = "https://labs.parabola.nu/projects/"
+ if package.arch.name == 'mips64el':
+ url = url + "mips64el/issues/new"
+ else:
+ url = url + "issue-tracker/issues/new"
+ data = {
+ 'issue[subject]': '[%s] PLEASE ENTER SUMMARY' % package.pkgname,
+ }
+ return link_encode(url, data)
+
+@register.simple_tag
+def flag_unfree(package):
+ url = "https://labs.parabola.nu/projects/"
+ if package.arch.name == 'mips64el':
+ url = url + "mips64el/issues/new"
+ else:
+ url = url + "issue-tracker/issues/new"
+ data = {
+ 'issue[tracker_id]': '4', # "freedom issue"
+ 'issue[priority_id]': '1', # "freedom issue"
+ 'issue[watcher_user_ids][]': '62', # "dev-list"
+ 'issue[subject]': '[%s] Please put your reasons here (register first if you haven\'t)' % package.pkgname,
+ }
+ return link_encode(url, data)
+
+
+@register.simple_tag
+def wiki_link(package):
+ url = "https://wiki.parabola.nu/index.php"
+ data = {
+ 'title': "Special:Search",
+ 'search': package.pkgname,
+ }
+ return link_encode(url, data)
+
+
+@register.simple_tag
+def pgp_key_link(key_id, link_text=None):
+ return pgp.pgp_key_link(key_id, link_text)
+
+
+@register.filter
+def url_unquote(original_url):
+ try:
+ url = original_url
+ if isinstance(url, unicode):
+ url = url.encode('ascii')
+ url = unquote(url).decode('utf-8')
+ return url
+ except UnicodeError:
+ return original_url
+
+# vim: set ts=4 sw=4 et:
diff --git a/main/templatetags/flags.py b/main/templatetags/flags.py
index 5b356561..d50ee51d 100644
--- a/main/templatetags/flags.py
+++ b/main/templatetags/flags.py
@@ -1,3 +1,4 @@
+from datetime import timedelta
from django import template
register = template.Library()
@@ -10,4 +11,40 @@ def country_flag(country):
return '<span class="fam-flag fam-flag-%s" title="%s"></span> ' % (
unicode(country.code).lower(), unicode(country.name))
+@register.filter
+def percentage(value, arg=1):
+ if not value and type(value) != float:
+ return u''
+ new_val = value * 100.0
+ return '%.*f%%' % (arg, new_val)
+
+@register.filter
+def duration(value):
+ if not value and type(value) != timedelta:
+ return u''
+ # does not take microseconds into account
+ total_secs = value.seconds + value.days * 24 * 3600
+ mins = total_secs // 60
+ hrs, mins = divmod(mins, 60)
+ return '%d:%02d' % (hrs, mins)
+
+@register.filter
+def floatvalue(value, arg=2):
+ if value is None:
+ return u''
+ return '%.*f' % (arg, value)
+
+
+@register.filter
+def hours(value):
+ if not value and type(value) != timedelta:
+ return u''
+ # does not take microseconds into account
+ total_secs = value.seconds + value.days * 24 * 3600
+ mins = total_secs // 60
+ hrs, mins = divmod(mins, 60)
+ if hrs == 1:
+ return '%d hour' % hrs
+ return '%d hours' % hrs
+
# vim: set ts=4 sw=4 et: