bitmovin-player-ui 3.78.0 → 3.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/artifact/artifact.tar.gz +0 -0
- package/dist/css/bitmovinplayer-ui.css +52 -6
- package/dist/css/bitmovinplayer-ui.min.css +1 -1
- package/dist/js/bitmovinplayer-ui.js +12 -8
- package/dist/js/bitmovinplayer-ui.min.js +1 -1
- package/dist/js/bitmovinplayer-ui.min.js.map +1 -1
- package/dist/js/framework/components/subtitleoverlay.d.ts +1 -1
- package/dist/js/framework/components/subtitleoverlay.js +10 -6
- package/dist/js/framework/main.js +1 -1
- package/package.json +1 -1
- package/src/scss/skin-modern/components/_subtitleoverlay-cea608.scss +15 -5
- package/src/ts/components/subtitleoverlay.ts +15 -6
|
@@ -25,7 +25,6 @@ export declare class SubtitleOverlay extends Container<ContainerConfig> {
|
|
|
25
25
|
private static readonly CLASS_CEA_608;
|
|
26
26
|
private static readonly CEA608_NUM_ROWS;
|
|
27
27
|
private static readonly CEA608_NUM_COLUMNS;
|
|
28
|
-
private static readonly CEA608_ROW_OFFSET;
|
|
29
28
|
private static readonly CEA608_COLUMN_OFFSET;
|
|
30
29
|
constructor(config?: ContainerConfig);
|
|
31
30
|
configure(player: PlayerAPI, uimanager: UIInstanceManager): void;
|
|
@@ -46,6 +45,7 @@ export declare class SubtitleLabel extends Label<SubtitleLabelConfig> {
|
|
|
46
45
|
get vtt(): VTTProperties;
|
|
47
46
|
get region(): string;
|
|
48
47
|
get regionStyle(): string;
|
|
48
|
+
set regionStyle(style: string);
|
|
49
49
|
}
|
|
50
50
|
export declare class SubtitleRegionContainerManager {
|
|
51
51
|
private subtitleOverlay;
|
|
@@ -154,17 +154,19 @@ var SubtitleOverlay = exports.SubtitleOverlay = /** @class */ (function (_super)
|
|
|
154
154
|
};
|
|
155
155
|
SubtitleOverlay.prototype.generateLabel = function (event) {
|
|
156
156
|
// Sanitize cue data (must be done before the cue ID is generated in subtitleManager.cueEnter / update)
|
|
157
|
+
var region = event.region;
|
|
157
158
|
if (event.position) {
|
|
158
159
|
// Sometimes the positions are undefined, we assume them to be zero
|
|
159
160
|
event.position.row = event.position.row || 0;
|
|
160
161
|
event.position.column = event.position.column || 0;
|
|
162
|
+
region = region || "cea608-row-".concat(event.position.row);
|
|
161
163
|
}
|
|
162
164
|
var label = new SubtitleLabel({
|
|
163
165
|
// Prefer the HTML subtitle text if set, else try generating a image tag as string from the image attribute,
|
|
164
166
|
// else use the plain text
|
|
165
167
|
text: event.html || ActiveSubtitleManager.generateImageTagText(event.image) || event.text,
|
|
166
168
|
vtt: event.vtt,
|
|
167
|
-
region:
|
|
169
|
+
region: region,
|
|
168
170
|
regionStyle: event.regionStyle,
|
|
169
171
|
});
|
|
170
172
|
return label;
|
|
@@ -235,6 +237,7 @@ var SubtitleOverlay = exports.SubtitleOverlay = /** @class */ (function (_super)
|
|
|
235
237
|
'font-size': "".concat(fontSize, "px"),
|
|
236
238
|
'letter-spacing': "".concat(fontLetterSpacing, "px"),
|
|
237
239
|
});
|
|
240
|
+
label.regionStyle = "line-height: ".concat(fontSize, "px;");
|
|
238
241
|
}
|
|
239
242
|
}
|
|
240
243
|
};
|
|
@@ -265,11 +268,11 @@ var SubtitleOverlay = exports.SubtitleOverlay = /** @class */ (function (_super)
|
|
|
265
268
|
}
|
|
266
269
|
}
|
|
267
270
|
label.getDomElement().css({
|
|
268
|
-
'left': "".concat(event.position.column * SubtitleOverlay.CEA608_COLUMN_OFFSET, "%"),
|
|
269
|
-
'top': "".concat(event.position.row * SubtitleOverlay.CEA608_ROW_OFFSET, "%"),
|
|
271
|
+
'margin-left': "".concat(event.position.column * SubtitleOverlay.CEA608_COLUMN_OFFSET, "%"),
|
|
270
272
|
'font-size': "".concat(fontSize, "px"),
|
|
271
273
|
'letter-spacing': "".concat(fontLetterSpacing, "px"),
|
|
272
274
|
});
|
|
275
|
+
label.regionStyle = "line-height: ".concat(fontSize, "px;");
|
|
273
276
|
});
|
|
274
277
|
var reset = function () {
|
|
275
278
|
_this.getDomElement().removeClass(_this.prefixCss(SubtitleOverlay.CLASS_CEA_608));
|
|
@@ -283,7 +286,7 @@ var SubtitleOverlay = exports.SubtitleOverlay = /** @class */ (function (_super)
|
|
|
283
286
|
}
|
|
284
287
|
});
|
|
285
288
|
player.on(player.exports.PlayerEvent.SourceUnloaded, reset);
|
|
286
|
-
player.on(player.exports.PlayerEvent.
|
|
289
|
+
player.on(player.exports.PlayerEvent.SubtitleEnable, reset);
|
|
287
290
|
player.on(player.exports.PlayerEvent.SubtitleDisabled, reset);
|
|
288
291
|
};
|
|
289
292
|
SubtitleOverlay.prototype.enablePreviewSubtitleLabel = function () {
|
|
@@ -307,8 +310,6 @@ var SubtitleOverlay = exports.SubtitleOverlay = /** @class */ (function (_super)
|
|
|
307
310
|
SubtitleOverlay.CEA608_NUM_ROWS = 15;
|
|
308
311
|
// The number of columns in a cea608 grid
|
|
309
312
|
SubtitleOverlay.CEA608_NUM_COLUMNS = 32;
|
|
310
|
-
// The offset in percent for one row (which is also the height of a row)
|
|
311
|
-
SubtitleOverlay.CEA608_ROW_OFFSET = 100 / SubtitleOverlay.CEA608_NUM_ROWS;
|
|
312
313
|
// The offset in percent for one column (which is also the width of a column)
|
|
313
314
|
SubtitleOverlay.CEA608_COLUMN_OFFSET = 100 / SubtitleOverlay.CEA608_NUM_COLUMNS;
|
|
314
315
|
return SubtitleOverlay;
|
|
@@ -341,6 +342,9 @@ var SubtitleLabel = /** @class */ (function (_super) {
|
|
|
341
342
|
get: function () {
|
|
342
343
|
return this.config.regionStyle;
|
|
343
344
|
},
|
|
345
|
+
set: function (style) {
|
|
346
|
+
this.config.regionStyle = style;
|
|
347
|
+
},
|
|
344
348
|
enumerable: false,
|
|
345
349
|
configurable: true
|
|
346
350
|
});
|
|
@@ -16,7 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.ClickOverlay = exports.VolumeControlButton = exports.TitleBar = exports.SubtitleSelectBox = exports.SubtitleOverlay = exports.SeekBarLabel = exports.RecommendationOverlay = exports.ErrorMessageOverlay = exports.Component = exports.CastToggleButton = exports.CastStatusOverlay = exports.AudioTrackSelectBox = exports.AudioQualitySelectBox = exports.Label = exports.Container = exports.UIContainer = exports.Watermark = exports.VRToggleButton = exports.VolumeToggleButton = exports.VideoQualitySelectBox = exports.ToggleButton = exports.SettingsToggleButton = exports.SettingsPanel = exports.ItemSelectionList = exports.SelectBox = exports.SeekBar = exports.PlaybackToggleButton = exports.PlaybackTimeLabelMode = exports.PlaybackTimeLabel = exports.HugePlaybackToggleButton = exports.FullscreenToggleButton = exports.ControlBar = exports.Button = exports.ListOrientation = exports.ListNavigationGroup = exports.RootNavigationGroup = exports.NavigationGroup = exports.SpatialNavigation = exports.I18n = exports.i18n = exports.ErrorUtils = exports.StorageUtils = exports.BrowserUtils = exports.UIUtils = exports.PlayerUtils = exports.StringUtils = exports.ArrayUtils = exports.DemoFactory = exports.UIFactory = exports.version = void 0;
|
|
18
18
|
exports.ListSelector = exports.QuickSeekButton = exports.ReplayButton = exports.SettingsPanelItem = exports.SubtitleSettingsPanelPage = exports.SettingsPanelPageOpenButton = exports.SettingsPanelPageBackButton = exports.SettingsPanelPage = exports.AudioTrackListBox = exports.SubtitleListBox = exports.ListBox = exports.SubtitleSettingsResetButton = exports.WindowOpacitySelectBox = exports.WindowColorSelectBox = exports.SubtitleSettingsLabel = exports.SubtitleSettingSelectBox = exports.FontSizeSelectBox = exports.FontOpacitySelectBox = exports.FontFamilySelectBox = exports.FontColorSelectBox = exports.CharacterEdgeSelectBox = exports.BackgroundOpacitySelectBox = exports.BackgroundColorSelectBox = exports.Spacer = exports.PictureInPictureToggleButton = exports.VolumeSlider = exports.AirPlayToggleButton = exports.MetadataLabelContent = exports.MetadataLabel = exports.CloseButton = exports.PlaybackToggleOverlay = exports.CastUIContainer = exports.BufferingOverlay = exports.HugeReplayButton = exports.PlaybackSpeedSelectBox = exports.AdClickOverlay = exports.AdMessageLabel = exports.AdSkipButton = void 0;
|
|
19
|
-
exports.version = '3.
|
|
19
|
+
exports.version = '3.80.0';
|
|
20
20
|
// Management
|
|
21
21
|
__exportStar(require("./uimanager"), exports);
|
|
22
22
|
__exportStar(require("./uiconfig"), exports);
|
package/package.json
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use 'sass:math';
|
|
2
|
+
|
|
1
3
|
.#{$prefix}-ui-subtitle-overlay {
|
|
2
4
|
&.#{$prefix}-cea608 {
|
|
3
5
|
|
|
@@ -6,18 +8,26 @@
|
|
|
6
8
|
right: 3em;
|
|
7
9
|
top: 2em;
|
|
8
10
|
|
|
9
|
-
.#{$prefix}-subtitle-region-container
|
|
10
|
-
|
|
11
|
+
.#{$prefix}-subtitle-region-container {
|
|
12
|
+
height: math.div(100%, 15);
|
|
11
13
|
left: 0;
|
|
14
|
+
line-height: 1em;
|
|
12
15
|
right: 0;
|
|
13
|
-
|
|
16
|
+
text-align: left;
|
|
17
|
+
|
|
18
|
+
// Define positions for all 15 rows
|
|
19
|
+
@for $i from 0 through 14 {
|
|
20
|
+
&.#{$prefix}-subtitle-position-cea608-row-#{$i} {
|
|
21
|
+
top: math.div($i, 15) * 100%;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
14
24
|
}
|
|
15
25
|
|
|
16
26
|
.#{$prefix}-ui-subtitle-label {
|
|
27
|
+
display: inline-block;
|
|
17
28
|
font-family: 'Courier New', Courier, 'Nimbus Mono L', 'Cutive Mono', monospace;
|
|
18
|
-
line-height: 1em;
|
|
19
|
-
position: absolute;
|
|
20
29
|
text-transform: uppercase;
|
|
30
|
+
vertical-align: bottom;
|
|
21
31
|
|
|
22
32
|
// sass-lint:disable force-pseudo-nesting nesting-depth
|
|
23
33
|
&:nth-child(1n-1)::after {
|
|
@@ -38,8 +38,6 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
|
|
|
38
38
|
private static readonly CEA608_NUM_ROWS = 15;
|
|
39
39
|
// The number of columns in a cea608 grid
|
|
40
40
|
private static readonly CEA608_NUM_COLUMNS = 32;
|
|
41
|
-
// The offset in percent for one row (which is also the height of a row)
|
|
42
|
-
private static readonly CEA608_ROW_OFFSET = 100 / SubtitleOverlay.CEA608_NUM_ROWS;
|
|
43
41
|
// The offset in percent for one column (which is also the width of a column)
|
|
44
42
|
private static readonly CEA608_COLUMN_OFFSET = 100 / SubtitleOverlay.CEA608_NUM_COLUMNS;
|
|
45
43
|
|
|
@@ -198,10 +196,14 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
|
|
|
198
196
|
|
|
199
197
|
generateLabel(event: SubtitleCueEvent): SubtitleLabel {
|
|
200
198
|
// Sanitize cue data (must be done before the cue ID is generated in subtitleManager.cueEnter / update)
|
|
199
|
+
let region = event.region;
|
|
200
|
+
|
|
201
201
|
if (event.position) {
|
|
202
202
|
// Sometimes the positions are undefined, we assume them to be zero
|
|
203
203
|
event.position.row = event.position.row || 0;
|
|
204
204
|
event.position.column = event.position.column || 0;
|
|
205
|
+
|
|
206
|
+
region = region || `cea608-row-${event.position.row}`;
|
|
205
207
|
}
|
|
206
208
|
|
|
207
209
|
const label = new SubtitleLabel({
|
|
@@ -209,7 +211,7 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
|
|
|
209
211
|
// else use the plain text
|
|
210
212
|
text: event.html || ActiveSubtitleManager.generateImageTagText(event.image) || event.text,
|
|
211
213
|
vtt: event.vtt,
|
|
212
|
-
region:
|
|
214
|
+
region: region,
|
|
213
215
|
regionStyle: event.regionStyle,
|
|
214
216
|
});
|
|
215
217
|
|
|
@@ -287,6 +289,8 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
|
|
|
287
289
|
'font-size': `${fontSize}px`,
|
|
288
290
|
'letter-spacing': `${fontLetterSpacing}px`,
|
|
289
291
|
});
|
|
292
|
+
|
|
293
|
+
label.regionStyle = `line-height: ${fontSize}px;`;
|
|
290
294
|
}
|
|
291
295
|
}
|
|
292
296
|
};
|
|
@@ -321,11 +325,12 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
|
|
|
321
325
|
}
|
|
322
326
|
|
|
323
327
|
label.getDomElement().css({
|
|
324
|
-
'left': `${event.position.column * SubtitleOverlay.CEA608_COLUMN_OFFSET}%`,
|
|
325
|
-
'top': `${event.position.row * SubtitleOverlay.CEA608_ROW_OFFSET}%`,
|
|
328
|
+
'margin-left': `${event.position.column * SubtitleOverlay.CEA608_COLUMN_OFFSET}%`,
|
|
326
329
|
'font-size': `${fontSize}px`,
|
|
327
330
|
'letter-spacing': `${fontLetterSpacing}px`,
|
|
328
331
|
});
|
|
332
|
+
|
|
333
|
+
label.regionStyle = `line-height: ${fontSize}px;`;
|
|
329
334
|
});
|
|
330
335
|
|
|
331
336
|
const reset = () => {
|
|
@@ -342,7 +347,7 @@ export class SubtitleOverlay extends Container<ContainerConfig> {
|
|
|
342
347
|
});
|
|
343
348
|
|
|
344
349
|
player.on(player.exports.PlayerEvent.SourceUnloaded, reset);
|
|
345
|
-
player.on(player.exports.PlayerEvent.
|
|
350
|
+
player.on(player.exports.PlayerEvent.SubtitleEnable, reset);
|
|
346
351
|
player.on(player.exports.PlayerEvent.SubtitleDisabled, reset);
|
|
347
352
|
}
|
|
348
353
|
|
|
@@ -400,6 +405,10 @@ export class SubtitleLabel extends Label<SubtitleLabelConfig> {
|
|
|
400
405
|
get regionStyle(): string {
|
|
401
406
|
return this.config.regionStyle;
|
|
402
407
|
}
|
|
408
|
+
|
|
409
|
+
set regionStyle(style: string) {
|
|
410
|
+
this.config.regionStyle = style;
|
|
411
|
+
}
|
|
403
412
|
}
|
|
404
413
|
|
|
405
414
|
class ActiveSubtitleManager {
|