diff --git a/src/ui/component/cardMedia/FreezeframeWrapper.jsx b/src/ui/component/cardMedia/FreezeframeWrapper.jsx
new file mode 100644
index 000000000..a46f40ae5
--- /dev/null
+++ b/src/ui/component/cardMedia/FreezeframeWrapper.jsx
@@ -0,0 +1,34 @@
+import React, { useEffect } from 'react';
+import PropTypes from 'prop-types';
+import Freezeframe from 'freezeframe';
+
+const FreezeframeWrapper = props => {
+ const imgRef = React.useRef();
+ const freezeframe = React.useRef();
+
+ const { src, className, options } = props;
+
+ useEffect(() => {
+ freezeframe.current = new Freezeframe(imgRef.current, options);
+ }, [options]);
+
+ return (
+
+

+
+ );
+};
+
+FreezeframeWrapper.propTypes = {
+ src: PropTypes.string.isRequired,
+ className: PropTypes.string.isRequired,
+ // Docs: https://github.com/ctrl-freaks/freezeframe.js/tree/master/packages/freezeframe
+ options: PropTypes.shape({
+ selector: PropTypes.string,
+ trigger: PropTypes.oneOf(['hover', 'click', false]),
+ overlay: PropTypes.boolean,
+ responsive: PropTypes.boolean,
+ }),
+};
+
+export default FreezeframeWrapper;
diff --git a/src/ui/component/cardMedia/view.jsx b/src/ui/component/cardMedia/view.jsx
index b1f38f853..d976ec151 100644
--- a/src/ui/component/cardMedia/view.jsx
+++ b/src/ui/component/cardMedia/view.jsx
@@ -1,21 +1,24 @@
// @flow
import React from 'react';
+import FreezeframeWrapper from './FreezeframeWrapper';
import Placeholder from './placeholder.png';
type Props = {
thumbnail: ?string, // externally sourced image
};
+const className = 'media__thumb';
+
class CardMedia extends React.PureComponent {
render() {
const { thumbnail } = this.props;
- return (
-
- );
+ if (thumbnail && thumbnail.endsWith('gif')) {
+ return ;
+ }
+
+ const url = thumbnail || Placeholder;
+ return ;
}
}