From: Guillaume Pellerin Date: Tue, 16 Sep 2014 12:19:22 +0000 (+0200) Subject: try with Foundation X-Git-Tag: 1.5.0rc1~27^2~96 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=b27ddc2e5dc8c8b701ab434dd3721ff2b9b24324;p=telemeta.git try with Foundation --- diff --git a/setup.py b/setup.py index 9a9e5a10..7bb4762c 100644 --- a/setup.py +++ b/setup.py @@ -40,8 +40,13 @@ setup( 'psutil', 'pyyaml', 'python-ebml', + 'django-extra-views', + 'django-ajax-selects', + 'django-breadcrumbs', ], - dependency_links = ['https://github.com/yomguy/django-json-rpc/tarball/0.6.2',] + dependency_links = ['https://github.com/yomguy/django-json-rpc/tarball/0.6.2', + 'https://github.com/elo80ka/django-dynamic-formset/tarball/master', + ] platforms=['OS Independent'], license='CeCILL v2', classifiers = CLASSIFIERS, diff --git a/telemeta/forms/media.py b/telemeta/forms/media.py index a506f438..60639cfc 100644 --- a/telemeta/forms/media.py +++ b/telemeta/forms/media.py @@ -35,6 +35,9 @@ import django.forms as forms from django.forms import ModelForm from telemeta.models import * +from extra_views import CreateWithInlinesView, UpdateWithInlinesView, InlineFormSet +from extra_views.generic import GenericInlineFormSet + class MediaFondsForm(ModelForm): children = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=MediaCorpus.objects.all()) @@ -42,31 +45,36 @@ class MediaFondsForm(ModelForm): class Meta: model = MediaFonds + class MediaFondsRelatedForm(ModelForm): class Meta: model = MediaFondsRelated + class MediaCorpusForm(ModelForm): children = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=MediaCollection.objects.all()) - class Meta: model = MediaCorpus + class MediaCorpusRelatedForm(ModelForm): class Meta: model = MediaCorpusRelated + class MediaCollectionForm(ModelForm): class Meta: model = MediaCollection def clean_doctype_code(self): return self.cleaned_data['doctype_code'] or 0 + class MediaCollectionRelatedForm(ModelForm): class Meta: model = MediaCollectionRelated + class MediaItemForm(ModelForm): class Meta: model = MediaItem @@ -80,14 +88,17 @@ class MediaItemForm(ModelForm): super(MediaItemForm, self).__init__(*args, **kwargs) self.fields.insert(18, 'comment', self.fields['comment']) + class MediaItemRelatedForm(ModelForm): class Meta: model = MediaItemRelated + class MediaItemKeywordForm(ModelForm): class Meta: model = MediaItemKeyword + class MediaItemPerformanceForm(ModelForm): class Meta: model = MediaItemPerformance @@ -97,7 +108,16 @@ class MediaItemPerformanceForm(ModelForm): self.fields['instrument'].queryset = Instrument.objects.order_by('name') self.fields['alias'].queryset = InstrumentAlias.objects.order_by('name') + class PlaylistForm(ModelForm): class Meta: model = Playlist + +class FondsRelatedInline(InlineFormSet): + model = MediaFondsRelated + + +class CorpusRelatedInline(InlineFormSet): + model = MediaCorpusRelated + diff --git a/telemeta/static/telemeta/css/telemeta.css b/telemeta/static/telemeta/css/telemeta.css index c11e2ac0..26f77425 100644 --- a/telemeta/static/telemeta/css/telemeta.css +++ b/telemeta/static/telemeta/css/telemeta.css @@ -1,15 +1,28 @@ body {margin: 0; padding: 0;} + a {text-decoration: none; color: #969696;} + a img {border: none;} -html, input, select, textarea, h1, h2, h3, h4, h5, h6 { - font-size: 100%; -} + body { - font: 0.8125em/1em Verdana, sans-serif; + font: 0.8125em/1em verdana, sans-serif; line-height: 1.3em; color: #333; background: #FFF; margin: 0em; + text-rendering: optimizeLegibility; +} + +table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; + /*width: auto; + height: auto;*/ } /*a:link, a:visited { @@ -297,7 +310,7 @@ label.disabled { color: #d7d7d7 } /* Quick search */ #quick_search { position: absolute; - top: 1.7em; + top: 1.2em; left: 35%; background-color: #6a0307; padding: 0.3em 0em 0.3em 0.3em; @@ -305,36 +318,29 @@ label.disabled { color: #d7d7d7 } -webkit-border-radius: 8px 8px 8px 8px; border-radius: 8px 8px 8px 8px; } + #quick_search form { float: left; margin-right: 12px; } -#quick_search p { - margin-top: .3em; - clear: left; -} -#quick_search a { - font-size: .8em; - font-weight: bold; - vertical-align: middle; -} #quick_search input { vertical-align: middle; - font-size: .8em; - margin-right: 0; + font-size: .9em; + margin-right: 0.5em; -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; } + #quick_search_pattern { background: #FFF url(search_bg.png) no-repeat; padding: .4em .1em; - padding-left: 25px; width: 180px; color: #555; font-weight: bold; + float: left; } /* Authentication */ @@ -359,15 +365,23 @@ label.disabled { color: #d7d7d7 } font-weight: bold; } + form.login { - font-size: 0.8em; + font-size: 0.9em; float: left; margin-top: 2em; margin-bottom: 4em; - padding: .5em; - border: 1px dotted #888; + border: 0px dotted #888; + padding: 1em; + background-color: #FFF; + -moz-border-radius: 8px 0px 8px 8px; + -webkit-border-radius: 8px 0px 8px 8px; + border-radius: 8px 0px 8px 8px; } +.login-text{ + background-color: white; +} .login-error { color: #BB0000; } @@ -439,7 +453,6 @@ form.login .submit { /* Main navigation bar (borrowed from Trac) */ #menu { background-color: #6a0307 ; - font: normal verdana,'Bitstream Vera Sans',helvetica,arial,sans-serif; border-top: .25em solid #6a0307; padding-left:26px; } @@ -458,7 +471,7 @@ form.login .submit { moz-border-radius-topright: 5px 5px; border-top-right-radius: 5px 5px; font-weight: bold; - font-size: 14px; + font-size: 15px; padding: .5em 1em; } #menu a:hover, #menu a.active{ @@ -566,7 +579,7 @@ color:#FFF; color: #FFF; font-size: 10px; border-top: 1px solid; - height: 31px; + height: 42px; padding: 0.5em 0.5em 1.1em 0.5em; margin-top: 2.5em; } @@ -910,7 +923,12 @@ img.align-left { clear: right; } -#module-set .module { +#module-set-left { + float: left; + clear: left; +} + +.module { border: 1px solid #000; background-image: url(../images/grid_bg.png); padding: 0.2em; @@ -920,29 +938,36 @@ img.align-left { border-radius: 11px 0px 11px 11px; } -#module-set .module h3 { - color: #FFF; +.module h3 { + color: white; font-size: 1.1em; font-weight: bold; } -#module-set .module a:hover { +.module-title { + color: white; + font-size: 1.1em; + font-weight: bold; +} + + +.module a:hover { text-decoration: none; } -#module-set .module div { +.module div { -moz-border-radius: 8px 0px 8px 8px; -webkit-border-radius: 8px 0px 8px 8px; border-radius: 8px 0px 8px 8px; } -#module-set .module img { +.module img { -moz-border-radius: 8px 0px 8px 8px; -webkit-border-radius: 8px 0px 8px 8px; border-radius: 8px 0px 8px 8px; } -#module-set .module ul, li { +.module ul, li { -moz-border-radius: 8px 0px 8px 8px; -webkit-border-radius: 8px 0px 8px 8px; border-radius: 8px 0px 8px 8px; @@ -1123,6 +1148,7 @@ a.image-link { color:#444; text-decoration: none; margin:0; + font: 0.9em/1.2em sans-serif; } .component + .component, .component + .component_icon, .component_icon + .component , .component_icon + .component_icon{ diff --git a/telemeta/templates/telemeta/base.html b/telemeta/templates/telemeta/base.html index f7b6666a..4cbabbd5 100644 --- a/telemeta/templates/telemeta/base.html +++ b/telemeta/templates/telemeta/base.html @@ -7,11 +7,17 @@ + + + + {%block head_title %}{% description %} - Telemeta{% endblock %} {% block stylesheets %} + - + + @@ -24,9 +30,10 @@ {% block javascript %} - + + {% if user.is_authenticated %} {% else %} @@ -72,8 +79,7 @@ @@ -130,14 +136,24 @@ {% block postman_menu %} {% endblock postman_menu %} +{% if breadcrumbs %} + +{% endif %} +

{% block title %}{% endblock %}

{% block title_buttons %}{% endblock %}
-{% block content %}{% endblock %} -
-{% block delete %}{% endblock %} + + {% block content %}{% endblock %} + {% block delete %}{% endblock %} +
{% block body %} @@ -146,29 +162,22 @@ {% block footer %} + {% endblock %} @@ -177,5 +186,9 @@ {% block analytics %} {% endblock analytics %} + + + + diff --git a/telemeta/templates/telemeta/inc/children_list.html b/telemeta/templates/telemeta/inc/children_list.html index 0ebadcba..17fe187e 100644 --- a/telemeta/templates/telemeta/inc/children_list.html +++ b/telemeta/templates/telemeta/inc/children_list.html @@ -15,7 +15,7 @@ {% trans "Title" %} {% trans "Description" %} {% trans "Code" %} - {% trans "Sound" %} + {% trans "Sound" %} {% for child in children %} {% if child.code %} diff --git a/telemeta/templates/telemeta/inc/resource_list.html b/telemeta/templates/telemeta/inc/resource_list.html index f7271c35..935d082e 100644 --- a/telemeta/templates/telemeta/inc/resource_list.html +++ b/telemeta/templates/telemeta/inc/resource_list.html @@ -7,10 +7,10 @@ - + - - + + {% for resource in resources %} diff --git a/telemeta/templates/telemeta/inc/resource_related.html b/telemeta/templates/telemeta/inc/resource_related.html index 4905aedc..730d9139 100644 --- a/telemeta/templates/telemeta/inc/resource_related.html +++ b/telemeta/templates/telemeta/inc/resource_related.html @@ -10,7 +10,7 @@ - + diff --git a/telemeta/templates/telemeta/login.html b/telemeta/templates/telemeta/login.html index 28aa0a53..5291c752 100644 --- a/telemeta/templates/telemeta/login.html +++ b/telemeta/templates/telemeta/login.html @@ -1,10 +1,6 @@ {% extends "telemeta/base.html" %} {% load i18n %} -{% block title %} - {% trans "User authentication" %} -{% endblock %} - {% block content %} + + +
+{{ block.super }} +
 
+
+ + {% trans "User authentication" %} + +
+ +
{% csrf_token %} + {% if form.errors %} {% endif %} -{% csrf_token %} +

+ +

- + + + + -{% trans "Password forgotten" %} ? + +{% trans "Password forgotten" %} ? +

+ +
+
+
 
+
{% endblock %} diff --git a/telemeta/templates/telemeta/resource_detail.html b/telemeta/templates/telemeta/resource_detail.html index a16b1c3c..0040e3cb 100644 --- a/telemeta/templates/telemeta/resource_detail.html +++ b/telemeta/templates/telemeta/resource_detail.html @@ -54,8 +54,8 @@ jQuery(document).ready(function(){ {% block content %} {% block infos %}
-
+
{% block general_info %}
@@ -93,16 +93,17 @@ jQuery(document).ready(function(){ {% endwith %}
- {% endblock infos %} - -{% endblock %} + + {% endblock infos %} + +{% endblock content %} {% block delete %} Dublin Core {% if user.is_authenticated and perms.telemeta.delete_mediaresource %} {% trans "Delete" %} {% endif %} -{% endblock %} +{% endblock delete %} {% else %}

{% trans "No such resource" %}

diff --git a/telemeta/urls.py b/telemeta/urls.py index 363e5c38..b67b9343 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -159,6 +159,7 @@ urlpatterns = patterns('', # Generic resources url(r'^archives/(?P[A-Za-z0-9._-]+)/$', ResourceListView.as_view(), name="telemeta-resource-list"), url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/$', ResourceDetailView.as_view(), name="telemeta-resource-detail"), + url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/edit2/$', ResourceFormSetView.as_view(), name="telemeta-resource-detail2"), url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/dc/$', ResourceDetailDCView.as_view(), name="telemeta-resource-dublincore"), url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/edit/$', ResourceEditView.as_view(), name="telemeta-resource-edit"), url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/copy/$', ResourceCopyView.as_view(), name="telemeta-resource-copy"), @@ -167,12 +168,10 @@ urlpatterns = patterns('', url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/related/(?P[A-Za-z0-9._-]+)/view/$', resource_view.related_stream, name="telemeta-resource-related"), url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/related/(?P[A-Za-z0-9._-]+)/download/$', resource_view.related_download, name="telemeta-resource-related-download"), url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/related_edit/$', resource_view.related_edit, dict(template='telemeta/resource_related_edit.html'), name="telemeta-resource-related_edit"), - url(r'^archives/(?P[A-Za-z0-9._-]+)/(?P[A-Za-z0-9._-]+)/dc/xml/$', resource_view.detail, - {'format': 'dublin_core_xml'}, - name="telemeta-resource-dublincore-xml"), - url(r'^archives/$', home_view.search, name="telemeta-archives"), + # search + # url(r'^archives/$', home_view.search, name="telemeta-archives"), url(r'^search/$', home_view.search, name="telemeta-search"), url(r'^search/collections/$', home_view.search, {'type': 'collections'}, name="telemeta-search-collections"), diff --git a/telemeta/views/core.py b/telemeta/views/core.py index c86cf177..89954036 100644 --- a/telemeta/views/core.py +++ b/telemeta/views/core.py @@ -223,6 +223,18 @@ def get_playlists(request, user=None): playlists.append({'playlist': playlist, 'resources': resources}) return playlists + +def get_playlists_names(request, user=None): + if not user: + user = request.user + playlists = [] + if user.is_authenticated(): + user_playlists = user.playlists.all() + for playlist in user_playlists: + playlists.append({'playlist': playlist}) + return playlists + + def check_related_media(medias): for media in medias: if not media.mime_type: diff --git a/telemeta/views/home.py b/telemeta/views/home.py index f0d365bd..b8b6a1d7 100644 --- a/telemeta/views/home.py +++ b/telemeta/views/home.py @@ -37,6 +37,7 @@ from telemeta.views.core import * + class HomeView(object): """Provide general web UI methods""" diff --git a/telemeta/views/item.py b/telemeta/views/item.py index 0d29d2fe..ccbbb449 100644 --- a/telemeta/views/item.py +++ b/telemeta/views/item.py @@ -144,7 +144,7 @@ class ItemView(ItemBaseMixin): if 'quicktime' in mime_type: mime_type = 'video/mp4' - playlists = get_playlists(request) + playlists = get_playlists_names(request) related_media = MediaItemRelated.objects.filter(item=item) check_related_media(related_media) revisions = Revision.objects.filter(element_type='item', element_id=item.id).order_by('-time') @@ -632,4 +632,3 @@ class ItemPublishedListView(ItemListView): class ItemSoundListView(ItemListView): queryset = MediaItem.objects.sound().order_by('code', 'old_code') - diff --git a/telemeta/views/resource.py b/telemeta/views/resource.py index 00c05eaa..f4b58399 100644 --- a/telemeta/views/resource.py +++ b/telemeta/views/resource.py @@ -90,8 +90,6 @@ class ResourceView(object): 'related_media': related_media, 'parents': parents, 'playlists': playlists, 'last_revision': last_revision }) - @jsonrpc_method('telemeta.change_fonds') - @jsonrpc_method('telemeta.change_corpus') def edit(self, request, type, public_id, template='telemeta/resource_edit.html'): self.setup(type) resource = self.model.objects.get(code=public_id) @@ -108,8 +106,6 @@ class ResourceView(object): form = self.form(instance=resource) return render(request, template, {'resource': resource, 'type': type, 'form': form,}) - @jsonrpc_method('telemeta.add_fonds') - @jsonrpc_method('telemeta.add_corpus') def add(self, request, type, template='telemeta/resource_add.html'): self.setup(type) resource = self.model() @@ -126,8 +122,6 @@ class ResourceView(object): form = self.form(instance=resource) return render(request, template, {'resource': resource, 'type': type, 'form': form,}) - @jsonrpc_method('telemeta.add_fonds') - @jsonrpc_method('telemeta.add_corpus') def copy(self, request, type, public_id, template='telemeta/resource_edit.html'): self.setup(type) if request.method == 'POST': @@ -156,8 +150,6 @@ class ResourceView(object): context = RequestContext(request, {'resource': resource, 'host': request.META['HTTP_HOST']}) return HttpResponse(template.render(context), mimetype=mimetype) - @jsonrpc_method('telemeta.del_fonds') - @jsonrpc_method('telemeta.del_corpus') def delete(self, request, type, public_id): self.setup(type) resource = self.model.objects.get(code=public_id) @@ -205,6 +197,7 @@ class ResourceMixin(View): 'related': MediaCorpusRelated, 'related_form': MediaCorpusRelatedForm, 'parent': MediaFonds, + 'inlines': [CorpusRelatedInline,] }, 'fonds': {'model': MediaFonds, @@ -212,15 +205,18 @@ class ResourceMixin(View): 'related': MediaFondsRelated, 'related_form': MediaFondsRelatedForm, 'parent': None, + 'inlines': [FondsRelatedInline,] } } def setup(self, type): self.model = self.types[type]['model'] self.form = self.types[type]['form'] + self.form_class = self.types[type]['form'] self.related = self.types[type]['related'] self.related_form = self.types[type]['related_form'] self.parent = self.types[type]['parent'] + self.inlines = self.types[type]['inlines'] self.type = type def get_object(self): @@ -238,6 +234,11 @@ class ResourceMixin(View): class ResourceSingleMixin(ResourceMixin): + def get_queryset(self): + self.type = self.kwargs['type'] + self.setup(self.type) + return self + def get_object(self): # super(CorpusDetailView, self).get_object() self.type = self.kwargs['type'] @@ -250,7 +251,7 @@ class ResourceSingleMixin(ResourceMixin): resource = self.get_object() related_media = self.related.objects.filter(resource=resource) check_related_media(related_media) - playlists = get_playlists(self.request) + playlists = get_playlists_names(self.request) revisions = Revision.objects.filter(element_type=self.type, element_id=self.pk).order_by('-time') context['resource'] = resource context['type'] = self.type @@ -338,3 +339,11 @@ class ResourceDeleteView(ResourceSingleMixin, DeleteView): def get_success_url(self): return reverse_lazy('telemeta-resource-list', kwargs={'type':self.kwargs['type']}) + + +class ResourceFormSetView(ResourceSingleMixin, UpdateWithInlinesView): + + template_name = 'telemeta/resource_edit2.html' + + def get_success_url(self): + return reverse_lazy('telemeta-resource-detail', kwargs={'type':self.kwargs['type'], 'public_id':self.kwargs['public_id']}) diff --git a/tools/dev/make_doc.sh b/tools/dev/make_doc.sh index ea65a982..08eaf737 100755 --- a/tools/dev/make_doc.sh +++ b/tools/dev/make_doc.sh @@ -5,6 +5,6 @@ app="telemeta" dir=/home/$USER/dev/$app/doc/ server="angus.parisson.com" -epydoc -n $app -u https://github.com/yomguy/DeeFuzzer -o $dir $app/ -rsync -a --delete $dir $server:/var/www/files/doc/$app/ +epydoc -n $app -u https://github.com/yomguy/Telemeta -o $dir $app/ +rsync -a $dir $server:/var/www/files/doc/$app/
{% trans "Title" %}{% trans "Title" %} {% trans "Description" %}{% trans "Code" %}{% trans "Sound" %}{% trans "Code" %}{% trans "Sound" %}
{% trans "Media" %}{% trans "Preview" %}{% trans "Preview" %}