]> git.parisson.com Git - telemeta.git/commitdiff
web interface: added quick search and fixed export download
authorolivier <>
Mon, 23 Apr 2007 13:37:06 +0000 (13:37 +0000)
committerolivier <>
Mon, 23 Apr 2007 13:37:06 +0000 (13:37 +0000)
telemeta/css/style.css
telemeta/models.py
telemeta/templates/base.html
telemeta/templates/index.html
telemeta/templates/search_results.html [new file with mode: 0644]
telemeta/urls.py
telemeta/views/web.py

index 5b3036fa80b484540de866e29062e5ea0e0443b6..e7d75b60838ac98526a90650c28a3d7f6f9a8a85 100644 (file)
@@ -1,26 +1,34 @@
 body {
     font-family: Verdana;
-    font-size: 11px;
+    font-size: 80%;
 }
 
 #header {
-    font-size: 16px;
+    font-size: 140%;
     border-bottom: solid 1px black;
     font-weight: bold;
+    padding-bottom: 0.8em;
+    padding-top: 1em;
+}
+#header a {
+    color: black;
+    text-decoration: none;
 }
 
+/*
 label {
     width: 20ex;
     display: block;
     float: left;
 }
-
 input {
-    margin-bottom: 4px;
+    margin-bottom: 1ex;
 }
+*/
 
 #menu {
     text-align: right;
+    clear: right;
 }
 
 #menu a:link, #menu a:visited {
@@ -36,3 +44,16 @@ input {
 
 #menu a {
 }
+
+#quick_search {
+    float: right;
+    font-size: 80%;
+}
+
+#quick_search input {
+    vertical-align: middle;
+    font-size: 80%;
+}
+
+#quick_search_pattern {
+}
index ae2028103b5eff1116f8646186426421ac28c2e7..0a3b893d7d847d4f4becc152d4c5f7e39a6e8c53 100644 (file)
@@ -1,5 +1,6 @@
 import telemeta
 from django.db import models
+from django.db.models import Q
 from telemeta.core import *
 
 class MediaModel(Component):
@@ -18,6 +19,13 @@ class MediaCore:
             fields_dict[field.name] = getattr(self, field.name)
         return fields_dict
 
+class MediaCollectionManager(models.Manager):
+    def quick_search(self, pattern):
+        return super(MediaCollectionManager, self).get_query_set().filter(
+            Q(title__icontains=pattern) |
+            Q(description__icontains=pattern)
+        )
+
 class MediaCollection(models.Model, MediaCore):
     "Group related media items"
 
@@ -35,6 +43,8 @@ class MediaCollection(models.Model, MediaCore):
     source = models.CharField(maxlength=250, blank=True)
     subject = models.CharField(maxlength=250, blank=True)
 
+    objects = MediaCollectionManager()
+
     def __str__(self):
         return self.title
 
@@ -45,7 +55,14 @@ class MediaCollection(models.Model, MediaCore):
     class Admin:
         pass
 
-
+class MediaItemManager(models.Manager):
+    def quick_search(self, pattern):
+        return super(MediaItemManager, self).get_query_set().filter(
+            Q(title__icontains=pattern) |
+            Q(creator__icontains=pattern) |
+            Q(identifier__icontains=pattern) |
+            Q(description__icontains=pattern) 
+        )
 
 class MediaItem(models.Model, MediaCore):
     "Describe a item with metadata" 
@@ -68,6 +85,8 @@ class MediaItem(models.Model, MediaCore):
     source = models.CharField(maxlength=250, blank=True)
     duration = models.FloatField(max_digits=11, decimal_places=3, null=True, blank=True)
 
+    objects = MediaItemManager()
+
     def __str__(self):
         return self.title
 
index f69b266ed22b2dfcf3b565c9caa2f1aa73be5cba..6c61ed28d3427c48a1578610265bf741d7fa437e 100644 (file)
@@ -2,11 +2,19 @@
 <link rel="stylesheet" href="/css/style.css" />
 <body>
 <div id="header">
