1
0
Fork 0
mirror of https://github.com/DanielnetoDotCom/YouPHPTube synced 2025-10-04 10:19:24 +02:00
Oinktube/node_modules/inputmask/lib/eventruler.js

127 lines
4.2 KiB
JavaScript

import { HandleNativePlaceholder } from "./inputHandling";
import Inputmask from "./inputmask";
import { keys } from "./keycode.js";
import { getBufferTemplate } from "./positioning";
export { EventRuler };
var EventRuler = {
on: function (input, eventName, eventHandler) {
const $ = input.inputmask.dependencyLib;
let ev = function (e) {
if (e.originalEvent) {
e = e.originalEvent || e; // get original event from jquery evenbt
arguments[0] = e;
}
// console.log(e.type);
let that = this,
args,
inputmask = that.inputmask,
opts = inputmask ? inputmask.opts : undefined;
if (inputmask === undefined && this.nodeName !== "FORM") {
// happens when cloning an object with jquery.clone
const imOpts = $.data(that, "_inputmask_opts");
$(that).off(); // unbind all events
if (imOpts) {
new Inputmask(imOpts).mask(that);
}
} else if (
!["submit", "reset", "setvalue"].includes(e.type) &&
this.nodeName !== "FORM" &&
(that.disabled ||
(that.readOnly &&
!(
(e.type === "keydown" && e.ctrlKey && e.key === keys.c) ||
(opts.tabThrough === false && e.key === keys.Tab)
)))
) {
e.preventDefault();
} else {
switch (e.type) {
case "input":
if (inputmask.skipInputEvent === true) {
inputmask.skipInputEvent = false;
return e.preventDefault();
}
// if (mobile) { //this causes problem see #2220
// args = arguments;
// setTimeout(function () { //needed for caret selection when entering a char on Android 8 - #1818
// eventHandler.apply(that, args);
// caret(that, that.inputmask.caretPos, undefined, true);
// }, 0);
// return false;
// }
break;
case "click":
case "focus":
if (inputmask.validationEvent) {
// #841
inputmask.validationEvent = false;
input.blur();
HandleNativePlaceholder(
input,
(inputmask.isRTL
? getBufferTemplate.call(inputmask).slice().reverse()
: getBufferTemplate.call(inputmask)
).join("")
);
setTimeout(function () {
input.focus();
}, opts.validationEventTimeOut);
return false;
}
args = arguments;
setTimeout(function () {
// needed for Chrome ~ initial selection clears after the clickevent
if (!input.inputmask) {
// `inputmask.remove()` was called before this callback
return;
}
eventHandler.apply(that, args);
}, 0);
return /* false */; // #2423
}
const returnVal = eventHandler.apply(that, arguments);
if (returnVal === false) {
e.preventDefault();
e.stopPropagation();
}
return returnVal;
}
};
if (["submit", "reset"].includes(eventName)) {
ev = ev.bind(input); // bind creates a new eventhandler (wrap)
if (input.form !== null) $(input.form).on(eventName, ev);
} else {
$(input).on(eventName, ev);
}
// keep instance of the event
input.inputmask.events[eventName] = input.inputmask.events[eventName] || [];
input.inputmask.events[eventName].push(ev);
},
off: function (input, event) {
if (input.inputmask && input.inputmask.events) {
const $ = input.inputmask.dependencyLib;
let events = input.inputmask.events;
if (event) {
events = [];
events[event] = input.inputmask.events[event];
}
for (const eventName in events) {
const evArr = events[eventName];
while (evArr.length > 0) {
const ev = evArr.pop();
if (["submit", "reset"].includes(eventName)) {
if (input.form !== null) $(input.form).off(eventName, ev);
} else {
$(input).off(eventName, ev);
}
}
delete input.inputmask.events[eventName];
}
}
}
};