1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 1× 1× 1× 1× 1× 17× 17× 17× 17× 17× 17× 17× 1× 17× 16× 16× 16× 96× 16× 1× 51× 51× | 'use strict'; const R = require('ramda'); const createSection = require('./section'); const config = require('config'); const imageService = config.imageService; module.exports = R.curry((imageDimensions, tuple) => { let image = tuple[1]; Iif(R.isNil(image.home_section)) return null; const homeSection = createSection(image.home_section); Iif(R.has('article_relations', image) && image.article_relations.length > 0){ image = R.merge(image, image.article_relations[0].static_content); } const imageObject = { data: { type: 'image', id: image.escenic_id, attributes: { imageCredit: image.image_credit, width: imageDimensions.width, height: imageDimensions.height, altText: image.alttext, caption: image.caption, title: image.title, alternates: buildAlternates(config.cropsWhitelist, image.alternates) }, links: { url: createImageUrl(image, homeSection, imageDimensions.code), thumbnailUrl: createImageUrl(image, homeSection, 's338b'), templateUrl: createImageUrl(image, homeSection, '%s') } } }; const meta = R.merge(tuple[0], { "type": "image", "lastModifiedDate": image.last_modified_date || image.updated_at, "id": image.id }); return Array.of(meta, imageObject); }); function buildAlternates(allowedCrops, alternates) { if (R.isNil(alternates)) return null; const isWhitelistedCrop = R.flip(R.contains)(allowedCrops); const crops = R.filter(isWhitelistedCrop, R.keys(alternates)); const cropsList = R.reduce((mem, crop) => { return R.append({ crop: crop, height: R.path([crop, 'output', 'height'], alternates), width: R.path([crop, 'output', 'width'], alternates) }, mem); }, [], crops); return R.isEmpty(cropsList) ? null : cropsList; } function createImageUrl(image, homeSection, code) { const secureHost = R.replace(/http:\/\/www\d?/, `https://${imageService}`, homeSection.url); return `${secureHost}${image.file_name}/ALTERNATES/${code}/${image.title}`; } |