From 13df20e2ac24a0bb7df675f407b7cffbedb3b0dc Mon Sep 17 00:00:00 2001
From: olivier <>
Date: Wed, 9 May 2007 11:24:02 +0000
Subject: [PATCH] add visualization to web item detail view
---
telemeta/htdocs/css/telemeta.css | 13 +++++++++++
telemeta/templates/mediaitem_detail.html | 13 +++++++++++
telemeta/urls.py | 2 ++
telemeta/views/web.py | 28 +++++++++++++++++++++++-
4 files changed, 55 insertions(+), 1 deletion(-)
diff --git a/telemeta/htdocs/css/telemeta.css b/telemeta/htdocs/css/telemeta.css
index fab852ea..04dc30e2 100644
--- a/telemeta/htdocs/css/telemeta.css
+++ b/telemeta/htdocs/css/telemeta.css
@@ -62,6 +62,19 @@ a:link:hover, a:visited:hover {
#quick_search_pattern {
}
+.item_visualization {
+ float: right;
+ padding: 1ex;
+}
+.item_visualization select {
+ width: 200px;
+}
+
+.item_visualization img {
+ width: 300px;
+ border: solid 1px black;
+}
+
/* Styles for tabular listings (stolen from trac) */
table.listing {
diff --git a/telemeta/templates/mediaitem_detail.html b/telemeta/templates/mediaitem_detail.html
index 3e529c75..bffc580f 100644
--- a/telemeta/templates/mediaitem_detail.html
+++ b/telemeta/templates/mediaitem_detail.html
@@ -3,6 +3,18 @@
{% block content %}
{% if item %}
Item: {{ item.title }}
+
+

+
+
{% for field in item.list %}
{% ifnotequal field.name "id" %}
@@ -30,3 +42,4 @@
No such item
{% endif %}
{% endblock %}
+
diff --git a/telemeta/urls.py b/telemeta/urls.py
index fba8a19e..8f4aad44 100644
--- a/telemeta/urls.py
+++ b/telemeta/urls.py
@@ -29,6 +29,8 @@ urlpatterns = patterns('',
(r'^items/(?P[0-9]+)/$', web_view.item_detail),
(r'^items/(?P[0-9]+)/download/(?P[0-9A-Z]+)/$',
web_view.item_export),
+ (r'^items/(?P[0-9]+)/visualize/(?P[0-9a-z]+)/$',
+ web_view.item_visualize),
# collections
(r'^collections/$', 'django.views.generic.list_detail.object_list',
diff --git a/telemeta/views/web.py b/telemeta/views/web.py
index 3d926703..ebe791e8 100644
--- a/telemeta/views/web.py
+++ b/telemeta/views/web.py
@@ -17,6 +17,7 @@ from django.shortcuts import render_to_response
import re
from telemeta.core import *
from telemeta.export import *
+from telemeta.visualization import *
from django.conf import settings
import os
@@ -24,6 +25,7 @@ class WebView(Component):
"""Provide web UI methods"""
exporters = ExtensionPoint(IExporter)
+ visualizers = ExtensionPoint(IMediaItemVisualizer)
def index(self, request):
"""Render the homepage"""
@@ -38,8 +40,32 @@ class WebView(Component):
formats = []
for exporter in self.exporters:
formats.append(exporter.get_format())
+ visualizers = []
+ for visualizer in self.visualizers:
+ visualizers.append({'name':visualizer.get_name(), 'id':
+ visualizer.get_id()})
+ if request.REQUEST.has_key('visualizer_id'):
+ visualizer_id = request.REQUEST['visualizer_id']
+ else:
+ visualizer_id = 'waveform'
return render_to_response('mediaitem_detail.html',
- {'item': item, 'export_formats': formats})
+ {'item': item, 'export_formats': formats,
+ 'visualizers': visualizers, 'visualizer_id': visualizer_id})
+
+ def item_visualize(self, request, item_id, visualizer_id):
+ for visualizer in self.visualizers:
+ if visualizer.get_id() == visualizer_id:
+ break
+
+ if visualizer.get_id() != visualizer_id:
+ raise Http404
+
+ item = MediaItem.objects.get(pk=item_id)
+
+ stream = visualizer.render(item)
+ response = HttpResponse(stream, mimetype = 'image/png')
+ return response
+
def __file_stream(self, filepath):
"""Generator for streaming a file from the disk.
--
2.39.5