UNPKG

gatsby-background-image

Version:

Lazy-loading React background-image component with optional support for the blur-up effect.

262 lines (205 loc) 8.54 kB
"use strict"; exports.__esModule = true; exports.isBase64 = exports.imagePropsChanged = exports.imageLoaded = exports.imageArrayPropsChanged = exports.hasPictureElement = exports.hasImageUrl = exports.hasImageArray = exports.getUrlString = exports.getSelectedImage = exports.getImageSrcKey = exports.getCurrentSrcData = exports.getCurrentFromData = exports.createDummyImageArray = void 0; var _MediaUtils = require("./MediaUtils"); var _SimpleUtils = require("./SimpleUtils"); var hasPictureElement = function hasPictureElement() { return typeof HTMLPictureElement !== "undefined" || (0, _SimpleUtils.isBrowser)(); }; exports.hasPictureElement = hasPictureElement; var hasImageArray = function hasImageArray(props) { return Boolean(props.fluid && Array.isArray(props.fluid) || props.fixed && Array.isArray(props.fixed)); }; exports.hasImageArray = hasImageArray; var getCurrentFromData = function getCurrentFromData(_ref) { var data = _ref.data, propName = _ref.propName, _ref$addUrl = _ref.addUrl, addUrl = _ref$addUrl === void 0 ? true : _ref$addUrl, _ref$returnArray = _ref.returnArray, returnArray = _ref$returnArray === void 0 ? false : _ref$returnArray, _ref$checkLoaded = _ref.checkLoaded, checkLoaded = _ref$checkLoaded === void 0 ? true : _ref$checkLoaded; if (!data || !propName) return ""; var tracedSVG = propName === "tracedSVG"; if (Array.isArray(data) && !(0, _MediaUtils.hasArtDirectionArray)({ fluid: data })) { var imageString = data.map(function (dataElement) { if (propName === "currentSrc" || propName === 'src') { return checkLoaded ? imageLoaded(dataElement) && dataElement[propName] || "" : dataElement[propName]; } if (propName === "CSS_STRING" && (0, _SimpleUtils.isString)(dataElement)) { return dataElement; } return (0, _SimpleUtils.isString)(dataElement) ? dataElement : dataElement && propName in dataElement ? dataElement[propName] : ""; }); return getUrlString({ imageString: imageString, tracedSVG: tracedSVG, addUrl: addUrl, returnArray: returnArray }); } if ((0, _MediaUtils.hasArtDirectionArray)({ fluid: data }) && (propName === "currentSrc" || propName === "src" || propName === "base64" || tracedSVG)) { var currentData = getCurrentSrcData({ fluid: data }); return propName in currentData ? getUrlString({ imageString: currentData[propName], tracedSVG: tracedSVG, addUrl: addUrl }) : ""; } if (typeof data !== 'object') { return ''; } if ((propName === "currentSrc" || propName === 'src') && propName in data) { return getUrlString({ imageString: checkLoaded ? imageLoaded(data) && data[propName] || "" : data[propName], addUrl: addUrl }); } return propName in data ? getUrlString({ imageString: data[propName], tracedSVG: tracedSVG, addUrl: addUrl }) : ""; }; exports.getCurrentFromData = getCurrentFromData; var getImageSrcKey = function getImageSrcKey(_ref2) { var fluid = _ref2.fluid, fixed = _ref2.fixed; var data = getCurrentSrcData({ fluid: fluid, fixed: fixed }); return data ? data.src || null : null; }; exports.getImageSrcKey = getImageSrcKey; var getCurrentSrcData = function getCurrentSrcData(_ref3, index) { var fluid = _ref3.fluid, fixed = _ref3.fixed, returnArray = _ref3.returnArray; if (index === void 0) { index = 0; } var currentData = fluid || fixed; if (hasImageArray({ fluid: fluid, fixed: fixed })) { if (returnArray) { return currentData; } if ((0, _SimpleUtils.isBrowser)() && (0, _MediaUtils.hasArtDirectionArray)({ fluid: fluid, fixed: fixed })) { var mediaData = currentData.slice().reverse(); var foundMedia = mediaData.findIndex(_MediaUtils.matchesMedia); if (foundMedia !== -1) { return mediaData[foundMedia]; } } return currentData[index]; } return currentData; }; exports.getCurrentSrcData = getCurrentSrcData; var getSelectedImage = function getSelectedImage(_ref4, index) { var fluid = _ref4.fluid, fixed = _ref4.fixed; if (index === void 0) { index = 0; } var currentData = fluid || fixed; if (hasImageArray({ fluid: fluid, fixed: fixed })) { return currentData[index] || currentData[0]; } return currentData; }; exports.getSelectedImage = getSelectedImage; var getUrlString = function getUrlString(_ref5) { var imageString = _ref5.imageString, _ref5$tracedSVG = _ref5.tracedSVG, tracedSVG = _ref5$tracedSVG === void 0 ? false : _ref5$tracedSVG, _ref5$addUrl = _ref5.addUrl, addUrl = _ref5$addUrl === void 0 ? true : _ref5$addUrl, _ref5$returnArray = _ref5.returnArray, returnArray = _ref5$returnArray === void 0 ? false : _ref5$returnArray, _ref5$hasImageUrls = _ref5.hasImageUrls, hasImageUrls = _ref5$hasImageUrls === void 0 ? false : _ref5$hasImageUrls; if (Array.isArray(imageString)) { var stringArray = imageString.map(function (currentString) { if (currentString) { var _base = isBase64(currentString); var _imageUrl = hasImageUrls || hasImageUrl(currentString); var currentReturnString = currentString && tracedSVG ? "\"" + currentString + "\"" : currentString && !_base && !tracedSVG && _imageUrl ? "'" + currentString + "'" : currentString; return addUrl && currentString ? "url(" + currentReturnString + ")" : currentReturnString; } return currentString; }); return returnArray ? stringArray : (0, _SimpleUtils.filteredJoin)(stringArray); } var base64 = isBase64(imageString); var imageUrl = hasImageUrls || hasImageUrl(imageString); var returnString = imageString && tracedSVG ? "\"" + imageString + "\"" : imageString && !base64 && !tracedSVG && imageUrl ? "'" + imageString + "'" : imageString; return imageString ? addUrl ? "url(" + returnString + ")" : returnString : ""; }; exports.getUrlString = getUrlString; var isBase64 = function isBase64(base64String) { return (0, _SimpleUtils.isString)(base64String) && base64String.indexOf("base64") !== -1; }; exports.isBase64 = isBase64; var hasImageUrl = function hasImageUrl(imageString) { return (0, _SimpleUtils.isString)(imageString) && imageString.substr(0, 4) === "http"; }; exports.hasImageUrl = hasImageUrl; var imagePropsChanged = function imagePropsChanged(props, prevProps) { return props.fluid && !prevProps.fluid || props.fixed && !prevProps.fixed || imageArrayPropsChanged(props, prevProps) || props.fluid && prevProps.fluid && props.fluid.src !== prevProps.fluid.src || props.fixed && prevProps.fixed && props.fixed.src !== prevProps.fixed.src; }; exports.imagePropsChanged = imagePropsChanged; var imageArrayPropsChanged = function imageArrayPropsChanged(props, prevProps) { var isPropsFluidArray = Array.isArray(props.fluid); var isPrevPropsFluidArray = Array.isArray(prevProps.fluid); var isPropsFixedArray = Array.isArray(props.fixed); var isPrevPropsFixedArray = Array.isArray(prevProps.fixed); if (isPropsFluidArray && !isPrevPropsFluidArray || isPropsFixedArray && !isPrevPropsFixedArray || !isPropsFluidArray && isPrevPropsFluidArray || !isPropsFixedArray && isPrevPropsFixedArray) { return true; } if (isPropsFluidArray && isPrevPropsFluidArray) { if (props.fluid.length === prevProps.fluid.length) { return props.fluid.some(function (image, index) { return image.src !== prevProps.fluid[index].src; }); } return true; } if (isPropsFixedArray && isPrevPropsFixedArray) { if (props.fixed.length === prevProps.fixed.length) { return props.fixed.some(function (image, index) { return image.src !== prevProps.fixed[index].src; }); } return true; } }; exports.imageArrayPropsChanged = imageArrayPropsChanged; var createDummyImageArray = function createDummyImageArray(length) { var DUMMY_IMG = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; var dummyImageURI = getUrlString({ imageString: DUMMY_IMG }); return Array(length).fill(dummyImageURI); }; exports.createDummyImageArray = createDummyImageArray; var imageLoaded = function imageLoaded(imageRef) { return imageRef ? (0, _SimpleUtils.isString)(imageRef) || imageRef.complete && imageRef.naturalWidth !== 0 && imageRef.naturalHeight !== 0 : false; }; exports.imageLoaded = imageLoaded;