@blaze-cms/react-page-builder 0.118.0-alpha.0 → 0.118.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/lib/components/Menu/Menu.js +39 -6
- package/lib/components/Menu/Menu.js.map +1 -1
- package/lib/components/Video/providers/YouTube/YouTubeProvider.js +8 -11
- package/lib/components/Video/providers/YouTube/YouTubeProvider.js.map +1 -1
- package/lib/components/Video/providers/YouTube/YoutubeEmbeded.js +200 -0
- package/lib/components/Video/providers/YouTube/YoutubeEmbeded.js.map +1 -0
- package/lib-es/components/Menu/Menu.js +44 -11
- package/lib-es/components/Menu/Menu.js.map +1 -1
- package/lib-es/components/Video/providers/YouTube/YouTubeProvider.js +8 -11
- package/lib-es/components/Video/providers/YouTube/YouTubeProvider.js.map +1 -1
- package/lib-es/components/Video/providers/YouTube/YoutubeEmbeded.js +147 -0
- package/lib-es/components/Video/providers/YouTube/YoutubeEmbeded.js.map +1 -0
- package/package.json +6 -7
- package/src/components/Menu/Menu.js +50 -12
- package/src/components/Video/providers/YouTube/YouTubeProvider.js +7 -9
- package/src/components/Video/providers/YouTube/YoutubeEmbeded.js +160 -0
- package/tests/unit/src/components/Video/providers/YouTube/YouTubeProvider.test.js +0 -4
- package/tests/unit/src/components/Video/providers/YouTube/__snapshots__/YouTubeProvider.test.js.snap +16 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,44 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.118.0](https://github.com/thebyte9/blaze/compare/v0.118.0-alpha.3...v0.118.0) (2022-01-25)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @blaze-cms/react-page-builder
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [0.118.0-alpha.3](https://github.com/thebyte9/blaze/compare/v0.118.0-alpha.2...v0.118.0-alpha.3) (2022-01-24)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @blaze-cms/react-page-builder
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# [0.118.0-alpha.2](https://github.com/thebyte9/blaze/compare/v0.118.0-alpha.1...v0.118.0-alpha.2) (2022-01-14)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* set correct funciton type for video image onload ([6df1060](https://github.com/thebyte9/blaze/commit/6df1060a7a3d0ba18f49d6d7e757ae1c79a7509d))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# [0.118.0-alpha.1](https://github.com/thebyte9/blaze/compare/v0.118.0-alpha.0...v0.118.0-alpha.1) (2022-01-14)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Bug Fixes
|
|
37
|
+
|
|
38
|
+
* added youtube facade lazy loading ([#3243](https://github.com/thebyte9/blaze/issues/3243)) ([7f2bef9](https://github.com/thebyte9/blaze/commit/7f2bef9269333aa7c248dce18e06a459ad7a3572))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
6
44
|
# [0.118.0-alpha.0](https://github.com/thebyte9/blaze/compare/v0.117.0...v0.118.0-alpha.0) (2022-01-13)
|
|
7
45
|
|
|
8
46
|
**Note:** Version bump only for package @blaze-cms/react-page-builder
|
|
@@ -27,6 +27,8 @@ require("core-js/modules/es.array.concat.js");
|
|
|
27
27
|
|
|
28
28
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
29
29
|
|
|
30
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
31
|
+
|
|
30
32
|
var _react = _interopRequireWildcard(require("react"));
|
|
31
33
|
|
|
32
34
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
@@ -39,6 +41,8 @@ var _hooks = require("../../hooks");
|
|
|
39
41
|
|
|
40
42
|
var _constants = require("../../constants");
|
|
41
43
|
|
|
44
|
+
var _excluded = ["children", "collapse", "modifier", "mobileMenuModifier", "mobileMenuChildrenModifier", "mobileIconAlignment", "mobileButtonModifier", "hamburgerIconModifier", "closeIconModifier"];
|
|
45
|
+
|
|
42
46
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
43
47
|
|
|
44
48
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -46,7 +50,14 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
46
50
|
var Menu = function Menu(_ref) {
|
|
47
51
|
var children = _ref.children,
|
|
48
52
|
collapse = _ref.collapse,
|
|
49
|
-
modifier = _ref.modifier
|
|
53
|
+
modifier = _ref.modifier,
|
|
54
|
+
mobileMenuModifier = _ref.mobileMenuModifier,
|
|
55
|
+
mobileMenuChildrenModifier = _ref.mobileMenuChildrenModifier,
|
|
56
|
+
mobileIconAlignment = _ref.mobileIconAlignment,
|
|
57
|
+
mobileButtonModifier = _ref.mobileButtonModifier,
|
|
58
|
+
hamburgerIconModifier = _ref.hamburgerIconModifier,
|
|
59
|
+
closeIconModifier = _ref.closeIconModifier,
|
|
60
|
+
rest = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
50
61
|
var isMobile = (0, _hooks.useCheckMobileScreen)();
|
|
51
62
|
|
|
52
63
|
var _useState = (0, _react.useState)(false),
|
|
@@ -55,25 +66,47 @@ var Menu = function Menu(_ref) {
|
|
|
55
66
|
setShowMobileMenu = _useState2[1];
|
|
56
67
|
|
|
57
68
|
var shouldDisplayCollapsed = collapse && isMobile;
|
|
58
|
-
var mobileButtonClass = shouldDisplayCollapsed && isMobile ?
|
|
69
|
+
var mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : _constants.HIDDEN;
|
|
59
70
|
var shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;
|
|
60
|
-
var
|
|
61
|
-
|
|
71
|
+
var childrenDesktopModifier = shouldDisplayChildren && !isMobile ? modifier : "".concat(modifier, " ").concat(_constants.HIDDEN);
|
|
72
|
+
var childrenMobileModifier = shouldDisplayChildren && isMobile ? "".concat(mobileMenuChildrenModifier) : " ".concat(_constants.HIDDEN);
|
|
73
|
+
var isMobileMenuExpanded = showMobileMenu ? "".concat(mobileMenuModifier) : '';
|
|
74
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, collapse && /*#__PURE__*/_react["default"].createElement("div", {
|
|
75
|
+
className: "top-0 absolute z-50"
|
|
76
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
77
|
+
className: "flex w-screen z-50 justify-".concat(mobileIconAlignment, " ").concat(isMobileMenuExpanded)
|
|
78
|
+
}, /*#__PURE__*/_react["default"].createElement(_button["default"], {
|
|
62
79
|
className: mobileButtonClass,
|
|
63
80
|
onClick: function onClick() {
|
|
64
81
|
return setShowMobileMenu(!showMobileMenu);
|
|
65
82
|
}
|
|
66
|
-
}, /*#__PURE__*/_react["default"].createElement("i", null, /*#__PURE__*/_react["default"].createElement(_md.
|
|
67
|
-
className:
|
|
83
|
+
}, /*#__PURE__*/_react["default"].createElement("i", null, showMobileMenu ? /*#__PURE__*/_react["default"].createElement(_md.MdClose, {
|
|
84
|
+
className: closeIconModifier
|
|
85
|
+
}) : /*#__PURE__*/_react["default"].createElement(_md.MdMenu, {
|
|
86
|
+
className: hamburgerIconModifier
|
|
87
|
+
}))))), /*#__PURE__*/_react["default"].createElement("ul", {
|
|
88
|
+
className: isMobile ? childrenMobileModifier : childrenDesktopModifier
|
|
68
89
|
}, children));
|
|
69
90
|
};
|
|
70
91
|
|
|
71
92
|
Menu.propTypes = {
|
|
72
93
|
collapse: _propTypes["default"].bool.isRequired,
|
|
94
|
+
hamburgerIconModifier: _propTypes["default"].string,
|
|
95
|
+
closeIconModifier: _propTypes["default"].string,
|
|
96
|
+
mobileButtonModifier: _propTypes["default"].string,
|
|
97
|
+
mobileMenuModifier: _propTypes["default"].string,
|
|
98
|
+
mobileMenuChildrenModifier: _propTypes["default"].string,
|
|
73
99
|
modifier: _propTypes["default"].string,
|
|
100
|
+
mobileIconAlignment: _propTypes["default"].string,
|
|
74
101
|
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node])
|
|
75
102
|
};
|
|
76
103
|
Menu.defaultProps = {
|
|
104
|
+
hamburgerIconModifier: '',
|
|
105
|
+
closeIconModifier: '',
|
|
106
|
+
mobileButtonModifier: '',
|
|
107
|
+
mobileIconAlignment: '',
|
|
108
|
+
mobileMenuModifier: '',
|
|
109
|
+
mobileMenuChildrenModifier: '',
|
|
77
110
|
modifier: '',
|
|
78
111
|
children: []
|
|
79
112
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Menu/Menu.js"],"names":["Menu","children","collapse","modifier","isMobile","showMobileMenu","setShowMobileMenu","shouldDisplayCollapsed","mobileButtonClass","HIDDEN","shouldDisplayChildren","
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Menu/Menu.js"],"names":["Menu","children","collapse","modifier","mobileMenuModifier","mobileMenuChildrenModifier","mobileIconAlignment","mobileButtonModifier","hamburgerIconModifier","closeIconModifier","rest","isMobile","showMobileMenu","setShowMobileMenu","shouldDisplayCollapsed","mobileButtonClass","HIDDEN","shouldDisplayChildren","childrenDesktopModifier","childrenMobileModifier","isMobileMenuExpanded","propTypes","PropTypes","bool","isRequired","string","oneOfType","arrayOf","node","defaultProps"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport BlazeButton from '@blaze-react/button';\nimport { MdMenu, MdClose } from 'react-icons/md';\nimport { useCheckMobileScreen } from '../../hooks';\nimport { HIDDEN } from '../../constants';\n\nconst Menu = ({\n children,\n collapse,\n modifier,\n mobileMenuModifier,\n mobileMenuChildrenModifier,\n mobileIconAlignment,\n mobileButtonModifier,\n hamburgerIconModifier,\n closeIconModifier,\n ...rest\n}) => {\n const isMobile = useCheckMobileScreen();\n const [showMobileMenu, setShowMobileMenu] = useState(false);\n\n const shouldDisplayCollapsed = collapse && isMobile;\n const mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : HIDDEN;\n const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;\n const childrenDesktopModifier =\n shouldDisplayChildren && !isMobile ? modifier : `${modifier} ${HIDDEN}`;\n\n const childrenMobileModifier =\n shouldDisplayChildren && isMobile ? `${mobileMenuChildrenModifier}` : ` ${HIDDEN}`;\n\n const isMobileMenuExpanded = showMobileMenu ? `${mobileMenuModifier}` : '';\n\n return (\n <>\n {collapse && (\n <div className=\"top-0 absolute z-50\">\n <div\n className={`flex w-screen z-50 justify-${mobileIconAlignment} ${isMobileMenuExpanded}`}>\n <BlazeButton\n className={mobileButtonClass}\n onClick={() => setShowMobileMenu(!showMobileMenu)}>\n <i>\n {showMobileMenu ? (\n <MdClose className={closeIconModifier} />\n ) : (\n <MdMenu className={hamburgerIconModifier} />\n )}\n </i>\n </BlazeButton>\n </div>\n </div>\n )}\n <ul className={isMobile ? childrenMobileModifier : childrenDesktopModifier}>{children}</ul>\n </>\n );\n};\n\nMenu.propTypes = {\n collapse: PropTypes.bool.isRequired,\n hamburgerIconModifier: PropTypes.string,\n closeIconModifier: PropTypes.string,\n mobileButtonModifier: PropTypes.string,\n mobileMenuModifier: PropTypes.string,\n mobileMenuChildrenModifier: PropTypes.string,\n modifier: PropTypes.string,\n mobileIconAlignment: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])\n};\n\nMenu.defaultProps = {\n hamburgerIconModifier: '',\n closeIconModifier: '',\n mobileButtonModifier: '',\n mobileIconAlignment: '',\n mobileMenuModifier: '',\n mobileMenuChildrenModifier: '',\n modifier: '',\n children: []\n};\n\nexport default Menu;\n"],"file":"Menu.js"}
|
|
@@ -13,7 +13,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
13
13
|
|
|
14
14
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _YoutubeEmbeded = _interopRequireDefault(require("./YoutubeEmbeded"));
|
|
17
17
|
|
|
18
18
|
var _helpers = require("./helpers");
|
|
19
19
|
|
|
@@ -25,17 +25,14 @@ var YouTubeProvider = function YouTubeProvider(_ref) {
|
|
|
25
25
|
loop = _ref.loop;
|
|
26
26
|
var videoId = (0, _helpers.getYouTubeID)(url);
|
|
27
27
|
if (!videoId) return null;
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
};
|
|
34
|
-
return /*#__PURE__*/_react["default"].createElement(_reactYoutube["default"], {
|
|
28
|
+
var params = "loop=".concat((0, _helpers.booleanToNumber)(loop));
|
|
29
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
30
|
+
className: _constants.VIDEO_WRAPPER_CLASS_NAME
|
|
31
|
+
}, /*#__PURE__*/_react["default"].createElement(_YoutubeEmbeded["default"], {
|
|
32
|
+
autoplay: autoplay,
|
|
35
33
|
videoId: videoId,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
34
|
+
params: params
|
|
35
|
+
}));
|
|
39
36
|
};
|
|
40
37
|
|
|
41
38
|
YouTubeProvider.propTypes = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YouTubeProvider.js"],"names":["YouTubeProvider","url","autoplay","loop","videoId","
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YouTubeProvider.js"],"names":["YouTubeProvider","url","autoplay","loop","videoId","params","VIDEO_WRAPPER_CLASS_NAME","propTypes","PropTypes","string","isRequired","bool","defaultProps"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,OAA6B;AAAA,MAA1BC,GAA0B,QAA1BA,GAA0B;AAAA,MAArBC,QAAqB,QAArBA,QAAqB;AAAA,MAAXC,IAAW,QAAXA,IAAW;AACnD,MAAMC,OAAO,GAAG,2BAAaH,GAAb,CAAhB;AAEA,MAAI,CAACG,OAAL,EAAc,OAAO,IAAP;AACd,MAAMC,MAAM,kBAAW,8BAAgBF,IAAhB,CAAX,CAAZ;AAEA,sBACE;AAAK,IAAA,SAAS,EAAEG;AAAhB,kBACE,gCAAC,0BAAD;AAAgB,IAAA,QAAQ,EAAEJ,QAA1B;AAAoC,IAAA,OAAO,EAAEE,OAA7C;AAAsD,IAAA,MAAM,EAAEC;AAA9D,IADF,CADF;AAKD,CAXD;;AAaAL,eAAe,CAACO,SAAhB,GAA4B;AAC1BN,EAAAA,GAAG,EAAEO,sBAAUC,MAAV,CAAiBC,UADI;AAE1BR,EAAAA,QAAQ,EAAEM,sBAAUG,IAFM;AAG1BR,EAAAA,IAAI,EAAEK,sBAAUG;AAHU,CAA5B;AAMAX,eAAe,CAACY,YAAhB,GAA+B;AAC7BV,EAAAA,QAAQ,EAAE,KADmB;AAE7BC,EAAAA,IAAI,EAAE;AAFuB,CAA/B;eAKeH,e","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport YoutubeEmbeded from './YoutubeEmbeded';\nimport { getYouTubeID, booleanToNumber } from './helpers';\nimport { VIDEO_WRAPPER_CLASS_NAME } from '../../../../constants';\n\nconst YouTubeProvider = ({ url, autoplay, loop }) => {\n const videoId = getYouTubeID(url);\n\n if (!videoId) return null;\n const params = `loop=${booleanToNumber(loop)}`;\n\n return (\n <div className={VIDEO_WRAPPER_CLASS_NAME}>\n <YoutubeEmbeded autoplay={autoplay} videoId={videoId} params={params} />\n </div>\n );\n};\n\nYouTubeProvider.propTypes = {\n url: PropTypes.string.isRequired,\n autoplay: PropTypes.bool,\n loop: PropTypes.bool\n};\n\nYouTubeProvider.defaultProps = {\n autoplay: false,\n loop: false\n};\n\nexport default YouTubeProvider;\n"],"file":"YouTubeProvider.js"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.array.iterator.js");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/es.object.to-string.js");
|
|
6
|
+
|
|
7
|
+
require("core-js/modules/es.string.iterator.js");
|
|
8
|
+
|
|
9
|
+
require("core-js/modules/es.weak-map.js");
|
|
10
|
+
|
|
11
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
12
|
+
|
|
13
|
+
require("core-js/modules/es.object.define-property.js");
|
|
14
|
+
|
|
15
|
+
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
16
|
+
|
|
17
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
18
|
+
|
|
19
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
20
|
+
|
|
21
|
+
Object.defineProperty(exports, "__esModule", {
|
|
22
|
+
value: true
|
|
23
|
+
});
|
|
24
|
+
exports["default"] = void 0;
|
|
25
|
+
|
|
26
|
+
require("core-js/modules/es.array.concat.js");
|
|
27
|
+
|
|
28
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
29
|
+
|
|
30
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
31
|
+
|
|
32
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
33
|
+
|
|
34
|
+
var _customHooks = require("@blaze-react/utils/lib/customHooks");
|
|
35
|
+
|
|
36
|
+
var _constants = require("../../../../constants");
|
|
37
|
+
|
|
38
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
39
|
+
|
|
40
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
41
|
+
|
|
42
|
+
var YT_HQ_FORMAT = 'hqdefault';
|
|
43
|
+
var YT_IMAGE_URL = 'https://i.ytimg.com';
|
|
44
|
+
|
|
45
|
+
var YoutubeEmbeded = function YoutubeEmbeded(_ref) {
|
|
46
|
+
var autoplay = _ref.autoplay,
|
|
47
|
+
videoId = _ref.videoId,
|
|
48
|
+
playlistCoverId = _ref.playlistCoverId,
|
|
49
|
+
videoTitle = _ref.videoTitle,
|
|
50
|
+
poster = _ref.poster,
|
|
51
|
+
videoParams = _ref.videoParams,
|
|
52
|
+
announce = _ref.announce,
|
|
53
|
+
noCookie = _ref.noCookie,
|
|
54
|
+
webp = _ref.webp,
|
|
55
|
+
playlist = _ref.playlist,
|
|
56
|
+
onIframeAdded = _ref.onIframeAdded,
|
|
57
|
+
muted = _ref.muted,
|
|
58
|
+
adNetwork = _ref.adNetwork,
|
|
59
|
+
iframeClass = _ref.iframeClass,
|
|
60
|
+
priority = _ref.priority;
|
|
61
|
+
|
|
62
|
+
var _useInView = (0, _customHooks.useInView)(_constants.IN_VIEW_CONFIG),
|
|
63
|
+
_useInView2 = (0, _slicedToArray2["default"])(_useInView, 2),
|
|
64
|
+
isIntersecting = _useInView2[0],
|
|
65
|
+
outerRef = _useInView2[1];
|
|
66
|
+
|
|
67
|
+
var _useState = (0, _react.useState)(false),
|
|
68
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
69
|
+
preconnected = _useState2[0],
|
|
70
|
+
setPreconnected = _useState2[1];
|
|
71
|
+
|
|
72
|
+
var _useState3 = (0, _react.useState)(!!autoplay),
|
|
73
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
74
|
+
renderIframe = _useState4[0],
|
|
75
|
+
setRenderIframe = _useState4[1];
|
|
76
|
+
|
|
77
|
+
var _useState5 = (0, _react.useState)({
|
|
78
|
+
imageSize: poster,
|
|
79
|
+
displayImage: priority
|
|
80
|
+
}),
|
|
81
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
82
|
+
_useState6$ = _useState6[0],
|
|
83
|
+
imageSize = _useState6$.imageSize,
|
|
84
|
+
displayImage = _useState6$.displayImage,
|
|
85
|
+
setImageDetails = _useState6[1];
|
|
86
|
+
|
|
87
|
+
var encodedId = encodeURIComponent(videoId);
|
|
88
|
+
var videoPlaylisCovertId = typeof playlistCoverId === 'string' ? encodeURIComponent(playlistCoverId) : null;
|
|
89
|
+
var paramsImp = videoParams ? "&".concat(videoParams) : '';
|
|
90
|
+
var format = webp ? 'webp' : 'jpg';
|
|
91
|
+
var vi = webp ? 'vi_webp' : 'vi';
|
|
92
|
+
var posterUrl = !playlist ? "".concat(YT_IMAGE_URL, "/").concat(vi, "/").concat(encodedId, "/").concat(imageSize, ".").concat(format) : "".concat(YT_IMAGE_URL, "/").concat(vi, "/").concat(videoPlaylisCovertId, "/").concat(imageSize, ".").concat(format);
|
|
93
|
+
var ytUrl = noCookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';
|
|
94
|
+
var mutedValue = muted ? '&mute=1' : '';
|
|
95
|
+
var iframeSrc = !playlist ? "".concat(ytUrl, "/embed/").concat(encodedId, "?autoplay=1").concat(mutedValue).concat(paramsImp) : "".concat(ytUrl, "/embed/videoseries?autoplay=1").concat(mutedValue, "&list=").concat(encodedId).concat(paramsImp);
|
|
96
|
+
var parsedWrapperClassname = "yt-facade ".concat(renderIframe ? 'yt-activated' : '');
|
|
97
|
+
(0, _react.useEffect)(function () {
|
|
98
|
+
if (!priority && !isIntersecting || imageSize === YT_HQ_FORMAT) return;
|
|
99
|
+
var img = new Image(); // eslint-disable-next-line func-names
|
|
100
|
+
|
|
101
|
+
img.onload = function () {
|
|
102
|
+
var newImageSize = imageSize;
|
|
103
|
+
if (this && this.width === 120) newImageSize = YT_HQ_FORMAT;
|
|
104
|
+
setImageDetails({
|
|
105
|
+
imageSize: newImageSize,
|
|
106
|
+
displayImage: true
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
img.src = posterUrl;
|
|
111
|
+
}, [imageSize, isIntersecting, posterUrl, priority]);
|
|
112
|
+
|
|
113
|
+
var warmConnections = function warmConnections() {
|
|
114
|
+
if (preconnected) return;
|
|
115
|
+
setPreconnected(true);
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
var addIframe = function addIframe() {
|
|
119
|
+
if (renderIframe) return;
|
|
120
|
+
onIframeAdded();
|
|
121
|
+
setRenderIframe(true);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, preconnected && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("link", {
|
|
125
|
+
rel: "preconnect",
|
|
126
|
+
href: YT_IMAGE_URL
|
|
127
|
+
}), /*#__PURE__*/_react["default"].createElement("link", {
|
|
128
|
+
rel: "preconnect",
|
|
129
|
+
href: ytUrl
|
|
130
|
+
}), /*#__PURE__*/_react["default"].createElement("link", {
|
|
131
|
+
rel: "preconnect",
|
|
132
|
+
href: "https://www.google.com"
|
|
133
|
+
}), adNetwork && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("link", {
|
|
134
|
+
rel: "preconnect",
|
|
135
|
+
href: "https://static.doubleclick.net"
|
|
136
|
+
}), /*#__PURE__*/_react["default"].createElement("link", {
|
|
137
|
+
rel: "preconnect",
|
|
138
|
+
href: "https://googleads.g.doubleclick.net"
|
|
139
|
+
}))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
140
|
+
ref: outerRef,
|
|
141
|
+
role: "button",
|
|
142
|
+
onPointerOver: warmConnections,
|
|
143
|
+
onClick: addIframe,
|
|
144
|
+
className: parsedWrapperClassname,
|
|
145
|
+
"data-title": videoTitle,
|
|
146
|
+
style: {
|
|
147
|
+
backgroundImage: "url(".concat(displayImage ? posterUrl : '', ")")
|
|
148
|
+
}
|
|
149
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
150
|
+
type: "button",
|
|
151
|
+
className: "yt-facade-button-wrapper",
|
|
152
|
+
"aria-label": "".concat(announce, " ").concat(videoTitle)
|
|
153
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
154
|
+
className: "yt-facade-button"
|
|
155
|
+
})), renderIframe && /*#__PURE__*/_react["default"].createElement("iframe", {
|
|
156
|
+
className: iframeClass,
|
|
157
|
+
title: videoTitle,
|
|
158
|
+
allow: "accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",
|
|
159
|
+
allowFullScreen: true,
|
|
160
|
+
src: iframeSrc
|
|
161
|
+
})));
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
YoutubeEmbeded.propTypes = {
|
|
165
|
+
priority: _propTypes["default"].bool,
|
|
166
|
+
onIframeAdded: _propTypes["default"].func,
|
|
167
|
+
adNetwork: _propTypes["default"].bool,
|
|
168
|
+
autoplay: _propTypes["default"].bool,
|
|
169
|
+
playlist: _propTypes["default"].bool,
|
|
170
|
+
muted: _propTypes["default"].bool,
|
|
171
|
+
webp: _propTypes["default"].bool,
|
|
172
|
+
noCookie: _propTypes["default"].bool,
|
|
173
|
+
videoId: _propTypes["default"].string,
|
|
174
|
+
iframeClass: _propTypes["default"].string,
|
|
175
|
+
poster: _propTypes["default"].string,
|
|
176
|
+
announce: _propTypes["default"].string,
|
|
177
|
+
playlistCoverId: _propTypes["default"].string,
|
|
178
|
+
videoParams: _propTypes["default"].string,
|
|
179
|
+
videoTitle: _propTypes["default"].string
|
|
180
|
+
};
|
|
181
|
+
YoutubeEmbeded.defaultProps = {
|
|
182
|
+
priority: true,
|
|
183
|
+
onIframeAdded: function onIframeAdded() {},
|
|
184
|
+
adNetwork: false,
|
|
185
|
+
autoplay: false,
|
|
186
|
+
playlist: false,
|
|
187
|
+
muted: false,
|
|
188
|
+
webp: false,
|
|
189
|
+
noCookie: false,
|
|
190
|
+
iframeClass: '',
|
|
191
|
+
poster: 'sddefault',
|
|
192
|
+
announce: 'Watch',
|
|
193
|
+
videoId: '',
|
|
194
|
+
playlistCoverId: '',
|
|
195
|
+
videoParams: '',
|
|
196
|
+
videoTitle: ''
|
|
197
|
+
};
|
|
198
|
+
var _default = YoutubeEmbeded;
|
|
199
|
+
exports["default"] = _default;
|
|
200
|
+
//# sourceMappingURL=YoutubeEmbeded.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YoutubeEmbeded.js"],"names":["YT_HQ_FORMAT","YT_IMAGE_URL","YoutubeEmbeded","autoplay","videoId","playlistCoverId","videoTitle","poster","videoParams","announce","noCookie","webp","playlist","onIframeAdded","muted","adNetwork","iframeClass","priority","IN_VIEW_CONFIG","isIntersecting","outerRef","preconnected","setPreconnected","renderIframe","setRenderIframe","imageSize","displayImage","setImageDetails","encodedId","encodeURIComponent","videoPlaylisCovertId","paramsImp","format","vi","posterUrl","ytUrl","mutedValue","iframeSrc","parsedWrapperClassname","img","Image","onload","newImageSize","width","src","warmConnections","addIframe","backgroundImage","propTypes","PropTypes","bool","func","string","defaultProps"],"mappings":"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","sourcesContent":["import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useInView } from '@blaze-react/utils/lib/customHooks';\nimport { IN_VIEW_CONFIG } from '../../../../constants';\n\nconst YT_HQ_FORMAT = 'hqdefault';\nconst YT_IMAGE_URL = 'https://i.ytimg.com';\n\nconst YoutubeEmbeded = ({\n autoplay,\n videoId,\n playlistCoverId,\n videoTitle,\n poster,\n videoParams,\n announce,\n noCookie,\n webp,\n playlist,\n onIframeAdded,\n muted,\n adNetwork,\n iframeClass,\n priority\n}) => {\n const [isIntersecting, outerRef] = useInView(IN_VIEW_CONFIG);\n const [preconnected, setPreconnected] = useState(false);\n const [renderIframe, setRenderIframe] = useState(!!autoplay);\n const [{ imageSize, displayImage }, setImageDetails] = useState({\n imageSize: poster,\n displayImage: priority\n });\n\n const encodedId = encodeURIComponent(videoId);\n const videoPlaylisCovertId =\n typeof playlistCoverId === 'string' ? encodeURIComponent(playlistCoverId) : null;\n const paramsImp = videoParams ? `&${videoParams}` : '';\n const format = webp ? 'webp' : 'jpg';\n const vi = webp ? 'vi_webp' : 'vi';\n const posterUrl = !playlist\n ? `${YT_IMAGE_URL}/${vi}/${encodedId}/${imageSize}.${format}`\n : `${YT_IMAGE_URL}/${vi}/${videoPlaylisCovertId}/${imageSize}.${format}`;\n const ytUrl = noCookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';\n\n const mutedValue = muted ? '&mute=1' : '';\n const iframeSrc = !playlist\n ? `${ytUrl}/embed/${encodedId}?autoplay=1${mutedValue}${paramsImp}`\n : `${ytUrl}/embed/videoseries?autoplay=1${mutedValue}&list=${encodedId}${paramsImp}`;\n const parsedWrapperClassname = `yt-facade ${renderIframe ? 'yt-activated' : ''}`;\n\n useEffect(\n () => {\n if ((!priority && !isIntersecting) || imageSize === YT_HQ_FORMAT) return;\n\n const img = new Image();\n // eslint-disable-next-line func-names\n img.onload = function() {\n let newImageSize = imageSize;\n if (this && this.width === 120) newImageSize = YT_HQ_FORMAT;\n setImageDetails({ imageSize: newImageSize, displayImage: true });\n };\n\n img.src = posterUrl;\n },\n [imageSize, isIntersecting, posterUrl, priority]\n );\n\n const warmConnections = () => {\n if (preconnected) return;\n setPreconnected(true);\n };\n\n const addIframe = () => {\n if (renderIframe) return;\n onIframeAdded();\n setRenderIframe(true);\n };\n\n return (\n <>\n {preconnected && (\n <>\n <link rel=\"preconnect\" href={YT_IMAGE_URL} />\n <link rel=\"preconnect\" href={ytUrl} />\n <link rel=\"preconnect\" href=\"https://www.google.com\" />\n {adNetwork && (\n <>\n <link rel=\"preconnect\" href=\"https://static.doubleclick.net\" />\n <link rel=\"preconnect\" href=\"https://googleads.g.doubleclick.net\" />\n </>\n )}\n </>\n )}\n <div\n ref={outerRef}\n role=\"button\"\n onPointerOver={warmConnections}\n onClick={addIframe}\n className={parsedWrapperClassname}\n data-title={videoTitle}\n style={{\n backgroundImage: `url(${displayImage ? posterUrl : ''})`\n }}>\n <div\n type=\"button\"\n className=\"yt-facade-button-wrapper\"\n aria-label={`${announce} ${videoTitle}`}>\n <div className=\"yt-facade-button\" />\n </div>\n {renderIframe && (\n <iframe\n className={iframeClass}\n title={videoTitle}\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={iframeSrc}\n />\n )}\n </div>\n </>\n );\n};\n\nYoutubeEmbeded.propTypes = {\n priority: PropTypes.bool,\n onIframeAdded: PropTypes.func,\n adNetwork: PropTypes.bool,\n autoplay: PropTypes.bool,\n playlist: PropTypes.bool,\n muted: PropTypes.bool,\n webp: PropTypes.bool,\n noCookie: PropTypes.bool,\n videoId: PropTypes.string,\n iframeClass: PropTypes.string,\n poster: PropTypes.string,\n announce: PropTypes.string,\n playlistCoverId: PropTypes.string,\n videoParams: PropTypes.string,\n videoTitle: PropTypes.string\n};\n\nYoutubeEmbeded.defaultProps = {\n priority: true,\n onIframeAdded: () => {},\n adNetwork: false,\n autoplay: false,\n playlist: false,\n muted: false,\n webp: false,\n noCookie: false,\n iframeClass: '',\n poster: 'sddefault',\n announce: 'Watch',\n videoId: '',\n playlistCoverId: '',\n videoParams: '',\n videoTitle: ''\n};\n\nexport default YoutubeEmbeded;\n"],"file":"YoutubeEmbeded.js"}
|
|
@@ -1,35 +1,68 @@
|
|
|
1
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
2
|
+
const _excluded = ["children", "collapse", "modifier", "mobileMenuModifier", "mobileMenuChildrenModifier", "mobileIconAlignment", "mobileButtonModifier", "hamburgerIconModifier", "closeIconModifier"];
|
|
1
3
|
import React, { useState } from 'react';
|
|
2
4
|
import PropTypes from 'prop-types';
|
|
3
5
|
import BlazeButton from '@blaze-react/button';
|
|
4
|
-
import { MdMenu } from 'react-icons/md';
|
|
6
|
+
import { MdMenu, MdClose } from 'react-icons/md';
|
|
5
7
|
import { useCheckMobileScreen } from '../../hooks';
|
|
6
8
|
import { HIDDEN } from '../../constants';
|
|
7
9
|
|
|
8
|
-
const Menu =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const Menu = _ref => {
|
|
11
|
+
let {
|
|
12
|
+
children,
|
|
13
|
+
collapse,
|
|
14
|
+
modifier,
|
|
15
|
+
mobileMenuModifier,
|
|
16
|
+
mobileMenuChildrenModifier,
|
|
17
|
+
mobileIconAlignment,
|
|
18
|
+
mobileButtonModifier,
|
|
19
|
+
hamburgerIconModifier,
|
|
20
|
+
closeIconModifier
|
|
21
|
+
} = _ref,
|
|
22
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
23
|
+
|
|
13
24
|
const isMobile = useCheckMobileScreen();
|
|
14
25
|
const [showMobileMenu, setShowMobileMenu] = useState(false);
|
|
15
26
|
const shouldDisplayCollapsed = collapse && isMobile;
|
|
16
|
-
const mobileButtonClass = shouldDisplayCollapsed && isMobile ?
|
|
27
|
+
const mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : HIDDEN;
|
|
17
28
|
const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;
|
|
18
|
-
const
|
|
19
|
-
|
|
29
|
+
const childrenDesktopModifier = shouldDisplayChildren && !isMobile ? modifier : `${modifier} ${HIDDEN}`;
|
|
30
|
+
const childrenMobileModifier = shouldDisplayChildren && isMobile ? `${mobileMenuChildrenModifier}` : ` ${HIDDEN}`;
|
|
31
|
+
const isMobileMenuExpanded = showMobileMenu ? `${mobileMenuModifier}` : '';
|
|
32
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, collapse && /*#__PURE__*/React.createElement("div", {
|
|
33
|
+
className: "top-0 absolute z-50"
|
|
34
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
35
|
+
className: `flex w-screen z-50 justify-${mobileIconAlignment} ${isMobileMenuExpanded}`
|
|
36
|
+
}, /*#__PURE__*/React.createElement(BlazeButton, {
|
|
20
37
|
className: mobileButtonClass,
|
|
21
38
|
onClick: () => setShowMobileMenu(!showMobileMenu)
|
|
22
|
-
}, /*#__PURE__*/React.createElement("i", null,
|
|
23
|
-
className:
|
|
39
|
+
}, /*#__PURE__*/React.createElement("i", null, showMobileMenu ? /*#__PURE__*/React.createElement(MdClose, {
|
|
40
|
+
className: closeIconModifier
|
|
41
|
+
}) : /*#__PURE__*/React.createElement(MdMenu, {
|
|
42
|
+
className: hamburgerIconModifier
|
|
43
|
+
}))))), /*#__PURE__*/React.createElement("ul", {
|
|
44
|
+
className: isMobile ? childrenMobileModifier : childrenDesktopModifier
|
|
24
45
|
}, children));
|
|
25
46
|
};
|
|
26
47
|
|
|
27
48
|
Menu.propTypes = {
|
|
28
49
|
collapse: PropTypes.bool.isRequired,
|
|
50
|
+
hamburgerIconModifier: PropTypes.string,
|
|
51
|
+
closeIconModifier: PropTypes.string,
|
|
52
|
+
mobileButtonModifier: PropTypes.string,
|
|
53
|
+
mobileMenuModifier: PropTypes.string,
|
|
54
|
+
mobileMenuChildrenModifier: PropTypes.string,
|
|
29
55
|
modifier: PropTypes.string,
|
|
56
|
+
mobileIconAlignment: PropTypes.string,
|
|
30
57
|
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])
|
|
31
58
|
};
|
|
32
59
|
Menu.defaultProps = {
|
|
60
|
+
hamburgerIconModifier: '',
|
|
61
|
+
closeIconModifier: '',
|
|
62
|
+
mobileButtonModifier: '',
|
|
63
|
+
mobileIconAlignment: '',
|
|
64
|
+
mobileMenuModifier: '',
|
|
65
|
+
mobileMenuChildrenModifier: '',
|
|
33
66
|
modifier: '',
|
|
34
67
|
children: []
|
|
35
68
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Menu/Menu.js"],"names":["React","useState","PropTypes","BlazeButton","MdMenu","useCheckMobileScreen","HIDDEN","Menu","children","collapse","modifier","isMobile","showMobileMenu","setShowMobileMenu","shouldDisplayCollapsed","mobileButtonClass","shouldDisplayChildren","
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Menu/Menu.js"],"names":["React","useState","PropTypes","BlazeButton","MdMenu","MdClose","useCheckMobileScreen","HIDDEN","Menu","children","collapse","modifier","mobileMenuModifier","mobileMenuChildrenModifier","mobileIconAlignment","mobileButtonModifier","hamburgerIconModifier","closeIconModifier","rest","isMobile","showMobileMenu","setShowMobileMenu","shouldDisplayCollapsed","mobileButtonClass","shouldDisplayChildren","childrenDesktopModifier","childrenMobileModifier","isMobileMenuExpanded","propTypes","bool","isRequired","string","oneOfType","arrayOf","node","defaultProps"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport BlazeButton from '@blaze-react/button';\nimport { MdMenu, MdClose } from 'react-icons/md';\nimport { useCheckMobileScreen } from '../../hooks';\nimport { HIDDEN } from '../../constants';\n\nconst Menu = ({\n children,\n collapse,\n modifier,\n mobileMenuModifier,\n mobileMenuChildrenModifier,\n mobileIconAlignment,\n mobileButtonModifier,\n hamburgerIconModifier,\n closeIconModifier,\n ...rest\n}) => {\n const isMobile = useCheckMobileScreen();\n const [showMobileMenu, setShowMobileMenu] = useState(false);\n\n const shouldDisplayCollapsed = collapse && isMobile;\n const mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : HIDDEN;\n const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;\n const childrenDesktopModifier =\n shouldDisplayChildren && !isMobile ? modifier : `${modifier} ${HIDDEN}`;\n\n const childrenMobileModifier =\n shouldDisplayChildren && isMobile ? `${mobileMenuChildrenModifier}` : ` ${HIDDEN}`;\n\n const isMobileMenuExpanded = showMobileMenu ? `${mobileMenuModifier}` : '';\n\n return (\n <>\n {collapse && (\n <div className=\"top-0 absolute z-50\">\n <div\n className={`flex w-screen z-50 justify-${mobileIconAlignment} ${isMobileMenuExpanded}`}>\n <BlazeButton\n className={mobileButtonClass}\n onClick={() => setShowMobileMenu(!showMobileMenu)}>\n <i>\n {showMobileMenu ? (\n <MdClose className={closeIconModifier} />\n ) : (\n <MdMenu className={hamburgerIconModifier} />\n )}\n </i>\n </BlazeButton>\n </div>\n </div>\n )}\n <ul className={isMobile ? childrenMobileModifier : childrenDesktopModifier}>{children}</ul>\n </>\n );\n};\n\nMenu.propTypes = {\n collapse: PropTypes.bool.isRequired,\n hamburgerIconModifier: PropTypes.string,\n closeIconModifier: PropTypes.string,\n mobileButtonModifier: PropTypes.string,\n mobileMenuModifier: PropTypes.string,\n mobileMenuChildrenModifier: PropTypes.string,\n modifier: PropTypes.string,\n mobileIconAlignment: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])\n};\n\nMenu.defaultProps = {\n hamburgerIconModifier: '',\n closeIconModifier: '',\n mobileButtonModifier: '',\n mobileIconAlignment: '',\n mobileMenuModifier: '',\n mobileMenuChildrenModifier: '',\n modifier: '',\n children: []\n};\n\nexport default Menu;\n"],"file":"Menu.js"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import
|
|
3
|
+
import YoutubeEmbeded from './YoutubeEmbeded';
|
|
4
4
|
import { getYouTubeID, booleanToNumber } from './helpers';
|
|
5
5
|
import { VIDEO_WRAPPER_CLASS_NAME } from '../../../../constants';
|
|
6
6
|
|
|
@@ -11,17 +11,14 @@ const YouTubeProvider = ({
|
|
|
11
11
|
}) => {
|
|
12
12
|
const videoId = getYouTubeID(url);
|
|
13
13
|
if (!videoId) return null;
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
};
|
|
20
|
-
return /*#__PURE__*/React.createElement(YouTube, {
|
|
14
|
+
const params = `loop=${booleanToNumber(loop)}`;
|
|
15
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
16
|
+
className: VIDEO_WRAPPER_CLASS_NAME
|
|
17
|
+
}, /*#__PURE__*/React.createElement(YoutubeEmbeded, {
|
|
18
|
+
autoplay: autoplay,
|
|
21
19
|
videoId: videoId,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
20
|
+
params: params
|
|
21
|
+
}));
|
|
25
22
|
};
|
|
26
23
|
|
|
27
24
|
YouTubeProvider.propTypes = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YouTubeProvider.js"],"names":["React","PropTypes","
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YouTubeProvider.js"],"names":["React","PropTypes","YoutubeEmbeded","getYouTubeID","booleanToNumber","VIDEO_WRAPPER_CLASS_NAME","YouTubeProvider","url","autoplay","loop","videoId","params","propTypes","string","isRequired","bool","defaultProps"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,cAAP,MAA2B,kBAA3B;AACA,SAASC,YAAT,EAAuBC,eAAvB,QAA8C,WAA9C;AACA,SAASC,wBAAT,QAAyC,uBAAzC;;AAEA,MAAMC,eAAe,GAAG,CAAC;AAAEC,EAAAA,GAAF;AAAOC,EAAAA,QAAP;AAAiBC,EAAAA;AAAjB,CAAD,KAA6B;AACnD,QAAMC,OAAO,GAAGP,YAAY,CAACI,GAAD,CAA5B;AAEA,MAAI,CAACG,OAAL,EAAc,OAAO,IAAP;AACd,QAAMC,MAAM,GAAI,QAAOP,eAAe,CAACK,IAAD,CAAO,EAA7C;AAEA,sBACE;AAAK,IAAA,SAAS,EAAEJ;AAAhB,kBACE,oBAAC,cAAD;AAAgB,IAAA,QAAQ,EAAEG,QAA1B;AAAoC,IAAA,OAAO,EAAEE,OAA7C;AAAsD,IAAA,MAAM,EAAEC;AAA9D,IADF,CADF;AAKD,CAXD;;AAaAL,eAAe,CAACM,SAAhB,GAA4B;AAC1BL,EAAAA,GAAG,EAAEN,SAAS,CAACY,MAAV,CAAiBC,UADI;AAE1BN,EAAAA,QAAQ,EAAEP,SAAS,CAACc,IAFM;AAG1BN,EAAAA,IAAI,EAAER,SAAS,CAACc;AAHU,CAA5B;AAMAT,eAAe,CAACU,YAAhB,GAA+B;AAC7BR,EAAAA,QAAQ,EAAE,KADmB;AAE7BC,EAAAA,IAAI,EAAE;AAFuB,CAA/B;AAKA,eAAeH,eAAf","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport YoutubeEmbeded from './YoutubeEmbeded';\nimport { getYouTubeID, booleanToNumber } from './helpers';\nimport { VIDEO_WRAPPER_CLASS_NAME } from '../../../../constants';\n\nconst YouTubeProvider = ({ url, autoplay, loop }) => {\n const videoId = getYouTubeID(url);\n\n if (!videoId) return null;\n const params = `loop=${booleanToNumber(loop)}`;\n\n return (\n <div className={VIDEO_WRAPPER_CLASS_NAME}>\n <YoutubeEmbeded autoplay={autoplay} videoId={videoId} params={params} />\n </div>\n );\n};\n\nYouTubeProvider.propTypes = {\n url: PropTypes.string.isRequired,\n autoplay: PropTypes.bool,\n loop: PropTypes.bool\n};\n\nYouTubeProvider.defaultProps = {\n autoplay: false,\n loop: false\n};\n\nexport default YouTubeProvider;\n"],"file":"YouTubeProvider.js"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { useInView } from '@blaze-react/utils/lib/customHooks';
|
|
4
|
+
import { IN_VIEW_CONFIG } from '../../../../constants';
|
|
5
|
+
const YT_HQ_FORMAT = 'hqdefault';
|
|
6
|
+
const YT_IMAGE_URL = 'https://i.ytimg.com';
|
|
7
|
+
|
|
8
|
+
const YoutubeEmbeded = ({
|
|
9
|
+
autoplay,
|
|
10
|
+
videoId,
|
|
11
|
+
playlistCoverId,
|
|
12
|
+
videoTitle,
|
|
13
|
+
poster,
|
|
14
|
+
videoParams,
|
|
15
|
+
announce,
|
|
16
|
+
noCookie,
|
|
17
|
+
webp,
|
|
18
|
+
playlist,
|
|
19
|
+
onIframeAdded,
|
|
20
|
+
muted,
|
|
21
|
+
adNetwork,
|
|
22
|
+
iframeClass,
|
|
23
|
+
priority
|
|
24
|
+
}) => {
|
|
25
|
+
const [isIntersecting, outerRef] = useInView(IN_VIEW_CONFIG);
|
|
26
|
+
const [preconnected, setPreconnected] = useState(false);
|
|
27
|
+
const [renderIframe, setRenderIframe] = useState(!!autoplay);
|
|
28
|
+
const [{
|
|
29
|
+
imageSize,
|
|
30
|
+
displayImage
|
|
31
|
+
}, setImageDetails] = useState({
|
|
32
|
+
imageSize: poster,
|
|
33
|
+
displayImage: priority
|
|
34
|
+
});
|
|
35
|
+
const encodedId = encodeURIComponent(videoId);
|
|
36
|
+
const videoPlaylisCovertId = typeof playlistCoverId === 'string' ? encodeURIComponent(playlistCoverId) : null;
|
|
37
|
+
const paramsImp = videoParams ? `&${videoParams}` : '';
|
|
38
|
+
const format = webp ? 'webp' : 'jpg';
|
|
39
|
+
const vi = webp ? 'vi_webp' : 'vi';
|
|
40
|
+
const posterUrl = !playlist ? `${YT_IMAGE_URL}/${vi}/${encodedId}/${imageSize}.${format}` : `${YT_IMAGE_URL}/${vi}/${videoPlaylisCovertId}/${imageSize}.${format}`;
|
|
41
|
+
const ytUrl = noCookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';
|
|
42
|
+
const mutedValue = muted ? '&mute=1' : '';
|
|
43
|
+
const iframeSrc = !playlist ? `${ytUrl}/embed/${encodedId}?autoplay=1${mutedValue}${paramsImp}` : `${ytUrl}/embed/videoseries?autoplay=1${mutedValue}&list=${encodedId}${paramsImp}`;
|
|
44
|
+
const parsedWrapperClassname = `yt-facade ${renderIframe ? 'yt-activated' : ''}`;
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (!priority && !isIntersecting || imageSize === YT_HQ_FORMAT) return;
|
|
47
|
+
const img = new Image(); // eslint-disable-next-line func-names
|
|
48
|
+
|
|
49
|
+
img.onload = function () {
|
|
50
|
+
let newImageSize = imageSize;
|
|
51
|
+
if (this && this.width === 120) newImageSize = YT_HQ_FORMAT;
|
|
52
|
+
setImageDetails({
|
|
53
|
+
imageSize: newImageSize,
|
|
54
|
+
displayImage: true
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
img.src = posterUrl;
|
|
59
|
+
}, [imageSize, isIntersecting, posterUrl, priority]);
|
|
60
|
+
|
|
61
|
+
const warmConnections = () => {
|
|
62
|
+
if (preconnected) return;
|
|
63
|
+
setPreconnected(true);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const addIframe = () => {
|
|
67
|
+
if (renderIframe) return;
|
|
68
|
+
onIframeAdded();
|
|
69
|
+
setRenderIframe(true);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, preconnected && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("link", {
|
|
73
|
+
rel: "preconnect",
|
|
74
|
+
href: YT_IMAGE_URL
|
|
75
|
+
}), /*#__PURE__*/React.createElement("link", {
|
|
76
|
+
rel: "preconnect",
|
|
77
|
+
href: ytUrl
|
|
78
|
+
}), /*#__PURE__*/React.createElement("link", {
|
|
79
|
+
rel: "preconnect",
|
|
80
|
+
href: "https://www.google.com"
|
|
81
|
+
}), adNetwork && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("link", {
|
|
82
|
+
rel: "preconnect",
|
|
83
|
+
href: "https://static.doubleclick.net"
|
|
84
|
+
}), /*#__PURE__*/React.createElement("link", {
|
|
85
|
+
rel: "preconnect",
|
|
86
|
+
href: "https://googleads.g.doubleclick.net"
|
|
87
|
+
}))), /*#__PURE__*/React.createElement("div", {
|
|
88
|
+
ref: outerRef,
|
|
89
|
+
role: "button",
|
|
90
|
+
onPointerOver: warmConnections,
|
|
91
|
+
onClick: addIframe,
|
|
92
|
+
className: parsedWrapperClassname,
|
|
93
|
+
"data-title": videoTitle,
|
|
94
|
+
style: {
|
|
95
|
+
backgroundImage: `url(${displayImage ? posterUrl : ''})`
|
|
96
|
+
}
|
|
97
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
98
|
+
type: "button",
|
|
99
|
+
className: "yt-facade-button-wrapper",
|
|
100
|
+
"aria-label": `${announce} ${videoTitle}`
|
|
101
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
102
|
+
className: "yt-facade-button"
|
|
103
|
+
})), renderIframe && /*#__PURE__*/React.createElement("iframe", {
|
|
104
|
+
className: iframeClass,
|
|
105
|
+
title: videoTitle,
|
|
106
|
+
allow: "accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",
|
|
107
|
+
allowFullScreen: true,
|
|
108
|
+
src: iframeSrc
|
|
109
|
+
})));
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
YoutubeEmbeded.propTypes = {
|
|
113
|
+
priority: PropTypes.bool,
|
|
114
|
+
onIframeAdded: PropTypes.func,
|
|
115
|
+
adNetwork: PropTypes.bool,
|
|
116
|
+
autoplay: PropTypes.bool,
|
|
117
|
+
playlist: PropTypes.bool,
|
|
118
|
+
muted: PropTypes.bool,
|
|
119
|
+
webp: PropTypes.bool,
|
|
120
|
+
noCookie: PropTypes.bool,
|
|
121
|
+
videoId: PropTypes.string,
|
|
122
|
+
iframeClass: PropTypes.string,
|
|
123
|
+
poster: PropTypes.string,
|
|
124
|
+
announce: PropTypes.string,
|
|
125
|
+
playlistCoverId: PropTypes.string,
|
|
126
|
+
videoParams: PropTypes.string,
|
|
127
|
+
videoTitle: PropTypes.string
|
|
128
|
+
};
|
|
129
|
+
YoutubeEmbeded.defaultProps = {
|
|
130
|
+
priority: true,
|
|
131
|
+
onIframeAdded: () => {},
|
|
132
|
+
adNetwork: false,
|
|
133
|
+
autoplay: false,
|
|
134
|
+
playlist: false,
|
|
135
|
+
muted: false,
|
|
136
|
+
webp: false,
|
|
137
|
+
noCookie: false,
|
|
138
|
+
iframeClass: '',
|
|
139
|
+
poster: 'sddefault',
|
|
140
|
+
announce: 'Watch',
|
|
141
|
+
videoId: '',
|
|
142
|
+
playlistCoverId: '',
|
|
143
|
+
videoParams: '',
|
|
144
|
+
videoTitle: ''
|
|
145
|
+
};
|
|
146
|
+
export default YoutubeEmbeded;
|
|
147
|
+
//# sourceMappingURL=YoutubeEmbeded.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/Video/providers/YouTube/YoutubeEmbeded.js"],"names":["React","useState","useEffect","PropTypes","useInView","IN_VIEW_CONFIG","YT_HQ_FORMAT","YT_IMAGE_URL","YoutubeEmbeded","autoplay","videoId","playlistCoverId","videoTitle","poster","videoParams","announce","noCookie","webp","playlist","onIframeAdded","muted","adNetwork","iframeClass","priority","isIntersecting","outerRef","preconnected","setPreconnected","renderIframe","setRenderIframe","imageSize","displayImage","setImageDetails","encodedId","encodeURIComponent","videoPlaylisCovertId","paramsImp","format","vi","posterUrl","ytUrl","mutedValue","iframeSrc","parsedWrapperClassname","img","Image","onload","newImageSize","width","src","warmConnections","addIframe","backgroundImage","propTypes","bool","func","string","defaultProps"],"mappings":"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","sourcesContent":["import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useInView } from '@blaze-react/utils/lib/customHooks';\nimport { IN_VIEW_CONFIG } from '../../../../constants';\n\nconst YT_HQ_FORMAT = 'hqdefault';\nconst YT_IMAGE_URL = 'https://i.ytimg.com';\n\nconst YoutubeEmbeded = ({\n autoplay,\n videoId,\n playlistCoverId,\n videoTitle,\n poster,\n videoParams,\n announce,\n noCookie,\n webp,\n playlist,\n onIframeAdded,\n muted,\n adNetwork,\n iframeClass,\n priority\n}) => {\n const [isIntersecting, outerRef] = useInView(IN_VIEW_CONFIG);\n const [preconnected, setPreconnected] = useState(false);\n const [renderIframe, setRenderIframe] = useState(!!autoplay);\n const [{ imageSize, displayImage }, setImageDetails] = useState({\n imageSize: poster,\n displayImage: priority\n });\n\n const encodedId = encodeURIComponent(videoId);\n const videoPlaylisCovertId =\n typeof playlistCoverId === 'string' ? encodeURIComponent(playlistCoverId) : null;\n const paramsImp = videoParams ? `&${videoParams}` : '';\n const format = webp ? 'webp' : 'jpg';\n const vi = webp ? 'vi_webp' : 'vi';\n const posterUrl = !playlist\n ? `${YT_IMAGE_URL}/${vi}/${encodedId}/${imageSize}.${format}`\n : `${YT_IMAGE_URL}/${vi}/${videoPlaylisCovertId}/${imageSize}.${format}`;\n const ytUrl = noCookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';\n\n const mutedValue = muted ? '&mute=1' : '';\n const iframeSrc = !playlist\n ? `${ytUrl}/embed/${encodedId}?autoplay=1${mutedValue}${paramsImp}`\n : `${ytUrl}/embed/videoseries?autoplay=1${mutedValue}&list=${encodedId}${paramsImp}`;\n const parsedWrapperClassname = `yt-facade ${renderIframe ? 'yt-activated' : ''}`;\n\n useEffect(\n () => {\n if ((!priority && !isIntersecting) || imageSize === YT_HQ_FORMAT) return;\n\n const img = new Image();\n // eslint-disable-next-line func-names\n img.onload = function() {\n let newImageSize = imageSize;\n if (this && this.width === 120) newImageSize = YT_HQ_FORMAT;\n setImageDetails({ imageSize: newImageSize, displayImage: true });\n };\n\n img.src = posterUrl;\n },\n [imageSize, isIntersecting, posterUrl, priority]\n );\n\n const warmConnections = () => {\n if (preconnected) return;\n setPreconnected(true);\n };\n\n const addIframe = () => {\n if (renderIframe) return;\n onIframeAdded();\n setRenderIframe(true);\n };\n\n return (\n <>\n {preconnected && (\n <>\n <link rel=\"preconnect\" href={YT_IMAGE_URL} />\n <link rel=\"preconnect\" href={ytUrl} />\n <link rel=\"preconnect\" href=\"https://www.google.com\" />\n {adNetwork && (\n <>\n <link rel=\"preconnect\" href=\"https://static.doubleclick.net\" />\n <link rel=\"preconnect\" href=\"https://googleads.g.doubleclick.net\" />\n </>\n )}\n </>\n )}\n <div\n ref={outerRef}\n role=\"button\"\n onPointerOver={warmConnections}\n onClick={addIframe}\n className={parsedWrapperClassname}\n data-title={videoTitle}\n style={{\n backgroundImage: `url(${displayImage ? posterUrl : ''})`\n }}>\n <div\n type=\"button\"\n className=\"yt-facade-button-wrapper\"\n aria-label={`${announce} ${videoTitle}`}>\n <div className=\"yt-facade-button\" />\n </div>\n {renderIframe && (\n <iframe\n className={iframeClass}\n title={videoTitle}\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={iframeSrc}\n />\n )}\n </div>\n </>\n );\n};\n\nYoutubeEmbeded.propTypes = {\n priority: PropTypes.bool,\n onIframeAdded: PropTypes.func,\n adNetwork: PropTypes.bool,\n autoplay: PropTypes.bool,\n playlist: PropTypes.bool,\n muted: PropTypes.bool,\n webp: PropTypes.bool,\n noCookie: PropTypes.bool,\n videoId: PropTypes.string,\n iframeClass: PropTypes.string,\n poster: PropTypes.string,\n announce: PropTypes.string,\n playlistCoverId: PropTypes.string,\n videoParams: PropTypes.string,\n videoTitle: PropTypes.string\n};\n\nYoutubeEmbeded.defaultProps = {\n priority: true,\n onIframeAdded: () => {},\n adNetwork: false,\n autoplay: false,\n playlist: false,\n muted: false,\n webp: false,\n noCookie: false,\n iframeClass: '',\n poster: 'sddefault',\n announce: 'Watch',\n videoId: '',\n playlistCoverId: '',\n videoParams: '',\n videoTitle: ''\n};\n\nexport default YoutubeEmbeded;\n"],"file":"YoutubeEmbeded.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blaze-cms/react-page-builder",
|
|
3
|
-
"version": "0.118.0
|
|
3
|
+
"version": "0.118.0",
|
|
4
4
|
"description": "Blaze react page builder",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib-es/index.js",
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
},
|
|
28
28
|
"license": "GPL-3.0",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@blaze-cms/core-auth-ui": "^0.118.0
|
|
31
|
-
"@blaze-cms/core-errors": "^0.118.0
|
|
30
|
+
"@blaze-cms/core-auth-ui": "^0.118.0",
|
|
31
|
+
"@blaze-cms/core-errors": "^0.118.0",
|
|
32
32
|
"@blaze-cms/image-cdn-react": "^0.2.0",
|
|
33
|
-
"@blaze-cms/nextjs-components": "^0.118.0
|
|
33
|
+
"@blaze-cms/nextjs-components": "^0.118.0",
|
|
34
34
|
"@blaze-cms/setup-ui": "^0.92.0",
|
|
35
|
-
"@blaze-cms/utils": "^0.118.0
|
|
35
|
+
"@blaze-cms/utils": "^0.118.0",
|
|
36
36
|
"@blaze-react/button": "0.5.19",
|
|
37
37
|
"@blaze-react/checkboxes": "0.5.31",
|
|
38
38
|
"@blaze-react/input": "0.5.30",
|
|
@@ -58,7 +58,6 @@
|
|
|
58
58
|
"react-html-parser": "2.0.2",
|
|
59
59
|
"react-jw-player": "^1.19.1",
|
|
60
60
|
"react-waypoint": "^9.0.2",
|
|
61
|
-
"react-youtube": "7.11.3",
|
|
62
61
|
"regenerator-runtime": "^0.13.3",
|
|
63
62
|
"uuid": "^3.3.3",
|
|
64
63
|
"video-react": "0.14.1"
|
|
@@ -88,5 +87,5 @@
|
|
|
88
87
|
"lib/*",
|
|
89
88
|
"lib-es/*"
|
|
90
89
|
],
|
|
91
|
-
"gitHead": "
|
|
90
|
+
"gitHead": "6814f1366b463d508604959b0f688c9dc170ccf8"
|
|
92
91
|
}
|
|
@@ -1,42 +1,80 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import BlazeButton from '@blaze-react/button';
|
|
4
|
-
import { MdMenu } from 'react-icons/md';
|
|
4
|
+
import { MdMenu, MdClose } from 'react-icons/md';
|
|
5
5
|
import { useCheckMobileScreen } from '../../hooks';
|
|
6
6
|
import { HIDDEN } from '../../constants';
|
|
7
7
|
|
|
8
|
-
const Menu = ({
|
|
8
|
+
const Menu = ({
|
|
9
|
+
children,
|
|
10
|
+
collapse,
|
|
11
|
+
modifier,
|
|
12
|
+
mobileMenuModifier,
|
|
13
|
+
mobileMenuChildrenModifier,
|
|
14
|
+
mobileIconAlignment,
|
|
15
|
+
mobileButtonModifier,
|
|
16
|
+
hamburgerIconModifier,
|
|
17
|
+
closeIconModifier,
|
|
18
|
+
...rest
|
|
19
|
+
}) => {
|
|
9
20
|
const isMobile = useCheckMobileScreen();
|
|
10
21
|
const [showMobileMenu, setShowMobileMenu] = useState(false);
|
|
11
22
|
|
|
12
23
|
const shouldDisplayCollapsed = collapse && isMobile;
|
|
13
|
-
const mobileButtonClass = shouldDisplayCollapsed && isMobile ?
|
|
24
|
+
const mobileButtonClass = shouldDisplayCollapsed && isMobile ? mobileButtonModifier : HIDDEN;
|
|
14
25
|
const shouldDisplayChildren = shouldDisplayCollapsed ? showMobileMenu : true;
|
|
15
|
-
const
|
|
26
|
+
const childrenDesktopModifier =
|
|
27
|
+
shouldDisplayChildren && !isMobile ? modifier : `${modifier} ${HIDDEN}`;
|
|
28
|
+
|
|
29
|
+
const childrenMobileModifier =
|
|
30
|
+
shouldDisplayChildren && isMobile ? `${mobileMenuChildrenModifier}` : ` ${HIDDEN}`;
|
|
31
|
+
|
|
32
|
+
const isMobileMenuExpanded = showMobileMenu ? `${mobileMenuModifier}` : '';
|
|
16
33
|
|
|
17
34
|
return (
|
|
18
35
|
<>
|
|
19
36
|
{collapse && (
|
|
20
|
-
<
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
37
|
+
<div className="top-0 absolute z-50">
|
|
38
|
+
<div
|
|
39
|
+
className={`flex w-screen z-50 justify-${mobileIconAlignment} ${isMobileMenuExpanded}`}>
|
|
40
|
+
<BlazeButton
|
|
41
|
+
className={mobileButtonClass}
|
|
42
|
+
onClick={() => setShowMobileMenu(!showMobileMenu)}>
|
|
43
|
+
<i>
|
|
44
|
+
{showMobileMenu ? (
|
|
45
|
+
<MdClose className={closeIconModifier} />
|
|
46
|
+
) : (
|
|
47
|
+
<MdMenu className={hamburgerIconModifier} />
|
|
48
|
+
)}
|
|
49
|
+
</i>
|
|
50
|
+
</BlazeButton>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
27
53
|
)}
|
|
28
|
-
<ul className={
|
|
54
|
+
<ul className={isMobile ? childrenMobileModifier : childrenDesktopModifier}>{children}</ul>
|
|
29
55
|
</>
|
|
30
56
|
);
|
|
31
57
|
};
|
|
32
58
|
|
|
33
59
|
Menu.propTypes = {
|
|
34
60
|
collapse: PropTypes.bool.isRequired,
|
|
61
|
+
hamburgerIconModifier: PropTypes.string,
|
|
62
|
+
closeIconModifier: PropTypes.string,
|
|
63
|
+
mobileButtonModifier: PropTypes.string,
|
|
64
|
+
mobileMenuModifier: PropTypes.string,
|
|
65
|
+
mobileMenuChildrenModifier: PropTypes.string,
|
|
35
66
|
modifier: PropTypes.string,
|
|
67
|
+
mobileIconAlignment: PropTypes.string,
|
|
36
68
|
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])
|
|
37
69
|
};
|
|
38
70
|
|
|
39
71
|
Menu.defaultProps = {
|
|
72
|
+
hamburgerIconModifier: '',
|
|
73
|
+
closeIconModifier: '',
|
|
74
|
+
mobileButtonModifier: '',
|
|
75
|
+
mobileIconAlignment: '',
|
|
76
|
+
mobileMenuModifier: '',
|
|
77
|
+
mobileMenuChildrenModifier: '',
|
|
40
78
|
modifier: '',
|
|
41
79
|
children: []
|
|
42
80
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import
|
|
3
|
+
import YoutubeEmbeded from './YoutubeEmbeded';
|
|
4
4
|
import { getYouTubeID, booleanToNumber } from './helpers';
|
|
5
5
|
import { VIDEO_WRAPPER_CLASS_NAME } from '../../../../constants';
|
|
6
6
|
|
|
@@ -8,15 +8,13 @@ const YouTubeProvider = ({ url, autoplay, loop }) => {
|
|
|
8
8
|
const videoId = getYouTubeID(url);
|
|
9
9
|
|
|
10
10
|
if (!videoId) return null;
|
|
11
|
+
const params = `loop=${booleanToNumber(loop)}`;
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
autoplay
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
return <YouTube videoId={videoId} containerClassName={VIDEO_WRAPPER_CLASS_NAME} opts={opts} />;
|
|
13
|
+
return (
|
|
14
|
+
<div className={VIDEO_WRAPPER_CLASS_NAME}>
|
|
15
|
+
<YoutubeEmbeded autoplay={autoplay} videoId={videoId} params={params} />
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
20
18
|
};
|
|
21
19
|
|
|
22
20
|
YouTubeProvider.propTypes = {
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { useInView } from '@blaze-react/utils/lib/customHooks';
|
|
4
|
+
import { IN_VIEW_CONFIG } from '../../../../constants';
|
|
5
|
+
|
|
6
|
+
const YT_HQ_FORMAT = 'hqdefault';
|
|
7
|
+
const YT_IMAGE_URL = 'https://i.ytimg.com';
|
|
8
|
+
|
|
9
|
+
const YoutubeEmbeded = ({
|
|
10
|
+
autoplay,
|
|
11
|
+
videoId,
|
|
12
|
+
playlistCoverId,
|
|
13
|
+
videoTitle,
|
|
14
|
+
poster,
|
|
15
|
+
videoParams,
|
|
16
|
+
announce,
|
|
17
|
+
noCookie,
|
|
18
|
+
webp,
|
|
19
|
+
playlist,
|
|
20
|
+
onIframeAdded,
|
|
21
|
+
muted,
|
|
22
|
+
adNetwork,
|
|
23
|
+
iframeClass,
|
|
24
|
+
priority
|
|
25
|
+
}) => {
|
|
26
|
+
const [isIntersecting, outerRef] = useInView(IN_VIEW_CONFIG);
|
|
27
|
+
const [preconnected, setPreconnected] = useState(false);
|
|
28
|
+
const [renderIframe, setRenderIframe] = useState(!!autoplay);
|
|
29
|
+
const [{ imageSize, displayImage }, setImageDetails] = useState({
|
|
30
|
+
imageSize: poster,
|
|
31
|
+
displayImage: priority
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const encodedId = encodeURIComponent(videoId);
|
|
35
|
+
const videoPlaylisCovertId =
|
|
36
|
+
typeof playlistCoverId === 'string' ? encodeURIComponent(playlistCoverId) : null;
|
|
37
|
+
const paramsImp = videoParams ? `&${videoParams}` : '';
|
|
38
|
+
const format = webp ? 'webp' : 'jpg';
|
|
39
|
+
const vi = webp ? 'vi_webp' : 'vi';
|
|
40
|
+
const posterUrl = !playlist
|
|
41
|
+
? `${YT_IMAGE_URL}/${vi}/${encodedId}/${imageSize}.${format}`
|
|
42
|
+
: `${YT_IMAGE_URL}/${vi}/${videoPlaylisCovertId}/${imageSize}.${format}`;
|
|
43
|
+
const ytUrl = noCookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';
|
|
44
|
+
|
|
45
|
+
const mutedValue = muted ? '&mute=1' : '';
|
|
46
|
+
const iframeSrc = !playlist
|
|
47
|
+
? `${ytUrl}/embed/${encodedId}?autoplay=1${mutedValue}${paramsImp}`
|
|
48
|
+
: `${ytUrl}/embed/videoseries?autoplay=1${mutedValue}&list=${encodedId}${paramsImp}`;
|
|
49
|
+
const parsedWrapperClassname = `yt-facade ${renderIframe ? 'yt-activated' : ''}`;
|
|
50
|
+
|
|
51
|
+
useEffect(
|
|
52
|
+
() => {
|
|
53
|
+
if ((!priority && !isIntersecting) || imageSize === YT_HQ_FORMAT) return;
|
|
54
|
+
|
|
55
|
+
const img = new Image();
|
|
56
|
+
// eslint-disable-next-line func-names
|
|
57
|
+
img.onload = function() {
|
|
58
|
+
let newImageSize = imageSize;
|
|
59
|
+
if (this && this.width === 120) newImageSize = YT_HQ_FORMAT;
|
|
60
|
+
setImageDetails({ imageSize: newImageSize, displayImage: true });
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
img.src = posterUrl;
|
|
64
|
+
},
|
|
65
|
+
[imageSize, isIntersecting, posterUrl, priority]
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const warmConnections = () => {
|
|
69
|
+
if (preconnected) return;
|
|
70
|
+
setPreconnected(true);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const addIframe = () => {
|
|
74
|
+
if (renderIframe) return;
|
|
75
|
+
onIframeAdded();
|
|
76
|
+
setRenderIframe(true);
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<>
|
|
81
|
+
{preconnected && (
|
|
82
|
+
<>
|
|
83
|
+
<link rel="preconnect" href={YT_IMAGE_URL} />
|
|
84
|
+
<link rel="preconnect" href={ytUrl} />
|
|
85
|
+
<link rel="preconnect" href="https://www.google.com" />
|
|
86
|
+
{adNetwork && (
|
|
87
|
+
<>
|
|
88
|
+
<link rel="preconnect" href="https://static.doubleclick.net" />
|
|
89
|
+
<link rel="preconnect" href="https://googleads.g.doubleclick.net" />
|
|
90
|
+
</>
|
|
91
|
+
)}
|
|
92
|
+
</>
|
|
93
|
+
)}
|
|
94
|
+
<div
|
|
95
|
+
ref={outerRef}
|
|
96
|
+
role="button"
|
|
97
|
+
onPointerOver={warmConnections}
|
|
98
|
+
onClick={addIframe}
|
|
99
|
+
className={parsedWrapperClassname}
|
|
100
|
+
data-title={videoTitle}
|
|
101
|
+
style={{
|
|
102
|
+
backgroundImage: `url(${displayImage ? posterUrl : ''})`
|
|
103
|
+
}}>
|
|
104
|
+
<div
|
|
105
|
+
type="button"
|
|
106
|
+
className="yt-facade-button-wrapper"
|
|
107
|
+
aria-label={`${announce} ${videoTitle}`}>
|
|
108
|
+
<div className="yt-facade-button" />
|
|
109
|
+
</div>
|
|
110
|
+
{renderIframe && (
|
|
111
|
+
<iframe
|
|
112
|
+
className={iframeClass}
|
|
113
|
+
title={videoTitle}
|
|
114
|
+
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
|
|
115
|
+
allowFullScreen
|
|
116
|
+
src={iframeSrc}
|
|
117
|
+
/>
|
|
118
|
+
)}
|
|
119
|
+
</div>
|
|
120
|
+
</>
|
|
121
|
+
);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
YoutubeEmbeded.propTypes = {
|
|
125
|
+
priority: PropTypes.bool,
|
|
126
|
+
onIframeAdded: PropTypes.func,
|
|
127
|
+
adNetwork: PropTypes.bool,
|
|
128
|
+
autoplay: PropTypes.bool,
|
|
129
|
+
playlist: PropTypes.bool,
|
|
130
|
+
muted: PropTypes.bool,
|
|
131
|
+
webp: PropTypes.bool,
|
|
132
|
+
noCookie: PropTypes.bool,
|
|
133
|
+
videoId: PropTypes.string,
|
|
134
|
+
iframeClass: PropTypes.string,
|
|
135
|
+
poster: PropTypes.string,
|
|
136
|
+
announce: PropTypes.string,
|
|
137
|
+
playlistCoverId: PropTypes.string,
|
|
138
|
+
videoParams: PropTypes.string,
|
|
139
|
+
videoTitle: PropTypes.string
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
YoutubeEmbeded.defaultProps = {
|
|
143
|
+
priority: true,
|
|
144
|
+
onIframeAdded: () => {},
|
|
145
|
+
adNetwork: false,
|
|
146
|
+
autoplay: false,
|
|
147
|
+
playlist: false,
|
|
148
|
+
muted: false,
|
|
149
|
+
webp: false,
|
|
150
|
+
noCookie: false,
|
|
151
|
+
iframeClass: '',
|
|
152
|
+
poster: 'sddefault',
|
|
153
|
+
announce: 'Watch',
|
|
154
|
+
videoId: '',
|
|
155
|
+
playlistCoverId: '',
|
|
156
|
+
videoParams: '',
|
|
157
|
+
videoTitle: ''
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
export default YoutubeEmbeded;
|
|
@@ -5,10 +5,6 @@ import YouTubeProvider from '../../../../../../../src/components/Video/providers
|
|
|
5
5
|
describe('YouTubeProvider component', () => {
|
|
6
6
|
const props = { url: 'https://www.youtube.com/watch?v=mockedID', modifier: 'mocked-modifier' };
|
|
7
7
|
|
|
8
|
-
it('should be defined', () => {
|
|
9
|
-
expect(YouTubeProvider).toBeDefined();
|
|
10
|
-
});
|
|
11
|
-
|
|
12
8
|
it('should render without throwing error and match snapshot', async () => {
|
|
13
9
|
const { asFragment } = render(YouTubeProvider, props);
|
|
14
10
|
expect(asFragment()).toMatchSnapshot();
|
package/tests/unit/src/components/Video/providers/YouTube/__snapshots__/YouTubeProvider.test.js.snap
CHANGED
|
@@ -5,7 +5,22 @@ exports[`YouTubeProvider component should render without throwing error and matc
|
|
|
5
5
|
<div
|
|
6
6
|
class="video__wrapper"
|
|
7
7
|
>
|
|
8
|
-
<div
|
|
8
|
+
<div
|
|
9
|
+
class="yt-facade "
|
|
10
|
+
data-title=""
|
|
11
|
+
role="button"
|
|
12
|
+
style="background-image: url(https://i.ytimg.com/vi/mockedID/sddefault.jpg);"
|
|
13
|
+
>
|
|
14
|
+
<div
|
|
15
|
+
aria-label="Watch "
|
|
16
|
+
class="yt-facade-button-wrapper"
|
|
17
|
+
type="button"
|
|
18
|
+
>
|
|
19
|
+
<div
|
|
20
|
+
class="yt-facade-button"
|
|
21
|
+
/>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
9
24
|
</div>
|
|
10
25
|
</DocumentFragment>
|
|
11
26
|
`;
|