@eeacms/volto-block-style
Version:
volto-block-style: Volto add-on
67 lines (59 loc) • 2.12 kB
JavaScript
import { isInternalURL } from '@plone/volto/helpers/Url/Url';
import { flattenToAppURL } from '@plone/volto/helpers/Url/Url';
import { getFieldURL } from '@plone/volto/helpers/Url/Url';
export function getImageScaleParams(image, size) {
if (!image) return;
const imageScale = size || 'preview'; // listings use preview scale
if (Array.isArray(image)) {
const result = image.map((item) => getImageScaleParams(item, size));
return result.length > 0 ? result[0] : undefined;
}
if (typeof image === 'string')
return isInternalURL(image)
? { download: flattenToAppURL(`${image}/@@images/image/${imageScale}`) }
: { download: image };
let url = getFieldURL(image);
const imageScales = image.image_scales;
const imageField = image.image_field;
const imageScalesArray = imageScales?.[imageField];
const imageScalesObject = imageScalesArray?.[0];
const imageScalesObjectBasePath = imageScalesObject?.base_path;
const imageScalesObjectScales = imageScalesObject?.scales;
url = imageScalesObjectBasePath || url;
if (url && isInternalURL(url)) {
if (imageScalesArray) {
const scale = url?.endsWith?.('.gif')
? imageScalesObject
: imageScalesObjectScales?.[imageScale] || imageScalesObject;
const download = flattenToAppURL(`${url}/${scale?.download}`);
const width = scale?.width;
const height = scale?.height;
return {
download,
width,
height,
};
} else if (image?.image?.scales) {
const imageImage = image.image;
const imageImageScales = imageImage.scales;
const scale = imageImageScales?.[imageScale] || imageImage;
const download = flattenToAppURL(scale?.download);
const width = scale?.width;
const height = scale?.height;
return {
download,
width,
height,
};
} else {
// fallback if we do not have scales
return {
download: flattenToAppURL(
`${url}/@@images/${imageField || 'image'}/${imageScale}`,
),
};
}
} else {
return { download: url };
}
}