diff --git a/static/js/addFilesDialog.js b/static/js/addFilesDialog.js
index 6a31b26f..e718b218 100644
--- a/static/js/addFilesDialog.js
+++ b/static/js/addFilesDialog.js
@@ -8,11 +8,6 @@ pandora.ui.addFilesDialog = function(options) {
}).bindEvent({
click: function() {
$button.options({disabled: true});
- that.disableCloseButton()
- var $screen = Ox.LoadingScreen({
- size: 16
- });
- that.options({content: $screen.start()});
(options.action == 'upload' ? uploadVideos : importVideos)(function() {
that.close();
pandora.ui.tasksDialog({
diff --git a/static/js/uploadVideoDialog.js b/static/js/uploadVideoDialog.js
new file mode 100644
index 00000000..cb455a67
--- /dev/null
+++ b/static/js/uploadVideoDialog.js
@@ -0,0 +1,599 @@
+'use strict';
+
+pandora.ui.uploadVideoDialog = function(data) {
+
+ var cancelled = false,
+ file,
+ hasFirefogg = !(Ox.isUndefined(window.Firefogg)) && (
+ $.browser.version < '35' || Firefogg().version >= 334
+ ),
+ infoContent = Ox._('Please select the video file that you want to upload.'),
+ itemView = pandora.hasCapability('canSeeExtraItemViews') ? 'media' : 'info',
+ selectFile,
+ $actionButton,
+ $closeButton,
+ $content = Ox.Element().css({margin: '16px'}),
+ $info = $('
')
+ .css({padding: '4px'})
+ .html(infoContent),
+ $progress,
+ $status = $('
').css({padding: '4px', paddingTop: '8px'}),
+ that = Ox.Dialog({
+ buttons: [
+ $closeButton = Ox.Button({
+ id: 'close',
+ title: Ox._('Close')
+ }).css({
+ float: 'left'
+ }).bindEvent({
+ click: function() {
+ if ($closeButton.options('title') == Ox._('Cancel')) {
+ cancelled = true;
+ $info.html(infoContent);
+ $status.html('');
+ pandora.firefogg && pandora.firefogg.cancel();
+ pandora.$ui.upload && pandora.$ui.upload.abort();
+ $closeButton.options('title', Ox._('Close'));
+ if ($actionButton.options('title') == Ox._('Upload')) {
+ $closeButton.options('title', Ox._('Close'));
+ $actionButton.replaceWith($actionButton = hasFirefogg
+ ? getFirefoggButton()
+ : getSelectVideoButton()
+ );
+ }
+ $actionButton.show();
+ } else {
+ that.triggerEvent('close');
+ }
+ }
+ }),
+ $actionButton = hasFirefogg ? getFirefoggButton() : getSelectVideoButton()
+ ],
+ content: $content,
+ height: 128,
+ removeOnClose: true,
+ width: 368,
+ title: Ox._('Upload Video'),
+ })
+ .bindEvent({
+ close: function(data) {
+ if (pandora.firefogg) {
+ pandora.firefogg.cancel();
+ delete pandora.firefogg;
+ }
+ that.close();
+ }
+ });
+
+ if (!pandora.site.itemRequiresVideo && !pandora.user.ui.item) {
+ $info.html(Ox._(
+ 'You can only upload a video to an existing {0}.'
+ + ' Please check if an entry for the {0}'
+ + ' you want to upload exists, and create one otherwise.',
+ [pandora.site.itemName.singular.toLowerCase()]
+ ));
+ $actionButton.hide();
+ }
+ $content.append($info);
+ $content.append($status);
+
+ function aspectratio(ratio) {
+ var denominator, numerator;
+ ratio = ratio.split(':');
+ numerator = ratio[0];
+ if (ratio.length == 2) {
+ denominator = ratio[1];
+ }
+ if (Math.abs(numerator / denominator - 4/3) < 0.03) {
+ numerator = 4;
+ denominator = 3;
+ } else if (Math.abs(numerator / denominator - 16/9) < 0.02) {
+ numerator = 16;
+ denominator = 9;
+ }
+ return {
+ denominator: denominator,
+ 'float': numerator / denominator,
+ numerator: numerator,
+ ratio: numerator + ':' + denominator
+ };
+ }
+
+ function resetProgress(status) {
+ $progress = Ox.Progressbar({
+ progress: 0,
+ showPercent: true,
+ showTime: true,
+ width: 304
+ });
+ $status.html(status || '').append($progress);
+ }
+
+ function directUpload(file, info) {
+ resetProgress();
+ pandora.api.addMedia({
+ filename: info.name,
+ id: info.oshash,
+ item: pandora.site.itemRequiresVideo
+ ? undefined
+ : pandora.user.ui.item
+ }, function(result) {
+ uploadStream(result.data.item, info, file);
+ });
+ }
+
+ function encode() {
+ var filename = pandora.firefogg.sourceFilename,
+ info = JSON.parse(pandora.firefogg.sourceInfo),
+ item,
+ oshash = info.oshash;
+ $info.html('' + filename + '
' + Ox._('encoding...'));
+ resetProgress();
+ pandora.api.addMedia({
+ filename: filename,
+ id: oshash,
+ info: info,
+ item: pandora.site.itemRequiresVideo
+ ? undefined
+ : pandora.user.ui.item
+ }, function(result) {
+ item = result.data.item;
+ pandora.firefogg.encode(
+ getEncodingOptions(info),
+ function(result, file) {
+ result = JSON.parse(result);
+ if (result.progress != 1) {
+ $status.html(
+ cancelled
+ ? Ox._('Encoding cancelled.')
+ : Ox._('Encoding failed.')
+ );
+ delete pandora.firefogg;
+ return;
+ }
+ setTimeout(function() {
+ $info.html(
+ '' + filename + '
'
+ + Ox._('uploading...')
+ );
+ uploadStream(item, info, file);
+ });
+ },
+ Ox.throttle(function(progress) {
+ progress = JSON.parse(progress).progress || 0;
+ $progress.options({progress: progress});
+ }, 1000)
+ );
+ });
+ }
+
+ function getInfo(file, callback) {
+ Ox.oshash(file, function(oshash) {
+ var $video = $('