# HG changeset patch # User Anthony Ly # Date 1369150891 -7200 # Node ID 11a3be0689fc34ad70680183c3fb1791a48b0a74 # Parent 2a3159ee4ed02d70923a91993662c6e8660a2d5f# Parent 64a77e529f23d57839c325e97df15481c6ab9b21 Merge diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/forms.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/metadatacomposer/forms.py Tue May 21 17:41:31 2013 +0200 @@ -0,0 +1,9 @@ +# forms.py +from django import forms +from metadatacomposer.models import Image + +class ImageUploadModelForm(forms.ModelForm): + + class Meta: + model = Image + fields = ['image_file', 'title', 'description'] \ No newline at end of file diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/migrations/0001_initial.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/metadatacomposer/migrations/0001_initial.py Tue May 21 17:41:31 2013 +0200 @@ -0,0 +1,44 @@ +# -*- coding: 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 'Image' + db.create_table('metadatacomposer_image', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('image_file', self.gf('django.db.models.fields.files.ImageField')(max_length=2048)), + ('width', self.gf('django.db.models.fields.IntegerField')()), + ('height', self.gf('django.db.models.fields.IntegerField')()), + ('title', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)), + ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('creation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('modification_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal('metadatacomposer', ['Image']) + + + def backwards(self, orm): + # Deleting model 'Image' + db.delete_table('metadatacomposer_image') + + + models = { + 'metadatacomposer.image': { + 'Meta': {'object_name': 'Image'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'height': ('django.db.models.fields.IntegerField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image_file': ('django.db.models.fields.files.ImageField', [], {'max_length': '2048'}), + 'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'width': ('django.db.models.fields.IntegerField', [], {}) + } + } + + complete_apps = ['metadatacomposer'] \ No newline at end of file diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/migrations/__init__.py diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/models.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/metadatacomposer/models.py Tue May 21 17:41:31 2013 +0200 @@ -0,0 +1,24 @@ +from django.db import models +import os +import time + + +def image_file_name(instance, filename): + now = time.time() + milliseconds = '%03d' % int((now - int(now)) * 1000) + localtime = time.localtime() + _, ext = os.path.splitext(filename) + filename = time.strftime('%Y%m%d%H%M%S', localtime) + milliseconds + return 'metadatacomposer/images/' + filename + ext + + +class Image(models.Model): + + image_file = models.ImageField(width_field="width", height_field="height", upload_to=image_file_name, max_length=2048) + width = models.IntegerField(null=False, blank=False) + height = models.IntegerField(null=False, blank=False) + title = models.CharField(null=True, blank=True, max_length=1024) + description = models.TextField(null=True, blank=True) + creation_date = models.DateTimeField(auto_now_add=True) + modification_date = models.DateTimeField(auto_now=True) + \ No newline at end of file diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/static/metadatacomposer/js/edition.js --- a/src/metadatacomposer/static/metadatacomposer/js/edition.js Tue May 21 17:41:10 2013 +0200 +++ b/src/metadatacomposer/static/metadatacomposer/js/edition.js Tue May 21 17:41:31 2013 +0200 @@ -3,7 +3,46 @@ var global = { diaporama : null, idAnnotation : null -}; +}, +chapitres = [], +annotations = []; + +myProject.onLoad(function() { + + $(".project-title").text(myProject.title); + + myMedia = myProject.getCurrentMedia(); + + IriSP.htmlPlayer( + myMedia, + $(".main-video"), + { + width: 460, + height: 345, + controls: true, + autostart: true + } + ); + + myMedia.on("timeupdate", function(t) { + + //curseur chapitre + var pos = $(".chapitre-cut-wrap").width() * t / myMedia.duration, + wContainer = $('.chapitre-cut-wrap').width(), + btnCutChapter = $('.btn-cut-chapter'), + wBtnCutChapter = btnCutChapter.outerWidth(); + + $(".indicateur-chapter").css("left",pos); + if(pos+wBtnCutChapter>wContainer){ + btnCutChapter.css("left",(pos - wBtnCutChapter)); + }else{ + btnCutChapter.css("left",pos); + } + + });//timeupdate + +});//myProject.onLoad + //modal $(document).on('click', 'a.open-modal', function(e){ @@ -91,7 +130,7 @@ $('.project-title').html($(this).val()); }); -//chapter +//--chapter $('.list-chapter-wrap').on('click', '.edit-chapter', function(e){ e.preventDefault(); var viewChapter = { @@ -109,6 +148,7 @@ //nouveau chapitre $('.chapter-widget').on('click', '.btn-cut-chapter', function(e){ e.preventDefault(); + var uniqId = 'id' + (new Date()).getTime(); $.get('template.html', function(templates){ var viewChapterRow = { @@ -120,6 +160,9 @@ }); }); + function addChapter(data){ + + } //edit annotation $('#list-annotations').on('click', 'a.btn-edit-annotation', function(e){ @@ -261,11 +304,7 @@ }); //annotation > diaporama (spin) -var spinParam = { - imageBasePath :'lib/spin/img/', - max:60, - min:0 -}; + //config //CLEditor annotation > text (wysiwyg) @@ -371,4 +410,4 @@ $('#annotation-tab a:last-child').tab('show'); -}); \ No newline at end of file +});//ready \ No newline at end of file diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/static/metadatacomposer/js/projet.js --- a/src/metadatacomposer/static/metadatacomposer/js/projet.js Tue May 21 17:41:10 2013 +0200 +++ b/src/metadatacomposer/static/metadatacomposer/js/projet.js Tue May 21 17:41:31 2013 +0200 @@ -6,7 +6,7 @@ //ZeroClipboard (fonctionne sous localhost) var clip = new ZeroClipboard( $('.clipboard'), { - moviePath: "lib/ZeroClipboard/ZeroClipboard.swf" + moviePath: ZeroClipboardMoviePath }); clip.on( 'complete', function(client, args) { alert("Copied text to clipboard: " + args.text ); diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/templates/metadatacomposer_home.html --- a/src/metadatacomposer/templates/metadatacomposer_home.html Tue May 21 17:41:10 2013 +0200 +++ b/src/metadatacomposer/templates/metadatacomposer_home.html Tue May 21 17:41:31 2013 +0200 @@ -46,7 +46,7 @@
-

