63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
var _vttparser = require('./vttparser');
|
|
|
|
var Cues = {
|
|
|
|
newCue: function newCue(track, startTime, endTime, captionScreen) {
|
|
var row;
|
|
var cue;
|
|
var indenting;
|
|
var indent;
|
|
var text;
|
|
var VTTCue = window.VTTCue || window.TextTrackCue;
|
|
|
|
for (var r = 0; r < captionScreen.rows.length; r++) {
|
|
row = captionScreen.rows[r];
|
|
indenting = true;
|
|
indent = 0;
|
|
text = '';
|
|
|
|
if (!row.isEmpty()) {
|
|
for (var c = 0; c < row.chars.length; c++) {
|
|
if (row.chars[c].uchar.match(/\s/) && indenting) {
|
|
indent++;
|
|
} else {
|
|
text += row.chars[c].uchar;
|
|
indenting = false;
|
|
}
|
|
}
|
|
//To be used for cleaning-up orphaned roll-up captions
|
|
row.cueStartTime = startTime;
|
|
|
|
// Give a slight bump to the endTime if it's equal to startTime to avoid a SyntaxError in IE
|
|
if (startTime === endTime) {
|
|
endTime += 0.0001;
|
|
}
|
|
|
|
cue = new VTTCue(startTime, endTime, (0, _vttparser.fixLineBreaks)(text.trim()));
|
|
|
|
if (indent >= 16) {
|
|
indent--;
|
|
} else {
|
|
indent++;
|
|
}
|
|
|
|
// VTTCue.line get's flakey when using controls, so let's now include line 13&14
|
|
// also, drop line 1 since it's to close to the top
|
|
if (navigator.userAgent.match(/Firefox\//)) {
|
|
cue.line = r + 1;
|
|
} else {
|
|
cue.line = r > 7 ? r - 2 : r + 1;
|
|
}
|
|
cue.align = 'left';
|
|
// Clamp the position between 0 and 100 - if out of these bounds, Firefox throws an exception and captions break
|
|
cue.position = Math.max(0, Math.min(100, 100 * (indent / 32) + (navigator.userAgent.match(/Firefox\//) ? 50 : 0)));
|
|
track.addCue(cue);
|
|
}
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
module.exports = Cues; |