lisn.js
Version:
Simply handle user gestures and actions. Includes widgets.
1 lines • 24.1 kB
Source Map (JSON)
{"version":3,"file":"trigger.cjs","names":["MC","_interopRequireWildcard","require","MH","_errors","_callback","_cssAlter","_domSearch","_tasks","_text","_validation","_action","_widget","_debug","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","Trigger","Widget","element","id","instance","isInstanceOf","register","registerTrigger","a","actions","config","constructor","_config$once","_config$oneWay","_config$delay","_config$doDelay","_config$undoDelay","logger","debug","Logger","name","formatAsString","logAtCreation","once","oneWay","delay","doDelay","undoDelay","lastCallId","toggleState","callActions","callFn","newToggleState","isDisabled","myCallId","randId","debug10","waitForDelay","action","destroy","run","wrapCallback","do","reverse","undo","toggle","S_TOGGLE","onDestroy","debug5","remove","invoke","getActions","getConfig","copyObject","exports","newTrigger","configValidator","clsPref","prefixName","newWidget","_getData","widgets","baseConfigValidator","newBaseConfigValidator","thisConfigValidator","isFunction","allSpecs","splitOn","getData","TRIGGER_SEP","cls","classList","startsWith","push","slice","lengthOf","spec","_config$actOn","tmp","configSpec","OPTION_PREF_CHAR","argSpec","allActionSpecs","ACTION_PREF_CHAR","args","filterBlank","fetchWidgetConfig","assign","actionTarget","actOn","actionSpec","actionArgsAndOptions","ACTION_ARGS_PREF_CHAR","fetchAction","err","LisnUsageError","registerWidget","selector","validateString","validateBoolean","validateNumber","key","_ref","isLiteralString","waitForReferenceElement","undefined"],"sources":["../../../src/ts/triggers/trigger.ts"],"sourcesContent":["/**\n * ## Specification for the HTML API for triggers\n *\n * The following describes the general syntax when using the HTML API and\n * automatic widgets\n * ({@link Settings.settings.autoWidgets | settings.autoWidgets} is true)\n * specifically for triggers and actions.\n *\n * A trigger specification should be given as a\n * `data-lisn-on-<TriggerName>=\"<TriggerSpecList>\"` attribute.\n * A fallback option of using a CSS class of the form\n * `lisn-on-<TriggerName>--<TriggerSpec>` is also supported but not recommended.\n *\n * The general specification for a trigger is of the form:\n *\n * ```\n * <TriggerSpecList> ::= <TriggerSpec> { \";\" <TriggerSpec> }\n *\n * <TriggerSpec> ::= [ <TriggerArg> { \",\" <TriggerArg> } ]\n * \"@\" <ActionSpec> { \"@\" <ActionSpec> }\n * { \"+\" <TriggerOption> }\n *\n * <TriggerOption> ::=\n * <BooleanOptionName> [ \"=\" ( \"false\" | \"true\" ) ] |\n * <OptionName> \"=\" <OptionValue>\n *\n * <ActionSpec> ::= <ActionName> [ \":\" <ActionArgOrOption> { \",\" <ActionArgOrOption> } ]\n *\n * <ActionArgOrOption> ::= <ActionArg> | <OptionName> \"=\" <OptionValue>\n * ```\n *\n * where `<TriggerArg>` is the particular trigger's main argument, which could\n * be required or optional (and not all triggers accept an argument). See each\n * trigger's specification for their arguments and options.\n *\n * Also refer to each action for their accepted arguments and/or options if any.\n *\n * **NOTE:**\n *\n * There can be 0 or more spaces around any of the separator characters.\n *\n * At least one action (with a preceding \"@\" character) is always required.\n *\n * The characters \";\", \",\", \"=\", \"@\", \"+\" and \":\" are reserved separators and\n * cannot be used literally as part of an argument or option value.\n *\n * @module Triggers\n *\n * @categoryDescription Manual run\n * {@link Trigger} is the base trigger class that you can extend when building\n * custom triggers and it also registers a trigger that needs to be run\n * manually (by e.g. the {@link Actions.Run | Run} action).\n */\n\nimport * as MC from \"@lisn/globals/minification-constants\";\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\nimport { LisnUsageError } from \"@lisn/globals/errors\";\n\nimport { wrapCallback } from \"@lisn/modules/callback\";\n\nimport { getData } from \"@lisn/utils/css-alter\";\nimport { waitForReferenceElement } from \"@lisn/utils/dom-search\";\nimport { waitForDelay } from \"@lisn/utils/tasks\";\nimport { formatAsString, randId, splitOn } from \"@lisn/utils/text\";\nimport {\n validateString,\n validateNumber,\n validateBoolean,\n} from \"@lisn/utils/validation\";\n\nimport { Action, fetchAction } from \"@lisn/actions/action\";\n\nimport {\n Widget,\n WidgetConfigValidator,\n WidgetConfigValidatorFunc,\n WidgetConfigAsyncValidatorObject,\n registerWidget,\n fetchWidgetConfig,\n} from \"@lisn/widgets/widget\";\n\nimport debug from \"@lisn/debug/debug\";\n\n/**\n * {@link Trigger} is the base trigger class that you can extend when building\n * custom triggers and it also registers a trigger that needs to be run\n * manually (by e.g. the {@link Actions.Run | Run} action).\n *\n * -------\n *\n * To use with auto-widgets (HTML API), see {@link registerTrigger} for the\n * specification.\n *\n * @example\n * Show the element 1000ms after the first time the trigger is run.\n *\n * ```html\n * <div data-lisn-on-run=\"@show +once +delay=1000\"></div>\n * ```\n *\n * @category Manual run\n */\nexport class Trigger extends Widget {\n /**\n * \"Do\"es all the {@link Action}s linked to the trigger.\n */\n readonly run: () => Promise<void>;\n\n /**\n * \"Undo\"es all the {@link Action}s linked to the trigger.\n */\n readonly reverse: () => Promise<void>;\n\n /**\n * \"Toggle\"s all the {@link Action}s linked to the trigger.\n */\n readonly toggle: () => Promise<void>;\n\n /**\n * Returns the trigger's actions.\n */\n readonly getActions: () => Action[];\n\n /**\n * Returns the trigger config.\n */\n readonly getConfig: () => TriggerConfig;\n\n static get(element: Element, id: string): Trigger | null {\n const instance = super.get(element, id);\n if (MH.isInstanceOf(instance, Trigger)) {\n return instance;\n }\n return null;\n }\n\n static register() {\n registerTrigger(\n \"run\",\n (element, a, actions, config) => new Trigger(element, actions, config),\n {},\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(element: Element, actions: Action[], config?: TriggerConfig) {\n super(element, config);\n\n const logger = debug\n ? new debug.Logger({\n name: `Trigger-${formatAsString(element)}`,\n logAtCreation: { actions, config },\n })\n : null;\n\n const once = config?.once ?? false;\n const oneWay = config?.oneWay ?? false;\n const delay = config?.delay ?? 0;\n const doDelay = config?.doDelay ?? delay;\n const undoDelay = config?.undoDelay ?? delay;\n\n let lastCallId: string;\n // false if next should be do; true if next should be undo.\n // Used for determining delays only.\n let toggleState = false;\n\n const callActions = async (\n delay: number,\n callFn: (action: Action) => void,\n newToggleState: boolean,\n ) => {\n if (this.isDisabled()) {\n return;\n }\n\n const myCallId = randId();\n lastCallId = myCallId;\n debug: logger?.debug10(\n `callActions [${myCallId}] (new toggle state ${newToggleState})`,\n callFn,\n );\n\n if (delay) {\n await waitForDelay(delay);\n if (lastCallId !== myCallId) {\n // overriden by subsequent call\n debug: logger?.debug10(\n `callActions [${myCallId}]: overriden by ${lastCallId}`,\n );\n return;\n }\n }\n\n for (const action of actions) {\n debug: logger?.debug10(`callActions [${myCallId}]`, action);\n callFn(action);\n }\n\n toggleState = newToggleState;\n\n if (toggleState && once) {\n this.destroy();\n }\n };\n\n const run = wrapCallback(() => {\n callActions(\n doDelay,\n (action) => {\n action.do();\n },\n true,\n ); // don't await\n });\n\n const reverse = wrapCallback(() => {\n if (!oneWay) {\n callActions(\n undoDelay,\n (action) => {\n action.undo();\n },\n false,\n ); // don't await\n }\n });\n\n const toggle = wrapCallback(() => {\n callActions(\n toggleState ? undoDelay : doDelay,\n (action) => {\n action[MC.S_TOGGLE]();\n },\n !toggleState,\n ); // don't await\n });\n\n // ----------\n\n this.onDestroy(() => {\n debug: logger?.debug5(\"Removing callbacks\");\n MH.remove(run);\n MH.remove(reverse);\n MH.remove(toggle);\n });\n\n this.run = run.invoke;\n this.reverse = reverse.invoke;\n this[MC.S_TOGGLE] = oneWay ? run.invoke : toggle.invoke;\n this.getActions = () => [...actions]; // copy\n this.getConfig = () => MH.copyObject(config);\n }\n}\n\n/**\n * @interface\n */\nexport type TriggerConfig = {\n /**\n * An ID for the trigger so that it can be looked up by ID. It has to be\n * unique for each element, but you can use the same ID on different\n * elements.\n *\n * @defaultValue undefined\n */\n id?: string;\n\n /**\n * If true, the trigger will run at most once. This will result in the `run`\n * or `toggle` methods removing all three of `run`, `reverse` and `toggle`\n * when called, so that the actions are done at most once.\n *\n * @defaultValue false\n */\n once?: boolean;\n\n /**\n * If true, then the `reverse` method of the trigger will do nothing and the\n * `toggle` method will always do the actions, i.e. will be equivalent to\n * `run`.\n *\n * @defaultValue false\n */\n oneWay?: boolean;\n\n /**\n * Delay in milliseconds before doing, undoing or toggling actions.\n *\n * @defaultValue 0\n */\n delay?: number;\n\n /**\n * Delay in milliseconds before doing actions.\n *\n * @defaultValue {@link TriggerConfig.delay}\n */\n doDelay?: number;\n\n /**\n * Delay in milliseconds before undoing actions.\n *\n * @defaultValue {@link TriggerConfig.delay}\n */\n undoDelay?: number;\n\n /**\n * The element to instantiate all actions on this trigger for.\n *\n * @defaultValue The element on which the {@link Trigger} is defined\n */\n actOn?: Element;\n};\n\nexport type TriggerCreateFn<Config extends TriggerConfig> = (\n element: Element,\n args: string[],\n actions: Action[],\n config: Config,\n) => Trigger | Promise<Trigger>;\n\n/**\n * Registers the given trigger as a widget to be automatically configured for\n * all elements that have a trigger specification with the given name.\n *\n * A trigger specification can be given as a\n * `data-lisn-on-<TriggerName>=\"<TriggerSpec> { \";\" <TriggerSpec> }\"` attribute\n * or as one or more `lisn-on-<TriggerName>--<TriggerSpec>` classes.\n *\n * See the top of the {@link Triggers} page for an explanation of `<TriggerSpec>`.\n *\n * Using classes instead of attributes is not recommended and only available as\n * a fallback option.\n *\n * **IMPORTANT:** If a trigger by that name is already registered, the current\n * call does nothing, even if the remaining arguments differ.\n *\n * @param name The name of the trigger. Should be in kebab-case.\n * @param newTrigger Called for every trigger specification on any element\n * that has one or more trigger specifications.\n * @param configValidator\n * A validator object, or a function that returns such an\n * object, for all options that are specific to the\n * trigger. Base options (in {@link TriggerConfig}) will\n * be parsed automatically and don't need to be handled by\n * `configValidator`.\n * If the parameter is a function, it will be called with\n * the element on which the trigger is being defined.\n *\n * @see {@link registerWidget}\n */\nexport const registerTrigger = <Config extends TriggerConfig = TriggerConfig>(\n name: string,\n newTrigger: TriggerCreateFn<Config>,\n configValidator?: null | WidgetConfigValidator<Config>,\n) => {\n const clsPref = MH.prefixName(`on-${name}`);\n\n const newWidget = async (element: Element) => {\n const widgets: Widget[] = [];\n const baseConfigValidator = newBaseConfigValidator(element);\n const thisConfigValidator = MH.isFunction(configValidator)\n ? await configValidator(element)\n : configValidator;\n\n const allSpecs = splitOn(\n getData(element, MH.prefixName(`on-${name}`)) ?? \"\",\n TRIGGER_SEP,\n true,\n );\n\n for (const cls of MH.classList(element)) {\n if (cls.startsWith(`${clsPref}--`)) {\n allSpecs.push(cls.slice(MH.lengthOf(clsPref) + 2));\n }\n }\n\n for (const spec of allSpecs) {\n const [tmp, configSpec] = splitOn(spec, OPTION_PREF_CHAR, true, 1);\n const [argSpec, allActionSpecs] = splitOn(tmp, ACTION_PREF_CHAR, true, 1);\n\n const args = MH.filterBlank(splitOn(argSpec, \",\", true)) || [];\n\n const config = await fetchWidgetConfig(\n configSpec,\n MH.assign(\n baseConfigValidator,\n thisConfigValidator,\n ) as WidgetConfigAsyncValidatorObject<Required<TriggerConfig> & Config>,\n OPTION_PREF_CHAR,\n );\n\n const actionTarget = config.actOn ?? element;\n\n const actions = [];\n for (const actionSpec of splitOn(\n allActionSpecs ?? \"\",\n ACTION_PREF_CHAR,\n true,\n )) {\n const [name, actionArgsAndOptions] = splitOn(\n actionSpec,\n ACTION_ARGS_PREF_CHAR,\n true,\n 1,\n );\n\n try {\n actions.push(\n await fetchAction(actionTarget, name, actionArgsAndOptions ?? \"\"),\n );\n } catch (err) {\n if (MH.isInstanceOf(err, LisnUsageError)) {\n // fetchAction would have logged an error\n continue;\n }\n\n throw err;\n }\n }\n\n widgets.push(await newTrigger(element, args, actions, config));\n }\n\n return widgets;\n };\n\n registerWidget(name, newWidget, null, {\n selector: `[class^=\"${clsPref}--\"],[class*=\" ${clsPref}--\"],[data-${clsPref}]`,\n });\n};\n\n// --------------------\n\nconst TRIGGER_SEP = \";\";\nconst OPTION_PREF_CHAR = \"+\";\nconst ACTION_PREF_CHAR = \"@\";\nconst ACTION_ARGS_PREF_CHAR = \":\";\n\nconst newBaseConfigValidator: WidgetConfigValidatorFunc<TriggerConfig> = (\n element,\n) => {\n return {\n id: validateString,\n once: validateBoolean,\n oneWay: validateBoolean,\n delay: validateNumber,\n doDelay: validateNumber,\n undoDelay: validateNumber,\n actOn: (key, value) =>\n (MH.isLiteralString(value)\n ? waitForReferenceElement(value, element)\n : null) ?? undefined,\n };\n};\n"],"mappings":"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","ignoreList":[]}