summaryrefslogtreecommitdiff
path: root/sublab_project/preview_admin/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'sublab_project/preview_admin/admin.py')
-rw-r--r--sublab_project/preview_admin/admin.py28
1 files changed, 24 insertions, 4 deletions
diff --git a/sublab_project/preview_admin/admin.py b/sublab_project/preview_admin/admin.py
index 6f6f0e2..d7afd99 100644
--- a/sublab_project/preview_admin/admin.py
+++ b/sublab_project/preview_admin/admin.py
@@ -3,6 +3,8 @@ from django.conf.urls.defaults import patterns, url
from django.core.urlresolvers import reverse, NoReverseMatch
from django.shortcuts import render_to_response
from django.utils.safestring import mark_safe
+from django.conf import settings
+from django.http import Http404
import logging
logger = logging.getLogger('preview_admin')
@@ -19,7 +21,7 @@ class PreviewAdmin(ModelAdmin):
)
return myurls + urls
- def add_preview(self, formfield):
+ def add_preview(self, fieldname, formfield):
render = formfield.widget.render
def preview_render(name, *args, **kwargs):
@@ -29,7 +31,9 @@ class PreviewAdmin(ModelAdmin):
preview_url = reverse('admin:%s_%s_preview' % info,
args=[name], current_app=self.admin_site.name)
- rendered += '<p><a href="%s">Preview</a></p>' % preview_url
+ rendered += '<div id="preview-%s" class="preview-box"></div>' % fieldname
+ rendered += '<p><a onclick="preview_admin(\'%s\',\'%s\')">Preview</a></p>' % (
+ fieldname, preview_url)
return mark_safe(rendered)
formfield.widget.render = preview_render
@@ -38,10 +42,26 @@ class PreviewAdmin(ModelAdmin):
formfield = super(PreviewAdmin, self).formfield_for_dbfield(db_field, **kwargs)
if db_field.name in self.preview_fields:
- self.add_preview(formfield)
+ self.add_preview(db_field.name, formfield)
return formfield
def preview(self, request, field):
- return render_to_response('404.html')
+ if (field not in self.preview_fields
+ or 'data' not in request.GET):
+ raise Http404
+ context = {
+ 'preview' : mark_safe(self.preview_fields[field](request.GET['data']))
+ }
+ return render_to_response('admin/preview.html', context)
+
+ def _media(self):
+ media = super(PreviewAdmin, self)._media()
+ media.add_js(['%sjs/jquery.js' % settings.ADMIN_MEDIA_PREFIX ])
+ media.add_js(['%sjs/preview.js' % settings.ADMIN_MEDIA_PREFIX ])
+ media.add_css({
+ 'all' : ['%scss/preview.css' % settings.ADMIN_MEDIA_PREFIX ]})
+
+ return media
+ media = property(_media)