update importAnnotationsDialog
This commit is contained in:
parent
9408a5f986
commit
bee3906d97
1 changed files with 106 additions and 112 deletions
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue