| author | veltr |
| Thu, 08 Nov 2012 18:24:47 +0100 | |
| changeset 41 | 3ec2343f2b85 |
| parent 39 | d3d8a88878ed |
| child 42 | 40909e8d6855 |
| permissions | -rw-r--r-- |
| 32 | 1 |
|
2 |
IriSP.hc_messages = { |
|
| 39 | 3 |
Duration_ : "Durée :", |
4 |
duration_ : "durée :", |
|
| 32 | 5 |
edit_segment: "Éditer le segment", |
6 |
segment_down: "Descendre le segment", |
|
7 |
segment_up: "Remonter le segment", |
|
| 39 | 8 |
delete_segment: "Supprimer le segment", |
9 |
clone_segment: "Cloner le segment", |
|
10 |
From_: "De :", |
|
11 |
to_: "à :", |
|
12 |
segment_title_placeholder: "Segment sans titre", |
|
13 |
mashup_title_placeholder: "Hashcut sans titre" |
|
| 32 | 14 |
} |
15 |
||
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
16 |
IriSP.editor = function(options) { |
| 32 | 17 |
|
| 22 | 18 |
/* Load Media List */ |
19 |
|
|
20 |
var directory = new IriSP.Model.Directory(), |
|
21 |
project = directory.remoteSource({ |
|
| 27 | 22 |
url: options.url, |
| 22 | 23 |
serializer: IriSP.serializers.medialist |
24 |
}), |
|
| 25 | 25 |
mashup = new IriSP.Model.Mashup(false, project), |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
26 |
mediatemplate = _.template('<li class="item-video media" data-media-id="<%= id %>"><img src="<%= thumbnail %>" alt="<%= title %>" />' |
| 27 | 27 |
+ '<span class="video-info"><span class="title-video"><%= title %></span><span class="author"><%= description %></span>' |
| 39 | 28 |
+ '<span class="time-length"><%= IriSP.hc_messages.Duration_ %> <span><%= duration.toString() %></span></span></span></li>'), |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
29 |
segmenttemplate = _.template('<li class="item-video annotation" data-segment-id="<%= annotation.id %>" data-media-id="<%= annotation.getMedia().id %>">' |
| 27 | 30 |
+ '<img src="<%= annotation.getMedia().thumbnail %>" alt="<%= annotation.getMedia().title %>" />' |
| 39 | 31 |
+ '<div class="validate <%= annotation.status %>"><div class="validate-tooltip"><ul><li><%= annotation.status_messages.join("</li><li>") %></li></ul></div></div><span class="video-info"><span class="title-video"><%= annotation.getMedia().title %></span>' |
| 27 | 32 |
+ '<span class="subtitle"><%= annotation.title %></span><span class="duration"><%= annotation.begin.toString() %> - <%= annotation.end.toString() %> (<%= annotation.getDuration().toString() %>)</span>' |
| 32 | 33 |
+ '<ul class="tools"><li><a class="edit" href="#" title="<%= IriSP.hc_messages.edit_segment %>"></a></li><li><a class="bottom" href="#" title="<%= IriSP.hc_messages.segment_down %>"></a></li>' |
34 |
+ '<li><a class="top" href="#" title="<%= IriSP.hc_messages.segment_up %>"></a></li><li><a class="delete" href="#" title="<%= IriSP.hc_messages.delete_segment %>"></a></li></ul></span></li>'), |
|
| 29 | 35 |
mediasegmenttemplate = _.template('<div class="media-segments-list"><div class="media-segment">' |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
36 |
+ '<div class="media-section media-segment-section" style="left:<%= left %>px; width:<%= width %>px; background:<%= annotation.color %>"></div>' |
| 29 | 37 |
+ '<div class="media-section media-current-section" style="left:<%= currentleft %>px; width:<%= currentwidth %>px;"><div class="media-current-section-inner"></div></div>' |
38 |
+ '<div class="popin media-segment-popin" style="left:<%= popleft %>px"><img style="left:<%= pointerpos %>px;" class="pointer" src="img/popin-triangle.png" alt="" /><div class="popin-content">' |
|
| 39 | 39 |
+ '<h3><%= annotation.title %></h3><a href="#" class="button reprendre-segment" data-segment-id="<%= annotation.id %>"><%= IriSP.hc_messages.clone_segment %></a>' |
40 |
+ '<p><%= IriSP.hc_messages.From_ %> <span><%= annotation.begin.toString() %></span> <%= IriSP.hc_messages.to_ %> <span><%= annotation.end.toString() %></span> (<%= IriSP.hc_messages.duration_ %> <span><%= annotation.getDuration().toString() %></span>)</p>' |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
41 |
+ '</div></div></div></div>'), |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
42 |
addMode, currentMedia, currentSegment; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
43 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
44 |
IriSP.mashupcore(project, mashup); |
| 39 | 45 |
|
46 |
/* Validation of segments and mashup */ |
|
47 |
|
|
48 |
var segmentcritical = [ |
|
49 |
{ |
|
50 |
validate: function(_s) { |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
51 |
return (_s.getDuration() >= 1000); |
| 39 | 52 |
}, |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
53 |
message: "Le segment doit durer au moins une seconde" |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
54 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
55 |
{ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
56 |
validate: function(_s) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
57 |
return (_s.getDuration() < 180000); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
58 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
59 |
message: "Le segment doit durer moins de trois minutes" |
| 39 | 60 |
}, |
61 |
{ |
|
62 |
validate: function(_s) { |
|
63 |
return (!!_s.title && _s.title !== IriSP.hc_messages.segment_title_placeholder); |
|
64 |
}, |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
65 |
message: "Le segment doit avoir un titre" |
| 39 | 66 |
} |
67 |
]; |
|
68 |
var segmentwarning = [ |
|
69 |
{ |
|
70 |
validate: function(_s) { |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
71 |
return (!!_s.description); |
| 39 | 72 |
}, |
73 |
message: "Il est recommandé de donner une description au segment" |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
74 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
75 |
{ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
76 |
validate: function(_s) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
77 |
return (!!_s.keywords.length); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
78 |
}, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
79 |
message: "Il est recommandé de tagguer le segment" |
| 39 | 80 |
} |
81 |
]; |
|
82 |
|
|
83 |
var mashupcritical = [ |
|
84 |
{ |
|
85 |
validate: function(_m) { |
|
86 |
return _m.segments.length > 2; |
|
87 |
}, |
|
88 |
message: "Un hashcut doit être composé d'au moins trois segments" |
|
89 |
}, |
|
90 |
{ |
|
91 |
validate: function(_m) { |
|
92 |
return (!!_m.title && _m.title !== IriSP.hc_messages.mashup_title_placeholder); |
|
93 |
}, |
|
94 |
message: "Un titre doit être donné au hashcut" |
|
95 |
} |
|
96 |
]; |
|
97 |
var mashupwarning = [ |
|
98 |
{ |
|
99 |
validate: function(_m) { |
|
100 |
return !!_m.description |
|
101 |
}, |
|
102 |
message: "Il est recommandé de donner une description au hashcut" |
|
103 |
} |
|
104 |
]; |
|
| 22 | 105 |
|
106 |
/* Fill left column with Media List */ |
|
| 25 | 107 |
|
| 22 | 108 |
project.onLoad(function() { |
109 |
var html = ''; |
|
110 |
project.getMedias().forEach(function(_m) { |
|
| 27 | 111 |
html += mediatemplate(_m); |
| 13 | 112 |
}); |
| 22 | 113 |
$(".col-left .list-video").html(html); |
114 |
}); |
|
115 |
|
|
116 |
/* Search Media with left column form */ |
|
117 |
|
|
118 |
$(".col-left input").on("keyup change input paste", function() { |
|
119 |
var val = $(this).val(); |
|
120 |
if (val) { |
|
121 |
var find = IriSP.Model.regexpFromTextOrArray(val, true), |
|
122 |
replace = IriSP.Model.regexpFromTextOrArray(val, false); |
|
123 |
} |
|
124 |
$(".col-left .item-video").each(function() { |
|
125 |
var li = $(this), |
|
126 |
title = $(this).find(".title-video"), |
|
127 |
titletext = title.text(); |
|
128 |
if (val && find.test(titletext)) { |
|
129 |
title.html(titletext.replace(replace, '<span style="background: yellow;">$1</span>')); |
|
130 |
li.show(); |
|
131 |
} else { |
|
132 |
title.text(titletext); |
|
133 |
if (val) { |
|
134 |
li.hide(); |
|
| 13 | 135 |
} else { |
| 22 | 136 |
li.show(); |
| 13 | 137 |
} |
| 22 | 138 |
} |
139 |
}) |
|
140 |
}); |
|
141 |
|
|
| 25 | 142 |
/* Fill right column when mashup is updated */ |
143 |
|
|
| 27 | 144 |
function updateMashupUI() { |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
145 |
var listhtml = '', critical = false, warning = false, messages = []; |
| 27 | 146 |
mashup.segments.forEach(function(_s) { |
147 |
listhtml += segmenttemplate(_s); |
|
| 39 | 148 |
if (_s.annotation.status === "critical") { |
149 |
critical = true; |
|
150 |
} |
|
| 27 | 151 |
}); |
| 39 | 152 |
if (critical) { |
153 |
messages.push("Certains segments ne sont pas valides"); |
|
154 |
} |
|
155 |
|
|
156 |
_(mashupcritical).each(function(sc) { |
|
157 |
if (!sc.validate(mashup)) { |
|
158 |
critical = true; |
|
159 |
messages.push(sc.message); |
|
160 |
} |
|
161 |
}); |
|
162 |
_(mashupwarning).each(function(sc) { |
|
163 |
if (!sc.validate(mashup)) { |
|
164 |
warning = true; |
|
165 |
messages.push(sc.message); |
|
166 |
} |
|
167 |
}); |
|
168 |
mashup.status = critical ? "critical" : (warning ? "warning" : "valid"); |
|
169 |
if (!messages.length) { |
|
170 |
messages.push("Le hashcut est valide !"); |
|
171 |
} |
|
172 |
$(".publier-button").toggleClass("disable", critical); |
|
173 |
|
|
174 |
$(".liste-segment .validate").removeClass("critical warning valid").addClass(mashup.status); |
|
175 |
$(".liste-segment .validate-tooltip").html("<ul><li>" + messages.join("</li><li>")+"</li></ul>"); |
|
| 27 | 176 |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
177 |
$(".col-right .list-video").html(listhtml).find(".item-video:last-child .bottom, .item-video:first-child .top").addClass("disable"); |
| 27 | 178 |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
179 |
project.trigger("mouseout-annotation"); |
| 22 | 180 |
} |
181 |
|
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
182 |
mashup.on("setcurrent", function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
183 |
currentMedia = mashup; |
| 22 | 184 |
}); |
185 |
|
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
186 |
mashup.on("change",updateMashupUI); |
| 25 | 187 |
|
| 23 | 188 |
/* Slice Widget */ |
| 25 | 189 |
|
| 23 | 190 |
var sliceSlider = $(".Ldt-Slice"), |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
191 |
sliceStartTime, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
192 |
slidersRange = 920; |
| 23 | 193 |
|
194 |
sliceSlider.slider({ |
|
195 |
range: true, |
|
196 |
values: [0, slidersRange], |
|
197 |
min: 0, |
|
198 |
max: slidersRange, |
|
199 |
start: function() { |
|
200 |
if (currentMedia) { |
|
201 |
if (!currentMedia.getPaused()) { |
|
202 |
currentMedia.pause(); |
|
203 |
} |
|
204 |
} |
|
205 |
}, |
|
206 |
slide: function(event, ui) { |
|
| 27 | 207 |
if (currentMedia && currentSegment) { |
| 23 | 208 |
var t = currentMedia.duration * ui.value / slidersRange; |
| 25 | 209 |
if (ui.value === ui.values[0]) { |
| 27 | 210 |
currentSegment.setBegin(t); |
| 25 | 211 |
} else { |
| 27 | 212 |
currentSegment.setEnd(t); |
| 25 | 213 |
} |
| 23 | 214 |
} |
215 |
} |
|
216 |
}); |
|
217 |
|
|
| 25 | 218 |
sliceSlider.find(".ui-slider-handle:first") |
219 |
.addClass("Ldt-Slice-left-handle") |
|
220 |
.click(function() { |
|
| 27 | 221 |
if (currentMedia && currentSegment) { |
222 |
currentMedia.setCurrentTime(currentSegment.begin); |
|
| 25 | 223 |
} |
224 |
}); |
|
225 |
sliceSlider.find(".ui-slider-handle:last") |
|
226 |
.addClass("Ldt-Slice-right-handle") |
|
227 |
.click(function() { |
|
| 27 | 228 |
if (currentMedia && currentSegment) { |
229 |
currentMedia.setCurrentTime(currentSegment.end); |
|
| 25 | 230 |
} |
231 |
}); |
|
| 23 | 232 |
|
233 |
|
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
234 |
/* Update Segment UI */ |
| 22 | 235 |
|
| 39 | 236 |
function updateSegmentUI() { |
| 27 | 237 |
if (currentMedia && currentSegment) { |
238 |
var start = currentSegment.begin, |
|
239 |
end = currentSegment.end, |
|
240 |
dur = currentSegment.getDuration(), |
|
241 |
f = slidersRange / currentMedia.duration, |
|
242 |
tangleStart = $(".tangle-start"), |
|
243 |
tangleEnd = $(".tangle-end"), |
|
| 29 | 244 |
tangleDuration = $(".tangle-duration"), |
245 |
k = 100 / currentMedia.duration, |
|
246 |
p = k * (start + end) / 2; |
|
| 25 | 247 |
sliceSlider.slider( "values", [ f * start, f * end ] ); |
| 27 | 248 |
tangleStart.text(start.toString(tangleStart.hasClass("active"))).attr("data-milliseconds",start.milliseconds); |
249 |
tangleEnd.text(end.toString(tangleEnd.hasClass("active"))).attr("data-milliseconds",end.milliseconds); |
|
250 |
tangleDuration.text(dur.toString(tangleDuration.hasClass("active"))).attr("data-milliseconds",dur.milliseconds); |
|
| 39 | 251 |
$(".segmentation .pointer").css("left", p + "%"); |
| 29 | 252 |
$(".media-current-section").css({ |
253 |
left: (k * start) + "%", |
|
254 |
width: (k * dur) + "%" |
|
| 39 | 255 |
}); |
256 |
var messages = [], |
|
257 |
critical = false, |
|
258 |
warning = false; |
|
259 |
_(segmentcritical).each(function(sc) { |
|
260 |
if (!sc.validate(currentSegment)) { |
|
261 |
critical = true; |
|
262 |
messages.push(sc.message); |
|
263 |
} |
|
264 |
}); |
|
265 |
_(segmentwarning).each(function(sc) { |
|
266 |
if (!sc.validate(currentSegment)) { |
|
267 |
warning = true; |
|
268 |
messages.push(sc.message); |
|
269 |
} |
|
270 |
}); |
|
271 |
currentSegment.status = critical ? "critical" : (warning ? "warning" : "valid"); |
|
272 |
if (!messages.length) { |
|
273 |
messages.push("Le segment est valide !") |
|
274 |
} |
|
275 |
currentSegment.status_messages = messages; |
|
276 |
|
|
277 |
$(".segmentation .validate").removeClass("critical warning valid").addClass(currentSegment.status); |
|
278 |
$(".segmentation .validate-tooltip").html("<ul><li>" + currentSegment.status_messages.join("</li><li>")+"</li></ul>"); |
|
| 25 | 279 |
} |
280 |
} |
|
281 |
|
|
| 27 | 282 |
function setMedia(media) { |
| 23 | 283 |
if (currentMedia) { |
284 |
currentMedia.pause(); |
|
285 |
} |
|
| 27 | 286 |
currentMedia = media; |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
287 |
project.trigger("set-current", media); |
| 22 | 288 |
if (currentMedia.elementType == "media") { |
| 23 | 289 |
showSegmentation(); |
290 |
$(".tab-media-title").text(currentMedia.title); |
|
| 27 | 291 |
|
292 |
addMode = !(currentSegment && mashup.hasAnnotation(currentSegment)); |
|
293 |
|
|
294 |
if (!currentSegment) { |
|
295 |
currentSegment = new IriSP.Model.Annotation(false, project); |
|
296 |
currentSegment.setMedia(currentMedia.id); |
|
297 |
currentSegment.setBegin(0); |
|
298 |
currentSegment.setEnd(currentMedia.duration); |
|
| 39 | 299 |
currentSegment.title = IriSP.hc_messages.segment_title_placeholder; |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
300 |
currentSegment.color = currentMedia.color; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
301 |
currentSegment.keywords = []; |
| 39 | 302 |
currentSegment.description = ""; |
| 27 | 303 |
currentSegment.on("change-begin", function() { |
304 |
if (currentMedia && currentSegment === this) { |
|
| 25 | 305 |
currentMedia.setCurrentTime(this.begin); |
| 39 | 306 |
updateSegmentUI(); |
| 25 | 307 |
} |
308 |
}); |
|
| 27 | 309 |
currentSegment.on("change-end", function() { |
310 |
if (currentMedia && currentSegment === this) { |
|
| 25 | 311 |
currentMedia.setCurrentTime(this.end); |
| 39 | 312 |
updateSegmentUI(); |
| 25 | 313 |
} |
314 |
}); |
|
315 |
} |
|
| 27 | 316 |
if (currentMedia.loaded) { |
317 |
currentMedia.setCurrentTime(currentSegment.begin); |
|
318 |
} |
|
319 |
$(".add-segment").val(addMode ? "Ajouter au Hashcut" : "Sauvegarder"); |
|
320 |
$(".create-or-edit").text(addMode ? "Créer un nouveau segment" : "Modifier le segment"); |
|
321 |
media.show(); |
|
322 |
$("#segment-title").val(currentSegment.title); |
|
323 |
$("#segment-description").val(currentSegment.description); |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
324 |
var segment_tags = $("#segment-tags"); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
325 |
segment_tags.tagit("option","onTagRemoved",function(){}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
326 |
segment_tags.tagit("option","onTagAdded",function(){}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
327 |
segment_tags.tagit("removeAll"); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
328 |
_(currentSegment.keywords).each(function(tag) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
329 |
segment_tags.tagit("createTag",tag); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
330 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
331 |
segment_tags.tagit("option","onTagRemoved",updateSegmentTags); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
332 |
segment_tags.tagit("option","onTagAdded",updateSegmentTags); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
333 |
updateSegmentUI(); |
| 29 | 334 |
var relatedSegments = mashup.segments.filter(function(_s) { |
335 |
return _s.getMedia() === currentMedia && _s.annotation !== currentSegment; |
|
336 |
}); |
|
337 |
var html = ""; |
|
338 |
if (relatedSegments.length) { |
|
339 |
var k = $(".Ldt-Slider").width() / currentSegment.getMedia().duration, |
|
340 |
currentleft = k * currentSegment.begin, |
|
341 |
currentwidth = k * currentSegment.getDuration(); |
|
342 |
relatedSegments.forEach(function(_s) { |
|
343 |
var pos = k * (_s.annotation.begin + _s.annotation.end) / 2, |
|
344 |
corrpos = Math.max(145, Math.min(305, pos)); |
|
345 |
vizdata = { |
|
346 |
annotation : _s.annotation, |
|
347 |
currentleft : currentleft, |
|
348 |
currentwidth : currentwidth, |
|
349 |
popleft : corrpos, |
|
350 |
left : k * _s.annotation.begin, |
|
351 |
width : k * _s.annotation.getDuration(), |
|
352 |
pointerpos : (pos - corrpos) |
|
353 |
} |
|
354 |
html += mediasegmenttemplate(vizdata); |
|
355 |
}); |
|
356 |
$(".self-media-segments").show(); |
|
357 |
} else { |
|
358 |
$(".self-media-segments").hide(); |
|
359 |
} |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
360 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
361 |
//TODO: Show Related Segments from http://capsicum/pf/ldtplatform/api/ldt/1.0/segments/bytimecode/f72aa2f4-29bb-11e2-a193-08002791f1b7/0/674000?format=json |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
362 |
|
| 22 | 363 |
} |
| 29 | 364 |
$(".self-media-segments .media-segments-list").html(html); |
| 27 | 365 |
if (currentMedia.elementType === "mashup") { |
366 |
showPreview(); |
|
367 |
} |
|
| 22 | 368 |
} |
| 27 | 369 |
|
| 25 | 370 |
/* Segment Form interaction */ |
371 |
|
|
372 |
$("#segment-title").on("keyup change input paste", function() { |
|
| 27 | 373 |
if (currentMedia && currentSegment) { |
374 |
currentSegment.title = $(this).val(); |
|
| 39 | 375 |
updateSegmentUI(); |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
376 |
mashup.trigger("change"); |
| 25 | 377 |
} |
378 |
}); |
|
379 |
$("#segment-description").on("keyup change input paste", function() { |
|
| 27 | 380 |
if (currentMedia && currentSegment) { |
381 |
currentSegment.description = $(this).val(); |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
382 |
mashup.trigger("change"); |
| 25 | 383 |
} |
384 |
}); |
|
385 |
$("#segment-form").submit(function() { |
|
| 27 | 386 |
if (addMode) { |
387 |
mashup.addAnnotation(currentSegment); |
|
388 |
} else { |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
389 |
mashup.trigger("change"); |
| 27 | 390 |
} |
391 |
var segment = mashup.getAnnotation(currentSegment); |
|
392 |
currentSegment = undefined; |
|
393 |
setMedia(mashup); |
|
394 |
if (segment) { |
|
395 |
mashup.setCurrentTime(segment.begin); |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
396 |
mashup.trigger("enter-annotation",segment); |
| 27 | 397 |
} |
| 29 | 398 |
return false; |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
399 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
400 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
401 |
$("#segment-tags").tagit(); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
402 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
403 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
404 |
/* We have to defer this function because the tagit events |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
405 |
* are triggered before the data are updated */ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
406 |
function updateSegmentTags() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
407 |
window.setTimeout(function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
408 |
if (currentMedia && currentSegment) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
409 |
currentSegment.keywords = $("#segment-tags").tagit("assignedTags"); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
410 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
411 |
}, 0); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
412 |
} |
| 25 | 413 |
|
| 22 | 414 |
/* Click on media items */ |
415 |
|
|
416 |
$(".col-left").on("click", ".item-video", function() { |
|
| 27 | 417 |
currentSegment = undefined; |
418 |
setMedia(project.getElement($(this).attr("data-media-id"))); |
|
| 22 | 419 |
}); |
| 12 | 420 |
|
| 22 | 421 |
/* Click on Tabs */ |
422 |
|
|
423 |
function showSegmentation() { |
|
424 |
$(".col-middle").removeClass("empty-mode pvw-mode").addClass("segment-mode"); |
|
425 |
return false; |
|
426 |
} |
|
427 |
function showPreview() { |
|
428 |
$(".col-middle").removeClass("empty-mode segment-mode").addClass("pvw-mode"); |
|
429 |
return false; |
|
430 |
} |
|
| 32 | 431 |
function showEmpty() { |
432 |
$("video").hide(); |
|
433 |
$(".col-middle").removeClass("pvw-mode segment-mode").addClass("empty-mode"); |
|
434 |
return false; |
|
435 |
} |
|
| 22 | 436 |
|
| 27 | 437 |
$(".tab-pvw").click(function() { |
438 |
if (mashup.segments.length) { |
|
439 |
setMedia(mashup); |
|
| 22 | 440 |
} |
441 |
}); |
|
442 |
|
|
| 27 | 443 |
/* Click on segments */ |
444 |
|
|
445 |
function reorganizeMashup() { |
|
446 |
var ids = $(".organize-segments .item-video").map(function(){return $(this).attr("data-segment-id")}); |
|
447 |
mashup.setAnnotationsById(ids); |
|
448 |
} |
|
449 |
|
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
450 |
project.on("mouseover-annotation", function(annotation) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
451 |
var mediaid = annotation.getMedia().id; |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
452 |
$(".media").removeClass("active"); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
453 |
$(".media[data-media-id='" + mediaid + "']").addClass("active"); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
454 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
455 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
456 |
project.on("mouseout-annotation", function(annotation) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
457 |
$(".media").removeClass("active"); |
| 32 | 458 |
var mediaid = undefined; |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
459 |
if (currentMedia && currentMedia.elementType === "media") { |
| 32 | 460 |
mediaid = currentMedia.id; |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
461 |
if (currentSegment) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
462 |
$(".annotation").removeClass("active"); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
463 |
$(".annotation[data-segment-id='" + currentSegment.id + "']").addClass("active"); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
464 |
} |
| 32 | 465 |
} |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
466 |
if (currentMedia === mashup && mashup.currentMedia) { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
467 |
mediaid = mashup.currentMedia.id |
| 32 | 468 |
} |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
469 |
$(".media[data-media-id='" + mediaid + "']").addClass("active"); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
470 |
}); |
| 32 | 471 |
|
472 |
$(".organize-segments") |
|
473 |
.sortable({ |
|
| 27 | 474 |
stop : reorganizeMashup |
| 32 | 475 |
}) |
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
476 |
.on("mouseover", ".item-video", function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
477 |
project.trigger("mouseover-annotation", project.getElement($(this).attr("data-segment-id"))); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
478 |
}) |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
479 |
.on("mouseout", ".item-video", function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
480 |
project.trigger("mouseout-annotation"); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
481 |
}) |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
482 |
.on("click", ".item-video", function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
483 |
project.trigger("click-annotation", project.getElement($(this).attr("data-segment-id"))); |
| 32 | 484 |
}) |
485 |
.on("click", ".edit", function(e) { |
|
| 27 | 486 |
var currentItem = $(this).parents(".item-video"), |
487 |
media = project.getElement(currentItem.attr("data-media-id")), |
|
488 |
segment = project.getElement(currentItem.attr("data-segment-id")); |
|
489 |
currentSegment = segment; |
|
490 |
setMedia(media); |
|
491 |
return false; |
|
| 32 | 492 |
}) |
493 |
.on("click", ".top", function(e){ |
|
| 22 | 494 |
var currentItem = $(this).parents(".item-video"); |
495 |
currentItem.insertBefore(currentItem.prev()); |
|
| 27 | 496 |
reorganizeMashup(); |
497 |
return false; |
|
| 32 | 498 |
}) |
499 |
.on("click", ".bottom", function(e){ |
|
| 22 | 500 |
var currentItem = $(this).parents(".item-video"); |
501 |
currentItem.insertAfter(currentItem.next()); |
|
| 27 | 502 |
reorganizeMashup(); |
503 |
return false; |
|
| 32 | 504 |
}) |
505 |
.on("click", ".delete", function(e){ |
|
| 27 | 506 |
var id = $(this).parents(".item-video").attr("data-segment-id"); |
507 |
mashup.removeAnnotationById(id); |
|
| 32 | 508 |
if (!mashup.segments.length) { |
509 |
showEmpty(); |
|
510 |
} |
|
| 27 | 511 |
return false; |
| 22 | 512 |
}); |
513 |
|
|
| 25 | 514 |
/* Tangles */ |
515 |
var tangleMsPerPixel = 100, |
|
516 |
activeTangle, |
|
| 23 | 517 |
tangleStartX, |
| 25 | 518 |
tangleStartVal, |
519 |
tangleHasMoved; |
|
520 |
|
|
| 23 | 521 |
$(".time-tangle").mousedown(function(evt) { |
522 |
activeTangle = $(this); |
|
523 |
activeTangle.addClass("active"); |
|
524 |
tangleStartVal = +activeTangle.attr("data-milliseconds"); |
|
525 |
tangleStartX = evt.pageX; |
|
| 25 | 526 |
tangleHasMoved = false; |
527 |
$(this).siblings(".time-tangle").addClass("deactivate"); |
|
| 23 | 528 |
return false; |
529 |
}); |
|
530 |
$(document) |
|
531 |
.mousemove(function(evt) { |
|
532 |
if (activeTangle) { |
|
| 25 | 533 |
tangleHasMoved = true; |
534 |
var newval = new IriSP.Model.Time(tangleMsPerPixel * (evt.pageX - tangleStartX) + tangleStartVal); |
|
| 23 | 535 |
activeTangle.trigger("valuechange", newval); |
536 |
return false; |
|
537 |
} |
|
538 |
}) |
|
539 |
.mouseup(function() { |
|
540 |
if (activeTangle) { |
|
| 27 | 541 |
activeTangle.text(activeTangle.text().replace(/\.\d+$/,'')); |
| 25 | 542 |
$(".time-tangle").removeClass("active deactivate"); |
| 23 | 543 |
activeTangle = undefined; |
544 |
} |
|
| 25 | 545 |
}); |
546 |
|
|
547 |
$(".tangle-start") |
|
548 |
.mouseup(function(evt) { |
|
| 27 | 549 |
if (!tangleHasMoved && currentMedia && currentSegment) { |
550 |
currentMedia.setCurrentTime(currentSegment.begin); |
|
| 25 | 551 |
} |
| 23 | 552 |
}) |
| 25 | 553 |
.on("valuechange", function(evt, val) { |
| 27 | 554 |
if (currentMedia && currentSegment) { |
555 |
currentSegment.setBegin(val); |
|
| 25 | 556 |
} |
557 |
}); |
|
558 |
$(".tangle-end") |
|
559 |
.mouseup(function(evt) { |
|
| 27 | 560 |
if (!tangleHasMoved && currentMedia && currentSegment) { |
561 |
currentMedia.setCurrentTime(currentSegment.end); |
|
| 25 | 562 |
} |
563 |
}) |
|
564 |
.on("valuechange", function(evt, val) { |
|
| 27 | 565 |
if (currentMedia && currentSegment) { |
566 |
currentSegment.setEnd(val); |
|
| 25 | 567 |
} |
568 |
}); |
|
569 |
$(".tangle-duration").on("valuechange", function(evt, val) { |
|
| 27 | 570 |
if (currentMedia && currentSegment) { |
571 |
currentSegment.setDuration(val); |
|
| 25 | 572 |
} |
573 |
}); |
|
| 27 | 574 |
|
| 29 | 575 |
/* Click on current segment in Preview */ |
576 |
|
|
| 27 | 577 |
$(".mashup-description .edit").click(function() { |
578 |
if (mashupCurrentAnnotation) { |
|
579 |
currentSegment = mashupCurrentAnnotation.annotation; |
|
580 |
setMedia(mashupCurrentAnnotation.getMedia()); |
|
581 |
} |
|
| 29 | 582 |
}); |
583 |
|
|
584 |
/* Handling related segments */ |
|
585 |
|
|
586 |
$(".media-segments-list").on("mouseover", ".media-segment", function() { |
|
587 |
$(this).find(".media-segment-popin").show(); |
|
588 |
}).on("mouseout", ".media-segment", function() { |
|
589 |
$(this).find(".media-segment-popin").hide(); |
|
590 |
}).on("click", ".reprendre-segment", function() { |
|
591 |
var s = project.getElement($(this).attr("data-segment-id")); |
|
592 |
currentSegment.title = s.title; |
|
593 |
currentSegment.description = s.description; |
|
594 |
$("#segment-title").val(s.title); |
|
595 |
$("#segment-description").val(s.description); |
|
596 |
currentSegment.setBegin(s.begin); |
|
597 |
currentSegment.setEnd(s.end); |
|
598 |
return false; |
|
599 |
}); |
|
600 |
|
|
| 32 | 601 |
/* Changing Hashcut Title and description */ |
| 39 | 602 |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
603 |
$("#hashcut-tags").tagit({ |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
604 |
onTagRemoved: updateSegmentTags, |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
605 |
onTagAdded: updateSegmentTags |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
606 |
}); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
607 |
|
| 39 | 608 |
mashup.title = IriSP.hc_messages.mashup_title_placeholder; |
609 |
$(".title-video-wrap a").text(mashup.title); |
|
610 |
$("#hashcut-title").val(mashup.title); |
|
611 |
|
|
| 32 | 612 |
$("#hashcut-title").on("keyup change input paste", function() { |
613 |
mashup.title = $(this).val(); |
|
614 |
$(".title-video-wrap a").text(mashup.title); |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
615 |
mashup.trigger("change"); |
| 32 | 616 |
}); |
617 |
|
|
| 39 | 618 |
$("#hashcut-description").on("keyup change input paste", function() { |
619 |
mashup.description = $(this).val(); |
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
620 |
mashup.trigger("change"); |
| 39 | 621 |
}); |
622 |
|
|
|
41
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
623 |
function updateMashupTags() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
624 |
window.setTimeout(function() { |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
625 |
mashup.keywords = $("#segment-tags").tagit("assignedTags"); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
626 |
}, 0); |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
627 |
} |
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
628 |
|
|
3ec2343f2b85
Refactoring to have common code between editor and player
veltr
parents:
39
diff
changeset
|
629 |
mashup.trigger("change"); |
| 13 | 630 |
} |