11import { type PreviewState } from '../../../types/preview'
2+ import { type MediaPreviewConfig } from '../options'
23
34function generateHtmlVectorSnippet ( previewState : PreviewState ) {
45 if ( ! previewState ?. stats ?. dimensions ) {
@@ -10,15 +11,17 @@ function generateHtmlVectorSnippet (previewState: PreviewState) {
1011
1112 const targetWidth = Math . min ( previewState . stats . dimensions . width , previewState . targetWidth )
1213 const targetHeight = Math . min ( previewState . stats . dimensions . height , previewState . targetHeight )
13- return `<img
14- src="${ hostname } ${ previewState . stats . path } "
15- width="${ targetWidth } "
16- height="${ targetHeight } "
17- loading="lazy"
18- ${ previewState . alt ? `alt="${ previewState . alt } "` : 'aria-hidden="true"\n alt=""' }
19- />`
14+ return [
15+ '<img' ,
16+ ` src="${ hostname } ${ previewState . stats . path } "` ,
17+ ` width="${ targetWidth } "` ,
18+ ` height="${ targetHeight } "` ,
19+ ' loading="lazy"' ,
20+ ` ${ previewState . alt ? `alt="${ previewState . alt } "` : 'aria-hidden="true"\n alt=""' } ` ,
21+ '/>'
22+ ] . join ( '\n' )
2023}
21- function generateHtmlRasterSnippet ( previewState : PreviewState ) {
24+ function generateHtmlRasterSnippet ( previewState : PreviewState , config : MediaPreviewConfig ) {
2225 if ( ! previewState ?. stats ?. dimensions ) {
2326 return ''
2427 }
@@ -30,53 +33,66 @@ function generateHtmlRasterSnippet (previewState: PreviewState) {
3033 const targetHeight = Math . min ( previewState . stats . dimensions . height , previewState . targetHeight )
3134
3235 let baseModifier = ''
36+ let src = ''
3337
34- if ( targetWidth !== previewState . stats . dimensions . width || targetHeight !== previewState . stats . dimensions . height ) {
35- baseModifier = `width=${ targetWidth } &height=${ targetHeight } `
36- }
37-
38+ const sources : string [ ] = [ ]
3839 const urls = {
39- avif : [
40- `${ hostname } /_ipx${ previewState . stats . path } ${ baseModifier ? `?${ baseModifier } &` : '?' } format=avif`
41- ] ,
42- webp : [
43- `${ hostname } /_ipx${ previewState . stats . path } ${ baseModifier ? `?${ baseModifier } &` : '?' } format=webp`
44- ] ,
45- src : [
46- `${ hostname } ${ baseModifier ? '/_ipx' : '' } ${ previewState . stats . path } ${ baseModifier ? `?${ baseModifier } ` : '' } `
47- ]
40+ avif : [ ] as string [ ] ,
41+ webp : [ ] as string [ ] ,
42+ src : [ ] as string [ ]
4843 }
4944
50- if ( targetWidth <= previewState . stats . dimensions . width / 2 ) {
51- urls . avif . push ( `${ hostname } /_ipx${ previewState . stats . path } ?width=${ targetWidth * 2 } &height=${ targetHeight * 2 } &format=avif 2x` )
52- urls . webp . push ( `${ hostname } /_ipx${ previewState . stats . path } ?width=${ targetWidth * 2 } &height=${ targetHeight * 2 } &format=webp 2x` )
53- urls . src . push ( `${ hostname } /_ipx${ previewState . stats . path } ?width=${ targetWidth * 2 } &height=${ targetHeight * 2 } ` )
54- }
45+ if ( ! config . hasIpx ) {
46+ src = `${ hostname } ${ previewState . stats . path } `
47+ } else {
48+ if ( targetWidth !== previewState . stats . dimensions . width || targetHeight !== previewState . stats . dimensions . height ) {
49+ baseModifier = `width=${ targetWidth } &height=${ targetHeight } `
50+ }
51+
52+ src = `${ hostname } ${ baseModifier ? config . ipxMiddlewarePrefix : '' } ${ previewState . stats . path } ${ baseModifier ? `?${ baseModifier } ` : '' } `
53+
54+ urls . avif . push ( `${ hostname } ${ config . ipxMiddlewarePrefix } ${ previewState . stats . path } ${ baseModifier ? `?${ baseModifier } &` : '?' } format=avif` )
55+ urls . webp . push ( `${ hostname } ${ config . ipxMiddlewarePrefix } ${ previewState . stats . path } ${ baseModifier ? `?${ baseModifier } &` : '?' } format=webp` )
56+ urls . src . push ( `${ hostname } ${ baseModifier ? config . ipxMiddlewarePrefix : '' } ${ previewState . stats . path } ${ baseModifier ? `?${ baseModifier } ` : '' } ` )
57+
58+ if ( targetWidth <= previewState . stats . dimensions . width / 2 ) {
59+ urls . avif . push ( `${ hostname } ${ config . ipxMiddlewarePrefix } ${ previewState . stats . path } ?width=${ targetWidth * 2 } &height=${ targetHeight * 2 } &format=avif 2x` )
60+ urls . webp . push ( `${ hostname } ${ config . ipxMiddlewarePrefix } ${ previewState . stats . path } ?width=${ targetWidth * 2 } &height=${ targetHeight * 2 } &format=webp 2x` )
61+ urls . src . push ( `${ hostname } ${ config . ipxMiddlewarePrefix } ${ previewState . stats . path } ?width=${ targetWidth * 2 } &height=${ targetHeight * 2 } ` )
62+ }
63+
64+ if ( targetWidth <= previewState . stats . dimensions . width / 3 ) {
65+ urls . avif . push ( `${ hostname } ${ config . ipxMiddlewarePrefix } ${ previewState . stats . path } ?width=${ targetWidth * 3 } &height=${ targetHeight * 3 } &format=avif 3x` )
66+ urls . webp . push ( `${ hostname } ${ config . ipxMiddlewarePrefix } ${ previewState . stats . path } ?width=${ targetWidth * 3 } &height=${ targetHeight * 3 } &format=webp 3x` )
67+ urls . src . push ( `${ hostname } ${ config . ipxMiddlewarePrefix } ${ previewState . stats . path } ?width=${ targetWidth * 3 } &height=${ targetHeight * 3 } ` )
68+ }
5569
56- if ( targetWidth <= previewState . stats . dimensions . width / 3 ) {
57- urls . avif . push ( `${ hostname } /_ipx${ previewState . stats . path } ?width=${ targetWidth * 3 } &height=${ targetHeight * 3 } &format=avif 3x` )
58- urls . webp . push ( `${ hostname } /_ipx${ previewState . stats . path } ?width=${ targetWidth * 3 } &height=${ targetHeight * 3 } &format=webp 3x` )
59- urls . src . push ( `${ hostname } /_ipx${ previewState . stats . path } ?width=${ targetWidth * 3 } &height=${ targetHeight * 3 } ` )
70+ sources . push ( ...[
71+ ' <source' ,
72+ ' type="image/avif"' ,
73+ ` srcset="${ urls . avif . join ( ', ' ) } "` ,
74+ ' />' ,
75+ ' <source' ,
76+ ' type="image/webp"' ,
77+ ` srcset="${ urls . webp . join ( ', ' ) } "` ,
78+ ' />'
79+ ] )
6080 }
6181
62- return `<picture>
63- <source
64- type="image/avif"
65- srcset="${ urls . avif . join ( ', ' ) } "
66- />
67- <source
68- type="image/webp"
69- srcset="${ urls . webp . join ( ', ' ) } "
70- />
71- <img
72- src="${ hostname } ${ baseModifier ? '/_ipx' : '' } ${ previewState . stats . path } ${ baseModifier ? `?${ baseModifier } ` : '' } "${ urls . src . length > 1 ? `\n srcset="${ urls . src . join ( ', ' ) } "` : '' }
73- width="${ targetWidth } "
74- height="${ targetHeight } "
75- loading="lazy"
76- decoding="async"
77- ${ previewState . alt ? `alt="${ previewState . alt } "` : 'aria-hidden="true"\n alt=""' }
78- />
79- </picture>`
82+ return [
83+ '<picture>' ,
84+ ...sources ,
85+ ' <img' ,
86+ ` src="${ src } "` ,
87+ ...( urls . src . length > 1 ? [ ` srcset="${ urls . src . join ( ', ' ) } "` ] : [ ] ) ,
88+ ` width="${ targetWidth } "` ,
89+ ` height="${ targetHeight } "` ,
90+ ' loading="lazy"' ,
91+ ' decoding="async"' ,
92+ `${ previewState . alt ? ` alt="${ previewState . alt } "` : ' aria-hidden="true"\n alt=""' } ` ,
93+ ' />' ,
94+ '</picture>'
95+ ] . join ( '\n' )
8096}
8197function generateHtmlDownloadSnippet ( previewState : PreviewState ) {
8298 if ( ! previewState ?. stats ) {
@@ -86,15 +102,17 @@ function generateHtmlDownloadSnippet (previewState: PreviewState) {
86102 // @todo : use nuxt runtime config
87103 const hostname = `${ document . location . protocol } //${ document . location . host } `
88104
89- return `<a
90- href="${ hostname } ${ previewState . stats . path } "
91- download
92- >
93- Download ${ previewState . stats . name }
94- </a>`
105+ return [
106+ '<a' ,
107+ ` href="${ hostname } ${ previewState . stats . path } "` ,
108+ ' download,' ,
109+ '>' ,
110+ ` Download ${ previewState . stats . name } ` ,
111+ '</a>'
112+ ] . join ( '\n' )
95113}
96114
97- export function generateHtmlSnippet ( previewState : PreviewState ) {
115+ export function generateHtmlSnippet ( previewState : PreviewState , config : MediaPreviewConfig ) {
98116 if ( ! previewState ?. stats ) {
99117 return ''
100118 }
@@ -104,7 +122,7 @@ export function generateHtmlSnippet (previewState: PreviewState) {
104122 return generateHtmlVectorSnippet ( previewState )
105123 case 'image/png' :
106124 case 'image/jpeg' :
107- return generateHtmlRasterSnippet ( previewState )
125+ return generateHtmlRasterSnippet ( previewState , config )
108126 default :
109127 return generateHtmlDownloadSnippet ( previewState )
110128 }
0 commit comments