// vim: et:ts=4:sw=4:sts=4:ft=javascript 'use strict'; pandora.ui.importAnnotations = function(data) { var content = Ox.Element().css({margin: '16px'}), file, height = 192, layers = pandora.site.layers.filter(function(layer) { return layer.canAddAnnotations[pandora.user.level]; }), layer = layers[0].id, width = 384, srt = [], total = 0, importButton, selectLayer, selectFile, that = Ox.Dialog({ buttons: [ Ox.Button({ id: 'close', title: 'Close' }).bindEvent({ click: function() { that.close(); } }), importButton = Ox.Button({ disabled: true, id: 'import', title: 'Import' }).bindEvent({ click: function() { importButton.hide(); selectLayer.hide(); selectFile.hide(); addAnnotation(); } }) ], closeButton: true, content: content, keys: { 'escape': 'close' }, height: height, removeOnClose: true, width: width, title: 'Import Annotations' }) .bindEvent({ close: function(data) { that.close(); } }), $status = $('
').css({ padding: '4px' }); function addAnnotation() { if (srt.length > 0) { var data = srt.shift(); data.text = Ox.sanitizeHTML(data.text) .replace(/\n/g, '\n') .replace(/\n\n/g, '
\n') .replace(/\n/g, '
\n'); $status.html( Ox.formatDuration(data['in']) + ' to ' + Ox.formatDuration(data.out) + '
\n' + data.text ); pandora.api.addAnnotation({ 'in': data['in'], out: data.out, value: data.text, item: pandora.user.ui.item, layer: layer }, function(result) { if (result.status.code == 200) { addAnnotation(); } else { content.html('Failed'); } }); } else { $status.html(total + ' annotations imported.'); Ox.Request.clearCache(pandora.user.ui.item); pandora.$ui.contentPanel.replaceElement( 1, pandora.$ui.item = pandora.ui.item() ); } } function parseSRT(data) { var srt = Ox.parseSRT(data), length = srt.length - 1; //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; } } return srt; } content.append($('
').css({ padding: '4px', paddingBottom: '16px' }).html('Import annotations from .srt file:')); selectLayer = Ox.Select({ items: layers, value: layer, label: 'Layer' }) .bindEvent({ change: function(data) { layer = data.value; } }) .appendTo(content); selectFile = $('') .attr({ type: 'file' }) .css({ padding: '8px' }) .on({ change: function(event) { if (this.files.length) { file = this.files[0]; var reader = new FileReader(); reader.onloadend = function(event) { srt = parseSRT(this.result); total = srt.length; total && importButton.options({disabled: false}); $status.html( 'File contains ' + total + ' annotation' + (total == 1 ? '' : 's') + '.' ); }; reader.readAsText(file); } else { srt = []; total = 0; importButton.options({ disabled: true }); } } }) .appendTo(content); content.append($status); return that; };