unified-video-framework 1.4.439 → 1.4.440
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/package.json +1 -1
- package/packages/core/dist/version.d.ts +1 -1
- package/packages/core/dist/version.js +1 -1
- package/packages/core/src/version.ts +1 -1
- package/packages/web/dist/WebPlayer.d.ts +2 -0
- package/packages/web/dist/WebPlayer.d.ts.map +1 -1
- package/packages/web/dist/WebPlayer.js +50 -13
- package/packages/web/dist/WebPlayer.js.map +1 -1
- package/packages/web/dist/react/types/FlashNewsTickerTypes.d.ts +2 -0
- package/packages/web/dist/react/types/FlashNewsTickerTypes.d.ts.map +1 -1
- package/packages/web/src/WebPlayer.ts +72 -12
- package/packages/web/src/react/types/FlashNewsTickerTypes.ts +14 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlashNewsTickerTypes.d.ts","sourceRoot":"","sources":["../../../src/react/types/FlashNewsTickerTypes.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,WAAW,CAAC;AASxD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC;AAWrF,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAQ7F,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAK3D,MAAM,MAAM,cAAc,GACtB,cAAc,GACd,eAAe,GACf,WAAW,GACX,WAAW,GACX,QAAQ,CAAC;AAKb,MAAM,WAAW,aAAa;IAE5B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAG3B,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,QAAQ,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"FlashNewsTickerTypes.d.ts","sourceRoot":"","sources":["../../../src/react/types/FlashNewsTickerTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -3321,11 +3321,12 @@ export class WebPlayer extends BasePlayer {
|
|
|
3321
3321
|
headlineLine.style.cssText = `
|
|
3322
3322
|
display: flex;
|
|
3323
3323
|
align-items: center;
|
|
3324
|
+
justify-content: center;
|
|
3324
3325
|
min-height: ${topLineHeight}px;
|
|
3325
3326
|
padding: ${topLineConfig.padding || 8}px 12px;
|
|
3326
3327
|
background: ${topLineConfig.backgroundColor || 'transparent'};
|
|
3327
3328
|
overflow: hidden;
|
|
3328
|
-
|
|
3329
|
+
text-align: center;
|
|
3329
3330
|
`;
|
|
3330
3331
|
|
|
3331
3332
|
const headlineText = document.createElement('span');
|
|
@@ -3337,6 +3338,8 @@ export class WebPlayer extends BasePlayer {
|
|
|
3337
3338
|
font-size: ${topLineFontSize}px;
|
|
3338
3339
|
font-weight: 700;
|
|
3339
3340
|
line-height: ${topLineLineHeight};
|
|
3341
|
+
text-align: center;
|
|
3342
|
+
width: 100%;
|
|
3340
3343
|
${topLineMultiLine ? `
|
|
3341
3344
|
display: -webkit-box;
|
|
3342
3345
|
-webkit-line-clamp: ${topLineMaxLines};
|
|
@@ -3354,13 +3357,11 @@ export class WebPlayer extends BasePlayer {
|
|
|
3354
3357
|
|
|
3355
3358
|
// Set initial headline content
|
|
3356
3359
|
if (firstItem) {
|
|
3360
|
+
const headlineContent = firstItem.headline || firstItem.text;
|
|
3357
3361
|
if (firstItem.headlineHtml) {
|
|
3358
|
-
headlineText.innerHTML = firstItem.headlineHtml;
|
|
3359
|
-
} else if (
|
|
3360
|
-
headlineText.
|
|
3361
|
-
} else {
|
|
3362
|
-
// Fallback to text if no headline
|
|
3363
|
-
headlineText.textContent = firstItem.text;
|
|
3362
|
+
headlineText.innerHTML = this.formatHeadlineText(firstItem.headlineHtml, topLineConfig, true);
|
|
3363
|
+
} else if (headlineContent) {
|
|
3364
|
+
headlineText.innerHTML = this.formatHeadlineText(headlineContent, topLineConfig, false);
|
|
3364
3365
|
}
|
|
3365
3366
|
}
|
|
3366
3367
|
|
|
@@ -3721,6 +3722,64 @@ export class WebPlayer extends BasePlayer {
|
|
|
3721
3722
|
});
|
|
3722
3723
|
}
|
|
3723
3724
|
|
|
3725
|
+
/**
|
|
3726
|
+
* Format headline text with optional forced line breaks
|
|
3727
|
+
*/
|
|
3728
|
+
private formatHeadlineText(text: string, topLineConfig: { forceMultiLine?: boolean; breakAt?: number | string }, isHtml: boolean = false): string {
|
|
3729
|
+
if (!topLineConfig.forceMultiLine) {
|
|
3730
|
+
// If it's HTML, return as-is; otherwise escape for safety
|
|
3731
|
+
return isHtml ? text : this.escapeHtml(text);
|
|
3732
|
+
}
|
|
3733
|
+
|
|
3734
|
+
// Calculate break position
|
|
3735
|
+
let breakPosition: number;
|
|
3736
|
+
const breakAt = topLineConfig.breakAt || '50%';
|
|
3737
|
+
|
|
3738
|
+
if (typeof breakAt === 'string' && breakAt.endsWith('%')) {
|
|
3739
|
+
const percentage = parseFloat(breakAt) / 100;
|
|
3740
|
+
breakPosition = Math.floor(text.length * percentage);
|
|
3741
|
+
} else {
|
|
3742
|
+
breakPosition = typeof breakAt === 'number' ? breakAt : Math.floor(text.length / 2);
|
|
3743
|
+
}
|
|
3744
|
+
|
|
3745
|
+
// Find the nearest space to break at (for better readability)
|
|
3746
|
+
let actualBreakPos = breakPosition;
|
|
3747
|
+
|
|
3748
|
+
// Look for a space near the break position
|
|
3749
|
+
const searchRange = Math.min(15, Math.floor(text.length / 4)); // Search within ~15 chars or 25% of text
|
|
3750
|
+
for (let i = 0; i <= searchRange; i++) {
|
|
3751
|
+
// Check forward first, then backward
|
|
3752
|
+
if (breakPosition + i < text.length && text[breakPosition + i] === ' ') {
|
|
3753
|
+
actualBreakPos = breakPosition + i;
|
|
3754
|
+
break;
|
|
3755
|
+
}
|
|
3756
|
+
if (breakPosition - i >= 0 && text[breakPosition - i] === ' ') {
|
|
3757
|
+
actualBreakPos = breakPosition - i;
|
|
3758
|
+
break;
|
|
3759
|
+
}
|
|
3760
|
+
}
|
|
3761
|
+
|
|
3762
|
+
// Split and join with <br>
|
|
3763
|
+
const line1 = text.substring(0, actualBreakPos).trim();
|
|
3764
|
+
const line2 = text.substring(actualBreakPos).trim();
|
|
3765
|
+
|
|
3766
|
+
if (isHtml) {
|
|
3767
|
+
// For HTML content, try to insert <br> at a reasonable position
|
|
3768
|
+
return `${line1}<br>${line2}`;
|
|
3769
|
+
}
|
|
3770
|
+
|
|
3771
|
+
return `${this.escapeHtml(line1)}<br>${this.escapeHtml(line2)}`;
|
|
3772
|
+
}
|
|
3773
|
+
|
|
3774
|
+
/**
|
|
3775
|
+
* Escape HTML special characters
|
|
3776
|
+
*/
|
|
3777
|
+
private escapeHtml(text: string): string {
|
|
3778
|
+
const div = document.createElement('div');
|
|
3779
|
+
div.textContent = text;
|
|
3780
|
+
return div.innerHTML;
|
|
3781
|
+
}
|
|
3782
|
+
|
|
3724
3783
|
/**
|
|
3725
3784
|
* Update headline and detail content for current item
|
|
3726
3785
|
*/
|
|
@@ -3728,12 +3787,13 @@ export class WebPlayer extends BasePlayer {
|
|
|
3728
3787
|
// Update headline
|
|
3729
3788
|
const headline = this.tickerHeadlineElement?.querySelector('.uvf-ticker-headline-text') as HTMLSpanElement;
|
|
3730
3789
|
if (headline) {
|
|
3790
|
+
const topLineConfig = this.tickerConfig?.broadcastStyle?.twoLineDisplay?.topLine || {};
|
|
3791
|
+
const headlineContent = item.headline || item.text;
|
|
3792
|
+
|
|
3731
3793
|
if (item.headlineHtml) {
|
|
3732
|
-
headline.innerHTML = item.headlineHtml;
|
|
3733
|
-
} else if (
|
|
3734
|
-
headline.
|
|
3735
|
-
} else {
|
|
3736
|
-
headline.textContent = item.text;
|
|
3794
|
+
headline.innerHTML = this.formatHeadlineText(item.headlineHtml, topLineConfig, true);
|
|
3795
|
+
} else if (headlineContent) {
|
|
3796
|
+
headline.innerHTML = this.formatHeadlineText(headlineContent, topLineConfig, false);
|
|
3737
3797
|
}
|
|
3738
3798
|
}
|
|
3739
3799
|
|
|
@@ -64,6 +64,20 @@ export interface TopLineConfig {
|
|
|
64
64
|
/** Maximum lines before truncation with ellipsis. Default: 2 */
|
|
65
65
|
maxLines?: number;
|
|
66
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Force text to split into multiple lines even if short.
|
|
69
|
+
* When true, text will be split at approximately the midpoint.
|
|
70
|
+
* Default: false
|
|
71
|
+
*/
|
|
72
|
+
forceMultiLine?: boolean;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Custom line break position (character index or percentage like '50%').
|
|
76
|
+
* Only used when forceMultiLine is true.
|
|
77
|
+
* Default: '50%' (midpoint)
|
|
78
|
+
*/
|
|
79
|
+
breakAt?: number | string;
|
|
80
|
+
|
|
67
81
|
/** Minimum height in pixels. Default: 32 */
|
|
68
82
|
minHeight?: number;
|
|
69
83
|
|