diff --git a/js/app.js b/js/app.js
index 73043d2..a15445c 100644
--- a/js/app.js
+++ b/js/app.js
@@ -6,7 +6,6 @@ var filePath = false;
var videoListener;
var seekBar;
var globalUser;
-var srtFilePath = undefined;
var videoPath = undefined;
var videoHash = undefined;
@@ -152,7 +151,6 @@ Ox.load({
saveTxt();
videoPath = undefined;
videoHash = undefined;
- srtFilePath = undefined;
textArea.elem.val('');
var path = data.files[0].name;
if ($.inArray(getFileNameExt(path.toLowerCase()), [
@@ -349,12 +347,5 @@ End Preview functions
$(window).unload(function() {
- console.log('unload');
- if (typeof filePath != 'undefined' && typeof srtFilePath != 'undefined') {
- globalUser.set_prefs({
- 'recentVideo': $('#video').attr("src").replace("file://", ""),
- 'recentSrt': srtFilePath
- });
- }
saveTxt();
});
diff --git a/js/classes.js b/js/classes.js
index 1f1e8f5..1490f30 100644
--- a/js/classes.js
+++ b/js/classes.js
@@ -4,421 +4,420 @@ var storage = window.localStorage;
//elem = string (elementId to make TextArea)
var TextArea = function(elem) {
- this.elem = $('#' + elem);
- var that = this;
-// this.elem = new Ox.Input({'type': 'textarea', 'id': 'textArea'}).attr("id", elem).appendTo('#txtWrapper');
- this.hasFocus = false;
- this.width = this.elem.width();
- this.spans = [];
- this.init()
- }
+ this.elem = $('#' + elem);
+ var that = this;
+ //this.elem = new Ox.Input({'type': 'textarea', 'id': 'textArea'}).attr("id", elem).appendTo('#txtWrapper');
+ this.hasFocus = false;
+ this.width = this.elem.width();
+ this.spans = [];
+ this.init()
+}
TextArea.prototype.init = function() {
- var that = this;
- var e = this.elem;
- var tc;
- e.focus(function() {
- that.hasFocus = true;
+ var that = this;
+ var e = this.elem;
+ var tc;
+ e.focus(function() {
+ that.hasFocus = true;
}).blur(function() {
- that.hasFocus = false;
+ that.hasFocus = false;
});
- e.dblclick(function(e) {
- var tc = that.isTc();
- if (tc) {
- Video.set(tc);
- }
+ e.dblclick(function(e) {
+ var tc = that.isTc();
+ if (tc) {
+ Video.set(tc);
+ }
});
- }
+}
//returns tc in ms if cursor is at a time-code, else returns false
TextArea.prototype.isTc = function() {
- var that = this;
- var e = this.elem;
- var eDom = e.get(0);
- var val = e.val();
- var pos = eDom.selectionStart;
- var word = this.getWord(pos);
- if (isValidTimecode(word)) {
- return npt2ms(word);
+ var that = this;
+ var e = this.elem;
+ var eDom = e.get(0);
+ var val = e.val();
+ var pos = eDom.selectionStart;
+ var word = this.getWord(pos);
+ if (isValidTimecode(word)) {
+ return npt2ms(word);
} else {
- return false;
+ return false;
}
- }
+}
//inserts current timecode at cursor position
TextArea.prototype.insertTc = function(tcNpt) {
- var that = this;
- var e = that.elem;
- var eDom = e.get(0);
- var scrollTop = eDom.scrollTop;
- var val = this.elem.val();
- var pos = eDom.selectionStart;
- if(!tcNpt) {
- tcNpt = ms2npt(Video.get());
- }
- var newVal = val.substring(0,pos) + "\n" + tcNpt + "\n" + val.substring(pos, val.length);
- e.val(newVal);
- e.focus();
- eDom.selectionStart = pos + tcNpt.length + 2;
- eDom.selectionEnd = pos + tcNpt.length + 2;
- eDom.scrollTop = scrollTop + 15;
- }
+ var that = this;
+ var e = that.elem;
+ var eDom = e.get(0);
+ var scrollTop = eDom.scrollTop;
+ var val = this.elem.val();
+ var pos = eDom.selectionStart;
+ if(!tcNpt) {
+ tcNpt = ms2npt(Video.get());
+ }
+ var newVal = val.substring(0,pos) + "\n" + tcNpt + "\n" + val.substring(pos, val.length);
+ e.val(newVal);
+ e.focus();
+ eDom.selectionStart = pos + tcNpt.length + 2;
+ eDom.selectionEnd = pos + tcNpt.length + 2;
+ eDom.scrollTop = scrollTop + 15;
+}
//gets the word at character pos (int) [in val (str)]
TextArea.prototype.getWord = function(pos, val) {
- if (!val) {
- val = this.elem.val();
+ if (!val) {
+ val = this.elem.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 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 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;
- }
+ var lastLetter = j;
+ var word = val.substring(firstLetter, lastLetter);
+ return word;
+}
function cleanNewlines(str) {
- var s = str.replace(/\r\n|\r|\n/g, '\n');
- return s;
- }
+ var s = str.replace(/\r\n|\r|\n/g, '\n');
+ return s;
+}
//takes an srt as param, loads into txtarea
TextArea.prototype.fromSrt = function(txt) {
- var that = this;
- this.spans = [];
- var cleaned = cleanNewlines(txt);
- var srt = strip(cleaned);
- var srt_ = srt.split('\n\n');
- var s;
- for(s in srt_) {
- st = srt_[s].split('\n');
- if(st.length >=2) {
- var n = st[0];
- var i = strip(st[1].split(' --> ')[0]);
- var o = strip(st[1].split(' --> ')[1]);
- var t = st[2];
- if(st.length > 2) {
- for(j=3; j=2) {
+ var n = st[0];
+ var i = strip(st[1].split(' --> ')[0]);
+ var o = strip(st[1].split(' --> ')[1]);
+ var t = st[2];
+ if(st.length > 2) {
+ for(j=3; j " + "0" + ms2npt(s.tcOutMs).replace(".", ",");
- srt += "\n";
- srt += text;
- srt += "\n\n";
+ var srt = '';
+ var srtNo = start_no;
+ 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(Video.player.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++;
+ }
}
- else if (fmt == 'enc') {
- srt += srtNo + ms2frames(s.tcInMs) + " " + ms2frames(s.tcOutMs) + " " + text;
- srt += "\n\n";
- }
- srtNo++;
- }
- }
- return srt;
- }
+ return srt;
+}
//returns textarea formatted to .srt
TextArea.prototype.toSrt = function(fmt) {
- if (!fmt) var fmt = 'srt';
- var text = cleanNewlines(this.elem.val());
- 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";
- }
+ if (!fmt) var fmt = 'srt';
+ var text = cleanNewlines(this.elem.val());
+ 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] = new Span(tcIn, tcOut, t, j);
+ j++;
+ } else {
+ i++;
}
- var tcOut = $.trim(thisLine);
- spans[j] = new Span(tcIn, tcOut, t, j);
- j++;
- } else {
- i++;
- }
}
- this.spans = spans;
- var srt = spansToSrt(spans, fmt);
-// console.log(srt);
- return Ox.encodeUTF8(srt);
+ this.spans = spans;
+ var srt = spansToSrt(spans, fmt);
+ //console.log(srt);
+ return Ox.encodeUTF8(srt);
}
TextArea.prototype.addTime = function(ms, start_no) {
-// console.log(ms);
- this.toSrt();
- var s = [];
- var spans = this.spans;
- for (var i=0; i < spans.length;i++) {
- s[i] = {
- index: i,
- tcOutMs: spans[i].tcOutMs + ms,
- text: spans[i].text,
- tcInMs: spans[i].tcInMs + ms
- }
- }
- return spansToSrt(s, 'srt', start_no);
+//console.log(ms);
+ this.toSrt();
+ var s = [];
+ var spans = this.spans;
+ for (var i=0; i < spans.length;i++) {
+ s[i] = {
+ index: i,
+ tcOutMs: spans[i].tcOutMs + ms,
+ text: spans[i].text,
+ tcInMs: spans[i].tcInMs + ms
+ }
+ }
+ return spansToSrt(s, 'srt', start_no);
}
TextArea.prototype.toHTML = function() {
- var spans = this.spans;
- var html = '';
- var span, txt;
- for (var i=0; i\n';
- txt += '';
- txt += (i + 1).toString();
- txt += "\n";
- txt += '
\n';
- txt += span.text + "\n";
- txt += "
\n\n";
- html += txt;
- }
- return Ox.encodeUTF8(html);
+ var spans = this.spans;
+ var html = '';
+ var span, txt;
+ for (var i=0; i\n';
+ txt += '';
+ txt += (i + 1).toString();
+ txt += "\n";
+ txt += '
\n';
+ txt += span.text + "\n";
+ txt += "\n\n";
+ html += txt;
+ }
+ return Ox.encodeUTF8(html);
}
//creates new Span (tcIn and tcOut in npt format)
var Span = function(tcIn, tcOut, text, index) {
- this.index = index;
- this.tcOutMs = npt2ms(tcOut);
- this.text = text;
- this.tcInMs = npt2ms(tcIn);
- }
+ this.index = index;
+ this.tcOutMs = npt2ms(tcOut);
+ this.text = text;
+ this.tcInMs = npt2ms(tcIn);
+}
var SeekBar = function(elem) {
- this.elem = $('#' + elem);
- this.pointerId = "seekPointer";
- this.width = this.elem.width();
- this.init()
- }
+ this.elem = $('#' + elem);
+ this.pointerId = "seekPointer";
+ this.width = this.elem.width();
+ this.init()
+}
SeekBar.prototype.init = function() {
- var that = this;
- var e = $('');
- e.attr("id", that.pointerId);
- e.draggable({
- containment: 'parent',
- axis: 'horizontally',
- drag: function() {
- clearInterval(videoListener);
- var pos = that.get();
- $('#timeCode').html(ms2npt(pos));
- },
- stop: function() {
- var pos = that.get();
- Video.set(pos);
- videoListener = setInterval(Video.listener, 250);
- }
- });
- that.elem.append(e);
- this.pointerElem = e;
- }
+ var that = this;
+ var e = $('');
+ e.attr("id", that.pointerId);
+ e.draggable({
+ containment: 'parent',
+ axis: 'horizontally',
+ drag: function() {
+ clearInterval(videoListener);
+ var pos = that.get();
+ $('#timeCode').html(ms2npt(pos));
+ },
+ stop: function() {
+ var pos = that.get();
+ Video.set(pos);
+ videoListener = setInterval(Video.listener, 250);
+ }
+ });
+ that.elem.append(e);
+ this.pointerElem = e;
+}
//gets current time-code (int) of seekbar position
SeekBar.prototype.get = function() {
- var cssPos = parseInt(this.pointerElem.css("left"));
- var pos = parseInt((cssPos / this.width) * (Video.player.duration * 1000));
- return pos;
- }
+ var cssPos = parseInt(this.pointerElem.css("left"));
+ var pos = parseInt((cssPos / this.width) * (Video.player.duration * 1000));
+ return pos;
+}
//sets seek bar css pos according to current time-code
SeekBar.prototype.set = function(ms) {
- var cssPos = parseInt(((ms / 1000) / Video.player.duration) * this.width);
- this.elem.css("left", cssPos + "px");
- }
+ var cssPos = parseInt(((ms / 1000) / Video.player.duration) * this.width);
+ this.elem.css("left", cssPos + "px");
+}
/*
var KeyboardController = function() {
this.
- }
+}
*/
var User = function() {
- this.padmaUser = typeof user != 'undefined' ? user : null;
- this.hostname = 'chrome://speedtrans';
- this.defaults = {
- 'fontSize': '13',
- 'theme': 'oxlight',
- 'recentVideo': '',
- 'recentSrt': '',
- 'autosave': 5,
- 'direction': 'ltr'
- };
- var autoSaveInterval = -1;
- this.callbacks = {
- 'fontSize': function(newSize) {
- textArea.elem.css("font-size", newSize + "px");
- },
- 'theme': function(theme) {
- if(['oxdark', 'oxmedium', 'oxlight'].indexOf(theme) == -1) {
- console.log('only supporting oxlight, oxmedium, oxdark, but ' + theme + ' was requested');
- theme = 'oxlight';
- }
- Ox.Theme(theme);
- },
- 'recentVideo': $.noop,
- 'recentSrt': $.noop,
- 'direction': function(val) {
- textArea.elem.css("direction", val);
+ this.padmaUser = typeof user != 'undefined' ? user : null;
+ this.hostname = 'chrome://speedtrans';
+ this.defaults = {
+ 'fontSize': '13',
+ 'theme': 'oxlight',
+ 'recentVideo': '',
+ 'recentSrt': '',
+ 'autosave': 5,
+ 'direction': 'ltr'
+ };
+ var autoSaveInterval = -1;
+ this.callbacks = {
+ 'fontSize': function(newSize) {
+ textArea.elem.css("font-size", newSize + "px");
+ },
+ 'theme': function(theme) {
+ if(['oxdark', 'oxmedium', 'oxlight'].indexOf(theme) == -1) {
+ console.log('only supporting oxlight, oxmedium, oxdark, but ' + theme + ' was requested');
+ theme = 'oxlight';
+ }
+ Ox.Theme(theme);
+ },
+ 'recentVideo': $.noop,
+ 'recentSrt': $.noop,
+ 'direction': function(val) {
+ textArea.elem.css("direction", val);
+ }
}
- }
}
User.prototype.init = function() {
- var prefs = ['fontSize', 'theme', 'direction'];
- for (var i = 0; i < prefs.length; i++) {
- var key = prefs[i];
- var val = this.get_pref(key);
- this.callbacks[key](val);
- }
+ var prefs = ['fontSize', 'theme', 'direction'];
+ for (var i = 0; i < prefs.length; i++) {
+ var key = prefs[i];
+ var val = this.get_pref(key);
+ this.callbacks[key](val);
+ }
}
User.prototype.set_pref = function(key, val) {
- var that = this;
- storage[key] = val;
- this.callbacks[key](val);
+ var that = this;
+ storage[key] = val;
+ this.callbacks[key](val);
}
User.prototype.get_pref = function(key) {
- var that = this;
- if (typeof storage[key] === 'undefined') {
- storage[key] = that.defaults[key];
- }
- return storage[key];
+ var that = this;
+ if (typeof storage[key] === 'undefined') {
+ storage[key] = that.defaults[key];
+ }
+ return storage[key];
}
User.prototype.set_prefs = function(keyvals) {
- for (key in keyvals) {
- if (keyvals.hasOwnProperty(key)) {
- this.set_pref(key, keyvals[key]);
- }
- }
+ for (key in keyvals) {
+ if (keyvals.hasOwnProperty(key)) {
+ this.set_pref(key, keyvals[key]);
+ }
+ }
}
User.prototype.get_prefs = function(keys) {
- var ret = {};
- for (var i=0; i < keys.length; i++) {
- var key = keys[i];
- ret[key] = this.get_pref(key);
- }
- return ret;
+ var ret = {};
+ for (var i=0; i < keys.length; i++) {
+ var key = keys[i];
+ ret[key] = this.get_pref(key);
+ }
+ return ret;
}
User.prototype.set_txt = function(filename, txt) {
- var that = this;
- storage['txt_' + filename] = txt;
+ var that = this;
+ storage['txt_' + filename] = txt;
}
User.prototype.get_txt = function(filename) {
- var that = this;
- return storage['txt_' + filename];
+ var that = this;
+ return storage['txt_' + filename];
}
function loadCuts(url, id) {