diff --git a/src/common/Button/styles.less b/src/common/Button/styles.less index e7b601729..ec44e074c 100644 --- a/src/common/Button/styles.less +++ b/src/common/Button/styles.less @@ -3,11 +3,19 @@ @import (reference) '~@stremio/stremio-colors/less/stremio-colors.less'; .button-container { + // IOS specific + // prevents showing the default context-menu when long pressing an anchor in safari. + -webkit-touch-callout: none !important; + // prevents user from selecting text from a div on long pressing in safari. + -webkit-user-select: none !important; + + user-select: none !important; + outline-width: var(--focus-outline-size); outline-color: @color-surface-light5; outline-offset: calc(-1 * var(--focus-outline-size)); cursor: pointer; - + &:focus { outline-style: solid; } diff --git a/src/common/Popup/Popup.js b/src/common/Popup/Popup.js index 7c694e6d5..631b474df 100644 --- a/src/common/Popup/Popup.js +++ b/src/common/Popup/Popup.js @@ -28,6 +28,9 @@ const Popup = ({ open, direction, renderLabel, renderMenu, dataset, onCloseReque const menuOnMouseDown = React.useCallback((event) => { event.nativeEvent.closePopupPrevented = true; }, []); + const menuOnTouchStart = React.useCallback((event) => { + event.nativeEvent.closePopupPrevented = true; + }, []); React.useEffect(() => { const onCloseEvent = (event) => { if (!event.closePopupPrevented && typeof onCloseRequest === 'function') { @@ -42,7 +45,7 @@ const Popup = ({ open, direction, renderLabel, renderMenu, dataset, onCloseReque onCloseRequest(closeEvent); } break; - case 'mousedown': + case 'mousedown' || 'touchstart': if (event.target !== document.documentElement && !labelRef.current.contains(event.target)) { onCloseRequest(closeEvent); } @@ -53,10 +56,12 @@ const Popup = ({ open, direction, renderLabel, renderMenu, dataset, onCloseReque if (routeFocused && open) { window.addEventListener('keydown', onCloseEvent); window.addEventListener('mousedown', onCloseEvent); + window.addEventListener('touchstart', onCloseEvent); } return () => { window.removeEventListener('keydown', onCloseEvent); window.removeEventListener('mousedown', onCloseEvent); + window.removeEventListener('touchstart', onCloseEvent); }; }, [routeFocused, open, onCloseRequest, dataset]); React.useLayoutEffect(() => { @@ -104,7 +109,7 @@ const Popup = ({ open, direction, renderLabel, renderMenu, dataset, onCloseReque ref: labelRef, className: classnames(styles['label-container'], props.className, { 'active': open }), children: open ? - + {renderMenu()} : diff --git a/src/routes/MetaDetails/VideosList/Video/Video.js b/src/routes/MetaDetails/VideosList/Video/Video.js index b327b5ce6..6bf9c2ee9 100644 --- a/src/routes/MetaDetails/VideosList/Video/Video.js +++ b/src/routes/MetaDetails/VideosList/Video/Video.js @@ -31,9 +31,14 @@ const Video = ({ className, id, title, thumbnail, episode, released, upcoming, w } }, [toggleMenu]); const popupLabelOnLongPress = React.useCallback((event) => { - event.preventDefault(); - toggleMenu(); + if (!event.nativeEvent.togglePopupPrevented && !event.nativeEvent.ctrlKey) { + event.preventDefault(); + toggleMenu(); + } }, [toggleMenu]); + const popupMenuOnLongPress = React.useCallback((event) => { + event.nativeEvent.togglePopupPrevented = true; + }, []); const popupMenuOnContextMenu = React.useCallback((event) => { event.nativeEvent.togglePopupPrevented = true; }, []); @@ -137,7 +142,7 @@ const Video = ({ className, id, title, thumbnail, episode, released, upcoming, w }, []); const renderMenu = React.useMemo(() => function renderMenu() { return ( -
+
diff --git a/src/routes/MetaDetails/VideosList/Video/styles.less b/src/routes/MetaDetails/VideosList/Video/styles.less index 4c82d9a94..9f029be80 100644 --- a/src/routes/MetaDetails/VideosList/Video/styles.less +++ b/src/routes/MetaDetails/VideosList/Video/styles.less @@ -12,11 +12,6 @@ } .video-container { - // IOS specific - // prevents showing the default context-menu when long pressing an anchor in safari. - -webkit-touch-callout: none !important; - // prevents user from selecting text from a div on long pressing in safari. - -webkit-user-select: none!important; display: flex; flex-direction: row; @@ -33,6 +28,7 @@ flex: none; .thumbnail { + pointer-events: none; display: block; width: 7.5rem; height: 5rem;