156 lines
5.2 KiB
JavaScript
156 lines
5.2 KiB
JavaScript
pandora.ui.textArea = function() {
|
|
var that = Ox.Input({
|
|
type: 'textarea',
|
|
width: 400,
|
|
height: 400,
|
|
changeOnKeypress: true
|
|
});
|
|
var $video = pandora.$ui.videoPlayer;
|
|
|
|
that.speedtrans = {
|
|
spans: [],
|
|
insertTc: function() {
|
|
var eDom = that.find("textarea").get(0); //FIXME
|
|
var scrollTop = eDom.scrollTop;
|
|
var val = that.value();
|
|
var pos = eDom.selectionStart;
|
|
var tcNpt = ms2npt(pandora.$ui.videoPlayer.options("position") * 1000);
|
|
var newVal = val.substring(0,pos) + "\n" + tcNpt + "\n" + val.substring(pos, val.length);
|
|
that.value(newVal);
|
|
that.find("textarea").focus(); //FIXME
|
|
eDom.selectionStart = pos + tcNpt.length + 2;
|
|
eDom.selectionEnd = pos + tcNpt.length + 2;
|
|
eDom.scrollTop = scrollTop + 15;
|
|
},
|
|
isTc: function() {
|
|
var eDom = that.find("textarea").get(0);
|
|
var val = that.value();
|
|
var pos = eDom.selectionStart;
|
|
var word = that.speedtrans.getWord(pos, val);
|
|
|
|
if (isValidTimecode(word)) {
|
|
return npt2ms(word);
|
|
} else {
|
|
return false;
|
|
}
|
|
},
|
|
getWord: function(pos, val) {
|
|
var c;
|
|
var i = pos;
|
|
var j = pos;
|
|
while (c != " " && c != "\n") {
|
|
if (i==0) {
|
|
i = -1;
|
|
break;
|
|
}
|
|
i--;
|
|
c = val.substring(i,i+1);
|
|
}
|
|
var firstLetter = i+1;
|
|
var d;
|
|
while (d != " " && d != "\n") {
|
|
if (j >= val.length) {
|
|
break;
|
|
}
|
|
j++;
|
|
d = val.substring(j,j+1);
|
|
}
|
|
var lastLetter = j;
|
|
var word = val.substring(firstLetter, lastLetter);
|
|
return word;
|
|
},
|
|
toSrt: function(fmt) {
|
|
if (!fmt) var fmt = 'srt';
|
|
var text = cleanNewlines(that.value());
|
|
var lines = [];
|
|
lines = text.split("\n");
|
|
var i=0;
|
|
var j=0;
|
|
var spans = this.spans = [];
|
|
while (i < lines.length) {
|
|
var l = lines[i];
|
|
if (isValidTimecode(l.trim())) {
|
|
var tcIn = l.trim();
|
|
var t = "";
|
|
var thisLine = '';
|
|
while (!isValidTimecode(thisLine.trim())) {
|
|
i++;
|
|
if (i >= lines.length) {
|
|
break;
|
|
}
|
|
thisLine = lines[i];
|
|
if (!isValidTimecode(thisLine.trim())) {
|
|
t += thisLine + "\n";
|
|
}
|
|
}
|
|
var tcOut = $.trim(thisLine);
|
|
spans[j] = {
|
|
tcInMs: npt2ms(tcIn),
|
|
tcOutMs: npt2ms(tcOut),
|
|
text: t,
|
|
index: j
|
|
};
|
|
//this.spans.push(spans[j]);
|
|
j++;
|
|
} else {
|
|
i++;
|
|
}
|
|
}
|
|
this.spans = spans;
|
|
var duration = pandora.$ui.videoPlayer.options("duration");
|
|
var srt = spansToSrt(duration, spans, fmt);
|
|
// console.log(srt);
|
|
return srt;
|
|
},
|
|
|
|
save: function() {
|
|
|
|
console.log(that.value());
|
|
var filename = pandora.$ui.videoPlayer.options("video");
|
|
console.log(filename);
|
|
pandora.storage(filename, {'text': that.value()});
|
|
},
|
|
load: function(options) {
|
|
console.log(options);
|
|
// if (options.type == 'local') {
|
|
// var file = options.file;
|
|
// var name = file.name;
|
|
// var url = window.URL.createObjectURL(file);
|
|
// } else if (options.type == 'remote') {
|
|
// var url = options.url;
|
|
// var name = options.name;
|
|
// }
|
|
var val = pandora.storage(options.name) || {'text': ''};
|
|
that.value(val.text);
|
|
var videoOptions = {
|
|
'url': options.url
|
|
};
|
|
pandora.$ui.videoPlayer = pandora.ui.videoPlayer(videoOptions);
|
|
//pandora.$ui.videoPlayer = videoElem;
|
|
pandora.$ui.videoPanel.replaceElement(0, pandora.$ui.videoPlayer);
|
|
//console.log(filename);
|
|
//$video.options("video", filename);
|
|
}
|
|
};
|
|
that.bindEvent({
|
|
key_control_space: function() {
|
|
$video.options("paused", !$video.options("paused"));
|
|
that.find("textarea").focus(); //FIXME
|
|
},
|
|
key_control_x: function() {
|
|
that.speedtrans.insertTc();
|
|
},
|
|
key_control_shift_s: function() {
|
|
that.speedtrans.save();
|
|
}
|
|
});
|
|
that.dblclick(function() {
|
|
var tc = that.speedtrans.isTc();
|
|
if (tc) {
|
|
$video.options("position", tc / 1000);
|
|
}
|
|
});
|
|
return that;
|
|
}
|
|
|