gatsby-background-image
Version:
Lazy-loading React background-image component with optional support for the blur-up effect.
113 lines (82 loc) • 3.86 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.setTransitionStyles = exports.presetBackgroundStyles = exports.kebabifyBackgroundStyles = exports.fixOpacity = exports.fixClassName = exports.escapeClassNames = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var _shortUuid = _interopRequireDefault(require("short-uuid"));
var _HelperUtils = require("./HelperUtils");
var _ClassCache = require("./ClassCache");
var _ImageUtils = require("./ImageUtils");
var _SimpleUtils = require("./SimpleUtils");
var _excluded = ["className"];
var fixClassName = function fixClassName(_ref) {
var className = _ref.className,
props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
var convertedProps = (0, _HelperUtils.convertProps)(props);
var elementExists = (0, _ClassCache.inComponentClassCache)(className);
var imageData = (0, _ImageUtils.getCurrentSrcData)(convertedProps);
var additionalClassname = _shortUuid.default.generate();
var randomClass = " gbi-" + (0, _SimpleUtils.hashString)(imageData && imageData.srcSet || className || "noclass") + "-" + additionalClassname;
var additionalClass = elementExists || !className ? randomClass : "";
var componentClassNames = ("" + (className || "") + (additionalClass || "")).trim();
if (!elementExists) (0, _ClassCache.activateCacheForComponentClass)(className);
return [componentClassNames];
};
exports.fixClassName = fixClassName;
var escapeClassNames = function escapeClassNames(classNames) {
if (classNames) {
var specialChars = (0, _SimpleUtils.isBrowser)() && window._gbiSpecialChars ? window._gbiSpecialChars : typeof __GBI_SPECIAL_CHARS__ !== "undefined" ? __GBI_SPECIAL_CHARS__ : ':/';
var specialCharRegEx = new RegExp("[" + specialChars + "]", 'g');
return classNames.replace(specialCharRegEx, '\\$&');
}
return classNames;
};
exports.escapeClassNames = escapeClassNames;
var kebabifyBackgroundStyles = function kebabifyBackgroundStyles(styles) {
if ((0, _SimpleUtils.isString)(styles)) {
return styles;
}
if (styles instanceof Object) {
return Object.keys(styles).filter(function (key) {
return key.indexOf('background') === 0 && styles[key] !== '';
}).reduce(function (resultingStyles, key) {
return "" + resultingStyles + (0, _SimpleUtils.toKebabCase)(key) + ": " + styles[key] + ";\n";
}, "");
}
return "";
};
exports.kebabifyBackgroundStyles = kebabifyBackgroundStyles;
var setTransitionStyles = function setTransitionStyles(transitionDelay, fadeIn) {
if (transitionDelay === void 0) {
transitionDelay = "0.25s";
}
if (fadeIn === void 0) {
fadeIn = true;
}
return fadeIn ? "transition: opacity 0.5s ease " + transitionDelay + ";" : "transition: none;";
};
exports.setTransitionStyles = setTransitionStyles;
var fixOpacity = function fixOpacity(props) {
var styledProps = (0, _extends2.default)({}, props);
if (!styledProps.preserveStackingContext) {
try {
if (styledProps.style && styledProps.style.opacity) {
if (isNaN(styledProps.style.opacity) || styledProps.style.opacity > 0.99) {
styledProps.style.opacity = 0.99;
}
}
} catch (e) {}
}
return styledProps;
};
exports.fixOpacity = fixOpacity;
var presetBackgroundStyles = function presetBackgroundStyles(backgroundStyles) {
var defaultBackgroundStyles = {
backgroundPosition: "center",
backgroundRepeat: "no-repeat",
backgroundSize: "cover"
};
return (0, _extends2.default)({}, defaultBackgroundStyles, backgroundStyles);
};
exports.presetBackgroundStyles = presetBackgroundStyles;