unified-video-framework 1.4.439 → 1.4.441
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 +7 -0
- package/packages/web/dist/WebPlayer.d.ts.map +1 -1
- package/packages/web/dist/WebPlayer.js +435 -14
- package/packages/web/dist/WebPlayer.js.map +1 -1
- package/packages/web/dist/react/types/FlashNewsTickerTypes.d.ts +11 -0
- package/packages/web/dist/react/types/FlashNewsTickerTypes.d.ts.map +1 -1
- package/packages/web/src/WebPlayer.ts +525 -15
- package/packages/web/src/react/types/FlashNewsTickerTypes.ts +52 -1
|
@@ -7,6 +7,8 @@ export interface TopLineConfig {
|
|
|
7
7
|
mode?: 'static' | 'scroll';
|
|
8
8
|
multiLine?: boolean;
|
|
9
9
|
maxLines?: number;
|
|
10
|
+
forceMultiLine?: boolean;
|
|
11
|
+
breakAt?: number | string;
|
|
10
12
|
minHeight?: number;
|
|
11
13
|
fontSize?: number;
|
|
12
14
|
lineHeight?: number;
|
|
@@ -116,6 +118,15 @@ export interface FlashNewsTickerConfig {
|
|
|
116
118
|
gap?: number;
|
|
117
119
|
loop?: boolean;
|
|
118
120
|
separator?: string;
|
|
121
|
+
variant?: 'standard' | 'breaking' | 'live' | 'broadcast1' | 'broadcast2' | 'broadcast3' | 'broadcast4' | 'custom';
|
|
122
|
+
badgeText?: string;
|
|
123
|
+
badgeColor?: string;
|
|
124
|
+
badgeTextColor?: string;
|
|
125
|
+
accentColor?: string;
|
|
126
|
+
pulseBadge?: boolean;
|
|
127
|
+
iconUrl?: string;
|
|
128
|
+
headline?: string;
|
|
129
|
+
secondaryItems?: FlashNewsTickerItem[];
|
|
119
130
|
topOffset?: number;
|
|
120
131
|
bottomOffset?: number;
|
|
121
132
|
}
|
|
@@ -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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"}
|
|
@@ -2573,10 +2573,17 @@ export class WebPlayer extends BasePlayer {
|
|
|
2573
2573
|
}
|
|
2574
2574
|
|
|
2575
2575
|
private createTickerElement(config: FlashNewsTickerConfig, position: 'top' | 'bottom'): HTMLDivElement {
|
|
2576
|
-
|
|
2577
|
-
|
|
2576
|
+
const variant = config.variant || 'standard';
|
|
2577
|
+
|
|
2578
|
+
// Route to specific broadcast layouts
|
|
2579
|
+
if (variant === 'broadcast1') return this.createBroadcast1Element(config, position);
|
|
2580
|
+
if (variant === 'broadcast2') return this.createBroadcast2Element(config, position);
|
|
2581
|
+
if (variant === 'broadcast3') return this.createBroadcast3Element(config, position);
|
|
2582
|
+
if (variant === 'broadcast4') return this.createBroadcast4Element(config, position);
|
|
2583
|
+
|
|
2584
|
+
// Route to specific broadcast style if configured (older style)
|
|
2585
|
+
if (config.styleVariant === 'broadcast' || variant === 'breaking' || variant === 'live') {
|
|
2578
2586
|
const layoutStyle = config.broadcastStyle?.layoutStyle || 'broadcast';
|
|
2579
|
-
// Route to professional ticker for two-line or professional layouts
|
|
2580
2587
|
if (layoutStyle === 'two-line' || layoutStyle === 'professional') {
|
|
2581
2588
|
return this.createProfessionalTickerElement(config, position);
|
|
2582
2589
|
}
|
|
@@ -2877,6 +2884,449 @@ export class WebPlayer extends BasePlayer {
|
|
|
2877
2884
|
}
|
|
2878
2885
|
}
|
|
2879
2886
|
|
|
2887
|
+
private createBroadcast1Element(config: FlashNewsTickerConfig, position: 'top' | 'bottom'): HTMLDivElement {
|
|
2888
|
+
const ticker = document.createElement('div');
|
|
2889
|
+
ticker.className = `uvf-ticker-broadcast1 ticker-${position}`;
|
|
2890
|
+
|
|
2891
|
+
const height = config.height || 70;
|
|
2892
|
+
const bottomOffset = config.bottomOffset || 0;
|
|
2893
|
+
const topOffset = config.topOffset || 10;
|
|
2894
|
+
|
|
2895
|
+
ticker.style.cssText = `
|
|
2896
|
+
position: absolute;
|
|
2897
|
+
left: 10%;
|
|
2898
|
+
right: 10%;
|
|
2899
|
+
height: ${height}px;
|
|
2900
|
+
${position === 'top' ? `top: ${topOffset}px;` : `bottom: ${bottomOffset}px;`}
|
|
2901
|
+
display: flex;
|
|
2902
|
+
font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
|
|
2903
|
+
z-index: 100;
|
|
2904
|
+
pointer-events: none;
|
|
2905
|
+
`;
|
|
2906
|
+
|
|
2907
|
+
// 1. Globe Block (Left)
|
|
2908
|
+
const globeBlock = document.createElement('div');
|
|
2909
|
+
globeBlock.style.cssText = `
|
|
2910
|
+
width: ${height}px;
|
|
2911
|
+
height: ${height}px;
|
|
2912
|
+
background: linear-gradient(135deg, #cc0000 0%, #880000 100%);
|
|
2913
|
+
display: flex;
|
|
2914
|
+
align-items: center;
|
|
2915
|
+
justify-content: center;
|
|
2916
|
+
flex-shrink: 0;
|
|
2917
|
+
clip-path: polygon(0 0, 85% 0, 100% 100%, 0 100%);
|
|
2918
|
+
z-index: 10;
|
|
2919
|
+
box-shadow: 5px 0 15px rgba(0,0,0,0.5);
|
|
2920
|
+
`;
|
|
2921
|
+
const globe = this.createGlobeElement(true);
|
|
2922
|
+
globe.style.width = '60%';
|
|
2923
|
+
globe.style.height = '60%';
|
|
2924
|
+
globeBlock.appendChild(globe);
|
|
2925
|
+
ticker.appendChild(globeBlock);
|
|
2926
|
+
|
|
2927
|
+
// 2. Right Content (Dual Bars)
|
|
2928
|
+
const content = document.createElement('div');
|
|
2929
|
+
content.style.cssText = `
|
|
2930
|
+
flex-grow: 1;
|
|
2931
|
+
display: flex;
|
|
2932
|
+
flex-direction: column;
|
|
2933
|
+
margin-left: -${height * 0.15}px;
|
|
2934
|
+
`;
|
|
2935
|
+
|
|
2936
|
+
// Row 1: Top Blue Bar (Headline)
|
|
2937
|
+
const topBar = document.createElement('div');
|
|
2938
|
+
topBar.style.cssText = `
|
|
2939
|
+
height: 60%;
|
|
2940
|
+
background: linear-gradient(90deg, #1e3c72 0%, #2a5298 100%);
|
|
2941
|
+
clip-path: polygon(5% 0, 100% 0, 98% 100%, 0% 100%);
|
|
2942
|
+
display: flex;
|
|
2943
|
+
align-items: center;
|
|
2944
|
+
padding: 0 40px;
|
|
2945
|
+
color: white;
|
|
2946
|
+
`;
|
|
2947
|
+
|
|
2948
|
+
const breakingText = document.createElement('span');
|
|
2949
|
+
breakingText.textContent = 'BREAKING NEWS';
|
|
2950
|
+
breakingText.style.cssText = `
|
|
2951
|
+
font-weight: 900;
|
|
2952
|
+
font-style: italic;
|
|
2953
|
+
font-size: ${height * 0.22}px;
|
|
2954
|
+
margin-right: 20px;
|
|
2955
|
+
border-bottom: 2px solid white;
|
|
2956
|
+
`;
|
|
2957
|
+
topBar.appendChild(breakingText);
|
|
2958
|
+
|
|
2959
|
+
const headlineText = document.createElement('span');
|
|
2960
|
+
headlineText.textContent = config.headline || 'LOREM IPSUM DOLOR SIT AMET, CONSECTETUER';
|
|
2961
|
+
headlineText.style.cssText = `
|
|
2962
|
+
font-weight: 700;
|
|
2963
|
+
font-size: ${height * 0.25}px;
|
|
2964
|
+
white-space: nowrap;
|
|
2965
|
+
overflow: hidden;
|
|
2966
|
+
text-overflow: ellipsis;
|
|
2967
|
+
`;
|
|
2968
|
+
topBar.appendChild(headlineText);
|
|
2969
|
+
content.appendChild(topBar);
|
|
2970
|
+
|
|
2971
|
+
// Row 2: Bottom Black Bar (Scrolling Items)
|
|
2972
|
+
const bottomBar = document.createElement('div');
|
|
2973
|
+
bottomBar.style.cssText = `
|
|
2974
|
+
height: 40%;
|
|
2975
|
+
background: #000;
|
|
2976
|
+
display: flex;
|
|
2977
|
+
align-items: center;
|
|
2978
|
+
clip-path: polygon(1% 0, 100% 0, 100% 100%, 0% 100%);
|
|
2979
|
+
`;
|
|
2980
|
+
|
|
2981
|
+
// LIVE badge
|
|
2982
|
+
const liveBadge = document.createElement('div');
|
|
2983
|
+
liveBadge.textContent = 'LIVE';
|
|
2984
|
+
liveBadge.style.cssText = `
|
|
2985
|
+
background: #f1c40f;
|
|
2986
|
+
color: black;
|
|
2987
|
+
font-weight: 900;
|
|
2988
|
+
font-size: ${height * 0.15}px;
|
|
2989
|
+
padding: 2px 10px;
|
|
2990
|
+
margin-left: 20px;
|
|
2991
|
+
clip-path: polygon(0 0, 90% 0, 100% 100%, 0 100%);
|
|
2992
|
+
`;
|
|
2993
|
+
bottomBar.appendChild(liveBadge);
|
|
2994
|
+
|
|
2995
|
+
// Scrolling track
|
|
2996
|
+
const trackContainer = document.createElement('div');
|
|
2997
|
+
trackContainer.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center;`;
|
|
2998
|
+
|
|
2999
|
+
const track = this.createSeamlessScrollingTrack(config.items || [], config);
|
|
3000
|
+
track.style.fontSize = `${height * 0.18}px`;
|
|
3001
|
+
trackContainer.appendChild(track);
|
|
3002
|
+
bottomBar.appendChild(trackContainer);
|
|
3003
|
+
|
|
3004
|
+
content.appendChild(bottomBar);
|
|
3005
|
+
ticker.appendChild(content);
|
|
3006
|
+
|
|
3007
|
+
this.ensureTickerAnimations();
|
|
3008
|
+
return ticker;
|
|
3009
|
+
}
|
|
3010
|
+
|
|
3011
|
+
private createBroadcast2Element(config: FlashNewsTickerConfig, position: 'top' | 'bottom'): HTMLDivElement {
|
|
3012
|
+
const ticker = document.createElement('div');
|
|
3013
|
+
ticker.className = `uvf-ticker-broadcast2 ticker-${position}`;
|
|
3014
|
+
|
|
3015
|
+
const height = config.height || 75;
|
|
3016
|
+
const bottomOffset = config.bottomOffset || 0;
|
|
3017
|
+
const topOffset = config.topOffset || 10;
|
|
3018
|
+
|
|
3019
|
+
ticker.style.cssText = `
|
|
3020
|
+
position: absolute;
|
|
3021
|
+
left: 5%;
|
|
3022
|
+
right: 5%;
|
|
3023
|
+
height: ${height}px;
|
|
3024
|
+
${position === 'top' ? `top: ${topOffset}px;` : `bottom: ${bottomOffset}px;`}
|
|
3025
|
+
display: flex;
|
|
3026
|
+
align-items: flex-end;
|
|
3027
|
+
font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
|
|
3028
|
+
z-index: 100;
|
|
3029
|
+
pointer-events: none;
|
|
3030
|
+
`;
|
|
3031
|
+
|
|
3032
|
+
// Globe icon (floating on left)
|
|
3033
|
+
const globeContainer = document.createElement('div');
|
|
3034
|
+
globeContainer.style.cssText = `
|
|
3035
|
+
width: ${height * 0.8}px;
|
|
3036
|
+
height: ${height * 0.8}px;
|
|
3037
|
+
background: rgba(255,255,255,0.1);
|
|
3038
|
+
border-radius: 50%;
|
|
3039
|
+
display: flex;
|
|
3040
|
+
align-items: center;
|
|
3041
|
+
justify-content: center;
|
|
3042
|
+
margin-right: 15px;
|
|
3043
|
+
box-shadow: 0 0 20px rgba(0,0,0,0.5);
|
|
3044
|
+
border: 2px solid rgba(255,255,255,0.2);
|
|
3045
|
+
`;
|
|
3046
|
+
const globe = this.createGlobeElement(true);
|
|
3047
|
+
globe.style.width = '70%';
|
|
3048
|
+
globe.style.height = '70%';
|
|
3049
|
+
globeContainer.appendChild(globe);
|
|
3050
|
+
ticker.appendChild(globeContainer);
|
|
3051
|
+
|
|
3052
|
+
const content = document.createElement('div');
|
|
3053
|
+
content.style.cssText = `flex-grow: 1; display: flex; flex-direction: column;`;
|
|
3054
|
+
|
|
3055
|
+
// Row 1: Yellow/Red Header
|
|
3056
|
+
const row1 = document.createElement('div');
|
|
3057
|
+
row1.style.cssText = `display: flex; height: 50%;`;
|
|
3058
|
+
|
|
3059
|
+
const badge = document.createElement('div');
|
|
3060
|
+
badge.textContent = 'BREAKING NEWS';
|
|
3061
|
+
badge.style.cssText = `
|
|
3062
|
+
background: #f1c40f;
|
|
3063
|
+
color: black;
|
|
3064
|
+
font-weight: 900;
|
|
3065
|
+
padding: 0 20px;
|
|
3066
|
+
display: flex;
|
|
3067
|
+
align-items: center;
|
|
3068
|
+
clip-path: polygon(0 0, 90% 0, 100% 100%, 0 100%);
|
|
3069
|
+
font-size: ${height * 0.18}px;
|
|
3070
|
+
`;
|
|
3071
|
+
row1.appendChild(badge);
|
|
3072
|
+
|
|
3073
|
+
const headline = document.createElement('div');
|
|
3074
|
+
headline.textContent = config.headline || 'LOREM IPSUM DOLOR SIT AMET, CONSECTETUER';
|
|
3075
|
+
headline.style.cssText = `
|
|
3076
|
+
background: #e74c3c;
|
|
3077
|
+
color: white;
|
|
3078
|
+
font-weight: 700;
|
|
3079
|
+
padding: 0 30px;
|
|
3080
|
+
display: flex;
|
|
3081
|
+
align-items: center;
|
|
3082
|
+
flex-grow: 1;
|
|
3083
|
+
margin-left: -10px;
|
|
3084
|
+
clip-path: polygon(2% 0, 100% 0, 98% 100%, 0 100%);
|
|
3085
|
+
font-size: ${height * 0.22}px;
|
|
3086
|
+
`;
|
|
3087
|
+
row1.appendChild(headline);
|
|
3088
|
+
content.appendChild(row1);
|
|
3089
|
+
|
|
3090
|
+
// Row 2: Blue Ticker
|
|
3091
|
+
const row2 = document.createElement('div');
|
|
3092
|
+
row2.style.cssText = `
|
|
3093
|
+
height: 40%;
|
|
3094
|
+
background: #2980b9;
|
|
3095
|
+
display: flex;
|
|
3096
|
+
align-items: center;
|
|
3097
|
+
margin-top: 2px;
|
|
3098
|
+
clip-path: polygon(0 0, 100% 0, 100% 100%, 1% 100%);
|
|
3099
|
+
`;
|
|
3100
|
+
|
|
3101
|
+
const live = document.createElement('div');
|
|
3102
|
+
live.textContent = 'LIVE';
|
|
3103
|
+
live.style.cssText = `
|
|
3104
|
+
background: white;
|
|
3105
|
+
color: #2980b9;
|
|
3106
|
+
font-weight: 900;
|
|
3107
|
+
padding: 0 15px;
|
|
3108
|
+
margin: 0 10px;
|
|
3109
|
+
font-size: ${height * 0.15}px;
|
|
3110
|
+
`;
|
|
3111
|
+
row2.appendChild(live);
|
|
3112
|
+
|
|
3113
|
+
const trackCont = document.createElement('div');
|
|
3114
|
+
trackCont.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center; color: white;`;
|
|
3115
|
+
const track = this.createSeamlessScrollingTrack(config.items || [], config);
|
|
3116
|
+
track.style.fontSize = `${height * 0.16}px`;
|
|
3117
|
+
trackCont.appendChild(track);
|
|
3118
|
+
row2.appendChild(trackCont);
|
|
3119
|
+
content.appendChild(row2);
|
|
3120
|
+
|
|
3121
|
+
ticker.appendChild(content);
|
|
3122
|
+
this.ensureTickerAnimations();
|
|
3123
|
+
return ticker;
|
|
3124
|
+
}
|
|
3125
|
+
|
|
3126
|
+
private createBroadcast3Element(config: FlashNewsTickerConfig, position: 'top' | 'bottom'): HTMLDivElement {
|
|
3127
|
+
const ticker = document.createElement('div');
|
|
3128
|
+
ticker.className = `uvf-ticker-broadcast3 ticker-${position}`;
|
|
3129
|
+
|
|
3130
|
+
const height = config.height || 60;
|
|
3131
|
+
const bottomOffset = config.bottomOffset || 0;
|
|
3132
|
+
const topOffset = config.topOffset || 10;
|
|
3133
|
+
|
|
3134
|
+
ticker.style.cssText = `
|
|
3135
|
+
position: absolute;
|
|
3136
|
+
left: 10%;
|
|
3137
|
+
right: 10%;
|
|
3138
|
+
height: ${height}px;
|
|
3139
|
+
${position === 'top' ? `top: ${topOffset}px;` : `bottom: ${bottomOffset}px;`}
|
|
3140
|
+
display: flex;
|
|
3141
|
+
flex-direction: column;
|
|
3142
|
+
font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
|
|
3143
|
+
z-index: 100;
|
|
3144
|
+
pointer-events: none;
|
|
3145
|
+
`;
|
|
3146
|
+
|
|
3147
|
+
// Row 1: Split Red/Blue
|
|
3148
|
+
const row1 = document.createElement('div');
|
|
3149
|
+
row1.style.cssText = `display: flex; height: 55%;`;
|
|
3150
|
+
|
|
3151
|
+
const b1 = document.createElement('div');
|
|
3152
|
+
b1.textContent = 'BREAKING NEWS';
|
|
3153
|
+
b1.style.cssText = `
|
|
3154
|
+
background: #c0392b;
|
|
3155
|
+
color: white;
|
|
3156
|
+
font-weight: 900;
|
|
3157
|
+
padding: 0 20px;
|
|
3158
|
+
display: flex;
|
|
3159
|
+
align-items: center;
|
|
3160
|
+
clip-path: polygon(0 0, 95% 0, 100% 100%, 0 100%);
|
|
3161
|
+
font-size: ${height * 0.22}px;
|
|
3162
|
+
`;
|
|
3163
|
+
row1.appendChild(b1);
|
|
3164
|
+
|
|
3165
|
+
const b2 = document.createElement('div');
|
|
3166
|
+
b2.textContent = config.headline || 'LOREM IPSUM DOLOR SIT AMET, CONS';
|
|
3167
|
+
b2.style.cssText = `
|
|
3168
|
+
background: #2980b9;
|
|
3169
|
+
color: white;
|
|
3170
|
+
font-weight: 700;
|
|
3171
|
+
padding: 0 30px;
|
|
3172
|
+
display: flex;
|
|
3173
|
+
align-items: center;
|
|
3174
|
+
flex-grow: 1;
|
|
3175
|
+
margin-left: -10px;
|
|
3176
|
+
clip-path: polygon(2% 0, 100% 0, 98% 100%, 0 100%);
|
|
3177
|
+
font-size: ${height * 0.25}px;
|
|
3178
|
+
`;
|
|
3179
|
+
row1.appendChild(b2);
|
|
3180
|
+
ticker.appendChild(row1);
|
|
3181
|
+
|
|
3182
|
+
// Row 2: Black scrolling
|
|
3183
|
+
const row2 = document.createElement('div');
|
|
3184
|
+
row2.style.cssText = `
|
|
3185
|
+
height: 35%;
|
|
3186
|
+
background: #111;
|
|
3187
|
+
display: flex;
|
|
3188
|
+
align-items: center;
|
|
3189
|
+
margin-top: 2px;
|
|
3190
|
+
clip-path: polygon(1% 0, 99% 0, 100% 100%, 0 100%);
|
|
3191
|
+
`;
|
|
3192
|
+
|
|
3193
|
+
const lbadge = document.createElement('div');
|
|
3194
|
+
lbadge.textContent = 'LIVE';
|
|
3195
|
+
lbadge.style.cssText = `
|
|
3196
|
+
background: #f1c40f;
|
|
3197
|
+
color: black;
|
|
3198
|
+
font-weight: 900;
|
|
3199
|
+
padding: 0 10px;
|
|
3200
|
+
margin: 0 15px;
|
|
3201
|
+
font-size: ${height * 0.15}px;
|
|
3202
|
+
clip-path: polygon(0 0, 90% 0, 100% 100%, 0 100%);
|
|
3203
|
+
`;
|
|
3204
|
+
row2.appendChild(lbadge);
|
|
3205
|
+
|
|
3206
|
+
const tCont = document.createElement('div');
|
|
3207
|
+
tCont.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center; color: white;`;
|
|
3208
|
+
const track = this.createSeamlessScrollingTrack(config.items || [], config);
|
|
3209
|
+
track.style.fontSize = `${height * 0.16}px`;
|
|
3210
|
+
tCont.appendChild(track);
|
|
3211
|
+
row2.appendChild(tCont);
|
|
3212
|
+
ticker.appendChild(row2);
|
|
3213
|
+
|
|
3214
|
+
this.ensureTickerAnimations();
|
|
3215
|
+
return ticker;
|
|
3216
|
+
}
|
|
3217
|
+
|
|
3218
|
+
private createBroadcast4Element(config: FlashNewsTickerConfig, position: 'top' | 'bottom'): HTMLDivElement {
|
|
3219
|
+
const ticker = document.createElement('div');
|
|
3220
|
+
ticker.className = `uvf-ticker-broadcast4 ticker-${position}`;
|
|
3221
|
+
|
|
3222
|
+
const height = config.height || 65;
|
|
3223
|
+
const bottomOffset = config.bottomOffset || 0;
|
|
3224
|
+
const topOffset = config.topOffset || 10;
|
|
3225
|
+
|
|
3226
|
+
ticker.style.cssText = `
|
|
3227
|
+
position: absolute;
|
|
3228
|
+
left: 15%;
|
|
3229
|
+
right: 15%;
|
|
3230
|
+
height: ${height}px;
|
|
3231
|
+
${position === 'top' ? `top: ${topOffset}px;` : `bottom: ${bottomOffset}px;`}
|
|
3232
|
+
display: flex;
|
|
3233
|
+
align-items: flex-end;
|
|
3234
|
+
font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
|
|
3235
|
+
z-index: 100;
|
|
3236
|
+
pointer-events: none;
|
|
3237
|
+
`;
|
|
3238
|
+
|
|
3239
|
+
// Large Blue Box
|
|
3240
|
+
const newsBox = document.createElement('div');
|
|
3241
|
+
newsBox.style.cssText = `
|
|
3242
|
+
width: ${height * 1.5}px;
|
|
3243
|
+
height: 100%;
|
|
3244
|
+
background: #1e3c72;
|
|
3245
|
+
display: flex;
|
|
3246
|
+
flex-direction: column;
|
|
3247
|
+
justify-content: center;
|
|
3248
|
+
padding-left: 15px;
|
|
3249
|
+
position: relative;
|
|
3250
|
+
clip-path: polygon(0 0, 100% 0, 95% 100%, 0 100%);
|
|
3251
|
+
flex-shrink: 0;
|
|
3252
|
+
`;
|
|
3253
|
+
|
|
3254
|
+
const bt = document.createElement('div');
|
|
3255
|
+
bt.style.cssText = `display: flex; gap: 5px; margin-bottom: 5px;`;
|
|
3256
|
+
|
|
3257
|
+
const b1 = document.createElement('span');
|
|
3258
|
+
b1.textContent = 'BREAKING';
|
|
3259
|
+
b1.style.cssText = `background: #c0392b; font-size: 10px; font-weight: 800; padding: 2px 5px; border-radius: 2px; color: white;`;
|
|
3260
|
+
bt.appendChild(b1);
|
|
3261
|
+
|
|
3262
|
+
const b2 = document.createElement('span');
|
|
3263
|
+
b2.textContent = 'LIVE';
|
|
3264
|
+
b2.style.cssText = `background: #f1c40f; font-size: 10px; font-weight: 800; padding: 2px 5px; border-radius: 2px; color: black;`;
|
|
3265
|
+
bt.appendChild(b2);
|
|
3266
|
+
newsBox.appendChild(bt);
|
|
3267
|
+
|
|
3268
|
+
const nt = document.createElement('div');
|
|
3269
|
+
nt.textContent = 'NEWS';
|
|
3270
|
+
nt.style.cssText = `font-size: ${height * 0.4}px; font-weight: 900; color: white; letter-spacing: 2px;`;
|
|
3271
|
+
newsBox.appendChild(nt);
|
|
3272
|
+
ticker.appendChild(newsBox);
|
|
3273
|
+
|
|
3274
|
+
// Red Scrolling Bar
|
|
3275
|
+
const redBar = document.createElement('div');
|
|
3276
|
+
redBar.style.cssText = `
|
|
3277
|
+
flex-grow: 1;
|
|
3278
|
+
height: 50%;
|
|
3279
|
+
background: #c0392b;
|
|
3280
|
+
margin-left: -${height * 0.1}px;
|
|
3281
|
+
display: flex;
|
|
3282
|
+
align-items: center;
|
|
3283
|
+
padding-left: 20px;
|
|
3284
|
+
clip-path: polygon(2% 0, 100% 0, 100% 100%, 0 100%);
|
|
3285
|
+
`;
|
|
3286
|
+
|
|
3287
|
+
const tCont = document.createElement('div');
|
|
3288
|
+
tCont.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center; color: white;`;
|
|
3289
|
+
const track = this.createSeamlessScrollingTrack(config.items || [], config);
|
|
3290
|
+
track.style.fontSize = `${height * 0.25}px`;
|
|
3291
|
+
track.style.fontWeight = '700';
|
|
3292
|
+
tCont.appendChild(track);
|
|
3293
|
+
redBar.appendChild(tCont);
|
|
3294
|
+
ticker.appendChild(redBar);
|
|
3295
|
+
|
|
3296
|
+
this.ensureTickerAnimations();
|
|
3297
|
+
return ticker;
|
|
3298
|
+
}
|
|
3299
|
+
|
|
3300
|
+
private createSeamlessScrollingTrack(items: FlashNewsTickerItem[], config: FlashNewsTickerConfig): HTMLDivElement {
|
|
3301
|
+
const track = document.createElement('div');
|
|
3302
|
+
track.className = 'uvf-ticker-track-seamless';
|
|
3303
|
+
|
|
3304
|
+
const duration = this.calculateTickerDuration(config);
|
|
3305
|
+
track.style.cssText = `
|
|
3306
|
+
display: flex;
|
|
3307
|
+
white-space: nowrap;
|
|
3308
|
+
animation: ticker-scroll ${duration}s linear infinite;
|
|
3309
|
+
will-change: transform;
|
|
3310
|
+
padding-left: 50%;
|
|
3311
|
+
`;
|
|
3312
|
+
|
|
3313
|
+
const content = items.map(item => item.html || item.text).join(config.separator || ' • ');
|
|
3314
|
+
|
|
3315
|
+
// Duplicate content for horizontal seamless loop
|
|
3316
|
+
const span1 = document.createElement('span');
|
|
3317
|
+
span1.innerHTML = content;
|
|
3318
|
+
span1.style.paddingRight = `${config.gap || 100}px`;
|
|
3319
|
+
|
|
3320
|
+
const span2 = document.createElement('span');
|
|
3321
|
+
span2.innerHTML = content;
|
|
3322
|
+
span2.style.paddingRight = `${config.gap || 100}px`;
|
|
3323
|
+
|
|
3324
|
+
track.appendChild(span1);
|
|
3325
|
+
track.appendChild(span2);
|
|
3326
|
+
|
|
3327
|
+
return track;
|
|
3328
|
+
}
|
|
3329
|
+
|
|
2880
3330
|
private createGlobeElement(animate: boolean): HTMLDivElement {
|
|
2881
3331
|
const globeContainer = document.createElement('div');
|
|
2882
3332
|
globeContainer.className = 'uvf-ticker-globe';
|
|
@@ -3321,11 +3771,12 @@ export class WebPlayer extends BasePlayer {
|
|
|
3321
3771
|
headlineLine.style.cssText = `
|
|
3322
3772
|
display: flex;
|
|
3323
3773
|
align-items: center;
|
|
3774
|
+
justify-content: center;
|
|
3324
3775
|
min-height: ${topLineHeight}px;
|
|
3325
3776
|
padding: ${topLineConfig.padding || 8}px 12px;
|
|
3326
3777
|
background: ${topLineConfig.backgroundColor || 'transparent'};
|
|
3327
3778
|
overflow: hidden;
|
|
3328
|
-
|
|
3779
|
+
text-align: center;
|
|
3329
3780
|
`;
|
|
3330
3781
|
|
|
3331
3782
|
const headlineText = document.createElement('span');
|
|
@@ -3337,6 +3788,8 @@ export class WebPlayer extends BasePlayer {
|
|
|
3337
3788
|
font-size: ${topLineFontSize}px;
|
|
3338
3789
|
font-weight: 700;
|
|
3339
3790
|
line-height: ${topLineLineHeight};
|
|
3791
|
+
text-align: center;
|
|
3792
|
+
width: 100%;
|
|
3340
3793
|
${topLineMultiLine ? `
|
|
3341
3794
|
display: -webkit-box;
|
|
3342
3795
|
-webkit-line-clamp: ${topLineMaxLines};
|
|
@@ -3354,13 +3807,11 @@ export class WebPlayer extends BasePlayer {
|
|
|
3354
3807
|
|
|
3355
3808
|
// Set initial headline content
|
|
3356
3809
|
if (firstItem) {
|
|
3810
|
+
const headlineContent = firstItem.headline || firstItem.text;
|
|
3357
3811
|
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;
|
|
3812
|
+
headlineText.innerHTML = this.formatHeadlineText(firstItem.headlineHtml, topLineConfig, true);
|
|
3813
|
+
} else if (headlineContent) {
|
|
3814
|
+
headlineText.innerHTML = this.formatHeadlineText(headlineContent, topLineConfig, false);
|
|
3364
3815
|
}
|
|
3365
3816
|
}
|
|
3366
3817
|
|
|
@@ -3721,6 +4172,64 @@ export class WebPlayer extends BasePlayer {
|
|
|
3721
4172
|
});
|
|
3722
4173
|
}
|
|
3723
4174
|
|
|
4175
|
+
/**
|
|
4176
|
+
* Format headline text with optional forced line breaks
|
|
4177
|
+
*/
|
|
4178
|
+
private formatHeadlineText(text: string, topLineConfig: { forceMultiLine?: boolean; breakAt?: number | string }, isHtml: boolean = false): string {
|
|
4179
|
+
if (!topLineConfig.forceMultiLine) {
|
|
4180
|
+
// If it's HTML, return as-is; otherwise escape for safety
|
|
4181
|
+
return isHtml ? text : this.escapeHtml(text);
|
|
4182
|
+
}
|
|
4183
|
+
|
|
4184
|
+
// Calculate break position
|
|
4185
|
+
let breakPosition: number;
|
|
4186
|
+
const breakAt = topLineConfig.breakAt || '50%';
|
|
4187
|
+
|
|
4188
|
+
if (typeof breakAt === 'string' && breakAt.endsWith('%')) {
|
|
4189
|
+
const percentage = parseFloat(breakAt) / 100;
|
|
4190
|
+
breakPosition = Math.floor(text.length * percentage);
|
|
4191
|
+
} else {
|
|
4192
|
+
breakPosition = typeof breakAt === 'number' ? breakAt : Math.floor(text.length / 2);
|
|
4193
|
+
}
|
|
4194
|
+
|
|
4195
|
+
// Find the nearest space to break at (for better readability)
|
|
4196
|
+
let actualBreakPos = breakPosition;
|
|
4197
|
+
|
|
4198
|
+
// Look for a space near the break position
|
|
4199
|
+
const searchRange = Math.min(15, Math.floor(text.length / 4)); // Search within ~15 chars or 25% of text
|
|
4200
|
+
for (let i = 0; i <= searchRange; i++) {
|
|
4201
|
+
// Check forward first, then backward
|
|
4202
|
+
if (breakPosition + i < text.length && text[breakPosition + i] === ' ') {
|
|
4203
|
+
actualBreakPos = breakPosition + i;
|
|
4204
|
+
break;
|
|
4205
|
+
}
|
|
4206
|
+
if (breakPosition - i >= 0 && text[breakPosition - i] === ' ') {
|
|
4207
|
+
actualBreakPos = breakPosition - i;
|
|
4208
|
+
break;
|
|
4209
|
+
}
|
|
4210
|
+
}
|
|
4211
|
+
|
|
4212
|
+
// Split and join with <br>
|
|
4213
|
+
const line1 = text.substring(0, actualBreakPos).trim();
|
|
4214
|
+
const line2 = text.substring(actualBreakPos).trim();
|
|
4215
|
+
|
|
4216
|
+
if (isHtml) {
|
|
4217
|
+
// For HTML content, try to insert <br> at a reasonable position
|
|
4218
|
+
return `${line1}<br>${line2}`;
|
|
4219
|
+
}
|
|
4220
|
+
|
|
4221
|
+
return `${this.escapeHtml(line1)}<br>${this.escapeHtml(line2)}`;
|
|
4222
|
+
}
|
|
4223
|
+
|
|
4224
|
+
/**
|
|
4225
|
+
* Escape HTML special characters
|
|
4226
|
+
*/
|
|
4227
|
+
private escapeHtml(text: string): string {
|
|
4228
|
+
const div = document.createElement('div');
|
|
4229
|
+
div.textContent = text;
|
|
4230
|
+
return div.innerHTML;
|
|
4231
|
+
}
|
|
4232
|
+
|
|
3724
4233
|
/**
|
|
3725
4234
|
* Update headline and detail content for current item
|
|
3726
4235
|
*/
|
|
@@ -3728,12 +4237,13 @@ export class WebPlayer extends BasePlayer {
|
|
|
3728
4237
|
// Update headline
|
|
3729
4238
|
const headline = this.tickerHeadlineElement?.querySelector('.uvf-ticker-headline-text') as HTMLSpanElement;
|
|
3730
4239
|
if (headline) {
|
|
4240
|
+
const topLineConfig = this.tickerConfig?.broadcastStyle?.twoLineDisplay?.topLine || {};
|
|
4241
|
+
const headlineContent = item.headline || item.text;
|
|
4242
|
+
|
|
3731
4243
|
if (item.headlineHtml) {
|
|
3732
|
-
headline.innerHTML = item.headlineHtml;
|
|
3733
|
-
} else if (
|
|
3734
|
-
headline.
|
|
3735
|
-
} else {
|
|
3736
|
-
headline.textContent = item.text;
|
|
4244
|
+
headline.innerHTML = this.formatHeadlineText(item.headlineHtml, topLineConfig, true);
|
|
4245
|
+
} else if (headlineContent) {
|
|
4246
|
+
headline.innerHTML = this.formatHeadlineText(headlineContent, topLineConfig, false);
|
|
3737
4247
|
}
|
|
3738
4248
|
}
|
|
3739
4249
|
|