@shopgate/pwa-common 7.25.1-beta.1 → 7.25.1-beta.2
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/collections/EmbeddedMedia.js +6 -0
- package/collections/media-providers/MediaProvider.js +7 -0
- package/collections/media-providers/Vimeo.js +16 -3
- package/collections/media-providers/YouTube.js +15 -4
- package/constants/Portals.js +2 -2
- package/helpers/html/parseHTML.js +2 -1
- package/package.json +3 -3
- package/selectors/client.js +3 -4
- package/streams/view.js +5 -27
|
@@ -26,6 +26,12 @@ function _extends(){_extends=Object.assign||function(target){for(var i=1;i<argum
|
|
|
26
26
|
* @param {boolean} [cookieConsentSettings.statisticsCookiesAccepted] Whether statistics cookies
|
|
27
27
|
* are accepted.
|
|
28
28
|
*/},{key:"handleCookieConsent",value:function handleCookieConsent(container){var cookieConsentSettings=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var cookieConsent=_extends({comfortCookiesAccepted:false,statisticsCookiesAccepted:false},cookieConsentSettings);this.providers.forEach(function(provider){if(provider.handleCookieConsent){provider.handleCookieConsent(container,cookieConsent);}});}/**
|
|
29
|
+
* Applies optimizations to embedded media iframes within the given container.
|
|
30
|
+
* Common enhancements include adding responsive wrappers and appropriate
|
|
31
|
+
* sandbox attributes to improve security and layout behavior.
|
|
32
|
+
*
|
|
33
|
+
* @param {Document} document - The DOM document containing iframes to optimize.
|
|
34
|
+
*/},{key:"applyIframeOptimizations",value:function applyIframeOptimizations(document){this.providers.forEach(function(provider){provider.applyIframeOptimizations(document);});}/**
|
|
29
35
|
* Stops all playing media within the DOM containers.
|
|
30
36
|
*/},{key:"stop",value:function stop(){this.providers.forEach(function(provider){provider.stop();});}/**
|
|
31
37
|
* Check if we have media providers with not-ready SDK
|
|
@@ -13,6 +13,13 @@ function _classCallCheck(instance,Constructor){if(!(instance instanceof Construc
|
|
|
13
13
|
* @callback
|
|
14
14
|
* @abstract
|
|
15
15
|
*/},{key:"getMediaContainers",value:function getMediaContainers(){logger.error('MediaProvider.getMediaContainers() needs to be implemented within an inheriting class');}/**
|
|
16
|
+
* Applies optimizations to embedded media iframes within the given container.
|
|
17
|
+
* Common enhancements include adding responsive wrappers and appropriate
|
|
18
|
+
* sandbox attributes to improve security and layout behavior.
|
|
19
|
+
*
|
|
20
|
+
* @param {Document} document - The DOM document containing iframes to optimize.
|
|
21
|
+
* @returns {MediaProvider}
|
|
22
|
+
*/},{key:"applyIframeOptimizations",value:function applyIframeOptimizations(){return this;}/**
|
|
16
23
|
* Optimizes video container to make it responsive.
|
|
17
24
|
* @param {Element} container A DOM container.
|
|
18
25
|
* @returns {MediaProvider}
|
|
@@ -19,12 +19,25 @@ _this2.isPending=true;_this2.remoteScriptUrl=scriptUrl;_this2.deferred=[];return
|
|
|
19
19
|
* @override
|
|
20
20
|
* @param {ParentNode} container A DOM container.
|
|
21
21
|
* @returns {VimeoMediaProvider}
|
|
22
|
-
*/},{key:"add",value:function add(container){
|
|
23
|
-
iframes
|
|
22
|
+
*/},{key:"add",value:function add(container){if(!this.checkScriptLoadingStatus()){this.deferred.push(container);return this;}var iframes=this.getMediaContainers(container);if(!iframes.length){return this;}var players=[];iframes.forEach(function(iframe){players.push(new window.Vimeo.Player(iframe));});this.containers.set(container,players);return this;}/**
|
|
23
|
+
* Applies optimizations to embedded media iframes within the given container.
|
|
24
|
+
* Common enhancements include adding responsive wrappers and appropriate
|
|
25
|
+
* sandbox attributes to improve security and layout behavior.
|
|
26
|
+
*
|
|
27
|
+
* @param {Document} document - The DOM document containing iframes to optimize.
|
|
28
|
+
* @returns {YouTubeMediaProvider}
|
|
29
|
+
*/},{key:"applyIframeOptimizations",value:function applyIframeOptimizations(document){var _this4=this;var iframes=this.getMediaContainers(document);if(!iframes.length){return this;}iframes.forEach(function(iframe,index){// Block clicks on Vimeo icon
|
|
30
|
+
iframes[index].setAttribute('sandbox','allow-forms allow-scripts allow-pointer-lock allow-same-origin allow-top-navigation');_this4.responsify(iframe);});return this;}/**
|
|
24
31
|
* Stops all playing videos within the DOM containers.
|
|
25
32
|
* @override
|
|
26
33
|
* @returns {VimeoMediaProvider}
|
|
27
|
-
*/},{key:"stop",value:function stop(){
|
|
34
|
+
*/},{key:"stop",value:function stop(){// Select all iframes in the document. Actually this should be done via the iframes
|
|
35
|
+
// registered in this.containers, but that doesn't seem to work reliably anymore.
|
|
36
|
+
// Since we had to find a quick fix for CURB-5033 we now select all iframes in the document
|
|
37
|
+
// via the media container selector and then stop the videos.
|
|
38
|
+
var iframes=this.getMediaContainers(document);iframes.forEach(function(iframe){try{var player=new window.Vimeo.Player(iframe);player.pause()["catch"](function(){// Ignore errors
|
|
39
|
+
});}catch(e){// Ignore errors
|
|
40
|
+
}});return this;}/**
|
|
28
41
|
* Searches for embedded media and replaces it with a placeholder element when comfort cookie
|
|
29
42
|
* consent is not accepted.
|
|
30
43
|
*
|
|
@@ -9,12 +9,23 @@ function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="s
|
|
|
9
9
|
* @override
|
|
10
10
|
* @param {ParentNode} container A DOM container.
|
|
11
11
|
* @returns {YouTubeMediaProvider}
|
|
12
|
-
*/},{key:"add",value:function add(container){var
|
|
12
|
+
*/},{key:"add",value:function add(container){var iframes=this.getMediaContainers(container);if(!iframes.length){return this;}this.containers.set(container,iframes);return this;}/**
|
|
13
|
+
* Applies optimizations to embedded media iframes within the given container.
|
|
14
|
+
* Common enhancements include adding responsive wrappers and appropriate
|
|
15
|
+
* sandbox attributes to improve security and layout behavior.
|
|
16
|
+
*
|
|
17
|
+
* @param {Document} document - The DOM document containing iframes to optimize.
|
|
18
|
+
* @returns {YouTubeMediaProvider}
|
|
19
|
+
*/},{key:"applyIframeOptimizations",value:function applyIframeOptimizations(document){var _this2=this;var iframes=this.getMediaContainers(document);if(!iframes.length){return this;}// Update the video urls to enable stopping videos via the event API.
|
|
13
20
|
iframes.forEach(function(iframe,index){// Block clicks on YouTube icon
|
|
14
|
-
iframes[index].sandbox
|
|
21
|
+
iframes[index].setAttribute('sandbox','allow-forms allow-scripts allow-pointer-lock allow-same-origin allow-top-navigation');_this2.responsify(iframe);var src=iframe.getAttribute('src');var _src$split=src.split('?'),_src$split2=_slicedToArray(_src$split,2),url=_src$split2[0],query=_src$split2[1];var urlParams=new URLSearchParams(query);// Enable the js api to allow sending events to the iframe.
|
|
15
22
|
urlParams.set('enablejsapi',1);// Enable controls to avoid the iframe not being resumable because of controls=0 param on ios.
|
|
16
|
-
urlParams.set('controls',1);iframes[index].src
|
|
23
|
+
urlParams.set('controls',1);iframes[index].setAttribute('src',"".concat(url,"?").concat(urlParams.toString()));});return this;}/**
|
|
17
24
|
* Stops all playing videos within the DOM containers.
|
|
18
25
|
* @override
|
|
19
26
|
* @returns {YouTubeMediaProvider}
|
|
20
|
-
*/},{key:"stop",value:function stop(){
|
|
27
|
+
*/},{key:"stop",value:function stop(){// Select all iframes in the document. Actually this should be done via the iframes
|
|
28
|
+
// registered in this.containers, but that doesn't seem to work reliably anymore.
|
|
29
|
+
// Since we had to find a quick fix for CURB-5033 we now select all iframes in the document
|
|
30
|
+
// via the media container selector and then stop the videos.
|
|
31
|
+
var iframes=this.getMediaContainers(document);iframes.forEach(function(iframe){var _iframe$contentWindow;if(typeof(iframe===null||iframe===void 0?void 0:(_iframe$contentWindow=iframe.contentWindow)===null||_iframe$contentWindow===void 0?void 0:_iframe$contentWindow.postMessage)==='function'){iframe.contentWindow.postMessage(JSON.stringify({event:'command',func:'stopVideo',args:[]}),'*');}});return this;}}]);}(MediaProvider);export default YouTubeMediaProvider;/* eslint-enable class-methods-use-this */
|
package/constants/Portals.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// FEATURES
|
|
2
2
|
var APP='app';var APP_BAR='app-bar';var VIEW='view';var PAGE='page';var NAV_MENU='nav-menu';var NO_RESULTS='no-results';var USER_MENU='user-menu';var FORM='form';// CONTENTS
|
|
3
|
-
var GLOBALS='globals';var ROUTES='routes';var CONTENT='content';var QUICK_LINKS='quick-links';var HOME='home';var LOGIN='login';var SCANNER='scanner';var REGISTER_LINK='register-link';var TERMS='terms';var PRIVACY='privacy';var PRIVACY_SETTINGS='privacy-settings';var IMPRINT='imprint';var STORE_INFORMATION='store-information';var STORE_INFORMATION_MORE='store-information-more';var STORE_INFORMATION_ABOUT='store-information-about';var MY_ACCOUNT='my-account';var LOGOUT='logout';var CONTAINER='container';var DEFAULT='default';var BACK='back';var CLOSE='close';var SIMPLE='simple';var CART_BUTTON='cart-button';var ITEMS='items';// POSITIONS
|
|
4
|
-
export var BEFORE='before';export var AFTER='after';export var LEFT='left';export var CENTER='center';export var RIGHT='right';export var BELOW='below';export var APP_GLOBALS="".concat(APP,".").concat(GLOBALS);export var APP_ROUTES="".concat(APP,".").concat(ROUTES);export var VIEW_CONTENT_BEFORE="".concat(VIEW,".").concat(CONTENT,".").concat(BEFORE);export var VIEW_CONTENT="".concat(VIEW,".").concat(CONTENT);export var VIEW_CONTENT_AFTER="".concat(VIEW,".").concat(CONTENT,".").concat(AFTER);export var PAGE_CONTENT_BEFORE="".concat(PAGE,".").concat(CONTENT,".").concat(BEFORE);export var PAGE_CONTENT="".concat(PAGE,".").concat(CONTENT);export var PAGE_CONTENT_AFTER="".concat(PAGE,".").concat(CONTENT,".").concat(AFTER);export var PAGE_LOGIN_BEFORE="".concat(PAGE,".").concat(LOGIN,".").concat(BEFORE);export var PAGE_LOGIN="".concat(PAGE,".").concat(LOGIN);export var PAGE_LOGIN_AFTER="".concat(PAGE,".").concat(LOGIN,".").concat(AFTER);export var PAGE_LOGIN_FORM_BEFORE="".concat(PAGE,".").concat(LOGIN,".").concat(FORM,".").concat(BEFORE);export var PAGE_LOGIN_FORM="".concat(PAGE,".").concat(LOGIN,".").concat(FORM);export var PAGE_LOGIN_FORM_AFTER="".concat(PAGE,".").concat(LOGIN,".").concat(FORM,".").concat(AFTER);export var PAGE_LOGIN_REGISTER_LINK_BEFORE="".concat(PAGE,".").concat(LOGIN,".").concat(REGISTER_LINK,".").concat(BEFORE);export var PAGE_LOGIN_REGISTER_LINK="".concat(PAGE,".").concat(LOGIN,".").concat(REGISTER_LINK);export var PAGE_LOGIN_REGISTER_LINK_AFTER="".concat(PAGE,".").concat(LOGIN,".").concat(REGISTER_LINK,".").concat(AFTER);export var NAV_MENU_CONTENT_BEFORE="".concat(NAV_MENU,".").concat(CONTENT,".").concat(BEFORE);export var NAV_MENU_CONTENT_AFTER="".concat(NAV_MENU,".").concat(CONTENT,".").concat(AFTER);export var NAV_MENU_QUICK_LINKS="".concat(NAV_MENU,".").concat(QUICK_LINKS);export var NAV_MENU_QUICK_LINKS_BEFORE="".concat(NAV_MENU,".").concat(QUICK_LINKS,".").concat(BEFORE);export var NAV_MENU_QUICK_LINKS_AFTER="".concat(NAV_MENU,".").concat(QUICK_LINKS,".").concat(AFTER);export var NAV_MENU_QUICK_LINKS_ITEMS="".concat(NAV_MENU,".").concat(QUICK_LINKS,".").concat(ITEMS);export var NAV_MENU_QUICK_LINKS_ITEMS_BEFORE="".concat(NAV_MENU,".").concat(QUICK_LINKS,".").concat(ITEMS,".").concat(BEFORE);export var NAV_MENU_QUICK_LINKS_ITEMS_AFTER="".concat(NAV_MENU,".").concat(QUICK_LINKS,".").concat(ITEMS,".").concat(AFTER);export var NAV_MENU_HOME_BEFORE="".concat(NAV_MENU,".").concat(HOME,".").concat(BEFORE);export var NAV_MENU_HOME="".concat(NAV_MENU,".").concat(HOME);export var NAV_MENU_HOME_AFTER="".concat(NAV_MENU,".").concat(HOME,".").concat(AFTER);export var NAV_MENU_SCANNER_BEFORE="".concat(NAV_MENU,".").concat(SCANNER,".").concat(BEFORE);export var NAV_MENU_SCANNER="".concat(NAV_MENU,".").concat(SCANNER);export var NAV_MENU_SCANNER_AFTER="".concat(NAV_MENU,".").concat(SCANNER,".").concat(AFTER);export var NAV_MENU_TERMS_BEFORE="".concat(NAV_MENU,".").concat(TERMS,".").concat(BEFORE);export var NAV_MENU_TERMS="".concat(NAV_MENU,".").concat(TERMS);export var NAV_MENU_TERMS_AFTER="".concat(NAV_MENU,".").concat(TERMS,".").concat(AFTER);export var NAV_MENU_PRIVACY_BEFORE="".concat(NAV_MENU,".").concat(PRIVACY,".").concat(BEFORE);export var NAV_MENU_PRIVACY="".concat(NAV_MENU,".").concat(PRIVACY);export var NAV_MENU_PRIVACY_AFTER="".concat(NAV_MENU,".").concat(PRIVACY,".").concat(AFTER);export var NAV_MENU_PRIVACY_SETTINGS_BEFORE="".concat(NAV_MENU,".").concat(PRIVACY_SETTINGS,".").concat(BEFORE);export var NAV_MENU_PRIVACY_SETTINGS="".concat(NAV_MENU,".").concat(PRIVACY_SETTINGS);export var NAV_MENU_PRIVACY_SETTINGS_AFTER="".concat(NAV_MENU,".").concat(PRIVACY_SETTINGS,".").concat(AFTER);export var NAV_MENU_IMPRINT_BEFORE="".concat(NAV_MENU,".").concat(IMPRINT,".").concat(BEFORE);export var NAV_MENU_IMPRINT="".concat(NAV_MENU,".").concat(IMPRINT);export var NAV_MENU_IMPRINT_AFTER="".concat(NAV_MENU,".").concat(IMPRINT,".").concat(AFTER);export var NAV_MENU_STORE_INFORMATION_BEFORE="".concat(NAV_MENU,".").concat(STORE_INFORMATION,".").concat(BEFORE);export var NAV_MENU_STORE_INFORMATION="".concat(NAV_MENU,".").concat(STORE_INFORMATION);export var NAV_MENU_STORE_INFORMATION_AFTER="".concat(NAV_MENU,".").concat(STORE_INFORMATION,".").concat(AFTER);export var NAV_MENU_STORE_INFORMATION_MORE_BEFORE="".concat(NAV_MENU,".").concat(STORE_INFORMATION_MORE,".").concat(BEFORE);export var NAV_MENU_STORE_INFORMATION_MORE="".concat(NAV_MENU,".").concat(STORE_INFORMATION_MORE);export var NAV_MENU_STORE_INFORMATION_MORE_AFTER="".concat(NAV_MENU,".").concat(STORE_INFORMATION_MORE,".").concat(AFTER);export var NAV_MENU_STORE_INFORMATION_ABOUT_BEFORE="".concat(NAV_MENU,".").concat(STORE_INFORMATION_ABOUT,".").concat(BEFORE);export var NAV_MENU_STORE_INFORMATION_ABOUT="".concat(NAV_MENU,".").concat(STORE_INFORMATION_ABOUT);export var NAV_MENU_STORE_INFORMATION_ABOUT_AFTER="".concat(NAV_MENU,".").concat(STORE_INFORMATION_ABOUT,".").concat(AFTER);export var NAV_MENU_MY_ACCOUNT_BEFORE="".concat(NAV_MENU,".").concat(MY_ACCOUNT,".").concat(BEFORE);export var NAV_MENU_MY_ACCOUNT="".concat(NAV_MENU,".").concat(MY_ACCOUNT);export var NAV_MENU_MY_ACCOUNT_AFTER="".concat(NAV_MENU,".").concat(MY_ACCOUNT,".").concat(AFTER);export var NAV_MENU_LOGOUT_BEFORE="".concat(NAV_MENU,".").concat(LOGOUT,".").concat(BEFORE);export var NAV_MENU_LOGOUT="".concat(NAV_MENU,".").concat(LOGOUT);export var NAV_MENU_LOGOUT_AFTER="".concat(NAV_MENU,".").concat(LOGOUT,".").concat(AFTER);export var NO_RESULTS_CONTENT_BEFORE="".concat(NO_RESULTS,".").concat(CONTENT,".").concat(BEFORE);export var NO_RESULTS_CONTENT="".concat(NO_RESULTS,".").concat(CONTENT);export var NO_RESULTS_CONTENT_AFTER="".concat(NO_RESULTS,".").concat(CONTENT,".").concat(AFTER);export var USER_MENU_CONTAINER_BEFORE="".concat(USER_MENU,".").concat(CONTAINER,".").concat(BEFORE);export var USER_MENU_CONTAINER="".concat(USER_MENU,".").concat(CONTAINER);export var USER_MENU_CONTAINER_AFTER="".concat(USER_MENU,".").concat(CONTAINER,".").concat(AFTER);export var APP_BAR_DEFAULT_BEFORE="".concat(APP_BAR,".").concat(DEFAULT,".").concat(BEFORE);export var APP_BAR_DEFAULT="".concat(APP_BAR,".").concat(DEFAULT);export var APP_BAR_DEFAULT_AFTER="".concat(APP_BAR,".").concat(DEFAULT,".").concat(AFTER);export var APP_BAR_BACK_BEFORE="".concat(APP_BAR,".").concat(BACK,".").concat(BEFORE);export var APP_BAR_BACK="".concat(APP_BAR,".").concat(BACK);export var APP_BAR_BACK_AFTER="".concat(APP_BAR,".").concat(BACK,".").concat(AFTER);export var APP_BAR_CLOSE_BEFORE="".concat(APP_BAR,".").concat(CLOSE,".").concat(BEFORE);export var APP_BAR_CLOSE="".concat(APP_BAR,".").concat(CLOSE);export var APP_BAR_CLOSE_AFTER="".concat(APP_BAR,".").concat(CLOSE,".").concat(AFTER);export var APP_BAR_SIMPLE_BEFORE="".concat(APP_BAR,".").concat(SIMPLE,".").concat(BEFORE);export var APP_BAR_SIMPLE="".concat(APP_BAR,".").concat(SIMPLE);export var APP_BAR_SIMPLE_AFTER="".concat(APP_BAR,".").concat(SIMPLE,".").concat(AFTER);export var APP_BAR_LEFT="".concat(APP_BAR,".").concat(LEFT);export var APP_BAR_LEFT_BEFORE="".concat(APP_BAR,".").concat(LEFT,".").concat(BEFORE);export var APP_BAR_LEFT_AFTER="".concat(APP_BAR,".").concat(LEFT,".").concat(AFTER);export var APP_BAR_CENTER="".concat(APP_BAR,".").concat(CENTER);export var APP_BAR_CENTER_BEFORE="".concat(APP_BAR,".").concat(CENTER,".").concat(BEFORE);export var APP_BAR_CENTER_AFTER="".concat(APP_BAR,".").concat(CENTER,".").concat(AFTER);export var APP_BAR_RIGHT="".concat(APP_BAR,".").concat(RIGHT);export var APP_BAR_RIGHT_BEFORE="".concat(APP_BAR,".").concat(RIGHT,".").concat(BEFORE);export var APP_BAR_RIGHT_AFTER="".concat(APP_BAR,".").concat(RIGHT,".").concat(AFTER);export var APP_BAR_BELOW="".concat(APP_BAR,".").concat(BELOW);export var APP_BAR_BELOW_BEFORE="".concat(APP_BAR,".").concat(BELOW,".").concat(BEFORE);export var APP_BAR_BELOW_AFTER="".concat(APP_BAR,".").concat(BELOW,".").concat(AFTER);export var APP_BAR_CART_BUTTON="".concat(APP_BAR,".").concat(CART_BUTTON);export var APP_BAR_CART_BUTTON_BEFORE="".concat(APP_BAR,".").concat(CART_BUTTON,".").concat(BEFORE);export var APP_BAR_CART_BUTTON_AFTER="".concat(APP_BAR,".").concat(CART_BUTTON,".").concat(AFTER);export var APP_BAR_CONTENT="".concat(APP_BAR,".").concat(CONTENT);export var APP_BAR_CONTENT_BEFORE="".concat(APP_BAR_CONTENT,".").concat(BEFORE);export var APP_BAR_CONTENT_AFTER="".concat(APP_BAR_CONTENT,".").concat(AFTER);
|
|
3
|
+
var GLOBALS='globals';var ROUTES='routes';var FOOTER='footer';var CONTENT='content';var QUICK_LINKS='quick-links';var HOME='home';var LOGIN='login';var SCANNER='scanner';var REGISTER_LINK='register-link';var TERMS='terms';var PRIVACY='privacy';var PRIVACY_SETTINGS='privacy-settings';var IMPRINT='imprint';var STORE_INFORMATION='store-information';var STORE_INFORMATION_MORE='store-information-more';var STORE_INFORMATION_ABOUT='store-information-about';var MY_ACCOUNT='my-account';var LOGOUT='logout';var CONTAINER='container';var DEFAULT='default';var BACK='back';var CLOSE='close';var SIMPLE='simple';var CART_BUTTON='cart-button';var ITEMS='items';// POSITIONS
|
|
4
|
+
export var BEFORE='before';export var AFTER='after';export var LEFT='left';export var CENTER='center';export var RIGHT='right';export var BELOW='below';export var APP_GLOBALS="".concat(APP,".").concat(GLOBALS);export var APP_ROUTES="".concat(APP,".").concat(ROUTES);export var APP_FOOTER_CONTENT_BEFORE="".concat(APP,".").concat(FOOTER,".").concat(CONTENT,".").concat(BEFORE);export var APP_FOOTER_CONTENT_AFTER="".concat(APP,".").concat(FOOTER,".").concat(CONTENT,".").concat(AFTER);export var VIEW_CONTENT_BEFORE="".concat(VIEW,".").concat(CONTENT,".").concat(BEFORE);export var VIEW_CONTENT="".concat(VIEW,".").concat(CONTENT);export var VIEW_CONTENT_AFTER="".concat(VIEW,".").concat(CONTENT,".").concat(AFTER);export var PAGE_CONTENT_BEFORE="".concat(PAGE,".").concat(CONTENT,".").concat(BEFORE);export var PAGE_CONTENT="".concat(PAGE,".").concat(CONTENT);export var PAGE_CONTENT_AFTER="".concat(PAGE,".").concat(CONTENT,".").concat(AFTER);export var PAGE_LOGIN_BEFORE="".concat(PAGE,".").concat(LOGIN,".").concat(BEFORE);export var PAGE_LOGIN="".concat(PAGE,".").concat(LOGIN);export var PAGE_LOGIN_AFTER="".concat(PAGE,".").concat(LOGIN,".").concat(AFTER);export var PAGE_LOGIN_FORM_BEFORE="".concat(PAGE,".").concat(LOGIN,".").concat(FORM,".").concat(BEFORE);export var PAGE_LOGIN_FORM="".concat(PAGE,".").concat(LOGIN,".").concat(FORM);export var PAGE_LOGIN_FORM_AFTER="".concat(PAGE,".").concat(LOGIN,".").concat(FORM,".").concat(AFTER);export var PAGE_LOGIN_REGISTER_LINK_BEFORE="".concat(PAGE,".").concat(LOGIN,".").concat(REGISTER_LINK,".").concat(BEFORE);export var PAGE_LOGIN_REGISTER_LINK="".concat(PAGE,".").concat(LOGIN,".").concat(REGISTER_LINK);export var PAGE_LOGIN_REGISTER_LINK_AFTER="".concat(PAGE,".").concat(LOGIN,".").concat(REGISTER_LINK,".").concat(AFTER);export var NAV_MENU_CONTENT_BEFORE="".concat(NAV_MENU,".").concat(CONTENT,".").concat(BEFORE);export var NAV_MENU_CONTENT_AFTER="".concat(NAV_MENU,".").concat(CONTENT,".").concat(AFTER);export var NAV_MENU_QUICK_LINKS="".concat(NAV_MENU,".").concat(QUICK_LINKS);export var NAV_MENU_QUICK_LINKS_BEFORE="".concat(NAV_MENU,".").concat(QUICK_LINKS,".").concat(BEFORE);export var NAV_MENU_QUICK_LINKS_AFTER="".concat(NAV_MENU,".").concat(QUICK_LINKS,".").concat(AFTER);export var NAV_MENU_QUICK_LINKS_ITEMS="".concat(NAV_MENU,".").concat(QUICK_LINKS,".").concat(ITEMS);export var NAV_MENU_QUICK_LINKS_ITEMS_BEFORE="".concat(NAV_MENU,".").concat(QUICK_LINKS,".").concat(ITEMS,".").concat(BEFORE);export var NAV_MENU_QUICK_LINKS_ITEMS_AFTER="".concat(NAV_MENU,".").concat(QUICK_LINKS,".").concat(ITEMS,".").concat(AFTER);export var NAV_MENU_HOME_BEFORE="".concat(NAV_MENU,".").concat(HOME,".").concat(BEFORE);export var NAV_MENU_HOME="".concat(NAV_MENU,".").concat(HOME);export var NAV_MENU_HOME_AFTER="".concat(NAV_MENU,".").concat(HOME,".").concat(AFTER);export var NAV_MENU_SCANNER_BEFORE="".concat(NAV_MENU,".").concat(SCANNER,".").concat(BEFORE);export var NAV_MENU_SCANNER="".concat(NAV_MENU,".").concat(SCANNER);export var NAV_MENU_SCANNER_AFTER="".concat(NAV_MENU,".").concat(SCANNER,".").concat(AFTER);export var NAV_MENU_TERMS_BEFORE="".concat(NAV_MENU,".").concat(TERMS,".").concat(BEFORE);export var NAV_MENU_TERMS="".concat(NAV_MENU,".").concat(TERMS);export var NAV_MENU_TERMS_AFTER="".concat(NAV_MENU,".").concat(TERMS,".").concat(AFTER);export var NAV_MENU_PRIVACY_BEFORE="".concat(NAV_MENU,".").concat(PRIVACY,".").concat(BEFORE);export var NAV_MENU_PRIVACY="".concat(NAV_MENU,".").concat(PRIVACY);export var NAV_MENU_PRIVACY_AFTER="".concat(NAV_MENU,".").concat(PRIVACY,".").concat(AFTER);export var NAV_MENU_PRIVACY_SETTINGS_BEFORE="".concat(NAV_MENU,".").concat(PRIVACY_SETTINGS,".").concat(BEFORE);export var NAV_MENU_PRIVACY_SETTINGS="".concat(NAV_MENU,".").concat(PRIVACY_SETTINGS);export var NAV_MENU_PRIVACY_SETTINGS_AFTER="".concat(NAV_MENU,".").concat(PRIVACY_SETTINGS,".").concat(AFTER);export var NAV_MENU_IMPRINT_BEFORE="".concat(NAV_MENU,".").concat(IMPRINT,".").concat(BEFORE);export var NAV_MENU_IMPRINT="".concat(NAV_MENU,".").concat(IMPRINT);export var NAV_MENU_IMPRINT_AFTER="".concat(NAV_MENU,".").concat(IMPRINT,".").concat(AFTER);export var NAV_MENU_STORE_INFORMATION_BEFORE="".concat(NAV_MENU,".").concat(STORE_INFORMATION,".").concat(BEFORE);export var NAV_MENU_STORE_INFORMATION="".concat(NAV_MENU,".").concat(STORE_INFORMATION);export var NAV_MENU_STORE_INFORMATION_AFTER="".concat(NAV_MENU,".").concat(STORE_INFORMATION,".").concat(AFTER);export var NAV_MENU_STORE_INFORMATION_MORE_BEFORE="".concat(NAV_MENU,".").concat(STORE_INFORMATION_MORE,".").concat(BEFORE);export var NAV_MENU_STORE_INFORMATION_MORE="".concat(NAV_MENU,".").concat(STORE_INFORMATION_MORE);export var NAV_MENU_STORE_INFORMATION_MORE_AFTER="".concat(NAV_MENU,".").concat(STORE_INFORMATION_MORE,".").concat(AFTER);export var NAV_MENU_STORE_INFORMATION_ABOUT_BEFORE="".concat(NAV_MENU,".").concat(STORE_INFORMATION_ABOUT,".").concat(BEFORE);export var NAV_MENU_STORE_INFORMATION_ABOUT="".concat(NAV_MENU,".").concat(STORE_INFORMATION_ABOUT);export var NAV_MENU_STORE_INFORMATION_ABOUT_AFTER="".concat(NAV_MENU,".").concat(STORE_INFORMATION_ABOUT,".").concat(AFTER);export var NAV_MENU_MY_ACCOUNT_BEFORE="".concat(NAV_MENU,".").concat(MY_ACCOUNT,".").concat(BEFORE);export var NAV_MENU_MY_ACCOUNT="".concat(NAV_MENU,".").concat(MY_ACCOUNT);export var NAV_MENU_MY_ACCOUNT_AFTER="".concat(NAV_MENU,".").concat(MY_ACCOUNT,".").concat(AFTER);export var NAV_MENU_LOGOUT_BEFORE="".concat(NAV_MENU,".").concat(LOGOUT,".").concat(BEFORE);export var NAV_MENU_LOGOUT="".concat(NAV_MENU,".").concat(LOGOUT);export var NAV_MENU_LOGOUT_AFTER="".concat(NAV_MENU,".").concat(LOGOUT,".").concat(AFTER);export var NO_RESULTS_CONTENT_BEFORE="".concat(NO_RESULTS,".").concat(CONTENT,".").concat(BEFORE);export var NO_RESULTS_CONTENT="".concat(NO_RESULTS,".").concat(CONTENT);export var NO_RESULTS_CONTENT_AFTER="".concat(NO_RESULTS,".").concat(CONTENT,".").concat(AFTER);export var USER_MENU_CONTAINER_BEFORE="".concat(USER_MENU,".").concat(CONTAINER,".").concat(BEFORE);export var USER_MENU_CONTAINER="".concat(USER_MENU,".").concat(CONTAINER);export var USER_MENU_CONTAINER_AFTER="".concat(USER_MENU,".").concat(CONTAINER,".").concat(AFTER);export var APP_BAR_DEFAULT_BEFORE="".concat(APP_BAR,".").concat(DEFAULT,".").concat(BEFORE);export var APP_BAR_DEFAULT="".concat(APP_BAR,".").concat(DEFAULT);export var APP_BAR_DEFAULT_AFTER="".concat(APP_BAR,".").concat(DEFAULT,".").concat(AFTER);export var APP_BAR_BACK_BEFORE="".concat(APP_BAR,".").concat(BACK,".").concat(BEFORE);export var APP_BAR_BACK="".concat(APP_BAR,".").concat(BACK);export var APP_BAR_BACK_AFTER="".concat(APP_BAR,".").concat(BACK,".").concat(AFTER);export var APP_BAR_CLOSE_BEFORE="".concat(APP_BAR,".").concat(CLOSE,".").concat(BEFORE);export var APP_BAR_CLOSE="".concat(APP_BAR,".").concat(CLOSE);export var APP_BAR_CLOSE_AFTER="".concat(APP_BAR,".").concat(CLOSE,".").concat(AFTER);export var APP_BAR_SIMPLE_BEFORE="".concat(APP_BAR,".").concat(SIMPLE,".").concat(BEFORE);export var APP_BAR_SIMPLE="".concat(APP_BAR,".").concat(SIMPLE);export var APP_BAR_SIMPLE_AFTER="".concat(APP_BAR,".").concat(SIMPLE,".").concat(AFTER);export var APP_BAR_LEFT="".concat(APP_BAR,".").concat(LEFT);export var APP_BAR_LEFT_BEFORE="".concat(APP_BAR,".").concat(LEFT,".").concat(BEFORE);export var APP_BAR_LEFT_AFTER="".concat(APP_BAR,".").concat(LEFT,".").concat(AFTER);export var APP_BAR_CENTER="".concat(APP_BAR,".").concat(CENTER);export var APP_BAR_CENTER_BEFORE="".concat(APP_BAR,".").concat(CENTER,".").concat(BEFORE);export var APP_BAR_CENTER_AFTER="".concat(APP_BAR,".").concat(CENTER,".").concat(AFTER);export var APP_BAR_RIGHT="".concat(APP_BAR,".").concat(RIGHT);export var APP_BAR_RIGHT_BEFORE="".concat(APP_BAR,".").concat(RIGHT,".").concat(BEFORE);export var APP_BAR_RIGHT_AFTER="".concat(APP_BAR,".").concat(RIGHT,".").concat(AFTER);export var APP_BAR_BELOW="".concat(APP_BAR,".").concat(BELOW);export var APP_BAR_BELOW_BEFORE="".concat(APP_BAR,".").concat(BELOW,".").concat(BEFORE);export var APP_BAR_BELOW_AFTER="".concat(APP_BAR,".").concat(BELOW,".").concat(AFTER);export var APP_BAR_CART_BUTTON="".concat(APP_BAR,".").concat(CART_BUTTON);export var APP_BAR_CART_BUTTON_BEFORE="".concat(APP_BAR,".").concat(CART_BUTTON,".").concat(BEFORE);export var APP_BAR_CART_BUTTON_AFTER="".concat(APP_BAR,".").concat(CART_BUTTON,".").concat(AFTER);export var APP_BAR_CONTENT="".concat(APP_BAR,".").concat(CONTENT);export var APP_BAR_CONTENT_BEFORE="".concat(APP_BAR_CONTENT,".").concat(BEFORE);export var APP_BAR_CONTENT_AFTER="".concat(APP_BAR_CONTENT,".").concat(AFTER);
|
|
@@ -14,7 +14,8 @@ function _extends(){_extends=Object.assign||function(target){for(var i=1;i<argum
|
|
|
14
14
|
*/var parseHTML=function parseHTML(html,decode,settings){var processStyles=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;var cookieConsentSettings=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};var id=CryptoJs.MD5(JSON.stringify(settings)).toString();var container=getDOMContainer("html-sanitizer-".concat(id));var cookieConsent=_extends({comfortCookiesAccepted:false,statisticsCookiesAccepted:false},cookieConsentSettings);try{var parser=new DOMParser();var unparsedHTML=decode?decodeHTML(html):html;// Parse the html string to a DOM object.
|
|
15
15
|
var dom=parser.parseFromString("<body>".concat(unparsedHTML,"</body>"),'text/html');// Run cookie consent logic from embedded media to remove markup that's not supposed to run
|
|
16
16
|
// when consent is not accepted.
|
|
17
|
-
embeddedMedia.handleCookieConsent(dom,cookieConsent);//
|
|
17
|
+
embeddedMedia.handleCookieConsent(dom,cookieConsent);// Optimize embedded media iframe markup before it's injected into the DOM.
|
|
18
|
+
embeddedMedia.applyIframeOptimizations(dom);// How many onloads have been processed.
|
|
18
19
|
var onloads=0;var inlineScripts=[];var externalScripts=[];/**
|
|
19
20
|
* Handles the onload events for external scripts.
|
|
20
21
|
* @return {Array} The collection of external scripts.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shopgate/pwa-common",
|
|
3
|
-
"version": "7.25.1-beta.
|
|
3
|
+
"version": "7.25.1-beta.2",
|
|
4
4
|
"description": "Common library for the Shopgate Connect PWA.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Shopgate <support@shopgate.com>",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@redux-devtools/extension": "^3.3.0",
|
|
19
19
|
"@sentry/browser": "6.0.1",
|
|
20
|
-
"@shopgate/pwa-benchmark": "7.25.1-beta.
|
|
20
|
+
"@shopgate/pwa-benchmark": "7.25.1-beta.2",
|
|
21
21
|
"@virtuous/conductor": "~2.5.0",
|
|
22
22
|
"@virtuous/react-conductor": "~2.5.0",
|
|
23
23
|
"@virtuous/redux-persister": "1.1.0-beta.7",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"url-search-params": "^0.10.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@shopgate/pwa-core": "7.25.1-beta.
|
|
46
|
+
"@shopgate/pwa-core": "7.25.1-beta.2",
|
|
47
47
|
"@types/react-portal": "^3.0.9",
|
|
48
48
|
"lodash": "^4.17.4",
|
|
49
49
|
"prop-types": "~15.8.1",
|
package/selectors/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createSelector}from'reselect';import MobileDetect from'mobile-detect';import{hasSGJavaScriptBridge}from'@shopgate/pwa-core/helpers';import{isVersionAtLeast}from'@shopgate/pwa-core/helpers/version';import{SCANNER_MIN_APP_LIB_VERSION}from'@shopgate/pwa-core/constants/Scanner';import{hasWebBridge}from'@shopgate/engage/core/helpers/bridge';import{
|
|
1
|
+
import{createSelector}from'reselect';import MobileDetect from'mobile-detect';import{hasSGJavaScriptBridge}from'@shopgate/pwa-core/helpers';import{isVersionAtLeast}from'@shopgate/pwa-core/helpers/version';import{SCANNER_MIN_APP_LIB_VERSION}from'@shopgate/pwa-core/constants/Scanner';import{hasWebBridge}from'@shopgate/engage/core/helpers/bridge';import{OS_ANDROID,OS_IOS,MODEL_NAMES_IPHONE_X,PAGE_INSETS_ANDROID,PAGE_INSETS_IOS,PAGE_INSETS_IPHONE_X,TYPE_TABLET}from"../constants/Device";var md=new MobileDetect(navigator.userAgent);/**
|
|
2
2
|
* Returns the client state (state.client)
|
|
3
3
|
* @param {Object} state The application state.
|
|
4
4
|
* @returns {Object}
|
|
@@ -47,11 +47,10 @@ import{createSelector}from'reselect';import MobileDetect from'mobile-detect';imp
|
|
|
47
47
|
*/export var hasScannerSupport=createSelector(getClientInformation,getDeviceInformation,isIos,function(clientInformation,deviceInformation,deviceIsIos){var _ref4=deviceInformation||{},type=_ref4.type;var isIpad=type===TYPE_TABLET&&deviceIsIos;if(isVersionAtLeast('11.0.0',clientInformation.appVersion)){// scanner is supported on all apps based on the react-native based apps
|
|
48
48
|
return true;}// scanner is not supported on iPads with the not react-native based app
|
|
49
49
|
return isVersionAtLeast(SCANNER_MIN_APP_LIB_VERSION,clientInformation.libVersion)&&!isIpad;});/**
|
|
50
|
-
* Determines page insets for the current device
|
|
50
|
+
* Determines page insets for the current device
|
|
51
51
|
* @param {Object} state The application state.
|
|
52
52
|
* @returns {Object}
|
|
53
|
-
*/export var getPageInsets=createSelector(getDeviceModel,isIos,
|
|
54
|
-
return PAGE_INSETS_IPHONE_X;}if(iOS){if(!hasSGJavaScriptBridge()){return PAGE_INSETS_ANDROID;}if(MODEL_NAMES_IPHONE_X.includes(model)){return PAGE_INSETS_IPHONE_X;}return PAGE_INSETS_IOS;}return PAGE_INSETS_ANDROID;});/**
|
|
53
|
+
*/export var getPageInsets=createSelector(getClientInformation,getDeviceModel,isIos,function(clientInformation,model,iOS){if(iOS){if(!hasSGJavaScriptBridge()){return PAGE_INSETS_ANDROID;}if(MODEL_NAMES_IPHONE_X.includes(model)){return PAGE_INSETS_IPHONE_X;}return PAGE_INSETS_IOS;}return PAGE_INSETS_ANDROID;});/**
|
|
55
54
|
* Determines what os version handles the insets differently compared to other os versions.
|
|
56
55
|
* @returns {boolean}
|
|
57
56
|
*/export var considerNativeInset=createSelector(isIos,getOSVersion,function(ios,ver){return ios&&ver&&ver.indexOf('10.')===0;});/**
|
package/streams/view.js
CHANGED
|
@@ -1,34 +1,12 @@
|
|
|
1
1
|
import{Observable}from'rxjs/Observable';import{Subject}from'rxjs/Subject';import{async as asyncScheduler}from'rxjs/scheduler/async';import'rxjs/add/observable/from';import'rxjs/add/observable/fromEvent';import'rxjs/add/operator/do';import'rxjs/add/operator/throttleTime';export var eventsSubject=new Subject();/**
|
|
2
2
|
* Cold observable for View scroll events
|
|
3
|
-
* Use this to listen for scroll-related changes in any part of the app.
|
|
4
3
|
* @type {Observable}
|
|
5
4
|
*/export var viewScroll$=Observable.from(eventsSubject);/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* @param {HTMLElement|Window} element - DOM node or window to observe
|
|
10
|
-
* @param {number} throttleTime - Time in ms to throttle scroll events
|
|
11
|
-
* @returns {Observable} - Observable emitting scroll-related data
|
|
5
|
+
* @param {HTMLElement} element .
|
|
6
|
+
* @param {number} throttleTime .
|
|
7
|
+
* @returns {Observable}
|
|
12
8
|
*/export var emitScrollEvents=function emitScrollEvents(element){var throttleTime=arguments.length>1&&arguments[1]!==undefined?arguments[1]:250;// In rare situation during unmounting a react dom ref might
|
|
13
9
|
// be null due to the execution order of events in fiber nodes.
|
|
14
|
-
if(!element){return undefined;}var previousScrollTop=0
|
|
15
|
-
|
|
16
|
-
var minDelta=10;// Pixels from bottom to consider "at bottom"
|
|
17
|
-
var bottomThreshold=20;// Prevent scrollUp triggering in this zone
|
|
18
|
-
var deadZoneThreshold=30;var scroll$=Observable.fromEvent(element,'scroll').throttleTime(throttleTime,asyncScheduler,{leading:false,trailing:true}).map(function(event){// Determine if element is the window/document or a scrollable container
|
|
19
|
-
var isWindow=element===window||element===document.body||element===document.documentElement;// Get current scroll position
|
|
20
|
-
var rawScrollTop=isWindow?window.scrollY||window.pageYOffset||0:element.scrollTop;// Compute max scroll value
|
|
21
|
-
var maxScrollTop=isWindow?Math.max(document.documentElement.scrollHeight,document.body.scrollHeight)-window.innerHeight:element.scrollHeight-element.clientHeight;// Clamp scrollTop to prevent overshoot from iOS bounce
|
|
22
|
-
var scrollTop=Math.min(rawScrollTop,maxScrollTop);var delta=scrollTop-previousScrollTop;var isScrollingDown=delta>0;var isScrollingUp=delta<0;// Determine direction
|
|
23
|
-
var direction=lastDirection;if(isScrollingDown)direction='down';else if(isScrollingUp)direction='up';// Are we near the bottom of the scrollable area?
|
|
24
|
-
var nearBottom=scrollTop>=maxScrollTop-bottomThreshold;var inDeadZone=scrollTop>=maxScrollTop-deadZoneThreshold;// Detect downward scroll beyond threshold and not near bottom
|
|
25
|
-
var scrollDown=isScrollingDown&&delta>minDelta&&!nearBottom;// Detect upward scroll beyond threshold
|
|
26
|
-
var scrollUp=isScrollingUp&&Math.abs(delta)>minDelta;// Suppress scrollUp events in dead zone to avoid iOS bounce
|
|
27
|
-
if(scrollUp&&inDeadZone&&direction==='up'){scrollUp=false;}// Detect a bounce-back: scrollDown followed by a quick scrollUp at the bottom
|
|
28
|
-
var bounced=lastDirection==='down'&&direction==='up'&&nearBottom;// Final scrolled flag — only emit if meaningful and not a bounce
|
|
29
|
-
var scrolled=(scrollDown||scrollUp)&&!bounced;// Update direction and scrollTop memory
|
|
30
|
-
lastDirection=direction;return{event:event,scrollTop:scrollTop,previousScrollTop:previousScrollTop,scrolled:scrolled,scrollUp:scrollUp,scrollDown:scrollDown&&!bounced,direction:direction,scrollOut:scrollDown&&!bounced,// legacy compatibility
|
|
31
|
-
scrollIn:scrollUp// legacy compatibility
|
|
32
|
-
};})["do"](function(event){// Store current scrollTop for next event comparison
|
|
33
|
-
previousScrollTop=event.scrollTop;});// Pipe scroll data into the shared stream for global consumers
|
|
10
|
+
if(!element){return undefined;}var previousScrollTop=0;var scroll$=Observable.fromEvent(element,'scroll').throttleTime(throttleTime,asyncScheduler,{leading:false,trailing:true}).map(function(event){var scrollTop=element.scrollY||element.scrollTop||0;return{event:event,scrollTop:scrollTop,previousScrollTop:previousScrollTop,scrolled:previousScrollTop!==scrollTop,scrollOut:previousScrollTop<scrollTop,scrollIn:previousScrollTop>=scrollTop};})["do"](function(event){// Remember scroll position for next event
|
|
11
|
+
previousScrollTop=event.scrollTop;});// Copy all events to viewScroll$ stream
|
|
34
12
|
scroll$.subscribe(viewScroll$);return scroll$;};
|