diff options
Diffstat (limited to 'main')
-rw-r--r-- | main/context_processors.py | 1 | ||||
-rw-r--r-- | main/templatetags/details_link.py | 98 | ||||
-rw-r--r-- | main/templatetags/flags.py | 37 |
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: |