element-plus
Version:
A Component Library for Vue 3
1 lines • 2.84 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../packages/directives/repeat-click/index.ts"],"sourcesContent":["import { isFunction } from '@element-plus/utils'\n\nimport type { ObjectDirective } from 'vue'\n\nexport const REPEAT_INTERVAL = 100\nexport const REPEAT_DELAY = 600\nconst SCOPE = '_RepeatClick'\n\ninterface RepeatClickEl extends HTMLElement {\n [SCOPE]: null | {\n start?: (evt: MouseEvent) => void\n clear?: () => void\n }\n}\n\nexport interface RepeatClickOptions {\n interval?: number\n delay?: number\n handler: (...args: unknown[]) => unknown\n}\n\nexport const vRepeatClick: ObjectDirective<\n RepeatClickEl,\n RepeatClickOptions | RepeatClickOptions['handler']\n> = {\n beforeMount(el, binding) {\n const value = binding.value\n const { interval = REPEAT_INTERVAL, delay = REPEAT_DELAY } = isFunction(\n value\n )\n ? {}\n : value\n\n let intervalId: ReturnType<typeof setInterval> | undefined\n let delayId: ReturnType<typeof setTimeout> | undefined\n\n const handler = () => (isFunction(value) ? value() : value.handler())\n\n const clear = () => {\n if (delayId) {\n clearTimeout(delayId)\n delayId = undefined\n }\n if (intervalId) {\n clearInterval(intervalId)\n intervalId = undefined\n }\n }\n\n const start = (evt: MouseEvent) => {\n if (evt.button !== 0) return\n clear()\n handler()\n\n document.addEventListener('mouseup', clear, { once: true })\n\n delayId = setTimeout(() => {\n intervalId = setInterval(() => {\n handler()\n }, interval)\n }, delay)\n }\n\n el[SCOPE] = { start, clear }\n el.addEventListener('mousedown', start)\n },\n unmounted(el) {\n if (!el[SCOPE]) return\n const { start, clear } = el[SCOPE]\n\n if (start) {\n el.removeEventListener('mousedown', start)\n }\n if (clear) {\n clear()\n document.removeEventListener('mouseup', clear)\n }\n el[SCOPE] = null\n },\n}\n"],"mappings":";;;AAIA,MAAa,kBAAkB;AAC/B,MAAa,eAAe;AAC5B,MAAM,QAAQ;AAed,MAAa,eAGT;CACF,YAAY,IAAI,SAAS;EACvB,MAAM,QAAQ,QAAQ;EACtB,MAAM,EAAE,WAAW,iBAAiB,QAAQ,iBAAiB,WAC3D,MACD,GACG,EAAE,GACF;EAEJ,IAAI;EACJ,IAAI;EAEJ,MAAM,gBAAiB,WAAW,MAAM,GAAG,OAAO,GAAG,MAAM,SAAS;EAEpE,MAAM,cAAc;AAClB,OAAI,SAAS;AACX,iBAAa,QAAQ;AACrB,cAAU;;AAEZ,OAAI,YAAY;AACd,kBAAc,WAAW;AACzB,iBAAa;;;EAIjB,MAAM,SAAS,QAAoB;AACjC,OAAI,IAAI,WAAW,EAAG;AACtB,UAAO;AACP,YAAS;AAET,YAAS,iBAAiB,WAAW,OAAO,EAAE,MAAM,MAAM,CAAC;AAE3D,aAAU,iBAAiB;AACzB,iBAAa,kBAAkB;AAC7B,cAAS;OACR,SAAS;MACX,MAAM;;AAGX,KAAG,SAAS;GAAE;GAAO;GAAO;AAC5B,KAAG,iBAAiB,aAAa,MAAM;;CAEzC,UAAU,IAAI;AACZ,MAAI,CAAC,GAAG,OAAQ;EAChB,MAAM,EAAE,OAAO,UAAU,GAAG;AAE5B,MAAI,MACF,IAAG,oBAAoB,aAAa,MAAM;AAE5C,MAAI,OAAO;AACT,UAAO;AACP,YAAS,oBAAoB,WAAW,MAAM;;AAEhD,KAAG,SAAS;;CAEf"}