From cc82fcf44f654b240ab09c3bc9397c9a39b5bde3 Mon Sep 17 00:00:00 2001 From: Vadim Date: Tue, 20 Apr 2021 22:41:07 +0300 Subject: [PATCH] Renamed hoverable -> focusable --- src/actions/focusable/event.js | 21 +++++++++++++ src/actions/focusable/focusable.js | 29 ++++++++++++++++++ src/actions/focusable/index.js | 1 + src/components/Carousel/Carousel.svelte | 6 ++-- src/utils/hoverable.js | 39 ------------------------- 5 files changed, 54 insertions(+), 42 deletions(-) create mode 100644 src/actions/focusable/event.js create mode 100644 src/actions/focusable/focusable.js create mode 100644 src/actions/focusable/index.js delete mode 100644 src/utils/hoverable.js diff --git a/src/actions/focusable/event.js b/src/actions/focusable/event.js new file mode 100644 index 0000000..a52ddaf --- /dev/null +++ b/src/actions/focusable/event.js @@ -0,0 +1,21 @@ +// focusin event +export function addFocusinEventListener(source, cb) { + source.addEventListener('mouseenter', cb) + source.addEventListener('touchstart', cb) +} +export function removeFocusinEventListener(source, cb) { + source.removeEventListener('mouseenter', cb) + source.removeEventListener('touchstart', cb) +} + +// focusout event +export function addFocusoutEventListener(source, cb) { + source.addEventListener('mouseleave', cb) + source.addEventListener('touchend', cb) + source.addEventListener('touchcancel', cb) +} +export function removeFocusoutEventListener(source, cb) { + source.removeEventListener('mouseleave', cb) + source.removeEventListener('touchend', cb) + source.removeEventListener('touchcancel', cb) +} diff --git a/src/actions/focusable/focusable.js b/src/actions/focusable/focusable.js new file mode 100644 index 0000000..3e13deb --- /dev/null +++ b/src/actions/focusable/focusable.js @@ -0,0 +1,29 @@ +import { createDispatcher } from '../../utils/event' +import { + addFocusinEventListener, + removeFocusinEventListener, + addFocusoutEventListener, + removeFocusoutEventListener, +} from './event' + +export function focusable(node) { + const dispatch = createDispatcher(node) + + function handleFocusin() { + dispatch('focused', { value: true }) + } + + function handleFocusout() { + dispatch('focused', { value: false }) + } + + addFocusinEventListener(node, handleFocusin) + addFocusoutEventListener(node, handleFocusout) + + return { + destroy() { + removeFocusinEventListener(node, handleFocusin) + removeFocusoutEventListener(node, handleFocusout) + }, + } +} diff --git a/src/actions/focusable/index.js b/src/actions/focusable/index.js new file mode 100644 index 0000000..16fa8dd --- /dev/null +++ b/src/actions/focusable/index.js @@ -0,0 +1 @@ +export * from './focusable' diff --git a/src/components/Carousel/Carousel.svelte b/src/components/Carousel/Carousel.svelte index 2f6db8d..c69239b 100644 --- a/src/components/Carousel/Carousel.svelte +++ b/src/components/Carousel/Carousel.svelte @@ -5,7 +5,7 @@ import Arrow from '../Arrow/Arrow.svelte' import { NEXT, PREV } from '../../direction' import { swipeable } from '../../actions/swipeable' - import { hoverable } from '../../utils/hoverable' + import { focusable } from '../../actions/focusable' import { addResizeEventListener, removeResizeEventListener @@ -239,8 +239,8 @@