78 lines
4.0 KiB
JavaScript
78 lines
4.0 KiB
JavaScript
import '../utils/click/isClickableInput.js';
|
|
import '../utils/dataTransfer/Clipboard.js';
|
|
import '../utils/edit/isEditable.js';
|
|
import '../utils/edit/maxLength.js';
|
|
import '../utils/keyDef/readNextDescriptor.js';
|
|
import { setLevelRef, ApiLevel } from '../utils/misc/level.js';
|
|
import { wait } from '../utils/misc/wait.js';
|
|
import '../options.js';
|
|
import { parseKeyDef } from './parseKeyDef.js';
|
|
|
|
async function pointer(input) {
|
|
const { pointerMap } = this.config;
|
|
const actions = [];
|
|
(Array.isArray(input) ? input : [
|
|
input
|
|
]).forEach((actionInput)=>{
|
|
if (typeof actionInput === 'string') {
|
|
actions.push(...parseKeyDef(pointerMap, actionInput));
|
|
} else if ('keys' in actionInput) {
|
|
actions.push(...parseKeyDef(pointerMap, actionInput.keys).map((i)=>({
|
|
...actionInput,
|
|
...i
|
|
})));
|
|
} else {
|
|
actions.push(actionInput);
|
|
}
|
|
});
|
|
for(let i = 0; i < actions.length; i++){
|
|
await wait(this.config);
|
|
await pointerAction(this, actions[i]);
|
|
}
|
|
this.system.pointer.resetClickCount();
|
|
}
|
|
async function pointerAction(instance, action) {
|
|
var _previousPosition_caret, _previousPosition_caret1;
|
|
const pointerName = 'pointerName' in action && action.pointerName ? action.pointerName : 'keyDef' in action ? instance.system.pointer.getPointerName(action.keyDef) : 'mouse';
|
|
const previousPosition = instance.system.pointer.getPreviousPosition(pointerName);
|
|
var _action_target, _action_coords, _action_node, _action_offset;
|
|
const position = {
|
|
target: (_action_target = action.target) !== null && _action_target !== void 0 ? _action_target : getPrevTarget(instance, previousPosition),
|
|
coords: (_action_coords = action.coords) !== null && _action_coords !== void 0 ? _action_coords : previousPosition === null || previousPosition === void 0 ? void 0 : previousPosition.coords,
|
|
caret: {
|
|
node: (_action_node = action.node) !== null && _action_node !== void 0 ? _action_node : hasCaretPosition(action) ? undefined : previousPosition === null || previousPosition === void 0 ? void 0 : (_previousPosition_caret = previousPosition.caret) === null || _previousPosition_caret === void 0 ? void 0 : _previousPosition_caret.node,
|
|
offset: (_action_offset = action.offset) !== null && _action_offset !== void 0 ? _action_offset : hasCaretPosition(action) ? undefined : previousPosition === null || previousPosition === void 0 ? void 0 : (_previousPosition_caret1 = previousPosition.caret) === null || _previousPosition_caret1 === void 0 ? void 0 : _previousPosition_caret1.offset
|
|
}
|
|
};
|
|
if ('keyDef' in action) {
|
|
if (instance.system.pointer.isKeyPressed(action.keyDef)) {
|
|
setLevelRef(instance, ApiLevel.Trigger);
|
|
await instance.system.pointer.release(instance, action.keyDef, position);
|
|
}
|
|
if (!action.releasePrevious) {
|
|
setLevelRef(instance, ApiLevel.Trigger);
|
|
await instance.system.pointer.press(instance, action.keyDef, position);
|
|
if (action.releaseSelf) {
|
|
setLevelRef(instance, ApiLevel.Trigger);
|
|
await instance.system.pointer.release(instance, action.keyDef, position);
|
|
}
|
|
}
|
|
} else {
|
|
setLevelRef(instance, ApiLevel.Trigger);
|
|
await instance.system.pointer.move(instance, pointerName, position);
|
|
}
|
|
}
|
|
function hasCaretPosition(action) {
|
|
var _action_target, _ref;
|
|
return !!((_ref = (_action_target = action.target) !== null && _action_target !== void 0 ? _action_target : action.node) !== null && _ref !== void 0 ? _ref : action.offset !== undefined);
|
|
}
|
|
function getPrevTarget(instance, position) {
|
|
if (!position) {
|
|
throw new Error('This pointer has no previous position. Provide a target property!');
|
|
}
|
|
var _position_target;
|
|
return (_position_target = position.target) !== null && _position_target !== void 0 ? _position_target : instance.config.document.body;
|
|
}
|
|
|
|
export { pointer };
|