UNPKG

go-captcha-svelte

Version:

GoCaptcha for Svelte, which implements click mode, slider mode, drag-drop mode and rotation mode.

82 lines (81 loc) 2.12 kB
/** * @Author Awen * @Date 2024/06/01 * @Email wengaolng@gmail.com **/ import { getDomXY } from "../helper/helper"; import { writable, get } from 'svelte/store'; export const useHandler = (_data, event, clearCbs) => { let dots = writable([]); const clickEvent = (e) => { const dom = e.currentTarget; const xy = getDomXY(dom); const mouseX = e.pageX || e.clientX; const mouseY = e.pageY || e.clientY; const domX = xy.domX; const domY = xy.domY; const xPos = mouseX - domX; const yPos = mouseY - domY; const xx = parseInt(xPos.toString()); const yy = parseInt(yPos.toString()); const date = new Date(); const d = get(dots); const index = d.length; dots.set([...d, { key: date.getTime(), index: index + 1, x: xx, y: yy }]); const ec = get(event); ec.click && ec.click(xx, yy); e.cancelBubble = true; e.preventDefault(); return false; }; const confirmEvent = (e) => { let ds = get(dots); const ec = get(event); ec.confirm && ec.confirm(ds, () => { dots.set([]); }); e.cancelBubble = true; e.preventDefault(); return false; }; const closeEvent = (e) => { close(); e.cancelBubble = true; e.preventDefault(); return false; }; const refreshEvent = (e) => { refresh(); e.cancelBubble = true; e.preventDefault(); return false; }; const resetData = () => { dots.set([]); }; const clearData = () => { resetData(); clearCbs && clearCbs(); }; const close = () => { const ec = get(event); ec.close && ec.close(); resetData(); }; const refresh = () => { const ec = get(event); ec.refresh && ec.refresh(); resetData(); }; return { dots, clickEvent, confirmEvent, closeEvent, refreshEvent, resetData, clearData, close, refresh, }; };