lisn.js
Version:
Simply handle user gestures and actions. Includes widgets.
1 lines • 20.2 kB
Source Map (JSON)
{"version":3,"file":"pointer-trigger.cjs","names":["MC","_interopRequireWildcard","require","MH","_domSearch","_misc","_validation","_pointerWatcher","_trigger","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","ClickTrigger","Trigger","register","registerTrigger","S_CLICK","element","args","actions","config","newConfigValidator","constructor","getConfig","copyObject","setupWatcher","exports","PressTrigger","S_PRESS","HoverTrigger","S_HOVER","target","key","_ref","isLiteralString","waitForReferenceElement","undefined","preventDefault","validateBoolean","preventSelect","widget","action","_MH$targetOf","lengthOf","targetOf","startHandler","endHandler","S_TOGGLE","run","reverse","PointerWatcher","reuse","onPointer","merge","omitKeys"],"sources":["../../../src/ts/triggers/pointer-trigger.ts"],"sourcesContent":["/**\n * @module Triggers\n *\n * @categoryDescription Pointer\n * {@link ClickTrigger} allows you to run actions when a user clicks a target\n * element (first time and every other time, i.e. odd number of click), and undo\n * those actions when a user clicks the target element again (or every even\n * number of clicks). It always acts as a toggle.\n *\n * {@link PressTrigger} allows you to run actions when the user presses and\n * holds a pointing device (or their finger) on a target element, and undo those\n * actions when they release their pointing device or lift their finger off.\n *\n * {@link HoverTrigger} allows you to run actions when the user hovers overs a\n * target element, and undo those actions when their pointing device moves off\n * the target. On touch devices it acts just like {@link PressTrigger}.\n */\n\nimport * as MC from \"@lisn/globals/minification-constants\";\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\nimport { waitForReferenceElement } from \"@lisn/utils/dom-search\";\nimport { omitKeys } from \"@lisn/utils/misc\";\nimport { validateBoolean } from \"@lisn/utils/validation\";\n\nimport {\n PointerWatcher,\n OnPointerHandler,\n} from \"@lisn/watchers/pointer-watcher\";\n\nimport { Action } from \"@lisn/actions/action\";\n\nimport {\n registerTrigger,\n Trigger,\n TriggerConfig,\n} from \"@lisn/triggers/trigger\";\n\nimport { WidgetConfigValidatorFunc } from \"@lisn/widgets/widget\";\n\n/**\n * {@link ClickTrigger} allows you to run actions when a user clicks a target\n * element (first time and every other time, i.e. odd number of click), and\n * undo them when a user clicks the target element again (or every even number\n * of clicks). It always acts as a toggle.\n *\n * -------\n *\n * To use with auto-widgets (HTML API), see {@link registerTrigger} for the\n * specification.\n *\n * - Arguments: none\n * - Additional trigger options: none\n * - `target`: A string element specification.\n * See {@link Utils.getReferenceElement | getReferenceElement}.\n * - `prevent-default`: A boolean.\n * - `prevent-select`: A boolean.\n *\n * @example\n * Add classes `active` and `toggled-on` when the user clicks the element\n * (first time and every other time, i.e. odd number of click), remove them\n * when clicked again (or even number of click);\n *\n * ```html\n * <div data-lisn-on-click=\"@add-class=active,toggled-on\"></div>\n * ```\n *\n * @example\n * As above, but using a CSS class instead of data attribute:\n *\n * ```html\n * <div class=\"lisn-on-click--@add-class=active,toggled-on\"></div>\n * ```\n *\n * @example\n * Play the animations on the element 1000ms after the first time the user\n * clicks it.\n *\n * ```html\n * <div data-lisn-on-click=\"@animate +once +delay=1000\"></div>\n * ```\n *\n * @example\n * Add class `visited` the first time the user clicks the element, and play or\n * reverse the animations on the element 1000ms after each time the user clicks\n * it.\n *\n * ```html\n * <div data-lisn-on-click=\"@add-class=visited +once ;\n * @animate +delay=1000\"\n * ></div>\n * ```\n *\n * @example\n * When the user clicks the next element with class `box` then add classes `c1`\n * and `c2` to the element (that the trigger is defined on) and enable trigger\n * `my-trigger` defined on this same element; undo all of that on even number\n * of clicks on the reference box element.\n *\n * ```html\n * <div data-lisn-on-click=\"@add-class=c1,c2 @enable=my-trigger +target=next.box\"\n * data-lisn-on-run=\"@show +id=my-trigger\"\n * ></div>\n * <div class=\"box\"></div>\n * ```\n *\n * @example\n * As above, but using `data-lisn-ref` attribute instead of class selector.\n *\n * ```html\n * <div data-lisn-on-click=\"@add-class=c1,c2 @enable=my-trigger +target=next-box\"\n * data-lisn-on-run=\"@show +id=my-trigger\"\n * ></div>\n * <div data-lisn-ref=\"box\"></div>\n * ```\n *\n * @category Pointer\n */\nexport class ClickTrigger extends Trigger {\n readonly getConfig: () => PointerTriggerConfig;\n\n static register() {\n registerTrigger(\n MC.S_CLICK,\n (element, args, actions, config) =>\n new ClickTrigger(element, actions, config),\n newConfigValidator,\n );\n }\n\n /**\n * If no actions are supplied, nothing is done.\n *\n * @throws {@link Errors.LisnUsageError | LisnUsageError}\n * If the config is invalid.\n */\n constructor(\n element: Element,\n actions: Action[],\n config?: PointerTriggerConfig,\n ) {\n super(element, actions, config);\n this.getConfig = () => MH.copyObject(config);\n\n setupWatcher(this, element, actions, config, MC.S_CLICK);\n }\n}\n\n/**\n * {@link PressTrigger} allows you to run actions when the user presses and\n * holds a pointing device (or their finger) on a target element, and undo\n * those actions when they release their pointing device or lift their finger\n * off.\n *\n * -------\n *\n * To use with auto-widgets (HTML API), see {@link registerTrigger} for the\n * specification.\n *\n * - Arguments: none\n * - Additional trigger options: none\n * - `target`: A string element specification.\n * See {@link Utils.getReferenceElement | getReferenceElement}.\n * - `prevent-default`: boolean\n * - `prevent-select`: boolean\n *\n * @example\n * Add classes `active` and `pressed` when the user presses and holds (with\n * mouse, finger or any pointer) the element, remove them when they release\n * the mouse.\n *\n * ```html\n * <div data-lisn-on-press=\"@add-class=active,pressed\"></div>\n * ```\n *\n * @example\n * As above, but using a CSS class instead of data attribute:\n *\n * ```html\n * <div class=\"lisn-on-press--@add-class=active,pressed\"></div>\n * ```\n *\n * @example\n * Play the animations on the element 1000ms after the first time the user\n * presses on the element it.\n *\n * ```html\n * <div data-lisn-on-press=\"@animate +once +delay=1000\"></div>\n * ```\n *\n * @example\n * Add class `pressed` the first time the user presses on the element, and\n * play the animations on the element while the user is pressing on the element\n * with a delay of 100ms, reverse the animations as soon as the user releases\n * the mouse.\n *\n * ```html\n * <div data-lisn-on-click=\"@add-class=pressed +once ;\n * @animate +do-delay=100\"\n * ></div>\n * ```\n *\n * @example\n * When the user presses and holds the next element with class `box` then add\n * classes `c1` and `c2` to the element (that the trigger is defined on) and\n * enable trigger `my-trigger` defined on this same element; undo all of that\n * when they release the mouse (or lift their finger/pointer device) from the\n * reference box element.\n *\n * ```html\n * <div data-lisn-on-press=\"@add-class=c1,c2 @enable=my-trigger +target=next.box\"\n * data-lisn-on-run=\"@show +id=my-trigger\"\n * ></div>\n * <div class=\"box\"></div>\n * ```\n *\n * @example\n * As above, but using `data-lisn-ref` attribute instead of class selector.\n *\n * ```html\n * <div data-lisn-on-press=\"@add-class=c1,c2 @enable=my-trigger +target=next-box\"\n * data-lisn-on-run=\"@show +id=my-trigger\"\n * ></div>\n * <div data-lisn-ref=\"box\"></div>\n * ```\n *\n * @category Pointer\n */\nexport class PressTrigger extends Trigger {\n readonly getConfig: () => PointerTriggerConfig;\n\n static register() {\n registerTrigger(\n MC.S_PRESS,\n (element, args, actions, config) =>\n new PressTrigger(element, actions, config),\n newConfigValidator,\n );\n }\n\n /**\n * If no actions are supplied, nothing is done.\n *\n * @throws {@link Errors.LisnUsageError | LisnUsageError}\n * If the config is invalid.\n */\n constructor(\n element: Element,\n actions: Action[],\n config?: PointerTriggerConfig,\n ) {\n super(element, actions, config);\n this.getConfig = () => MH.copyObject(config);\n\n setupWatcher(this, element, actions, config, MC.S_PRESS);\n }\n}\n\n/**\n * {@link HoverTrigger} allows you to run actions when the user hovers overs\n * a target element, and undo those actions when their pointing device moves\n * off the target. On touch devices it acts just like {@link PressTrigger}.\n *\n * -------\n *\n * To use with auto-widgets (HTML API), see {@link registerTrigger} for the\n * specification.\n *\n * - Arguments: none\n * - Additional trigger options: none\n * - `target`: A string element specification.\n * See {@link Utils.getReferenceElement | getReferenceElement}.\n * - `prevent-default`: boolean\n * - `prevent-select`: boolean\n *\n * @example\n * Add classes `active` and `hovered` when the user hovers over the element,\n * remove them otherwise.\n *\n * ```html\n * <div data-lisn-on-hover=\"@add-class=active,hovered\"></div>\n * ```\n *\n * @example\n * As above, but using a CSS class instead of data attribute:\n *\n * ```html\n * <div class=\"lisn-on-press--@add-class=active,hovered\"></div>\n * ```\n *\n * @example\n * Play the animations on the element 1000ms after the first time the user\n * hovers over the element it.\n *\n * ```html\n * <div data-lisn-on-hover=\"@animate +once +delay=1000\"></div>\n * ```\n *\n * @example\n * Add class `hovered` the first time the user hovers over the element, and\n * play the animations on the element while the user is hovering over the\n * element with a delay of 100ms, reverse the animations as soon as the user\n * mouse leaves the element.\n *\n * ```html\n * <div data-lisn-on-click=\"@add-class=hovered +once ;\n * @animate +do-delay=100\"\n * ></div>\n * ```\n *\n * @example\n * When the user hovers over the next element with class `box` then add classes\n * `c1` and `c2` to the element (that the trigger is defined on) and enable\n * trigger `my-trigger` defined on this same element; undo all of that when\n * their pointing device (or finger) moves off the reference element.\n *\n * ```html\n * <div data-lisn-on-hover=\"@add-class=c1,c2 @enable=my-trigger +target=next.box\"\n * data-lisn-on-run=\"@show +id=my-trigger\"\n * ></div>\n * <div class=\"box\"></div>\n * ```\n *\n * @example\n * As above, but using `data-lisn-ref` attribute instead of class selector.\n *\n * ```html\n * <div data-lisn-on-hover=\"@add-class=c1,c2 @enable=my-trigger +target=next-box\"\n * data-lisn-on-run=\"@show +id=my-trigger\"\n * ></div>\n * <div data-lisn-ref=\"box\"></div>\n * ```\n *\n * @category Pointer\n */\nexport class HoverTrigger extends Trigger {\n readonly getConfig: () => PointerTriggerConfig;\n\n static register() {\n registerTrigger(\n MC.S_HOVER,\n (element, args, actions, config) =>\n new HoverTrigger(element, actions, config),\n newConfigValidator,\n );\n }\n\n /**\n * If no actions are supplied, nothing is done.\n *\n * @throws {@link Errors.LisnUsageError | LisnUsageError}\n * If the config is invalid.\n */\n constructor(\n element: Element,\n actions: Action[],\n config?: PointerTriggerConfig,\n ) {\n super(element, actions, config);\n this.getConfig = () => MH.copyObject(config);\n\n setupWatcher(this, element, actions, config, MC.S_HOVER);\n }\n}\n\n/**\n * @category Pointer\n * @interface\n */\nexport type PointerTriggerConfig = TriggerConfig & {\n /**\n * The target to use for the hover action.\n *\n * @defaultValue The element on which the {@link Trigger} is defined\n */\n target?: Element;\n\n /**\n * See {@link Watchers/PointerWatcher.OnPointerOptions | OnPointerOptions}.\n *\n * @defaultValue {@link PointerWatcher} default, false\n */\n preventDefault?: boolean;\n\n /**\n * See {@link Watchers/PointerWatcher.OnPointerOptions | OnPointerOptions}.\n *\n * @defaultValue {@link PointerWatcher} default, true\n */\n preventSelect?: boolean;\n};\n\n// --------------------\n\nconst newConfigValidator: WidgetConfigValidatorFunc<PointerTriggerConfig> = (\n element,\n) => {\n return {\n target: (key, value) =>\n (MH.isLiteralString(value)\n ? waitForReferenceElement(value, element)\n : null) ?? undefined,\n preventDefault: validateBoolean,\n preventSelect: validateBoolean,\n };\n};\n\nconst setupWatcher = (\n widget: ClickTrigger | HoverTrigger | PressTrigger,\n element: Element,\n actions: Action[],\n config: PointerTriggerConfig | undefined,\n action: \"click\" | \"hover\" | \"press\",\n) => {\n if (!MH.lengthOf(actions)) {\n return;\n }\n\n config ??= {};\n const target = MH.targetOf(config) ?? element;\n\n // For clicks use the trigger's own toggle function so that it remembers ITS\n // state rather than the odd/even clicks. Otherwise if the trigger is\n // disabled, then clicking will \"swap\" the state.\n let startHandler: OnPointerHandler;\n let endHandler: OnPointerHandler;\n if (action === MC.S_CLICK) {\n startHandler = endHandler = widget[MC.S_TOGGLE];\n } else {\n startHandler = widget.run;\n endHandler = widget.reverse;\n }\n\n PointerWatcher.reuse().onPointer(\n target,\n startHandler,\n endHandler,\n MH.merge(\n {\n actions: action,\n },\n omitKeys(config, { target: null }),\n ),\n );\n};\n"],"mappings":";;;;;;AAkBA,IAAAA,EAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,EAAA,GAAAF,uBAAA,CAAAC,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAEA,IAAAK,eAAA,GAAAL,OAAA;AAOA,IAAAM,QAAA,GAAAN,OAAA;AAIgC,SAAAD,wBAAAQ,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAV,uBAAA,YAAAA,CAAAQ,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAkB,gBAAAnB,CAAA,EAAAG,CAAA,EAAAF,CAAA,YAAAE,CAAA,GAAAiB,cAAA,CAAAjB,CAAA,MAAAH,CAAA,GAAAgB,MAAA,CAAAC,cAAA,CAAAjB,CAAA,EAAAG,CAAA,IAAAkB,KAAA,EAAApB,CAAA,EAAAqB,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAxB,CAAA,CAAAG,CAAA,IAAAF,CAAA,EAAAD,CAAA;AAAA,SAAAoB,eAAAnB,CAAA,QAAAM,CAAA,GAAAkB,YAAA,CAAAxB,CAAA,uCAAAM,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAkB,aAAAxB,CAAA,EAAAE,CAAA,2BAAAF,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAD,CAAA,GAAAC,CAAA,CAAAyB,MAAA,CAAAC,WAAA,kBAAA3B,CAAA,QAAAO,CAAA,GAAAP,CAAA,CAAAe,IAAA,CAAAd,CAAA,EAAAE,CAAA,uCAAAI,CAAA,SAAAA,CAAA,YAAAqB,SAAA,yEAAAzB,CAAA,GAAA0B,MAAA,GAAAC,MAAA,EAAA7B,CAAA,KApChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM8B,YAAY,SAASC,gBAAO,CAAC;EAGxC,OAAOC,QAAQA,CAAA,EAAG;IAChB,IAAAC,wBAAe,EACb3C,EAAE,CAAC4C,OAAO,EACV,CAACC,OAAO,EAAEC,IAAI,EAAEC,OAAO,EAAEC,MAAM,KAC7B,IAAIR,YAAY,CAACK,OAAO,EAAEE,OAAO,EAAEC,MAAM,CAAC,EAC5CC,kBACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEC,WAAWA,CACTL,OAAgB,EAChBE,OAAiB,EACjBC,MAA6B,EAC7B;IACA,KAAK,CAACH,OAAO,EAAEE,OAAO,EAAEC,MAAM,CAAC;IAACpB,eAAA;IAChC,IAAI,CAACuB,SAAS,GAAG,MAAMhD,EAAE,CAACiD,UAAU,CAACJ,MAAM,CAAC;IAE5CK,YAAY,CAAC,IAAI,EAAER,OAAO,EAAEE,OAAO,EAAEC,MAAM,EAAEhD,EAAE,CAAC4C,OAAO,CAAC;EAC1D;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA/EAU,OAAA,CAAAd,YAAA,GAAAA,YAAA;AAgFO,MAAMe,YAAY,SAASd,gBAAO,CAAC;EAGxC,OAAOC,QAAQA,CAAA,EAAG;IAChB,IAAAC,wBAAe,EACb3C,EAAE,CAACwD,OAAO,EACV,CAACX,OAAO,EAAEC,IAAI,EAAEC,OAAO,EAAEC,MAAM,KAC7B,IAAIO,YAAY,CAACV,OAAO,EAAEE,OAAO,EAAEC,MAAM,CAAC,EAC5CC,kBACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEC,WAAWA,CACTL,OAAgB,EAChBE,OAAiB,EACjBC,MAA6B,EAC7B;IACA,KAAK,CAACH,OAAO,EAAEE,OAAO,EAAEC,MAAM,CAAC;IAACpB,eAAA;IAChC,IAAI,CAACuB,SAAS,GAAG,MAAMhD,EAAE,CAACiD,UAAU,CAACJ,MAAM,CAAC;IAE5CK,YAAY,CAAC,IAAI,EAAER,OAAO,EAAEE,OAAO,EAAEC,MAAM,EAAEhD,EAAE,CAACwD,OAAO,CAAC;EAC1D;AAC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","ignoreList":[]}