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 {
#menu a {
}
+
+#quick_search {
+ float: right;
+ font-size: 80%;
+}
+
+#quick_search input {
+ vertical-align: middle;
+ font-size: 80%;
+}
+
+#quick_search_pattern {
+}
import telemeta
from django.db import models
+from django.db.models import Q
from telemeta.core import *
class MediaModel(Component):
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"
source = models.CharField(maxlength=250, blank=True)
subject = models.CharField(maxlength=250, blank=True)
+ objects = MediaCollectionManager()
+
def __str__(self):
return self.title
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"
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
<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>
{% 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 %}
--- /dev/null
+{% 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 %}
'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'}),
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 *
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"