-Telemeta Web Interface
+<a href="/">Telemeta Web Interface</a>
+    <div id="quick_search">
+    <form action="/search" method="GET">
+    <label for="quick_search_pattern">Search : </label>
+        <input id="quick_search_pattern" name="pattern" />
+        <input type="submit" value="OK" />
+    </form>        
+    </div>
 </div>
 <div id="menu">
 <a href="/collections">Collections</a> |
-<a href="/items">Items</a>
+<a href="/items">Items</a> |
+<a href="/admin">Admin</a>
 </div>
 {% block content %}{% endblock %}
 </body>
index 47858bc74ad71abb46fedecff338780784ce1651..e48212a8a2e8e2f12ea83cdc496fa6f883ee6f72 100644 (file)
@@ -1,17 +1,4 @@
 {% extends "base.html" %}
 
 {% block content %}
-<h3>Media items</h3>
-{% if object_list %}
-    <ul>
-    {% for p in object_list %}
-        <li><b>{{ p.author }}</b> - {{ p.title }}
-            <a href="{{ p.id }}">View</a>
-            <a href="#">Edit</a>
-            </li>
-    {% endfor %}
-    </ul>
-{% else %}
-    <p>No media item available.</p>
-{% endif %}
 {% endblock %}
diff --git a/telemeta/templates/search_results.html b/telemeta/templates/search_results.html
new file mode 100644 (file)
index 0000000..5bf9c11
--- /dev/null
@@ -0,0 +1,30 @@
+{% extends "base.html" %}
+
+{% block content %}
+<h3>Search: {{ pattern }}</h3>
+{% if collections %}
+    <h4>Collections</h4>
+    <ul>
+    {% for c in collections %}
+        <li><b>{{ c.title }}</b>
+            <a href="/collections/{{ c.id }}">View</a>
+            <a href="#">Edit</a>
+            </li>
+    {% endfor %}
+    </ul>
+{% endif %}
+{% if items %}
+    <h4>Items</h4>
+    <ul>
+    {% for i in items %}
+        <li><b>{{ i.title }}</b>
+            <a href="/items/{{ i.id }}">View</a>
+            <a href="#">Edit</a>
+            </li>
+    {% endfor %}
+    </ul>
+{% endif %}
+{% if not collections and not items %}
+No result
+{% endif %}
+{% endblock %}
index 8ca6fa4e91e28af4da139dfb78610ac87780ea65..09b36cbc1b56a6f161f574d7f23ed9a23a86cd3e 100644 (file)
@@ -25,6 +25,9 @@ urlpatterns = patterns('',
         'django.views.generic.list_detail.object_detail',
         dict(all_collections, template_name="collection_detail.html")),
 
+    (r'^search/$', 
+        'telemeta.views.web.quick_search'),
+
 
     # CSS (FIXME: for developement only)
     (r'^css/(?P<path>.*)$', 'django.views.static.serve', {'document_root': './telemeta/css'}),
index a4ff71e9a599453889d834d77f2375c9091a3a29..7b733db0f559914c90da9c20a8fbf1cd15c7c234 100644 (file)
@@ -4,6 +4,7 @@ from django.template import Context, loader
 from django.http import HttpResponse
 from django.http import Http404
 from telemeta.models import MediaItem
+from telemeta.models import MediaCollection
 from django.shortcuts import render_to_response
 import re
 from telemeta.core import *
@@ -67,12 +68,26 @@ class WebView(Component):
 
         outfile = exporter.process(item.id, infile, metadata, [])
 
-        return HttpResponse(self.file_stream(outfile), mimetype = mime_type)
+        response = HttpResponse(self.file_stream(outfile), mimetype = mime_type)
+        response['Content-Disposition'] = 'attachment; filename="download.' + \
+                    exporter.get_file_extension() + '"'
+        return response
+
+    def quick_search(self, request):
+        pattern = request.REQUEST["pattern"]
+        collections = MediaCollection.objects.quick_search(pattern)
+        items = MediaItem.objects.quick_search(pattern)
+        return render_to_response('search_results.html', 
+                    {'pattern': pattern, 'collections': collections, 
+                     'items': items})
+
+        
 
 comp_mgr = ComponentManager()
 view = WebView(comp_mgr)
 item_detail = view.item_detail
 item_export = view.item_export
+quick_search = view.quick_search
 
 def media_item_edit(request, media_item_id):
     "Provide MediaItem object edition"