Derniers projets

+

Derniers projets

@@ -64,30 +64,12 @@
diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/templates/metadatacomposer_modal_image.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/metadatacomposer/templates/metadatacomposer_modal_image.html Tue May 21 17:41:31 2013 +0200 @@ -0,0 +1,62 @@ +{% load static %} +
+ + +
\ No newline at end of file diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/templates/metadatacomposer_modal_video.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/metadatacomposer/templates/metadatacomposer_modal_video.html Tue May 21 17:41:31 2013 +0200 @@ -0,0 +1,53 @@ +{% load static %} +
+ + +
+ \ No newline at end of file diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/templates/metadatacomposer_project_list.html --- a/src/metadatacomposer/templates/metadatacomposer_project_list.html Tue May 21 17:41:10 2013 +0200 +++ b/src/metadatacomposer/templates/metadatacomposer_project_list.html Tue May 21 17:41:31 2013 +0200 @@ -87,4 +87,7 @@ {% block js_page %} + {% endblock %} diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/templates/metadatacomposer_resource_list.html --- a/src/metadatacomposer/templates/metadatacomposer_resource_list.html Tue May 21 17:41:10 2013 +0200 +++ b/src/metadatacomposer/templates/metadatacomposer_resource_list.html Tue May 21 17:41:31 2013 +0200 @@ -19,7 +19,7 @@

Liste des images

@@ -48,7 +48,7 @@ 14/03/2014 - + @@ -66,7 +66,7 @@ 14/03/2014 - + @@ -92,7 +92,7 @@

Liste des vidéos

diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/templates/partial/resource_content_list.html --- a/src/metadatacomposer/templates/partial/resource_content_list.html Tue May 21 17:41:10 2013 +0200 +++ b/src/metadatacomposer/templates/partial/resource_content_list.html Tue May 21 17:41:31 2013 +0200 @@ -26,7 +26,7 @@ {{ res.content.update_date|date:"Y/m/d" }} - + diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/urls.py --- a/src/metadatacomposer/urls.py Tue May 21 17:41:10 2013 +0200 +++ b/src/metadatacomposer/urls.py Tue May 21 17:41:31 2013 +0200 @@ -1,12 +1,15 @@ from django.conf.urls.defaults import patterns, url from metadatacomposer.views import MetadataComposerHome, MetadataComposerProjectList,\ - MetadataComposerResourceList, MetadataComposerContentPagination + MetadataComposerResourceList, MetadataComposerContentPagination,\ + MetadataComposerModalVideo, MetadataComposerModalImage urlpatterns = patterns('', url(r'^jsi18n/(?P\S+?)/$', 'django.views.i18n.javascript_catalog', name='jsi18n'), url(r'^(?P.*)/projectlist/$', MetadataComposerProjectList.as_view(), name="composer_project_list"), url(r'^(?P.*)/resourcelist/$', MetadataComposerResourceList.as_view(), name="composer_resource_list"), url(r'^(?P.*)/contentpage/$', MetadataComposerContentPagination.as_view(), name="composer_content_page"), + url(r'^(?P.*)/modalvideo/$', MetadataComposerModalVideo.as_view(), name="composer_modal_video"), + url(r'^(?P.*)/modalimage/$', MetadataComposerModalImage.as_view(), name="composer_modal_image"), url(r'^(?P.*)/$', MetadataComposerHome.as_view(), name="composer_home"), url(r'^$', MetadataComposerHome.as_view(), name="composer_home"), ) diff -r 2a3159ee4ed0 -r 11a3be0689fc src/metadatacomposer/views.py --- a/src/metadatacomposer/views.py Tue May 21 17:41:10 2013 +0200 +++ b/src/metadatacomposer/views.py Tue May 21 17:41:31 2013 +0200 @@ -1,13 +1,13 @@ from django.conf import settings -from django.contrib.auth.models import User from django.contrib.auth.decorators import login_required -from django.core.exceptions import ObjectDoesNotExist from django.core.paginator import Paginator, InvalidPage, EmptyPage -from django.http import HttpResponseNotFound, HttpResponse from django.shortcuts import redirect from django.utils.decorators import method_decorator from django.views.generic.base import View, TemplateResponseMixin +from django.views.generic.edit import FormView from ldt.ldt_utils.models import Project, Content +from metadatacomposer.forms import ImageUploadModelForm +from metadatacomposer.models import Image import logging #@UnresolvedImport @@ -39,10 +39,12 @@ self.branding = branding projects = Project.safe_objects.filter(owner=request.user).order_by('-modification_date')[:6] + images = Image.objects.order_by('-modification_date')[:6] + logger.debug(images) contents = Content.safe_objects.order_by('-update_date')[:6] context = self.get_context_dict(request) - context.update({"projects":projects, "contents": contents}) + context.update({"projects":projects, "images": images, "contents": contents}) return self.render_to_response(context) @@ -143,4 +145,63 @@ results.object_list = results_object_list return results - \ No newline at end of file + + + +class MetadataComposerModalVideo(TemplateResponseMixin, MetadataComposerContextView): + + def get_template_names(self): + return "metadatacomposer_modal_video.html" + + @method_decorator(login_required) + def dispatch(self, *args, **kwargs): + return super(MetadataComposerModalVideo, self).dispatch(*args, **kwargs) + + def get(self, request, branding="iri", **kwargs): + self.branding = branding + context = self.get_context_dict(request) + return self.render_to_response(context) + + + +class MetadataComposerModalImage(TemplateResponseMixin, MetadataComposerContextView): + + def get_template_names(self): + return "metadatacomposer_modal_image.html" + + @method_decorator(login_required) + def dispatch(self, *args, **kwargs): + return super(MetadataComposerModalImage, self).dispatch(*args, **kwargs) + + def get(self, request, branding="iri", **kwargs): + self.branding = branding + + # Add form + form = ImageUploadModelForm() + + context = self.get_context_dict(request) + context.update({"form":form}) + return self.render_to_response(context) + + def post(self, request, branding="iri", **kwargs): + self.branding = branding + + # Check form + form = ImageUploadModelForm(request.POST, request.FILES) + logger.debug("COUCOU 1") + logger.debug(form) + logger.debug(form.is_valid()) + if form.is_valid(): + logger.debug("COUCOU 2") + # If an image id was in the form, we update the existing image + if 'image_pk' in request.POST: + form = ImageUploadModelForm(request.POST, request.FILES, instance=Image.objects.get(pk=request.POST['image_pk'])) + form.save() + else: + logger.debug("COUCOU 3") + context = self.get_context_dict(request) + context.update({"form":form}) + return redirect(request.META['HTTP_REFERER']) + + +