diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-03-01 14:43:52 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-03-01 14:43:52 +0100 |
commit | a11b858cdec741c595d3fcc9849eef617061c19b (patch) | |
tree | ab34297fa527a2a9ac9e55b9f7a1b84512b94ba9 | |
parent | a5073fc3ad169b7f0f68d486fc6f7bd89365fb7f (diff) | |
download | Chimère-a11b858cdec741c595d3fcc9849eef617061c19b.tar.bz2 Chimère-a11b858cdec741c595d3fcc9849eef617061c19b.zip |
Manage mimetypes, order of multimedia types
-rw-r--r-- | apache/apache-wsgi.conf | 1 | ||||
-rw-r--r-- | chimere/admin.py | 23 | ||||
-rw-r--r-- | chimere/fixtures/initial_data.json | 80 | ||||
-rw-r--r-- | chimere/migrations/0006_auto__add_multimediatype__add_field_picturefile_order__del_field_multi.py | 226 | ||||
-rw-r--r-- | chimere/models.py | 43 | ||||
-rw-r--r-- | chimere/static/chimere/css/styles.css | 3 | ||||
-rw-r--r-- | chimere/templates/chimere/detail.html | 31 | ||||
-rw-r--r-- | debian/control | 2 | ||||
-rw-r--r-- | example_project/settings.py.example | 2 |
9 files changed, 403 insertions, 8 deletions
diff --git a/apache/apache-wsgi.conf b/apache/apache-wsgi.conf index 16a893c..9ff7024 100644 --- a/apache/apache-wsgi.conf +++ b/apache/apache-wsgi.conf @@ -4,6 +4,7 @@ WSGIProcessGroup chimere WSGIScriptAlias / /var/local/chimere/chimere/apache/django.wsgi Alias /static "/var/local/chimere/chimere/static" + Alias /admin-media "/usr/lib/python2.7/dist-packages/django/contrib/admin/media/" Alias /tinymce "/usr/share/tinymce/www" <Directory "/usr/share/tinymce/www/"> Options Indexes MultiViews FollowSymLinks diff --git a/chimere/admin.py b/chimere/admin.py index 28f768d..70853d4 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2008-2010 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2008-2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as @@ -25,7 +25,8 @@ from django.conf import settings from django.contrib import admin from chimere.models import Category, Icon, SubCategory, Marker, \ - PropertyModel, News, Route, Area, ColorTheme, Color, RouteFile + PropertyModel, News, Route, Area, ColorTheme, Color, RouteFile,\ + MultimediaType, MultimediaFile, PictureFile from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\ NewsAdminForm, CategoryAdminForm from chimere.widgets import TextareaWidget @@ -129,6 +130,21 @@ class IconAdmin(admin.ModelAdmin): class RouteFileAdmin(admin.ModelAdmin): list_display = ['name', 'file_type'] +class MultimediaTypeAdmin(admin.ModelAdmin): + search_fields = ("name",) + list_display = ('name', 'media_type', 'mime_type', 'available') + list_filter = ('media_type', 'available') + +class MultimediaFileAdmin(admin.ModelAdmin): + search_fields = ("name",) + list_display = ('name', 'multimedia_type', 'order') + list_filter = ('multimedia_type',) + +class PictureFileAdmin(admin.ModelAdmin): + search_fields = ("name",) + list_display = ('name', 'picture', 'miniature', 'order') + list_filter = ('miniature',) + # register of differents database fields admin.site.register(News, NewsAdmin) admin.site.register(Category, CategoryAdmin) @@ -140,3 +156,6 @@ admin.site.register(Route, RouteAdmin) admin.site.register(PropertyModel) admin.site.register(Area, AreaAdmin) admin.site.register(ColorTheme, ColorThemeAdmin) +admin.site.register(MultimediaType, MultimediaTypeAdmin) +admin.site.register(MultimediaFile, MultimediaFileAdmin) +admin.site.register(PictureFile, PictureFileAdmin) diff --git a/chimere/fixtures/initial_data.json b/chimere/fixtures/initial_data.json index b306e58..43664fb 100644 --- a/chimere/fixtures/initial_data.json +++ b/chimere/fixtures/initial_data.json @@ -935,5 +935,85 @@ "email": "etienne@peacefrogs.net", "date_joined": "2012-02-18 19:13:42" } + }, + { + "pk": 7, + "model": "chimere.multimediatype", + "fields": { + "available": true, + "media_type": "V", + "name": "Matroska (mkv)", + "mime_type": "video/x-matroska" + } + }, + { + "pk": 1, + "model": "chimere.multimediatype", + "fields": { + "available": true, + "media_type": "A", + "name": "MP4 (mp4)", + "mime_type": "audio/mp4" + } + }, + { + "pk": 2, + "model": "chimere.multimediatype", + "fields": { + "available": true, + "media_type": "A", + "name": "MP3 (mp3)", + "mime_type": "audio/mpeg" + } + }, + { + "pk": 3, + "model": "chimere.multimediatype", + "fields": { + "available": true, + "media_type": "A", + "name": "Ogg Vorbis (ogg)", + "mime_type": "audio/ogg" + } + }, + { + "pk": 5, + "model": "chimere.multimediatype", + "fields": { + "available": true, + "media_type": "V", + "name": "MP4 (mp4)", + "mime_type": "video/mp4" + } + }, + { + "pk": 4, + "model": "chimere.multimediatype", + "fields": { + "available": true, + "media_type": "V", + "name": "MPEG-1 (mpg, mpeg)", + "mime_type": "video/mpeg" + } + }, + { + "pk": 8, + "model": "chimere.multimediatype", + "fields": { + "available": true, + "media_type": "V", + "name": "AVI - xvid, mp3 (avi)", + "mime_type": "video/msvideo; codecs='xvid,mp3'" + } + }, + { + "pk": 6, + "model": "chimere.multimediatype", + "fields": { + "available": true, + "media_type": "V", + "name": "Ogg Theora (ogg, ogm, ogv)", + "mime_type": "video/ogg" + } } ] diff --git a/chimere/migrations/0006_auto__add_multimediatype__add_field_picturefile_order__del_field_multi.py b/chimere/migrations/0006_auto__add_multimediatype__add_field_picturefile_order__del_field_multi.py new file mode 100644 index 0000000..9e369f7 --- /dev/null +++ b/chimere/migrations/0006_auto__add_multimediatype__add_field_picturefile_order__del_field_multi.py @@ -0,0 +1,226 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding model 'MultimediaType' + db.create_table('chimere_multimediatype', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('media_type', self.gf('django.db.models.fields.CharField')(max_length=1)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=150)), + ('mime_type', self.gf('django.db.models.fields.CharField')(max_length=50)), + ('available', self.gf('django.db.models.fields.BooleanField')(default=True)), + )) + db.send_create_signal('chimere', ['MultimediaType']) + + # Adding field 'PictureFile.order' + db.add_column('chimere_picturefile', 'order', self.gf('django.db.models.fields.IntegerField')(default=1), keep_default=False) + + # Deleting field 'MultimediaFile.file_type' + db.delete_column('chimere_multimediafile', 'file_type') + + # Adding field 'MultimediaFile.iframe' + db.add_column('chimere_multimediafile', 'iframe', self.gf('django.db.models.fields.CharField')(max_length=1000, null=True, blank=True), keep_default=False) + + # Adding field 'MultimediaFile.order' + db.add_column('chimere_multimediafile', 'order', self.gf('django.db.models.fields.IntegerField')(default=1), keep_default=False) + + # Adding field 'MultimediaFile.multimedia_type' + db.add_column('chimere_multimediafile', 'multimedia_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.MultimediaType'], null=True, blank=True), keep_default=False) + + # Changing field 'MultimediaFile.url' + db.alter_column('chimere_multimediafile', 'url', self.gf('django.db.models.fields.CharField')(max_length=200, null=True)) + + # Removing M2M table for field multimedia_files on 'Marker' + db.delete_table('chimere_marker_multimedia_files') + + + def backwards(self, orm): + + # Deleting model 'MultimediaType' + db.delete_table('chimere_multimediatype') + + # Deleting field 'PictureFile.order' + db.delete_column('chimere_picturefile', 'order') + + # User chose to not deal with backwards NULL issues for 'MultimediaFile.file_type' + raise RuntimeError("Cannot reverse this migration. 'MultimediaFile.file_type' and its values cannot be restored.") + + # Deleting field 'MultimediaFile.iframe' + db.delete_column('chimere_multimediafile', 'iframe') + + # Deleting field 'MultimediaFile.order' + db.delete_column('chimere_multimediafile', 'order') + + # Deleting field 'MultimediaFile.multimedia_type' + db.delete_column('chimere_multimediafile', 'multimedia_type_id') + + # User chose to not deal with backwards NULL issues for 'MultimediaFile.url' + raise RuntimeError("Cannot reverse this migration. 'MultimediaFile.url' and its values cannot be restored.") + + # Adding M2M table for field multimedia_files on 'Marker' + db.create_table('chimere_marker_multimedia_files', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('marker', models.ForeignKey(orm['chimere.marker'], null=False)), + ('multimediafile', models.ForeignKey(orm['chimere.multimediafile'], null=False)) + )) + db.create_unique('chimere_marker_multimedia_files', ['marker_id', 'multimediafile_id']) + + + models = { + 'chimere.area': { + 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}), + 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}), + 'urn': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'unique': 'True', 'max_length': '50', 'blank': 'True'}) + }, + 'chimere.category': { + 'Meta': {'ordering': "['order']", 'object_name': 'Category'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.color': { + 'Meta': {'ordering': "['order']", 'object_name': 'Color'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}), + 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.colortheme': { + 'Meta': {'object_name': 'ColorTheme'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) + }, + 'chimere.icon': { + 'Meta': {'object_name': 'Icon'}, + 'height': ('django.db.models.fields.IntegerField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'width': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.marker': { + 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'}, + 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'pictures': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['chimere.PictureFile']", 'null': 'True', 'blank': 'True'}), + 'point': ('chimere.widgets.PointField', [], {}), + 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}), + 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}), + 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'submiter_comment': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), + 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}) + }, + 'chimere.multimediafile': { + 'Meta': {'object_name': 'MultimediaFile'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'iframe': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True', 'blank': 'True'}), + 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']", 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + 'chimere.multimediatype': { + 'Meta': {'object_name': 'MultimediaType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) + }, + 'chimere.news': { + 'Meta': {'object_name': 'News'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'content': ('django.db.models.fields.TextField', [], {}), + 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}) + }, + 'chimere.picturefile': { + 'Meta': {'object_name': 'PictureFile'}, + 'height': ('django.db.models.fields.IntegerField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'width': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.property': { + 'Meta': {'object_name': 'Property'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}), + 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}), + 'value': ('django.db.models.fields.TextField', [], {}) + }, + 'chimere.propertymodel': { + 'Meta': {'ordering': "('order',)", 'object_name': 'PropertyModel'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'}) + }, + 'chimere.route': { + 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Route'}, + 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}), + 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}), + 'route': ('chimere.widgets.RouteField', [], {}), + 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'submiter_comment': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), + 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}), + 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + 'chimere.routefile': { + 'Meta': {'ordering': "('name',)", 'object_name': 'RouteFile'}, + 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}) + }, + 'chimere.subcategory': { + 'Meta': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'}, + 'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'to': "orm['chimere.Area']"}), + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}), + 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}), + 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.tinyurl': { + 'Meta': {'object_name': 'TinyUrl'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'}) + } + } + + complete_apps = ['chimere'] diff --git a/chimere/models.py b/chimere/models.py index f33772c..5282fca 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -30,6 +30,7 @@ from django.contrib.gis.db import models from django.contrib.gis.gdal import SpatialReference from django.contrib import admin from django.core.files import File +from django.core.exceptions import ValidationError from django import forms from django.utils.translation import ugettext_lazy as _ @@ -351,18 +352,54 @@ class Marker(GeographicItem): self.default_category.pk) return settings.BASE_URL + 'ty/' + TinyUrl.getUrnByParameters(parameters) +class MultimediaType(models.Model): + MEDIA_TYPES = (('A', _(u"Audio")), + ('V', _(u"Video")), + ('I', _(u"Image"))) + media_type = models.CharField(_(u"Media type"), max_length=1, + choices=MEDIA_TYPES) + name = models.CharField(_(u"Name"), max_length=150) + mime_type = models.CharField(_(u"Mime type"), max_length=50) + available = models.BooleanField(_(u"Available"), default=True) + + def __unicode__(self): + return self.name + class MultimediaFile(models.Model): name = models.CharField(_(u"Name"), max_length=150, blank=True, null=True) - url = models.CharField(_(u"Url"), max_length=200) - file_type = models.CharField(_(u"File type"), max_length=6) + url = models.CharField(_(u"Url"), max_length=200, blank=True, null=True) + iframe = models.CharField(_(u"Iframe"), max_length=1000, blank=True, + null=True) + order = models.IntegerField(_(u"Order"), default=1) + multimedia_type = models.ForeignKey(MultimediaType, blank=True, + null=True) + + def __unicode__(self): + return self.name + + def clean(self): + if self.url and not self.multimedia_type: + raise ValidationError(_(u"Multimedia type is mandatory if you "\ + u"provide an url.")) + if not self.url and not self.iframe: + raise ValidationError(_(u"You must provide at least provide an "\ + u" url or an iframe.")) + if self.url and self.iframe: + raise ValidationError(_(u"You must provide an url OR an"\ + u"iframe.")) + class PictureFile(models.Model): - miniature = models.BooleanField(u"Miniature") + miniature = models.BooleanField(_(u"Miniature")) name = models.CharField(_(u"Name"), max_length=150, blank=True, null=True) picture = models.ImageField(_(u"Image"), upload_to='upload', height_field='height', width_field='width') height = models.IntegerField(_(u"Height")) width = models.IntegerField(_(u"Width")) + order = models.IntegerField(_(u"Order"), default=1) + + def __unicode__(self): + return self.name class RouteFile(models.Model): name = models.CharField(_(u"Name"), max_length=150) diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css index 744f920..ef13e7d 100644 --- a/chimere/static/chimere/css/styles.css +++ b/chimere/static/chimere/css/styles.css @@ -523,3 +523,6 @@ a#welcome_button{ .simple .cloud img{display:None;} +#gallery{ + display:none; +} diff --git a/chimere/templates/chimere/detail.html b/chimere/templates/chimere/detail.html index d88e88a..3218d63 100644 --- a/chimere/templates/chimere/detail.html +++ b/chimere/templates/chimere/detail.html @@ -11,7 +11,7 @@ <p id='{{property.propertymodel.getNamedId}}'>{{ property.value|sanitize:"p b i br hr strong em span:style a:href:target ul li ol h1 h2 h3 h4"|safe}}</p> {% endfor %} {% if multimedia_files or multimedia_pictures %} - <a href=''>{% trans "Show multimedia gallery" %}</a> + <a href='#' id='show_gallery_link'>{% trans "Show multimedia gallery" %}</a> {% endif %} </div>{% if share_networks %} {% if simple %}{% trans "Share on"%}{% for share_network in share_networks %} @@ -26,5 +26,34 @@ </a> {% endif %} </div> +{% if multimedia_files or multimedia_pictures %} <div id='gallery'> + <ul>{% for multimedia_picture in multimedia_pictures %} + <li><a href="#tab-picture-{% forloop.counter0 %}">{{ multimedia_picture.name }}</a></li>{% endfor %} + {% for multimedia_file in multimedia_files %} + <li><a href="#tab-multi-{% forloop.counter0 %}">{{ multimedia_file.name }}</a></li>{% endfor %} + </ul> + {% for multimedia_picture in multimedia_pictures %} + <div id="tab-picture-{% forloop.counter0 %}"> + <img alt="{{multimedia_picture.name}}" src='{{MEDIA_URL}}{{multimedia_picture}}'/> + </div>{% endfor %} + {% for multimedia_file in multimedia_files %} + <div id="tab-multi-{% forloop.counter0 %}"> + <div class="media-player"> + <span class="media-label">{{multimedia_file.name}}</span> + + <video preload="none" controls="controls"> + <source src="{{multimedia_file.url}}" type="video/mp4" /> + <div class="fallback"> + <div class="fallback-text"> + <p>{% trans "Please use a modern browser or install the non free Flash-Plugin."}</p> + <ul> + <li><a class="source" href="{{multimedia_file.url}}">{{multimedia_file.name}}</a></li> + </ul> + </div> + </div> + </video> + </div> + </div>{% endfor %} </div> +{% endif %} diff --git a/debian/control b/debian/control index e8b57c5..54fb16f 100644 --- a/debian/control +++ b/debian/control @@ -3,6 +3,6 @@ Version: 2.0 Depends: python-django (>=1.3), python-gdal, python-psycopg2, python-beautifulsoup, python-imaging, libjs-jquery, libjs-jquery-ui, libjs-jquery-ui-theme-base, - postgresql-9.1, postgresql-9.1-postgis + postgresql-9.1, postgresql-9.1-postgis, gettext Recommends: tinymce, gpsbabel Suggests: libjs-jquery-ui-theme-south-street diff --git a/example_project/settings.py.example b/example_project/settings.py.example index 3467d54..6cef223 100644 --- a/example_project/settings.py.example +++ b/example_project/settings.py.example @@ -128,7 +128,7 @@ SHARE_NETWORKS = ( # URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a # trailing slash. # Examples: "http://foo.com/media/", "/media/". -ADMIN_MEDIA_PREFIX = '/' + EXTRA_URL + 'media/' +ADMIN_MEDIA_PREFIX = '/' + EXTRA_URL + '/admin-media/' # Make this unique, and don't share it with anybody. SECRET_KEY = 'achanger_!ToChange!' |