From 47757de59b3cad318f13d94ace49aa64f33a36d0 Mon Sep 17 00:00:00 2001 From: Eric Holscher Date: Thu, 14 Aug 2014 12:22:47 -0700 Subject: [PATCH] Clean up badge code, enable option for redirecting. Needs some style cleanup. --- readthedocs/projects/views/public.py | 40 ++++++++++++++----- readthedocs/templates/core/badge_markup.html | 30 ++++++++++++++ .../templates/core/project_details.html | 5 ++- 3 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 readthedocs/templates/core/badge_markup.html diff --git a/readthedocs/projects/views/public.py b/readthedocs/projects/views/public.py index 1a01e6b8760..fad346a189e 100644 --- a/readthedocs/projects/views/public.py +++ b/readthedocs/projects/views/public.py @@ -1,5 +1,6 @@ import json +from django.core.urlresolvers import reverse from django.conf import settings from django.contrib.auth.models import User from django.http import HttpResponse, HttpResponseRedirect, Http404 @@ -50,18 +51,35 @@ def project_detail(request, project_slug): queryset = Project.objects.protected(request.user) project = get_object_or_404(queryset, slug=project_slug) versions = project.versions.public(request.user, project) - filter = VersionSlugFilter(request.GET, queryset=versions) + # filter = VersionSlugFilter(request.GET, queryset=versions) + if request.is_secure(): + protocol = 'https' + else: + protocol = 'http' + badge_url = "%s://%s%s?version=%s" % ( + protocol, + settings.PRODUCTION_DOMAIN, + reverse('project_badge', args=[project.slug]), + project.get_default_version() + ) + site_url = "%s://%s%s" % ( + protocol, + settings.PRODUCTION_DOMAIN, + reverse('projects_detail', args=[project.slug]), + ) return render_to_response( 'projects/project_detail.html', { 'project': project, 'versions': versions, 'filter': filter, + 'badge_url': badge_url, + 'site_url': site_url, }, context_instance=RequestContext(request), ) -def project_badge(request, project_slug): +def project_badge(request, project_slug, redirect=False): """ Return a sweet badge for the project """ @@ -71,16 +89,18 @@ def project_badge(request, project_slug): version_builds = version.builds.filter(type='html', state='finished').order_by('-date') if not version_builds.exists(): url = 'http://img.shields.io/badge/Docs-No%20Builds-yellow.svg' - response = requests.get(url) - return HttpResponse(response.content, mimetype="image/svg+xml") else: last_build = version_builds[0] - color = 'green' - if not last_build.success: - color = 'red' - url = 'http://img.shields.io/badge/Docs-%s-%s.svg' % (version.slug.replace('-', '--'), color) - response = requests.get(url) - return HttpResponse(response.content, mimetype="image/svg+xml") + if last_build.success: + color = 'green' + else: + color = 'red' + url = 'http://img.shields.io/badge/Docs-%s-%s.svg' % (version.slug.replace('-', '--'), color) + if redirect: + return HttpResponseRedirect(url) + else: + response = requests.get(url) + return HttpResponse(response.content, mimetype="image/svg+xml") def project_downloads(request, project_slug): """ diff --git a/readthedocs/templates/core/badge_markup.html b/readthedocs/templates/core/badge_markup.html new file mode 100644 index 00000000000..0d9bb306758 --- /dev/null +++ b/readthedocs/templates/core/badge_markup.html @@ -0,0 +1,30 @@ + diff --git a/readthedocs/templates/core/project_details.html b/readthedocs/templates/core/project_details.html index ea57248bb47..fd57de62235 100644 --- a/readthedocs/templates/core/project_details.html +++ b/readthedocs/templates/core/project_details.html @@ -90,9 +90,10 @@

{% trans "Repository" %}

{% endif %}

{% trans "Badge" %}

- - + + + {% include "core/badge_markup.html" with badge_url=badge_url site_url=site_url %} {% if project.tags.count %}

{% trans "Tags" %}