From 8626b23ce79dc65b8a1f3d95af38584a28590e0d Mon Sep 17 00:00:00 2001 From: Nick Sergeant Date: Thu, 21 Mar 2013 12:48:25 -0400 Subject: [PATCH] Ability to change lexer on the fly in raw views. --- snipts/urls.py | 4 ++-- snipts/views.py | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/snipts/urls.py b/snipts/urls.py index 117a69a..de0570e 100644 --- a/snipts/urls.py +++ b/snipts/urls.py @@ -8,8 +8,8 @@ urlpatterns = patterns('', url(r'^public/$', views.list_public, name='list-public'), url(r'^public/tag/(?P[^/]+)/$', views.list_public, name='list-public-tag'), url(r'^embed/(?P[^/]+)/$', views.embed, name='embed'), - url(r'^raw/(?P[^/]+)/$', views.raw, name='raw'), - url(r'^s/(?P[^/]+)/$', views.redirect, name='redirect'), + url(r'^raw/(?P[^/]+)/(?P[^\?]+)?$', views.raw, name='raw'), + url(r'^s/(?P[^/]+)/(?P[^\?]+)?$', views.redirect, name='redirect'), url(r'^(?P[^/]+)/$', views.list_user, name='list-user'), url(r'^(?P[^/]+)/tag/(?P[^/]+)/$', views.list_user, name='list-user-tag'), url(r'^(?P[^/]+)/favorites/$', views.favorites, name='favorites'), diff --git a/snipts/views.py b/snipts/views.py index d3aa95b..1d597e5 100644 --- a/snipts/views.py +++ b/snipts/views.py @@ -2,6 +2,7 @@ from django.http import Http404, HttpResponseRedirect, HttpResponseBadRequest from django.shortcuts import get_object_or_404, render_to_response from django.core.paginator import Paginator, InvalidPage from annoying.functions import get_object_or_None +from pygments.lexers import get_lexer_by_name from django.contrib.auth.models import User from django.template import RequestContext from annoying.decorators import render_to @@ -236,9 +237,24 @@ def list_user(request, username_or_custom_slug, tag_slug=None): return context -def raw(request, snipt_key): +def raw(request, snipt_key, lexer=None): snipt = get_object_or_404(Snipt, key=snipt_key) + if request.user == snipt.user: + if lexer: + lexer = lexer.strip('/') + + if lexer != snipt.lexer: + + try: + lexer_obj = get_lexer_by_name(lexer) + except: + lexer_obj = None + + if lexer_obj: + snipt.lexer = lexer + snipt.save() + if snipt.lexer == 'js': mimetype='text/javascript' else: @@ -252,7 +268,7 @@ def raw(request, snipt_key): context_instance=RequestContext(request), mimetype=mimetype) -def redirect(request, snipt_key): +def redirect(request, snipt_key, lexer=None): snipt = get_object_or_404(Snipt, key=snipt_key) return HttpResponseRedirect(snipt.get_absolute_url())