diff --git a/static/js/pandora/embedPanel.js b/static/js/pandora/embedPanel.js
index cfeaf10c..4fcb7c72 100644
--- a/static/js/pandora/embedPanel.js
+++ b/static/js/pandora/embedPanel.js
@@ -1,25 +1,105 @@
pandora.ui.embedPanel = function() {
- var that, $errorBox, $errorLogo, $errorText;
+ var that = Ox.Element(),
+ data, options,
+ ui = pandora.user.ui,
+ $outerPanel, $innerPanel,
+ $title, $player, $controls, $timeline, $annotations,
+ $errorBox, $errorLogo, $errorText;
if (pandora.user.ui.item) {
- that = Ox.Element();
+ options = getOptions();
- pandora.api.get({id: pandora.user.ui.item, keys: [
+ pandora.api.get({id: ui.item, keys: [
'duration', 'layers', 'parts', 'posterFrame',
'rightslevel', 'size', 'title', 'videoRatio'
]}, function(result) {
- Ox.extend(result.data, pandora.getVideoOptions(result.data));
- that.setElement(
- pandora.$ui.embedPlayer = pandora.ui.embedPlayer(result.data)
- );
+ data = result.data, innerHeight;
+ Ox.extend(data, pandora.getVideoOptions(data));
+ if (options.matchRatio || options.showAnnotations) {
+ options.height = Math.min(
+ Math.round(window.innerWidth / data.videoRatio),
+ window.innerHeight
+ - (options.title ? 32 : 0)
+ - (options.showTimeline ? 80 : 0)
+ - (options.showAnnotations ? 128 : 0)
+ );
+ } else {
+ options.height = window.innerHeight
+ - (options.title ? 32 : 0)
+ - (options.showTimeline ? 80 : 0);
+ }
+ innerHeight = options.height
+ + (options.title ? 32 : 0)
+ + (options.showTimeline ? 80 : 0);
+ if (options.title) {
+ $title = Ox.Element()
+ .css({position: 'absolute'})
+ .append(
+ $('
')
+ .css({
+ marginTop: !options.title.match(/\\n/) ? '8px' : '2px',
+ textAlign: 'center'
+ })
+ .html(options.title.replace(/\\n/g, '
'))
+ );
+ } else {
+ $title = Ox.Element();
+ }
+ $player = pandora.ui.embedPlayer(options, data)
+ .bindEvent({
+ playing: function(data) {
+ setPosition(data.position, true);
+ },
+ position: function(data) {
+ setPosition(data.position);
+ }
+ });
+ $controls = Ox.Element();
+ if (options.showTimeline) {
+ $timeline = Ox.LargeVideoTimeline({
+ duration: data.duration,
+ getImageURL: function(type, i) {
+ return '/' + ui.item + '/timeline' + type + '64p' + i + '.jpg';
+ },
+ position: options.position,
+ subtitles: data.subtitles || [],
+ type: ui.videoTimeline,
+ width: window.innerWidth - 16
+ })
+ .css({
+ top: '4px',
+ left: '4px'
+ })
+ .bindEvent({
+ mousedown: that.gainFocus,
+ position: changeTimeline
+ })
+ .appendTo($controls);
+ }
+ $annotations = Ox.Element().html('ANNOTATIONS');
+ $innerPanel = Ox.SplitPanel({
+ elements: [
+ {element: $title, size: options.title ? 32 : 0},
+ {element: $player},
+ {element: $controls, size: options.showTimeline ? 80 : 0}
+ ],
+ orientation: 'vertical'
+ });
+ $outerPanel = Ox.SplitPanel({
+ elements: [
+ {element: $innerPanel, size: innerHeight},
+ {element: $annotations}
+ ],
+ orientation: 'vertical'
+ });
+ that.setElement($outerPanel);
});
} else {
- that = Ox.Element()
- .addClass('OxScreen')
+ that.addClass('OxScreen')
.css({
position: 'absolute',
left: 0,
@@ -59,6 +139,50 @@ pandora.ui.embedPanel = function() {
}
+ function changeTimeline(data) {
+ var position = options.playInToOut
+ ? Ox.limit(data.position, options['in'], options.out)
+ : data.position;
+ Ox.print('PPP', position);
+ $player.options({position: position});
+ position != data.position && $timeline.options({position: position});
+ options.showAnnotations && $annotations.options({position: position});
+ }
+
+ function getOptions() {
+ var options = {},
+ defaults = {
+ invertHighlight: true,
+ paused: true,
+ playInToOut: true,
+ width: window.innerWidth
+ };
+ ui.hash.query.forEach(function(condition) {
+ if (condition.key != 'embed') {
+ options[condition.key] = condition.value;
+ }
+ });
+ options = Ox.extend(
+ {item: ui.item},
+ ui.videoPoints[ui.item] || {},
+ defaults,
+ options
+ );
+ if (!options.position) {
+ options.position = options['in'] || 0;
+ }
+ if (!options['in'] && !options.out) {
+ options.playInToOut = false;
+ }
+ return options;
+ }
+
+ function setPosition(position, playing) {
+ !playing && $player.options({position: position});
+ options.showTimeline && $timeline.options({position: position});
+ options.showAnnotations && $annotations.options({position: position});
+ }
+
that.display = function() {
// fixme: move animation into Ox.App
var animate = $('.OxScreen').length == 0;
diff --git a/static/js/pandora/embedPlayer.js b/static/js/pandora/embedPlayer.js
index e11fc5b9..c120bb32 100644
--- a/static/js/pandora/embedPlayer.js
+++ b/static/js/pandora/embedPlayer.js
@@ -1,11 +1,12 @@
-pandora.ui.embedPlayer = function(data) {
+pandora.ui.embedPlayer = function(options, data) {
- var options = getOptions(),
- that = Ox.VideoPlayer(Ox.extend({
+ var that = Ox.VideoPlayer(Ox.extend({
censored: data.censored,
censoredIcon: pandora.site.cantPlay.icon,
censoredTooltip: pandora.site.cantPlay.text,
- controlsBottom: ['play', 'volume', 'scale'].concat(
+ controlsBottom: ['play', 'volume'].concat(
+ options.matchRatio ? [] : ['scale']
+ ).concat(
Ox.Fullscreen.available ? ['fullscreen'] : []
).concat(
['timeline', 'position', 'settings']
@@ -27,6 +28,7 @@ pandora.ui.embedPlayer = function(data) {
enableVolume: true,
height: options.height,
invertHighlight: options.invertHighlight,
+ muted: pandora.user.ui.videoMuted,
paused: options.paused,
playInToOut: options.playInToOut,
position: options.position,
@@ -36,6 +38,7 @@ pandora.ui.embedPlayer = function(data) {
: data.posterFrame
) +'.jpg',
resolution: pandora.user.ui.videoResolution,
+ scaleToFill: pandora.user.ui.videoScale == 'fill',
subtitles: data.subtitles,
timeline: options.playInToOut ? function(size, i) {
return '/' + options.item
@@ -44,6 +47,7 @@ pandora.ui.embedPlayer = function(data) {
} : '/' + options.item + '/' + 'timeline16p.png',
title: data.title,
video: data.video,
+ volume: pandora.user.ui.videoVolume,
width: options.width
}, options['in'] ? {
'in': options['in']
@@ -51,34 +55,6 @@ pandora.ui.embedPlayer = function(data) {
out: options.out
} : {}));
- function getOptions() {
- var ui = pandora.user.ui,
- defaults = {
- height: window.innerHeight,
- invertHighlight: true,
- paused: true,
- playInToOut: true,
- width: window.innerWidth
- },
- options,
- query = {};
- ui.hash.query.forEach(function(condition) {
- if (condition.key != 'embed') {
- query[condition.key] = condition.value;
- }
- })
- options = Ox.extend({
- item: ui.item
- }, ui.videoPoints[ui.item] || {}, defaults, query);
- if (!options.position) {
- options.position = options['in'] || 0;
- }
- if (!options['in'] && !options.out) {
- options.playInToOut = false;
- }
- return options;
- }
-
return that;
};
\ No newline at end of file