| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- 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];
- }
- }
- }
- };
|