2011-11-05 17:04:10 +00:00
|
|
|
'use strict';
|
|
|
|
|
2011-10-19 10:47:33 +00:00
|
|
|
pandora.ui.itemClips = function(options) {
|
|
|
|
|
|
|
|
var self = {},
|
|
|
|
that = Ox.Element()
|
|
|
|
.css({
|
|
|
|
height: '192px',
|
|
|
|
margin: '4px'
|
|
|
|
})
|
|
|
|
.bindEvent({
|
2011-10-19 12:29:16 +00:00
|
|
|
doubleclick: doubleclick,
|
2011-10-19 11:49:49 +00:00
|
|
|
singleclick: singleclick
|
2011-10-19 10:47:33 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
self.options = Ox.extend({
|
2011-10-19 16:40:52 +00:00
|
|
|
clips: [],
|
2011-10-19 10:47:33 +00:00
|
|
|
duration: 0,
|
|
|
|
id: '',
|
|
|
|
ratio: 8/5
|
|
|
|
}, options);
|
|
|
|
|
|
|
|
self.size = 128;
|
|
|
|
self.width = self.options.ratio > 1 ? self.size : Math.round(self.size * self.options.ratio);
|
|
|
|
self.height = self.options.ratio > 1 ? Math.round(self.size / self.options.ratio) : self.size;
|
|
|
|
|
2011-10-19 16:40:52 +00:00
|
|
|
self.options.clips.forEach(function(clip, i) {
|
2011-11-04 15:54:42 +00:00
|
|
|
Ox.Log('', 'CLIP', clip)
|
2011-10-19 10:47:33 +00:00
|
|
|
var id = self.options.id + '/' + clip['in'],
|
2011-10-19 16:40:52 +00:00
|
|
|
title = Ox.map(clip.annotations, function(annotation) {
|
|
|
|
return annotation.layer == 'subtitles' ? annotation.value : 0
|
|
|
|
}),
|
2011-10-19 10:47:33 +00:00
|
|
|
url = '/' + self.options.id + '/' + self.height + 'p' + clip['in'] + '.jpg',
|
|
|
|
$item = Ox.IconItem({
|
|
|
|
imageHeight: self.height,
|
|
|
|
imageWidth: self.width,
|
|
|
|
id: id,
|
|
|
|
info: Ox.formatDuration(clip['in']) + ' - ' + Ox.formatDuration(clip.out),
|
2011-10-19 16:40:52 +00:00
|
|
|
title: title[0] || '',
|
2011-10-19 10:47:33 +00:00
|
|
|
url: url,
|
|
|
|
})
|
|
|
|
.addClass('OxInfoIcon')
|
|
|
|
.css({
|
|
|
|
float: 'left',
|
2011-10-20 16:49:01 +00:00
|
|
|
margin: i == 0 ? '2px 2px 2px -2px'
|
|
|
|
: i == self.options.clips.length - 1 ? '2px -2px 2px 2px'
|
|
|
|
: '2px'
|
2011-10-19 10:47:33 +00:00
|
|
|
})
|
|
|
|
.data({'in': clip['in'], out: clip.out});
|
|
|
|
$item.$element.find('.OxTarget').addClass('OxSpecialTarget');
|
|
|
|
that.append($item);
|
|
|
|
});
|
|
|
|
|
2011-10-19 12:29:16 +00:00
|
|
|
function doubleclick(data) {
|
|
|
|
var $item, $target = $(data.target), item, points, set;
|
2011-10-19 13:00:10 +00:00
|
|
|
if ($target.parent().parent().is('.OxSpecialTarget')) {
|
|
|
|
// for videos, the click registers deeper inside
|
|
|
|
$target = $target.parent().parent();
|
|
|
|
}
|
2011-10-19 12:29:16 +00:00
|
|
|
if ($target.is('.OxSpecialTarget')) {
|
|
|
|
$item = $target.parent().parent();
|
|
|
|
item = self.options.id;
|
|
|
|
points = [$item.data('in'), $item.data('out')];
|
|
|
|
set = {};
|
|
|
|
set['videoPoints.' + item] = {
|
|
|
|
'in': points[0],
|
|
|
|
out: points[1],
|
|
|
|
position: points[0]
|
|
|
|
};
|
|
|
|
pandora.UI.set(set);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-10-19 11:49:49 +00:00
|
|
|
function singleclick(data) {
|
2011-10-19 13:00:10 +00:00
|
|
|
var $img, $item, $target = $(data.target), points;
|
2011-10-19 10:47:33 +00:00
|
|
|
if ($target.is('.OxSpecialTarget')) {
|
|
|
|
$item = $target.parent().parent();
|
|
|
|
$img = $item.find('.OxIcon > img');
|
|
|
|
points = [$item.data('in'), $item.data('out')];
|
|
|
|
if ($img.length) {
|
2011-10-25 13:59:27 +00:00
|
|
|
pandora.api.get({id: self.options.id, keys: ['durations', 'rightslevel']}, function(result) {
|
2011-10-19 10:47:33 +00:00
|
|
|
var partsAndPoints = pandora.getVideoPartsAndPoints(
|
|
|
|
result.data.durations, points
|
|
|
|
),
|
|
|
|
$player = Ox.VideoPlayer({
|
2011-10-25 13:59:27 +00:00
|
|
|
censored: pandora.site.capabilities.canPlayClips[pandora.user.level] < result.data.rightslevel
|
2011-10-22 21:03:28 +00:00
|
|
|
? [{'in': partsAndPoints.points[0], out: partsAndPoints.points[1]}]
|
|
|
|
: [],
|
2011-10-19 12:29:16 +00:00
|
|
|
enableMouse: true,
|
2011-10-19 10:47:33 +00:00
|
|
|
height: self.height,
|
|
|
|
'in': partsAndPoints.points[0],
|
|
|
|
out: partsAndPoints.points[1],
|
|
|
|
playInToOut: true,
|
|
|
|
poster: '/' + self.options.id + '/' + self.height + 'p' + points[0] + '.jpg',
|
|
|
|
rewind: true,
|
|
|
|
video: partsAndPoints.parts.map(function(i) {
|
2011-10-29 15:24:54 +00:00
|
|
|
var part = (i + 1),
|
|
|
|
prefix = pandora.site.site.videoprefix.replace('PART', part);
|
|
|
|
return prefix + '/' + self.options.id + '/96p' + part + '.' + pandora.user.videoFormat;
|
2011-10-19 10:47:33 +00:00
|
|
|
}),
|
|
|
|
width: self.width
|
|
|
|
})
|
2011-10-19 12:29:16 +00:00
|
|
|
.addClass('OxTarget OxSpecialTarget');
|
2011-10-19 10:47:33 +00:00
|
|
|
$img.replaceWith($player.$element);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return that;
|
|
|
|
|
2011-10-29 15:24:54 +00:00
|
|
|
};
|