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
JavaScript
/**
* @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,
};
};