286 lines
8.6 KiB
JavaScript
Executable File
286 lines
8.6 KiB
JavaScript
Executable File
function npt2ms(npt) {
|
|
var ms = 0.0;
|
|
npt = String(npt);
|
|
var p = npt.split(':');
|
|
for(var i=0;i<p.length;i++)
|
|
ms = (ms * 60) + parseFloat(p[i]);
|
|
// alert(ms);
|
|
return ms * 1000;
|
|
}
|
|
|
|
function ms2npt(ms) {
|
|
var it, ss, mm, hh, npt;
|
|
var it = parseInt(ms / 1000)
|
|
ms = ms - it * 1000;
|
|
if (ms.toString().length > 3) {
|
|
ms = ms.toString().substring(0,3);
|
|
}
|
|
ss = it % 60;
|
|
mm = ((it - ss) / 60) % 60;
|
|
hh = ((it - (mm * 60) - ss) / 3600) % 60;
|
|
npt = hh+':'+strpad(mm.toString(), '0', 2, 'left')
|
|
npt += ':'+strpad(ss.toString(), '0', 2, 'left')
|
|
npt += '.'+strpad(ms.toString(), '0', 3, 'left')
|
|
return npt;
|
|
}
|
|
|
|
function ms2frames(ms, fmt) {
|
|
if (!fmt) var fmt = "PAL";
|
|
var npt = ms2npt(ms);
|
|
var dotpos = npt.lastIndexOf(".");
|
|
var mmStr = npt.substring(dotpos + 1, npt.length);
|
|
var mmInt = parseInt(mmStr);
|
|
if (fmt == 'PAL') {
|
|
var frames = parseInt((mmInt / 1000) * 24);
|
|
} else if (fmt == "NTSC") {
|
|
var frames = parseInt((mmInt / 1000) * 29.97);
|
|
}
|
|
var framesTc = '';
|
|
var joinToken = ":";
|
|
var framesTc = npt.substring(0, dotpos ) + joinToken + frames;
|
|
return framesTc;
|
|
}
|
|
|
|
function ms2time(ms) {
|
|
var npt = ms2npt(ms)
|
|
return npt.substr(npt.length-9, npt.length-6);
|
|
}
|
|
|
|
function framesToNpt(timeCode) {
|
|
var frames = timeCode.substring(9, 11);
|
|
var ms = parseInt(frames) / 25 * 1000;
|
|
var ms = String(ms);
|
|
var ms = strpad(ms, '0', 3, 'right');
|
|
var timeCodeNpt = timeCode.substring(0,8) + "." + ms;
|
|
return timeCodeNpt;
|
|
}
|
|
|
|
|
|
function strpad(str, pad, len, dir) {
|
|
while (str.length < len) {
|
|
if (dir == 'left')
|
|
str = pad + str;
|
|
else if (dir == 'right')
|
|
str = str + pad;
|
|
}
|
|
return str;
|
|
}
|
|
|
|
function isValidTimecode(tc) {
|
|
var tc = $.trim(tc);
|
|
var nptRegex = new RegExp("^[0-9][0-9]?\:[0-9][0-9]\:[0-9][0-9][\.|\,|\:][0-9]?[0-9]?[0-9]?$");
|
|
return nptRegex.test(tc);to
|
|
}
|
|
|
|
//where filters is a JSON object, for eg. {'Video Files': '*.dv;*.ogg;*.ogv;*.ogx;*.avi;*.mov;*.mp4;*.mpeg;*.mpg;*.vob'}
|
|
function selectFile(filters) {
|
|
// netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
|
const nsIFilePicker = Components.interfaces.nsIFilePicker;
|
|
var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
|
|
fp.init(window, "Choose a File", nsIFilePicker.modeOpen);
|
|
//fp.appendFilters(nsIFilePicker.filterAll | nsIFilePicker.filterText);
|
|
// fp.appendFilter("Ogg Video Files", "*.ogg;*.ogv;*.ogx;");
|
|
for (var f in filters) {
|
|
if (filters.hasOwnProperty(f)) {
|
|
fp.appendFilter(f, filters[f]);
|
|
}
|
|
}
|
|
// fp.appendFilter("All Video Files", "*.dv;*.ogg;*.ogv;*.ogx;*.avi;*.mov;*.mp4;*.mpeg;*.mpg;*.vob");
|
|
fp.appendFilters(nsIFilePicker.filterAll);
|
|
var rv = fp.show();
|
|
if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
|
|
return fp;
|
|
/*
|
|
var file = fp.file;
|
|
var path = fp.file.path;
|
|
return path;
|
|
*/
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
function mozillaSaveFile(filePath,content)
|
|
{
|
|
if(window.Components) {
|
|
try {
|
|
// netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
|
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
|
|
file.initWithPath(filePath);
|
|
if(!file.exists())
|
|
file.create(0,0664);
|
|
var os = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream);
|
|
var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
|
|
out.init(file,0x20|0x02,00004,null);
|
|
os.init(out, "UTF-8", 0, 0x0000);
|
|
os.writeString(content);
|
|
//out.write(content,content.length);
|
|
os.close();
|
|
//out.flush();
|
|
out.close();
|
|
return true;
|
|
} catch(ex) {
|
|
alert(ex);
|
|
return false;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function mozillaSaveAs() {
|
|
const nsIFilePicker = Components.interfaces.nsIFilePicker;
|
|
var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
|
|
fp.init(window, "Save srt as...", Components.interfaces.nsIFilePicker.modeSave);
|
|
fp.appendFilters(Components.interfaces.nsIFilePicker.filterAll);
|
|
var output = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
|
|
var pth = typeof(srtFilePath) != 'undefined' ? srtFilePath : filePath + ".srt";
|
|
output.initWithPath(pth);
|
|
fp.defaultString = output.leafName;
|
|
var rv = fp.show();
|
|
if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
|
|
return fp.file.path;
|
|
/*
|
|
var file = fp.file;
|
|
srtFilePath = file.path;
|
|
saveSrt(srtFilePath);
|
|
return true;
|
|
*/
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Returns null if it can't do it, false if there's an error, or a string of the content if successful
|
|
function mozillaLoadFile(filePath)
|
|
{
|
|
if(window.Components) {
|
|
try {
|
|
// netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
|
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
|
|
file.initWithPath(filePath);
|
|
if(!file.exists())
|
|
return null;
|
|
var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
|
|
inputStream.init(file,0x01,00004,null);
|
|
//var sInputStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
|
|
//sInputStream.init(inputStream);
|
|
var charset = "UTF-8";
|
|
const replacementChar = Components.interfaces.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER;
|
|
var cInputStream = Components.classes["@mozilla.org/intl/converter-input-stream;1"]
|
|
.createInstance(Components.interfaces.nsIConverterInputStream);
|
|
cInputStream.init(inputStream, charset, 1024, replacementChar);
|
|
var str = {};
|
|
var contents = '';
|
|
while (cInputStream.readString(4096, str) != 0) {
|
|
contents += str.value;
|
|
}
|
|
|
|
//var contents = sInputStream.read(sInputStream.available());
|
|
cInputStream.close();
|
|
//sInputStream.close();
|
|
inputStream.close();
|
|
return contents;
|
|
} catch(ex) {
|
|
alert(ex);
|
|
return false;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
|
|
function checkFileExists(filePath) {
|
|
if(window.Components) {
|
|
try {
|
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
|
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
|
|
file.initWithPath(filePath);
|
|
if (file.exists()) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} catch(ex) {
|
|
//alert("Error");
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
function getFileNameExt(filename) {
|
|
var dotPos = filename.lastIndexOf(".");
|
|
var ext = filename.substring(dotPos + 1, filename.length);
|
|
return ext;
|
|
}
|
|
|
|
function getFileNameSansExt(filename) {
|
|
var dotPos = filename.lastIndexOf(".");
|
|
if (dotPos != '-1') {
|
|
var filenameSansExt = filename.substring(0,dotPos);
|
|
} else {
|
|
var filenameSansExt = filename;
|
|
}
|
|
return filenameSansExt;
|
|
}
|
|
|
|
|
|
function spansToSrt(duration, arr, fmt, start_no) {
|
|
if (typeof start_no == 'undefined') {
|
|
start_no = 1;
|
|
}
|
|
var srt = '';
|
|
var srtNo = start_no;
|
|
// Ox.print(arr, fmt);
|
|
if (fmt == 'layers') {
|
|
var layers = Ox.map(arr, function(v) {
|
|
// Ox.print(v);
|
|
if (!v.tcOutMs) {
|
|
v.tcOutMs = parseInt(duration * 1000);
|
|
}
|
|
return {
|
|
'in': v.tcInMs / 1000,
|
|
'out': v.tcOutMs / 1000,
|
|
'value': v.text,
|
|
'duration': (v.tcOutMs - v.tcInMs) / 1000,
|
|
'id': '_' + Ox.uid()
|
|
}
|
|
});
|
|
//console.log("layers", layers);
|
|
return layers;
|
|
}
|
|
|
|
for (var k=0; k < arr.length; k++) {
|
|
var s = arr[k];
|
|
if (s.text.trim() == '') {
|
|
} else {
|
|
var text = s.text.trim();
|
|
linebreaksRegex = new RegExp('\n+', "g")
|
|
text = text.replace(linebreaksRegex, "\n");
|
|
if (!s.tcOutMs) {
|
|
s.tcOutMs = parseInt(duration * 1000);
|
|
}
|
|
if (fmt == 'srt') {
|
|
srt += srtNo + " ";
|
|
srt += "\n";
|
|
srt += "0" + ms2npt(s.tcInMs).replace(".", ",") + " --> " + "0" + ms2npt(s.tcOutMs).replace(".", ",");
|
|
srt += "\n";
|
|
srt += text;
|
|
srt += "\n\n";
|
|
}
|
|
else if (fmt == 'enc') {
|
|
srt += srtNo + ms2frames(s.tcInMs) + " " + ms2frames(s.tcOutMs) + " " + text;
|
|
srt += "\n\n";
|
|
}
|
|
srtNo++;
|
|
}
|
|
}
|
|
return srt;
|
|
}
|
|
|
|
|
|
|
|
function cleanNewlines(str) {
|
|
var s = str.replace(/\r\n|\r|\n/g, '\n');
|
|
return s;
|
|
}
|
|
|