1
1
import React , { Component } from 'react' ;
2
2
import PropTypes from 'prop-types' ;
3
+ import classNames from 'classnames' ;
3
4
import ImageContainer from './ImageContainer' ;
4
5
5
6
export default class Gallery extends Component {
@@ -22,13 +23,37 @@ export default class Gallery extends Component {
22
23
23
24
constructor ( ) {
24
25
super ( ) ;
25
- this . openImage = this . openGallery . bind ( this ) ;
26
+ this . openGallery = this . openGallery . bind ( this ) ;
27
+ }
28
+
29
+ static getScaledImageUrl ( url , shortEdgeSize ) {
30
+ if ( url . indexOf ( 'tsimg.space' ) >= 0 ) {
31
+ if ( url . indexOf ( 'jpg' ) >= 0 ) {
32
+ return url . replace ( '.jpg' , `_s${ shortEdgeSize } -mshortedgescale.jpg` ) ;
33
+ }
34
+ if ( url . indexOf ( 'jpeg' ) >= 0 ) {
35
+ return url . replace ( '.jpeg' , `_s${ shortEdgeSize } -mshortedgescale.jpeg` ) ;
36
+ }
37
+ if ( url . indexOf ( 'png' ) >= 0 ) {
38
+ return url . replace ( '.png' , `_s${ shortEdgeSize } -mshortedgescale.png` ) ;
39
+ }
40
+ }
41
+ return url ;
42
+ }
43
+
44
+ static getBigImages ( urls ) {
45
+ const bigUrls = [ ] ;
46
+ urls . forEach ( ( url ) => {
47
+ // eslint-disable-next-line no-restricted-globals
48
+ bigUrls . push ( Gallery . getScaledImageUrl ( url , screen . availHeight * 0.9 ) ) ;
49
+ } ) ;
50
+ return bigUrls ;
26
51
}
27
52
28
53
openGallery ( start ) {
29
54
const { onClick, urls, deleteMode } = this . props ;
30
- if ( ! deleteMode ) {
31
- onClick ( urls , start ) ;
55
+ if ( ! deleteMode ) {
56
+ onClick ( Gallery . getBigImages ( urls ) , start ) ;
32
57
}
33
58
}
34
59
@@ -40,34 +65,48 @@ export default class Gallery extends Component {
40
65
onDelete,
41
66
deleteMode,
42
67
} = this . props ;
68
+ let styleHeight ;
43
69
const style = { } ;
44
- if ( width ) {
45
- style . width = `${ width } px` ;
46
- }
47
70
if ( ! deleteMode ) {
48
- if ( height ) {
49
- style . height = ` ${ height } px` ;
50
- } else if ( chayns . env . mobile ) {
51
- style . height = '256px' ;
71
+ if ( height ) {
72
+ styleHeight = height ;
73
+ } else if ( chayns . env . mobile ) {
74
+ styleHeight = 256 ;
52
75
} else {
53
- style . height = '428px' ;
76
+ styleHeight = 428 ;
54
77
}
78
+ style . height = `${ styleHeight } px` ;
55
79
}
80
+ if ( width ) {
81
+ style . width = width ;
82
+ }
83
+ const numberOfImages = urls . length ;
56
84
return (
57
85
< div className = "chayns-gallery" style = { style } >
58
- < div className = " gallery-grid" >
86
+ < div className = { classNames ( ' gallery-grid' , { 'delete-mode' : deleteMode } ) } >
59
87
{
60
88
urls . map ( ( url , index ) => {
61
89
if ( index <= 3 || deleteMode ) {
90
+ let shortEdge = window . innerWidth ;
91
+ if ( ! deleteMode ) {
92
+ if ( index <= 2 && numberOfImages <= 2 ) {
93
+ shortEdge = styleHeight ;
94
+ } else if ( index === 0 ) {
95
+ shortEdge = parseInt ( ( styleHeight * 2 ) / 3 , 10 ) ;
96
+ } else if ( index < 4 ) {
97
+ shortEdge = parseInt ( styleHeight / 3 , 10 ) ;
98
+ }
99
+ }
100
+
62
101
return (
63
102
< ImageContainer
64
103
key = { url }
65
- url = { url }
104
+ url = { Gallery . getScaledImageUrl ( url , shortEdge ) }
66
105
index = { index }
67
- openImage = { this . openImage }
106
+ openImage = { this . openGallery }
68
107
onDelete = { onDelete }
69
108
deleteMode = { deleteMode }
70
- moreImages = { ( index === 3 && ! deleteMode ) ? urls . length - 1 - index : 0 }
109
+ moreImages = { ( index === 3 && ! deleteMode ) ? numberOfImages - 1 - index : 0 }
71
110
/>
72
111
) ;
73
112
}
0 commit comments