import variables from 'modules/variables'; import { useState, Fragment } from 'react'; import Favourite from './Favourite'; import { MdInfo, MdLocationOn, MdPhotoCamera, MdCrop as Resolution, MdGetApp as Download, MdVisibility as Views, MdIosShare as Share, MdSource as Source, } from 'react-icons/md'; import Tooltip from '../../helpers/tooltip/Tooltip'; import Modal from 'react-modal'; import ShareModal from '../../helpers/sharemodal/ShareModal'; //import Hotkeys from 'react-hot-keys'; import { toast } from 'react-toastify'; const toDataURL = async (url) => { const res = await fetch(url); return URL.createObjectURL(await res.blob()); }; const formatText = (text) => { return text.toLowerCase().replaceAll(',', '').replaceAll(' ', '-'); }; const downloadImage = async (info) => { const link = document.createElement('a'); link.href = await toDataURL(info.url); link.download = `mue-${formatText(info.credit)}-${formatText(info.location)}.jpg`; document.body.appendChild(link); link.click(); document.body.removeChild(link); variables.stats.postEvent('feature', 'Background download'); }; // todo: copy link to unsplash/pexels page not image url const copyImage = (info) => { variables.stats.postEvent('feature', 'Background copied'); navigator.clipboard.writeText(info.url); toast('Background copied'); }; export default function PhotoInformation({ info, url, api }) { const [width, setWidth] = useState(0); const [height, setHeight] = useState(0); const [usePhotoMap, setPhotoMap] = useState(false); const [setMapIcon] = useState(true); const [showExtraInfo, setshowExtraInfo] = useState(false); const [showOld, setShowOld] = useState(true); const [other, setOther] = useState(false); const [shareModal, openShareModal] = useState(false); if (info.hidden === true || !info.credit) { return null; } // remove unsplash and pexels text const unsplash = variables.language.getMessage( variables.languagecode, 'widgets.background.unsplash', ); const pexels = variables.language.getMessage(variables.languagecode, 'widgets.background.pexels'); const photographer = info.credit.split(` ${unsplash}`)[0].split(` ${pexels}`); let credit = info.credit; let photo = variables.language.getMessage(variables.languagecode, 'widgets.background.credit'); // unsplash and pexels credit if (info.photographerURL && info.photographerURL !== '' && !info.offline && api) { if (api === 'unsplash') { photo = ( {photo} ); credit = ( <> {info.credit} {' '} {unsplash} > ); } else { photo = ( {photo} ); credit = ( <> {info.credit} {' '} {pexels} > ); } } const ddgProxy = localStorage.getItem('ddgProxy') === 'true'; // get resolution const img = new Image(); img.onload = (event) => { setWidth(event.target.width); setHeight(event.target.height); }; img.src = ddgProxy && !info.offline && !url.startsWith('data:') ? variables.constants.DDG_IMAGE_PROXY + url : url; // info is still there because we want the favourite button to work if (localStorage.getItem('photoInformation') === 'false') { return (