diff -r c9dc489913af -r eea45f9b124b integration/js/editor.js --- a/integration/js/editor.js Fri Oct 26 18:54:20 2012 +0200 +++ b/integration/js/editor.js Mon Oct 29 18:02:10 2012 +0100 @@ -7,12 +7,18 @@ url: "data/bpidata.json", serializer: IriSP.serializers.medialist }), + mashup = new IriSP.Model.Mashup(false, project), mediatemplate = '
  • {{title}}' + '{{title}}{{description}}' - + 'Durée : {{duration}}
  • '; + + 'Durée : {{duration}}', + segmenttemplate = '
  • {{media_title}}' + + '{{media_title}}' + + '{{title}}{{begin}} - {{end}} ({{duration}})' + + '
  • '; /* Fill left column with Media List */ - + project.onLoad(function() { var html = ''; project.getMedias().forEach(function(_m) { @@ -47,6 +53,18 @@ }) }); + /* Fill right column when mashup is updated */ + + function fillRightColumn() { + var html = ''; + mashup.segments.forEach(function(_s) { + html += Mustache.to_html(segmenttemplate, _s); + }); + $(".col-right .list-video").html(html); + } + + mashup.on("add-segments",fillRightColumn); + /* Slider */ var timeSlider = $(".Ldt-Slider"), @@ -150,8 +168,13 @@ /* Controller Widget */ var volBlock = $(".Ldt-Ctrl-Volume-Control"); + $('.Ldt-Ctrl-Sound') - .click(function(){}) //TODO: Add Mute and Volume Handlers + .click(function() { + if (currentMedia) { + currentMedia.setMuted(!currentMedia.getMuted()); + } + }) .mouseover(function() { volBlock.show(); }) @@ -165,13 +188,33 @@ }); var volBar = $(".Ldt-Ctrl-Volume-Bar"); + + function ctrlVolumeUpdater() { + if (currentMedia) { + var _muted = currentMedia.getMuted(), + _vol = currentMedia.getVolume(); + if (_vol === false) { + _vol = .5; + } + var _soundCtl = $(".Ldt-Ctrl-Sound"); + _soundCtl.removeClass("Ldt-Ctrl-Sound-Mute Ldt-Ctrl-Sound-Half Ldt-Ctrl-Sound-Full"); + if (_muted) { + _soundCtl.attr("title", "Activer le son") + .addClass("Ldt-Ctrl-Sound-Mute"); + } else { + _soundCtl.attr("title", "Couper le son") + .addClass(_vol < .5 ? "Ldt-Ctrl-Sound-Half" : "Ldt-Ctrl-Sound-Full" ) + } + volBar.slider("value", _muted ? 0 : 100 * _vol); + volBar.attr("title",'Volume : ' + Math.floor(100 * _vol) + '%'); + } + } + volBar.slider({ slide: function(event, ui) { - volBar.attr("title",'Volume : ' + ui.value + '%'); - //_this.media.setVolume(ui.value / 100); - }, - stop: function() { - // IriSP.Widgets.Controller.prototype.volumeUpdater + if (currentMedia) { + currentMedia.setVolume(ui.value / 100); + } } }); @@ -185,54 +228,60 @@ } }); + $(".Ldt-Ctrl-SetIn").click(function() { + if (currentMedia && currentMedia.currentSegment) { + currentMedia.currentSegment.setBegin(currentMedia.getCurrentTime()); + } + }); + $(".Ldt-Ctrl-SetOut").click(function() { + if (currentMedia && currentMedia.currentSegment) { + currentMedia.currentSegment.setEnd(currentMedia.getCurrentTime()); + } + }); + /* Slice Widget */ + var sliceSlider = $(".Ldt-Slice"), sliceStartTime; - - function setTangles(sliderValues) { - //TODO: Move to Annotation.on("changebounds") - if (currentMedia) { - startTime = new IriSP.Model.Time(currentMedia.duration * sliderValues[0] / slidersRange), - endTime = new IriSP.Model.Time(currentMedia.duration * sliderValues[1] / slidersRange), - duration = new IriSP.Model.Time(endTime - startTime); - $(".tangle-start").text(startTime.toString()).attr("data-milliseconds",startTime.milliseconds); - $(".tangle-end").text(endTime.toString()).attr("data-milliseconds",endTime.milliseconds); - $(".tangle-duration").text(duration.toString()).attr("data-milliseconds",duration.milliseconds); - } - } sliceSlider.slider({ range: true, values: [0, slidersRange], min: 0, max: slidersRange, - change: function(event, ui) { - setTangles(ui.values); // Not the right place to put it - }, start: function() { if (currentMedia) { if (!currentMedia.getPaused()) { currentMedia.pause(); } -// sliceStartTime = currentMedia.getCurrentTime(); } }, slide: function(event, ui) { - if (currentMedia) { + if (currentMedia && currentMedia.currentSegment) { var t = currentMedia.duration * ui.value / slidersRange; - currentMedia.setCurrentTime(t); - } - setTangles(ui.values); - }, - stop: function() { - if (currentMedia && sliceStartTime) { -// currentMedia.setCurrentTime(sliceStartTime); + if (ui.value === ui.values[0]) { + currentMedia.currentSegment.setBegin(t); + } else { + currentMedia.currentSegment.setEnd(t); + } } } }); - sliceSlider.find(".ui-slider-handle:first").addClass("Ldt-Slice-left-handle"); - sliceSlider.find(".ui-slider-handle:last").addClass("Ldt-Slice-right-handle"); + sliceSlider.find(".ui-slider-handle:first") + .addClass("Ldt-Slice-left-handle") + .click(function() { + if (currentMedia && currentMedia.currentSegment) { + currentMedia.setCurrentTime(currentMedia.currentSegment.begin); + } + }); + sliceSlider.find(".ui-slider-handle:last") + .addClass("Ldt-Slice-right-handle") + .click(function() { + if (currentMedia && currentMedia.currentSegment) { + currentMedia.setCurrentTime(currentMedia.currentSegment.end); + } + }); /* UI Events */ @@ -256,8 +305,23 @@ } /* Set current Media */ + var currentMedia; + function updateSliderAndTangles() { + if (currentMedia && currentMedia.currentSegment) { + var start = currentMedia.currentSegment.begin, + end = currentMedia.currentSegment.end, + dur = currentMedia.currentSegment.getDuration(), + f = slidersRange / currentMedia.duration; + sliceSlider.slider( "values", [ f * start, f * end ] ); + $(".tangle-start").text(start.toString()).attr("data-milliseconds",start.milliseconds); + $(".tangle-end").text(end.toString()).attr("data-milliseconds",end.milliseconds); + $(".tangle-duration").text(dur.toString()).attr("data-milliseconds",dur.milliseconds); + $(".segment-info .pointer").css("left",(parseFloat($(".Ldt-Slice-left-handle").css("left")) + parseFloat($(".Ldt-Slice-right-handle").css("left")))/2) + } + } + function setMedia(mediaid) { $(".col-left .item-video").removeClass("active"); $(".tutorial").hide(); @@ -275,10 +339,34 @@ currentvideo = $('#video_' + mediaid); } $(".tab-media-title").text(currentMedia.title); - sliceSlider.slider("values",[0, slidersRange]); + if (!currentMedia.currentSegment) { + currentMedia.currentSegment = new IriSP.Model.Annotation(false, project); + currentMedia.currentSegment.setMedia(currentMedia.id); + currentMedia.currentSegment.setBegin(0); + currentMedia.currentSegment.setEnd(currentMedia.duration); + currentMedia.currentSegment.thumbnail = currentMedia.thumbnail; + currentMedia.currentSegment.title = "Segment sans titre"; + currentMedia.currentSegment.description = "Extrait de « " + currentMedia.title + " »"; + currentMedia.currentSegment.on("change-begin", function() { + if (currentMedia && currentMedia.currentSegment === this) { + currentMedia.setCurrentTime(this.begin); + updateSliderAndTangles(); + } + }); + currentMedia.currentSegment.on("change-end", function() { + if (currentMedia && currentMedia.currentSegment === this) { + currentMedia.setCurrentTime(this.end); + updateSliderAndTangles(); + } + }); + } + updateSliderAndTangles(); } currentvideo.show(); $(".Ldt-Ctrl-Time-Total").text(currentMedia.duration.toString()); + $("#segment-title").val(currentMedia.currentSegment.title); + $("#segment-description").text(currentMedia.currentSegment.description); + // TODO: Do something with the tags ! onCurrentMediaTimeupdate(currentMedia.getCurrentTime()); onCurrentMediaPause(); } @@ -392,9 +480,33 @@ if (media === currentMedia) { onCurrentMediaTimeupdate(_time); } + }); + + media.on("volumechange", function() { + if (media === currentMedia) { + ctrlVolumeUpdater(); + } }) } + + /* Segment Form interaction */ + + $("#segment-title").on("keyup change input paste", function() { + if (currentMedia && currentMedia.currentSegment) { + currentMedia.currentSegment.title = $(this).val(); + } + }); + $("#segment-description").on("keyup change input paste", function() { + if (currentMedia && currentMedia.currentSegment) { + currentMedia.currentSegment.title = $(this).val(); + } + }); + $("#segment-form").submit(function() { + mashup.addSegment(currentMedia.currentSegment); + currentMedia.currentSegment = undefined; + }) + /* Click on media items */ $(".col-left").on("click", ".item-video", function() { @@ -437,34 +549,65 @@ disableMoveItemVideo(); }); - /* Tangle */ - var activeTangle, + /* Tangles */ + var tangleMsPerPixel = 100, + activeTangle, tangleStartX, - tangleStartVal; + tangleStartVal, + tangleHasMoved; + $(".time-tangle").mousedown(function(evt) { activeTangle = $(this); activeTangle.addClass("active"); tangleStartVal = +activeTangle.attr("data-milliseconds"); tangleStartX = evt.pageX; + tangleHasMoved = false; + $(this).siblings(".time-tangle").addClass("deactivate"); return false; }); $(document) .mousemove(function(evt) { if (activeTangle) { - var newval = new IriSP.Model.Time(100 * (evt.pageX - tangleStartX) + tangleStartVal); - activeTangle.text(newval.toString()); - activeTangle.attr("data-milliseconds",newval.milliseconds); + tangleHasMoved = true; + var newval = new IriSP.Model.Time(tangleMsPerPixel * (evt.pageX - tangleStartX) + tangleStartVal); activeTangle.trigger("valuechange", newval); return false; } }) .mouseup(function() { if (activeTangle) { - activeTangle.removeClass("active"); + $(".time-tangle").removeClass("active deactivate"); activeTangle = undefined; } + }); + + $(".tangle-start") + .mouseup(function(evt) { + if (!tangleHasMoved && currentMedia && currentMedia.currentSegment) { + currentMedia.setCurrentTime(currentMedia.currentSegment.begin); + } }) - + .on("valuechange", function(evt, val) { + if (currentMedia && currentMedia.currentSegment) { + currentMedia.currentSegment.setBegin(val); + } + }); + $(".tangle-end") + .mouseup(function(evt) { + if (!tangleHasMoved && currentMedia && currentMedia.currentSegment) { + currentMedia.setCurrentTime(currentMedia.currentSegment.end); + } + }) + .on("valuechange", function(evt, val) { + if (currentMedia && currentMedia.currentSegment) { + currentMedia.currentSegment.setEnd(val); + } + }); + $(".tangle-duration").on("valuechange", function(evt, val) { + if (currentMedia && currentMedia.currentSegment) { + currentMedia.currentSegment.setDuration(val); + } + }); } $(function() {