inputmask.date.extensions.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662
  1. /*
  2. Input Mask plugin extensions
  3. http://github.com/RobinHerbots/jquery.inputmask
  4. Copyright (c) 2010 - Robin Herbots
  5. Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
  6. Version: 0.0.0-dev
  7. Optional extensions on the jquery.inputmask base
  8. */
  9. (function(factory) {
  10. if (typeof define === "function" && define.amd) {
  11. define(["inputmask.dependencyLib", "inputmask"], factory);
  12. } else if (typeof exports === "object") {
  13. module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask"));
  14. } else {
  15. factory(window.dependencyLib || jQuery, window.Inputmask);
  16. }
  17. }
  18. (function($, Inputmask) {
  19. //date & time aliases
  20. Inputmask.extendDefinitions({
  21. "h": { //hours
  22. validator: "[01][0-9]|2[0-3]",
  23. cardinality: 2,
  24. prevalidator: [{
  25. validator: "[0-2]",
  26. cardinality: 1
  27. }]
  28. },
  29. "s": { //seconds || minutes
  30. validator: "[0-5][0-9]",
  31. cardinality: 2,
  32. prevalidator: [{
  33. validator: "[0-5]",
  34. cardinality: 1
  35. }]
  36. },
  37. "d": { //basic day
  38. validator: "0[1-9]|[12][0-9]|3[01]",
  39. cardinality: 2,
  40. prevalidator: [{
  41. validator: "[0-3]",
  42. cardinality: 1
  43. }]
  44. },
  45. "m": { //basic month
  46. validator: "0[1-9]|1[012]",
  47. cardinality: 2,
  48. prevalidator: [{
  49. validator: "[01]",
  50. cardinality: 1
  51. }]
  52. },
  53. "y": { //basic year
  54. validator: "(19|20)\\d{2}",
  55. cardinality: 4,
  56. prevalidator: [{
  57. validator: "[12]",
  58. cardinality: 1
  59. }, {
  60. validator: "(19|20)",
  61. cardinality: 2
  62. }, {
  63. validator: "(19|20)\\d",
  64. cardinality: 3
  65. }]
  66. }
  67. });
  68. Inputmask.extendAliases({
  69. "dd/mm/yyyy": {
  70. mask: "1/2/y",
  71. placeholder: "dd/mm/yyyy",
  72. regex: {
  73. val1pre: new RegExp("[0-3]"), //daypre
  74. val1: new RegExp("0[1-9]|[12][0-9]|3[01]"), //day
  75. val2pre: function(separator) {
  76. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  77. return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])");
  78. }, //monthpre
  79. val2: function(separator) {
  80. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  81. return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))");
  82. } //month
  83. },
  84. leapday: "29/02/",
  85. separator: "/",
  86. yearrange: {
  87. minyear: 1900,
  88. maxyear: 2099
  89. },
  90. isInYearRange: function(chrs, minyear, maxyear) {
  91. if (isNaN(chrs)) return false;
  92. var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length)));
  93. var enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
  94. return (!isNaN(enteredyear) ? minyear <= enteredyear && enteredyear <= maxyear : false) ||
  95. (!isNaN(enteredyear2) ? minyear <= enteredyear2 && enteredyear2 <= maxyear : false);
  96. },
  97. determinebaseyear: function(minyear, maxyear, hint) {
  98. var currentyear = (new Date()).getFullYear();
  99. if (minyear > currentyear) return minyear;
  100. if (maxyear < currentyear) {
  101. var maxYearPrefix = maxyear.toString().slice(0, 2);
  102. var maxYearPostfix = maxyear.toString().slice(2, 4);
  103. while (maxyear < maxYearPrefix + hint) {
  104. maxYearPrefix--;
  105. }
  106. var maxxYear = maxYearPrefix + maxYearPostfix;
  107. return minyear > maxxYear ? minyear : maxxYear;
  108. }
  109. return currentyear;
  110. },
  111. onKeyDown: function(e, buffer, caretPos, opts) {
  112. var $input = $(this);
  113. if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
  114. var today = new Date();
  115. $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString());
  116. $input.trigger("setvalue");
  117. }
  118. },
  119. getFrontValue: function(mask, buffer, opts) {
  120. var start = 0,
  121. length = 0;
  122. for (var i = 0; i < mask.length; i++) {
  123. if (mask.charAt(i) === "2") break;
  124. var definition = opts.definitions[mask.charAt(i)];
  125. if (definition) {
  126. start += length;
  127. length = definition.cardinality;
  128. } else length++;
  129. }
  130. return buffer.join("").substr(start, length);
  131. },
  132. definitions: {
  133. "1": { //val1 ~ day or month
  134. validator: function(chrs, maskset, pos, strict, opts) {
  135. var isValid = opts.regex.val1.test(chrs);
  136. if (!strict && !isValid) {
  137. if (chrs.charAt(1) === opts.separator || "-./".indexOf(chrs.charAt(1)) !== -1) {
  138. isValid = opts.regex.val1.test("0" + chrs.charAt(0));
  139. if (isValid) {
  140. maskset.buffer[pos - 1] = "0";
  141. return {
  142. "refreshFromBuffer": {
  143. start: pos - 1,
  144. end: pos
  145. },
  146. "pos": pos,
  147. "c": chrs.charAt(0)
  148. };
  149. }
  150. }
  151. }
  152. return isValid;
  153. },
  154. cardinality: 2,
  155. prevalidator: [{
  156. validator: function(chrs, maskset, pos, strict, opts) {
  157. var pchrs = chrs;
  158. if (!isNaN(maskset.buffer[pos + 1])) pchrs += maskset.buffer[pos + 1];
  159. var isValid = pchrs.length === 1 ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);
  160. if (!strict && !isValid) {
  161. isValid = opts.regex.val1.test(chrs + "0");
  162. if (isValid) {
  163. maskset.buffer[pos] = chrs;
  164. maskset.buffer[++pos] = "0";
  165. return {
  166. "pos": pos,
  167. "c": "0"
  168. };
  169. }
  170. isValid = opts.regex.val1.test("0" + chrs);
  171. if (isValid) {
  172. maskset.buffer[pos] = "0";
  173. pos++;
  174. return {
  175. "pos": pos
  176. };
  177. }
  178. }
  179. return isValid;
  180. },
  181. cardinality: 1
  182. }]
  183. },
  184. "2": { //val2 ~ day or month
  185. validator: function(chrs, maskset, pos, strict, opts) {
  186. var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
  187. if (frontValue.indexOf(opts.placeholder[0]) !== -1) frontValue = "01" + opts.separator;
  188. var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
  189. if (!strict && !isValid) {
  190. if (chrs.charAt(1) === opts.separator || "-./".indexOf(chrs.charAt(1)) !== -1) {
  191. isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0));
  192. if (isValid) {
  193. maskset.buffer[pos - 1] = "0";
  194. return {
  195. "refreshFromBuffer": {
  196. start: pos - 1,
  197. end: pos
  198. },
  199. "pos": pos,
  200. "c": chrs.charAt(0)
  201. };
  202. }
  203. }
  204. }
  205. //check leap yeap
  206. if ((opts.mask.indexOf("2") === opts.mask.length - 1) && isValid) {
  207. var dayMonthValue = maskset.buffer.join("").substr(4, 4) + chrs;
  208. if (dayMonthValue !== opts.leapday) {
  209. return true;
  210. } else {
  211. var year = parseInt(maskset.buffer.join("").substr(0, 4), 10); //detect leap year
  212. if (year % 4 === 0) {
  213. if (year % 100 === 0) {
  214. if (year % 400 === 0) {
  215. return true;
  216. } else {
  217. return false;
  218. }
  219. } else {
  220. return true;
  221. }
  222. } else return false;
  223. }
  224. }
  225. return isValid;
  226. },
  227. cardinality: 2,
  228. prevalidator: [{
  229. validator: function(chrs, maskset, pos, strict, opts) {
  230. if (!isNaN(maskset.buffer[pos + 1])) chrs += maskset.buffer[pos + 1];
  231. var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
  232. if (frontValue.indexOf(opts.placeholder[0]) !== -1) frontValue = "01" + opts.separator;
  233. var isValid = chrs.length === 1 ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);
  234. if (!strict && !isValid) {
  235. isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs);
  236. if (isValid) {
  237. maskset.buffer[pos] = "0";
  238. pos++;
  239. return {
  240. "pos": pos
  241. };
  242. }
  243. }
  244. return isValid;
  245. },
  246. cardinality: 1
  247. }]
  248. },
  249. "y": { //year
  250. validator: function(chrs, maskset, pos, strict, opts) {
  251. if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
  252. var dayMonthValue = maskset.buffer.join("").substr(0, 6);
  253. if (dayMonthValue !== opts.leapday) {
  254. return true;
  255. } else {
  256. var year = parseInt(chrs, 10); //detect leap year
  257. if (year % 4 === 0) {
  258. if (year % 100 === 0) {
  259. if (year % 400 === 0) return true;
  260. else return false;
  261. } else return true;
  262. } else return false;
  263. }
  264. } else return false;
  265. },
  266. cardinality: 4,
  267. prevalidator: [{
  268. validator: function(chrs, maskset, pos, strict, opts) {
  269. var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  270. if (!strict && !isValid) {
  271. var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
  272. isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  273. if (isValid) {
  274. maskset.buffer[pos++] = yearPrefix.charAt(0);
  275. return {
  276. "pos": pos
  277. };
  278. }
  279. yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2);
  280. isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  281. if (isValid) {
  282. maskset.buffer[pos++] = yearPrefix.charAt(0);
  283. maskset.buffer[pos++] = yearPrefix.charAt(1);
  284. return {
  285. "pos": pos
  286. };
  287. }
  288. }
  289. return isValid;
  290. },
  291. cardinality: 1
  292. }, {
  293. validator: function(chrs, maskset, pos, strict, opts) {
  294. var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  295. if (!strict && !isValid) {
  296. var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
  297. isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear);
  298. if (isValid) {
  299. maskset.buffer[pos++] = yearPrefix.charAt(1);
  300. return {
  301. "pos": pos
  302. };
  303. }
  304. yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
  305. if (opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
  306. var dayMonthValue = maskset.buffer.join("").substr(0, 6);
  307. if (dayMonthValue !== opts.leapday) {
  308. isValid = true;
  309. } else {
  310. var year = parseInt(chrs, 10); //detect leap year
  311. if (year % 4 === 0) {
  312. if (year % 100 === 0) {
  313. if (year % 400 === 0) isValid = true;
  314. else isValid = false;
  315. } else isValid = true;
  316. } else isValid = false;
  317. }
  318. } else isValid = false;
  319. if (isValid) {
  320. maskset.buffer[pos - 1] = yearPrefix.charAt(0);
  321. maskset.buffer[pos++] = yearPrefix.charAt(1);
  322. maskset.buffer[pos++] = chrs.charAt(0);
  323. return {
  324. "refreshFromBuffer": {
  325. start: pos - 3,
  326. end: pos
  327. },
  328. "pos": pos
  329. };
  330. }
  331. }
  332. return isValid;
  333. },
  334. cardinality: 2
  335. }, {
  336. validator: function(chrs, maskset, pos, strict, opts) {
  337. return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  338. },
  339. cardinality: 3
  340. }]
  341. }
  342. },
  343. insertMode: false,
  344. autoUnmask: false
  345. },
  346. "mm/dd/yyyy": {
  347. placeholder: "mm/dd/yyyy",
  348. alias: "dd/mm/yyyy", //reuse functionality of dd/mm/yyyy alias
  349. regex: {
  350. val2pre: function(separator) {
  351. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  352. return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
  353. }, //daypre
  354. val2: function(separator) {
  355. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  356. return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
  357. }, //day
  358. val1pre: new RegExp("[01]"), //monthpre
  359. val1: new RegExp("0[1-9]|1[012]") //month
  360. },
  361. leapday: "02/29/",
  362. onKeyDown: function(e, buffer, caretPos, opts) {
  363. var $input = $(this);
  364. if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
  365. var today = new Date();
  366. $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString());
  367. $input.trigger("setvalue");
  368. }
  369. }
  370. },
  371. "yyyy/mm/dd": {
  372. mask: "y/1/2",
  373. placeholder: "yyyy/mm/dd",
  374. alias: "mm/dd/yyyy",
  375. leapday: "/02/29",
  376. onKeyDown: function(e, buffer, caretPos, opts) {
  377. var $input = $(this);
  378. if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
  379. var today = new Date();
  380. $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString());
  381. $input.trigger("setvalue");
  382. }
  383. }
  384. },
  385. "dd.mm.yyyy": {
  386. mask: "1.2.y",
  387. placeholder: "dd.mm.yyyy",
  388. leapday: "29.02.",
  389. separator: ".",
  390. alias: "dd/mm/yyyy"
  391. },
  392. "dd-mm-yyyy": {
  393. mask: "1-2-y",
  394. placeholder: "dd-mm-yyyy",
  395. leapday: "29-02-",
  396. separator: "-",
  397. alias: "dd/mm/yyyy"
  398. },
  399. "mm.dd.yyyy": {
  400. mask: "1.2.y",
  401. placeholder: "mm.dd.yyyy",
  402. leapday: "02.29.",
  403. separator: ".",
  404. alias: "mm/dd/yyyy"
  405. },
  406. "mm-dd-yyyy": {
  407. mask: "1-2-y",
  408. placeholder: "mm-dd-yyyy",
  409. leapday: "02-29-",
  410. separator: "-",
  411. alias: "mm/dd/yyyy"
  412. },
  413. "yyyy.mm.dd": {
  414. mask: "y.1.2",
  415. placeholder: "yyyy.mm.dd",
  416. leapday: ".02.29",
  417. separator: ".",
  418. alias: "yyyy/mm/dd"
  419. },
  420. "yyyy-mm-dd": {
  421. mask: "y-1-2",
  422. placeholder: "yyyy-mm-dd",
  423. leapday: "-02-29",
  424. separator: "-",
  425. alias: "yyyy/mm/dd"
  426. },
  427. "datetime": {
  428. mask: "1/2/y h:s",
  429. placeholder: "dd/mm/yyyy hh:mm",
  430. alias: "dd/mm/yyyy",
  431. regex: {
  432. hrspre: new RegExp("[012]"), //hours pre
  433. hrs24: new RegExp("2[0-4]|1[3-9]"),
  434. hrs: new RegExp("[01][0-9]|2[0-4]"), //hours
  435. ampm: new RegExp("^[a|p|A|P][m|M]"),
  436. mspre: new RegExp("[0-5]"), //minutes/seconds pre
  437. ms: new RegExp("[0-5][0-9]")
  438. },
  439. timeseparator: ":",
  440. hourFormat: "24", // or 12
  441. definitions: {
  442. "h": { //hours
  443. validator: function(chrs, maskset, pos, strict, opts) {
  444. if (opts.hourFormat === "24") {
  445. if (parseInt(chrs, 10) === 24) {
  446. maskset.buffer[pos - 1] = "0";
  447. maskset.buffer[pos] = "0";
  448. return {
  449. "refreshFromBuffer": {
  450. start: pos - 1,
  451. end: pos
  452. },
  453. "c": "0"
  454. };
  455. }
  456. }
  457. var isValid = opts.regex.hrs.test(chrs);
  458. if (!strict && !isValid) {
  459. if (chrs.charAt(1) === opts.timeseparator || "-.:".indexOf(chrs.charAt(1)) !== -1) {
  460. isValid = opts.regex.hrs.test("0" + chrs.charAt(0));
  461. if (isValid) {
  462. maskset.buffer[pos - 1] = "0";
  463. maskset.buffer[pos] = chrs.charAt(0);
  464. pos++;
  465. return {
  466. "refreshFromBuffer": {
  467. start: pos - 2,
  468. end: pos
  469. },
  470. "pos": pos,
  471. "c": opts.timeseparator
  472. };
  473. }
  474. }
  475. }
  476. if (isValid && opts.hourFormat !== "24" && opts.regex.hrs24.test(chrs)) {
  477. var tmp = parseInt(chrs, 10);
  478. if (tmp === 24) {
  479. maskset.buffer[pos + 5] = "a";
  480. maskset.buffer[pos + 6] = "m";
  481. } else {
  482. maskset.buffer[pos + 5] = "p";
  483. maskset.buffer[pos + 6] = "m";
  484. }
  485. tmp = tmp - 12;
  486. if (tmp < 10) {
  487. maskset.buffer[pos] = tmp.toString();
  488. maskset.buffer[pos - 1] = "0";
  489. } else {
  490. maskset.buffer[pos] = tmp.toString().charAt(1);
  491. maskset.buffer[pos - 1] = tmp.toString().charAt(0);
  492. }
  493. return {
  494. "refreshFromBuffer": {
  495. start: pos - 1,
  496. end: pos + 6
  497. },
  498. "c": maskset.buffer[pos]
  499. };
  500. }
  501. return isValid;
  502. },
  503. cardinality: 2,
  504. prevalidator: [{
  505. validator: function(chrs, maskset, pos, strict, opts) {
  506. var isValid = opts.regex.hrspre.test(chrs);
  507. if (!strict && !isValid) {
  508. isValid = opts.regex.hrs.test("0" + chrs);
  509. if (isValid) {
  510. maskset.buffer[pos] = "0";
  511. pos++;
  512. return {
  513. "pos": pos
  514. };
  515. }
  516. }
  517. return isValid;
  518. },
  519. cardinality: 1
  520. }]
  521. },
  522. "s": { //seconds || minutes
  523. validator: "[0-5][0-9]",
  524. cardinality: 2,
  525. prevalidator: [{
  526. validator: function(chrs, maskset, pos, strict, opts) {
  527. var isValid = opts.regex.mspre.test(chrs);
  528. if (!strict && !isValid) {
  529. isValid = opts.regex.ms.test("0" + chrs);
  530. if (isValid) {
  531. maskset.buffer[pos] = "0";
  532. pos++;
  533. return {
  534. "pos": pos
  535. };
  536. }
  537. }
  538. return isValid;
  539. },
  540. cardinality: 1
  541. }]
  542. },
  543. "t": { //am/pm
  544. validator: function(chrs, maskset, pos, strict, opts) {
  545. return opts.regex.ampm.test(chrs + "m");
  546. },
  547. casing: "lower",
  548. cardinality: 1
  549. }
  550. },
  551. insertMode: false,
  552. autoUnmask: false
  553. },
  554. "datetime12": {
  555. mask: "1/2/y h:s t\\m",
  556. placeholder: "dd/mm/yyyy hh:mm xm",
  557. alias: "datetime",
  558. hourFormat: "12"
  559. },
  560. "mm/dd/yyyy hh:mm xm": {
  561. mask: "1/2/y h:s t\\m",
  562. placeholder: "mm/dd/yyyy hh:mm xm",
  563. alias: "datetime12",
  564. regex: {
  565. val2pre: function (separator) {
  566. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  567. return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
  568. },
  569. val2: function (separator) {
  570. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  571. return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
  572. },
  573. val1pre: new RegExp("[01]"),
  574. val1: new RegExp("0[1-9]|1[012]")
  575. },
  576. leapday: "02/29/",
  577. onKeyDown: function (e, buffer, caretPos, opts) {
  578. var $input = $(this);
  579. if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
  580. var today = new Date();
  581. $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()),
  582. $input.trigger("setvalue");
  583. }
  584. }
  585. },
  586. "hh:mm t": {
  587. mask: "h:s t\\m",
  588. placeholder: "hh:mm xm",
  589. alias: "datetime",
  590. hourFormat: "12"
  591. },
  592. "h:s t": {
  593. mask: "h:s t\\m",
  594. placeholder: "hh:mm xm",
  595. alias: "datetime",
  596. hourFormat: "12"
  597. },
  598. "hh:mm:ss": {
  599. mask: "h:s:s",
  600. placeholder: "hh:mm:ss",
  601. alias: "datetime",
  602. autoUnmask: false
  603. },
  604. "hh:mm": {
  605. mask: "h:s",
  606. placeholder: "hh:mm",
  607. alias: "datetime",
  608. autoUnmask: false
  609. },
  610. "date": {
  611. alias: "dd/mm/yyyy" // "mm/dd/yyyy"
  612. },
  613. "mm/yyyy": {
  614. mask: "1/y",
  615. placeholder: "mm/yyyy",
  616. leapday: "donotuse",
  617. separator: "/",
  618. alias: "mm/dd/yyyy"
  619. },
  620. "shamsi": {
  621. regex: {
  622. val2pre: function(separator) {
  623. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  624. return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "[0-3])");
  625. },
  626. val2: function(separator) {
  627. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  628. return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[1-9]|1[012])" + escapedSeparator + "30)|((0[1-6])" + escapedSeparator + "31)");
  629. },
  630. val1pre: new RegExp("[01]"),
  631. val1: new RegExp("0[1-9]|1[012]")
  632. },
  633. yearrange: {
  634. minyear: 1300,
  635. maxyear: 1499
  636. },
  637. mask: "y/1/2",
  638. leapday: "/12/30",
  639. placeholder: "yyyy/mm/dd",
  640. alias: "mm/dd/yyyy",
  641. clearIncomplete: true
  642. }
  643. });
  644. return Inputmask;
  645. }));