1
1
import { type PreviewState } from '../../../types/preview'
2
+ import { type MediaPreviewConfig } from '../options'
2
3
3
4
function generateHtmlVectorSnippet ( previewState : PreviewState ) {
4
5
if ( ! previewState ?. stats ?. dimensions ) {
@@ -10,15 +11,17 @@ function generateHtmlVectorSnippet (previewState: PreviewState) {
10
11
11
12
const targetWidth = Math . min ( previewState . stats . dimensions . width , previewState . targetWidth )
12
13
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' )
20
23
}
21
- function generateHtmlRasterSnippet ( previewState : PreviewState ) {
24
+ function generateHtmlRasterSnippet ( previewState : PreviewState , config : MediaPreviewConfig ) {
22
25
if ( ! previewState ?. stats ?. dimensions ) {
23
26
return ''
24
27
}
@@ -30,53 +33,66 @@ function generateHtmlRasterSnippet (previewState: PreviewState) {
30
33
const targetHeight = Math . min ( previewState . stats . dimensions . height , previewState . targetHeight )
31
34
32
35
let baseModifier = ''
36
+ let src = ''
33
37
34
- if ( targetWidth !== previewState . stats . dimensions . width || targetHeight !== previewState . stats . dimensions . height ) {
35
- baseModifier = `width=${ targetWidth } &height=${ targetHeight } `
36
- }
37
-
38
+ const sources : string [ ] = [ ]
38
39
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 [ ]
48
43
}
49
44
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
+ }
55
69
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
+ ] )
60
80
}
61
81
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' )
80
96
}
81
97
function generateHtmlDownloadSnippet ( previewState : PreviewState ) {
82
98
if ( ! previewState ?. stats ) {
@@ -86,15 +102,17 @@ function generateHtmlDownloadSnippet (previewState: PreviewState) {
86
102
// @todo : use nuxt runtime config
87
103
const hostname = `${ document . location . protocol } //${ document . location . host } `
88
104
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' )
95
113
}
96
114
97
- export function generateHtmlSnippet ( previewState : PreviewState ) {
115
+ export function generateHtmlSnippet ( previewState : PreviewState , config : MediaPreviewConfig ) {
98
116
if ( ! previewState ?. stats ) {
99
117
return ''
100
118
}
@@ -104,7 +122,7 @@ export function generateHtmlSnippet (previewState: PreviewState) {
104
122
return generateHtmlVectorSnippet ( previewState )
105
123
case 'image/png' :
106
124
case 'image/jpeg' :
107
- return generateHtmlRasterSnippet ( previewState )
125
+ return generateHtmlRasterSnippet ( previewState , config )
108
126
default :
109
127
return generateHtmlDownloadSnippet ( previewState )
110
128
}
0 commit comments