Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo-mod-jslibs-dist.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'popperjs/package/lib/modifiers/eventListeners.js.flow')
-rw-r--r--popperjs/package/lib/modifiers/eventListeners.js.flow54
1 files changed, 54 insertions, 0 deletions
diff --git a/popperjs/package/lib/modifiers/eventListeners.js.flow b/popperjs/package/lib/modifiers/eventListeners.js.flow
new file mode 100644
index 0000000..eab18a5
--- /dev/null
+++ b/popperjs/package/lib/modifiers/eventListeners.js.flow
@@ -0,0 +1,54 @@
+// @flow
+import type { ModifierArguments, Modifier } from '../types';
+import getWindow from '../dom-utils/getWindow';
+
+// eslint-disable-next-line import/no-unused-modules
+export type Options = {
+ scroll: boolean,
+ resize: boolean,
+};
+
+const passive = { passive: true };
+
+function effect({ state, instance, options }: ModifierArguments<Options>) {
+ const { scroll = true, resize = true } = options;
+
+ const window = getWindow(state.elements.popper);
+ const scrollParents = [
+ ...state.scrollParents.reference,
+ ...state.scrollParents.popper,
+ ];
+
+ if (scroll) {
+ scrollParents.forEach(scrollParent => {
+ scrollParent.addEventListener('scroll', instance.update, passive);
+ });
+ }
+
+ if (resize) {
+ window.addEventListener('resize', instance.update, passive);
+ }
+
+ return () => {
+ if (scroll) {
+ scrollParents.forEach(scrollParent => {
+ scrollParent.removeEventListener('scroll', instance.update, passive);
+ });
+ }
+
+ if (resize) {
+ window.removeEventListener('resize', instance.update, passive);
+ }
+ };
+}
+
+// eslint-disable-next-line import/no-unused-modules
+export type EventListenersModifier = Modifier<'eventListeners', Options>;
+export default ({
+ name: 'eventListeners',
+ enabled: true,
+ phase: 'write',
+ fn: () => {},
+ effect,
+ data: {},
+}: EventListenersModifier);