mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-04 10:19:24 +02:00
127 lines
4.2 KiB
JavaScript
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];
|
|
}
|
|
}
|
|
}
|
|
};
|