@@ -37,7 +37,11 @@ function isVideoLikeRenderer(renderer: Renderer): boolean {
3737 return renderer === 'html5-video' || renderer === 'hls' || renderer === 'background-video' ;
3838}
3939
40- function getSkinImportParts ( skin : Skin ) : { group : string ; skinFile : string } {
40+ function getGroupFromUseCase ( useCase : UseCase ) : string {
41+ return useCase === 'default-audio' ? 'audio' : 'video' ;
42+ }
43+
44+ function getSkinImportParts ( skin : Exclude < Skin , 'none' > ) : { group : string ; skinFile : string } {
4145 if ( skin === 'minimal-video' ) return { group : 'video' , skinFile : 'minimal-skin' } ;
4246 if ( skin === 'minimal-audio' ) return { group : 'audio' , skinFile : 'minimal-skin' } ;
4347 return { group : skin , skinFile : 'skin' } ;
@@ -102,11 +106,11 @@ function getProviderTag(useCase: UseCase): string {
102106 return map [ useCase ] ;
103107}
104108
105- function getSkinTag ( useCase : UseCase , skin : Skin ) : string {
109+ function getSkinTag ( useCase : UseCase , skin : Exclude < Skin , 'none' > ) : string {
106110 if ( useCase === 'background-video' ) {
107111 return 'background-video-skin' ;
108112 }
109- const map : Record < Skin , string > = {
113+ const map : Record < Exclude < Skin , 'none' > , string > = {
110114 video : 'video-skin' ,
111115 audio : 'audio-skin' ,
112116 'minimal-video' : 'video-minimal-skin' ,
@@ -117,28 +121,40 @@ function getSkinTag(useCase: UseCase, skin: Skin): string {
117121
118122function generateHTMLMarkup ( useCase : UseCase , skin : Skin , renderer : Renderer , url : string ) : string {
119123 const providerTag = getProviderTag ( useCase ) ;
120- const skinTag = getSkinTag ( useCase , skin ) ;
121124 const tag = getRendererTag ( renderer ) ;
122125 const src = resolveSourceUrl ( url , renderer ) ;
123126 const playsInline = isVideoLikeRenderer ( renderer ) ? ' playsinline' : '' ;
124127
125- return `<!--
128+ const mediaComment = ` <!--
129+ Media are players without UIs, handling networking
130+ and display of the media. They are easily swappable
131+ to handle different sources.
132+ -->` ;
133+
134+ const providerComment = `<!--
126135 The PlayerProvider passes state between the UI components
127136 and Media, and makes fully custom UIs possible.
128137 It does not have layout by default (display:contents)
129- -->
138+ -->` ;
139+
140+ if ( skin === 'none' ) {
141+ return `${ providerComment }
142+ <${ providerTag } >
143+ ${ mediaComment }
144+ <${ tag } src="${ src } "${ playsInline } ></${ tag } >
145+ </${ providerTag } >` ;
146+ }
147+
148+ const skinTag = getSkinTag ( useCase , skin ) ;
149+ return `${ providerComment }
130150<${ providerTag } >
131151 <!--
132152 Skins contain the entire player UI and are easily swappable.
133153 They can each be "ejected" for full control and customization
134154 of UI components.
135155 -->
136156 <${ skinTag } >
137- <!--
138- Media are players without UIs, handling networking
139- and display of the media. They are easily swappable
140- to handle different sources.
141- -->
157+ ${ mediaComment }
142158 <${ tag } src="${ src } "${ playsInline } ></${ tag } >
143159 </${ skinTag } >
144160</${ providerTag } >` ;
@@ -152,9 +168,13 @@ function generateHTMLJSImports(useCase: UseCase, skin: Skin, renderer: Renderer)
152168import '@videojs/html/background/skin';
153169import '@videojs/html/background/video';${ mediaImport } ` ;
154170 }
155- const { group, skinFile } = getSkinImportParts ( skin ) ;
171+ const group = skin === 'none' ? getGroupFromUseCase ( useCase ) : getSkinImportParts ( skin ) . group ;
156172 const mediaSubpath = getMediaImportSubpath ( renderer ) ;
157173 const mediaImport = mediaSubpath ? `\nimport '@videojs/html/media/${ mediaSubpath } ';` : '' ;
174+ if ( skin === 'none' ) {
175+ return `import '@videojs/html/${ group } /player';${ mediaImport } ` ;
176+ }
177+ const { skinFile } = getSkinImportParts ( skin ) ;
158178 return `import '@videojs/html/${ group } /player';
159179import '@videojs/html/${ group } /${ skinFile } ';${ mediaImport } ` ;
160180}
@@ -181,8 +201,8 @@ function getRendererComponent(renderer: Renderer): string {
181201 return map [ renderer ] ;
182202}
183203
184- function getSkinComponent ( skin : Skin ) : string {
185- const map : Record < Skin , string > = {
204+ function getSkinComponent ( skin : Exclude < Skin , 'none' > ) : string {
205+ const map : Record < Exclude < Skin , 'none' > , string > = {
186206 video : 'VideoSkin' ,
187207 audio : 'AudioSkin' ,
188208 'minimal-video' : 'MinimalVideoSkin' ,
@@ -219,31 +239,58 @@ export function generateReactCreateCode(
219239 const featureType = getUseCaseFeatures ( useCase ) ;
220240
221241 const isBackgroundVideo = useCase === 'background-video' ;
222- const skinComponent = isBackgroundVideo ? 'BackgroundVideoSkin' : getSkinComponent ( skin ) ;
223- const { group, skinFile } = getSkinImportParts ( skin ) ;
224- const skinCssImport = isBackgroundVideo
225- ? '@videojs/react/background/skin.css'
226- : `@videojs/react/${ group } /${ skinFile } .css` ;
242+ const isNoSkin = skin === 'none' ;
243+ const group = isBackgroundVideo
244+ ? 'background'
245+ : isNoSkin
246+ ? getGroupFromUseCase ( useCase )
247+ : getSkinImportParts ( skin ) . group ;
227248
228- const presetSubpath = isBackgroundVideo ? 'background' : group ;
249+ const rendererProps = isVideoLikeRenderer ( renderer ) ? 'src={src} playsInline' : 'src={src}' ;
250+ const rendererJsx = `<${ rendererComponent } ${ rendererProps } />` ;
229251
230252 let presetImport : string ;
231253 let mediaImport : string | null = null ;
232-
233- if ( isPresetRenderer ( renderer ) ) {
234- presetImport = `import { ${ skinComponent } , ${ rendererComponent } } from '@videojs/react/${ presetSubpath } ';` ;
254+ let skinCssImport : string | null = null ;
255+ let skinComponent : string | null = null ;
256+
257+ if ( isBackgroundVideo ) {
258+ skinComponent = 'BackgroundVideoSkin' ;
259+ skinCssImport = '@videojs/react/background/skin.css' ;
260+ presetImport = `import { ${ skinComponent } , ${ rendererComponent } } from '@videojs/react/background';` ;
261+ } else if ( isNoSkin ) {
262+ if ( isPresetRenderer ( renderer ) ) {
263+ presetImport = `import { ${ rendererComponent } } from '@videojs/react/${ group } ';` ;
264+ } else {
265+ presetImport = '' ;
266+ mediaImport = `import { ${ rendererComponent } } from '@videojs/react/media/${ getRendererMediaSubpath ( renderer ) } ';` ;
267+ }
235268 } else {
236- presetImport = `import { ${ skinComponent } } from '@videojs/react/${ presetSubpath } ';` ;
237- mediaImport = `import { ${ rendererComponent } } from '@videojs/react/media/${ getRendererMediaSubpath ( renderer ) } ';` ;
269+ const { skinFile } = getSkinImportParts ( skin ) ;
270+ skinComponent = getSkinComponent ( skin ) ;
271+ skinCssImport = `@videojs/react/${ group } /${ skinFile } .css` ;
272+ if ( isPresetRenderer ( renderer ) ) {
273+ presetImport = `import { ${ skinComponent } , ${ rendererComponent } } from '@videojs/react/${ group } ';` ;
274+ } else {
275+ presetImport = `import { ${ skinComponent } } from '@videojs/react/${ group } ';` ;
276+ mediaImport = `import { ${ rendererComponent } } from '@videojs/react/media/${ getRendererMediaSubpath ( renderer ) } ';` ;
277+ }
238278 }
239279
240- const rendererProps = isVideoLikeRenderer ( renderer ) ? 'src={src} playsInline' : 'src={src}' ;
241- const rendererJsx = `<${ rendererComponent } ${ rendererProps } />` ;
280+ const playerJsx = skinComponent
281+ ? ` <Player.Provider>
282+ <${ skinComponent } >
283+ ${ rendererJsx }
284+ </${ skinComponent } >
285+ </Player.Provider>`
286+ : ` <Player.Provider>
287+ ${ rendererJsx }
288+ </Player.Provider>` ;
242289
243290 const imports = [
244- `import '${ skinCssImport } ';` ,
291+ ... ( skinCssImport ? [ `import '${ skinCssImport } ';` ] : [ ] ) ,
245292 `import { createPlayer, ${ featureType } } from '@videojs/react';` ,
246- presetImport ,
293+ ... ( presetImport ? [ presetImport ] : [ ] ) ,
247294 ...( mediaImport ? [ mediaImport ] : [ ] ) ,
248295 ] . join ( '\n' ) ;
249296
@@ -260,11 +307,7 @@ interface MyPlayerProps {
260307
261308export const MyPlayer = ({ src }: MyPlayerProps) => {
262309 return (
263- <Player.Provider>
264- <${ skinComponent } >
265- ${ rendererJsx }
266- </${ skinComponent } >
267- </Player.Provider>
310+ ${ playerJsx }
268311 );
269312};` ,
270313 } ;
0 commit comments