Ability to change lexer on the fly in raw views.

master
Nick Sergeant 2013-03-21 12:48:25 -04:00
parent 8b21151ec8
commit 8626b23ce7
2 changed files with 20 additions and 4 deletions

View File

@ -8,8 +8,8 @@ urlpatterns = patterns('',
url(r'^public/$', views.list_public, name='list-public'),
url(r'^public/tag/(?P<tag_slug>[^/]+)/$', views.list_public, name='list-public-tag'),
url(r'^embed/(?P<snipt_key>[^/]+)/$', views.embed, name='embed'),
url(r'^raw/(?P<snipt_key>[^/]+)/$', views.raw, name='raw'),
url(r'^s/(?P<snipt_key>[^/]+)/$', views.redirect, name='redirect'),
url(r'^raw/(?P<snipt_key>[^/]+)/(?P<lexer>[^\?]+)?$', views.raw, name='raw'),
url(r'^s/(?P<snipt_key>[^/]+)/(?P<lexer>[^\?]+)?$', views.redirect, name='redirect'),
url(r'^(?P<username_or_custom_slug>[^/]+)/$', views.list_user, name='list-user'),
url(r'^(?P<username_or_custom_slug>[^/]+)/tag/(?P<tag_slug>[^/]+)/$', views.list_user, name='list-user-tag'),
url(r'^(?P<username>[^/]+)/favorites/$', views.favorites, name='favorites'),

View File

@ -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())