]> git.parisson.com Git - telemeta.git/commitdiff
add visualization to web item detail view
authorolivier <>
Wed, 9 May 2007 11:24:02 +0000 (11:24 +0000)
committerolivier <>
Wed, 9 May 2007 11:24:02 +0000 (11:24 +0000)
telemeta/htdocs/css/telemeta.css
telemeta/templates/mediaitem_detail.html
telemeta/urls.py
telemeta/views/web.py

index fab852ea42d5ae911e195fe8f6dd04166da4bd4e..04dc30e23d26ed6c168a69797f719fe4eb5a608f 100644 (file)
@@ -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 {
index 3e529c7508780028e44fd8755ccc48d74b7e74f9..bffc580f257a034d0b7011a53162d437d7bb5130 100644 (file)
@@ -3,6 +3,18 @@
 {% block content %}
 {% if item %}
     <h3>Item: {{ item.title }}</h3>
+    <div class="item_visualization">
+      <img src="visualize/{{visualizer_id}}">
+      <form method="GET">
+        <select name="visualizer_id" onchange="this.form.submit()">
+          {% for v in visualizers %}
+            <option value="{{ v.id }}" {% ifequal v.id visualizer_id %} selected {% endifequal %}>
+              {{v.name}}</option>
+          {% endfor %}
+        </select>
+        <input type="submit" value="OK">
+      </form>
+    </div>
     <ul>
     {% for field in item.list %}
         {% ifnotequal field.name "id" %}
@@ -30,3 +42,4 @@
     <p>No such item</p>
 {% endif %}
 {% endblock %}
+
index fba8a19ef6c20743cb4def0b29c75873fa966a41..8f4aad44f015b326c286c42859806daf15486db8 100644 (file)
@@ -29,6 +29,8 @@ urlpatterns = patterns('',
     (r'^items/(?P<item_id>[0-9]+)/$', web_view.item_detail),
     (r'^items/(?P<item_id>[0-9]+)/download/(?P<format>[0-9A-Z]+)/$', 
         web_view.item_export),
+    (r'^items/(?P<item_id>[0-9]+)/visualize/(?P<visualizer_id>[0-9a-z]+)/$', 
+        web_view.item_visualize),
 
     # collections
     (r'^collections/$', 'django.views.generic.list_detail.object_list',
index 3d92670386a70b4b771d416c386e2b795283f654..ebe791e8ef2ebcd3ee4aaa834055189263eeef44 100644 (file)
@@ -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.