update importAnnotationsDialog

This commit is contained in:
rolux 2014-09-18 14:16:59 +02:00
parent 9408a5f986
commit bee3906d97

View file

@ -1,11 +1,9 @@
// vim: et:ts=4:sw=4:sts=4:ft=javascript // vim: et:ts=4:sw=4:sts=4:ft=javascript
'use strict'; 'use strict';
pandora.ui.importAnnotationsDialog = function(data) { pandora.ui.importAnnotationsDialog = function(duration) {
var srt, var layers = pandora.site.layers.filter(function(layer) {
layers = pandora.site.layers.filter(function(layer) {
return layer.canAddAnnotations[pandora.user.level]; return layer.canAddAnnotations[pandora.user.level];
}), }),
@ -26,9 +24,7 @@ pandora.ui.importAnnotationsDialog = function(data) {
marginTop: '16px' marginTop: '16px'
}) })
.bindEvent({ .bindEvent({
change: function() { change: updateLanguageSelect
updateLanguageSelect();
}
}) })
.appendTo($content), .appendTo($content),
@ -55,30 +51,9 @@ pandora.ui.importAnnotationsDialog = function(data) {
}) })
.bindEvent({ .bindEvent({
change: function(data) { change: function(data) {
var reader; that[
if (data.value.length) { data.value.length ? 'enableButton' : 'disableButton'
reader = new FileReader(); ]('import');
reader.onloadend = function(e) {
if (this.result) {
srt = parseSRT(this.result);
if (srt.length) {
$importButton.options({disabled: false});
//selectLayer.hide();
//selectFile.hide();
}
setStatus(
Ox._('File contains {0} annotation'
+ (srt.length == 1 ? '' : 's') + '.', [srt.length])
);
}
};
reader.readAsText(data.value[0]);
} else {
srt = [];
$importButton.options({
disabled: true
});
}
} }
}) })
.appendTo($content), .appendTo($content),
@ -89,7 +64,9 @@ pandora.ui.importAnnotationsDialog = function(data) {
}) })
.appendTo($content), .appendTo($content),
$dontImportButton = Ox.Button({ that = Ox.Dialog({
buttons: [
Ox.Button({
id: 'dontImport', id: 'dontImport',
title: Ox._('Don\'t Import') title: Ox._('Don\'t Import')
}) })
@ -98,21 +75,13 @@ pandora.ui.importAnnotationsDialog = function(data) {
that.close(); that.close();
} }
}), }),
Ox.Button({
$importButton = Ox.Button({
disabled: true, disabled: true,
id: 'import', id: 'import',
title: Ox._('Import') title: Ox._('Import')
}).bindEvent({ }).bindEvent({
click: function() { click: addAnnotations
addAnnotations(); })
}
}),
that = Ox.Dialog({
buttons: [
$dontImportButton,
$importButton
], ],
closeButton: true, closeButton: true,
content: $content, content: $content,
@ -125,30 +94,40 @@ pandora.ui.importAnnotationsDialog = function(data) {
width: 416 width: 416
}); });
updateLanguageSelect() updateLanguageSelect();
function addAnnotations() { function addAnnotations() {
var annotations,
var annotations = [],
language = $languageSelect.value(), language = $languageSelect.value(),
layer = $layerSelect.value(), layer = $layerSelect.value(),
task; file = $fileInput.value()[0],
if (srt.length > 0) { reader = new FileReader();
setStatus(Ox._('Importing {0} annotations...', [srt.length]));
annotations = srt.filter(function(data) { disableButtons();
return !Ox.isUndefined(data['in'])
&& !Ox.isUndefined(data.out) reader.onloadend = function(e) {
&& data.text; if (this.result) {
}).map(function(data) { annotations = parseSRT(this.result);
var value = Ox.sanitizeHTML(data.text) }
if (annotations.length) {
setStatus(Ox._(
'Importing {0} annotation'
+ (annotations.length == 1 ? '' : 's') + '...',
[annotations.length]
));
annotations = annotations.map(function(annotation) {
var value = Ox.sanitizeHTML(annotation.text)
.replace(/<br[ /]*?>\n/g, '\n') .replace(/<br[ /]*?>\n/g, '\n')
.replace(/\n\n/g, '<br>\n') .replace(/\n\n/g, '<br>\n')
.replace(/\n/g, '<br>\n'); .replace(/\n/g, '<br>\n');
if (language != pandora.site.language) { if (language != pandora.site.language) {
value = '<span lang="' + language + '">' + value + '</span>'; value = '<span lang="' + language + '">'
+ value + '</span>';
} }
return { return {
'in': data['in'], 'in': annotation['in'],
out: data.out, out: annotation.out,
value: value value: value
}; };
}); });
@ -158,10 +137,9 @@ pandora.ui.importAnnotationsDialog = function(data) {
layer: layer layer: layer
}, function(result) { }, function(result) {
if (result.data.taskId) { if (result.data.taskId) {
setStatus(Ox._('Importing {0} annotations...', [srt.length]));
pandora.wait(result.data.taskId, function(result) { pandora.wait(result.data.taskId, function(result) {
if (result.data.status == 'SUCCESS') { if (result.data.status == 'SUCCESS') {
setStatus(Ox._('{0} annotations imported.', [annotations.length])); setStatus(Ox._('Import succeeded.'));
Ox.Request.clearCache(pandora.user.ui.item); Ox.Request.clearCache(pandora.user.ui.item);
pandora.$ui.contentPanel.replaceElement( pandora.$ui.contentPanel.replaceElement(
1, pandora.$ui.item = pandora.ui.item() 1, pandora.$ui.item = pandora.ui.item()
@ -169,27 +147,43 @@ pandora.ui.importAnnotationsDialog = function(data) {
} else { } else {
setStatus(Ox._('Import failed.')); setStatus(Ox._('Import failed.'));
} }
enableButtons();
}); });
} else { } else {
setStatus(Ox._('Import failed.')); setStatus(Ox._('Import failed.'));
enableButtons();
} }
}); });
} else {
setStatus(Ox._('No valid annotations found.'));
enableButtons();
} }
};
setTimeout(function() {
reader.readAsText(file);
}, 250);
} }
function parseSRT(data) { function disableButtons() {
var srt = Ox.parseSRT(data), that.disableButtons();
length = srt.length - 1; that.disableCloseButton();
//pandora layers include outpoint,
//speedtrans right now sets in to out,
//to avoid one frame overlaps,
//move outpoint by 0.001 seconds
for (var i=0; i < length; i++) {
if (srt[i].out == srt[i+1]['in']) {
srt[i].out = srt[i].out - 0.001;
} }
function enableButtons() {
that.enableButtons();
that.enableCloseButton();
} }
return srt;
function parseSRT(srt) {
return Ox.parseSRT(srt).filter(function(annotation) {
return !Ox.isUndefined(annotation['in'])
&& !Ox.isUndefined(annotation.out)
&& annotation['in'] <= annotation.out
&& annotation.out <= duration
&& annotation.text;
});
} }
function setStatus(status) { function setStatus(status) {