UNPKG

fast-time-input

Version:
159 lines (153 loc) 5.01 kB
"use strict"; //import { parse } from "url"; Object.defineProperty(exports, "__esModule", { value: true }); // https://stackoverflow.com/questions/2998784/how-to-output-integers-with-leading-zeros-in-javascript function pad(num, size) { var s = num + ""; while (s.length < size) s = "0" + s; return s; } exports.pad = pad; // https://stackoverflow.com/questions/11409895/whats-the-most-elegant-way-to-cap-a-number-to-a-segment function clamp(val, min, max) { return Math.min(Math.max(val, min), max); } exports.clamp = clamp; // time data in 24 hours var Time = /** @class */ (function () { function Time(hr, mn) { this.hours = 0; this.mins = 0; this.hours = clamp(hr, 0, 23); this.mins = clamp(mn, 0, 59); } Time.prototype.to12Hour = function () { var hours = this.hours; var mer = "AM"; if (hours >= 12) { hours -= 12; mer = "PM"; } if (hours == 0) hours = 12; return pad(hours, 2) + ":" + pad(this.mins, 2) + " " + mer.toUpperCase(); }; Time.prototype.to24Hour = function () { return pad(this.hours, 2) + ":" + pad(this.mins, 2); }; return Time; }()); exports.Time = Time; function parseDateAsText(timeString, format) { var newTime = ""; // https://stackoverflow.com/questions/2031085/how-can-i-check-if-string-contains-characters-whitespace-not-just-whitespace if (/\S/.test(timeString) || timeString !== "") { var t = convertInput(timeString); if (!format || format === "12hr") { newTime = t.to12Hour(); } else { newTime = t.to24Hour(); } } return newTime; } /* 1p => 1:00 PM 12p => 12:00 PM 13p => 1:00 PM 130p => 1:30 PM sungle and double digits: 1 - 24 => convert to 24 hour triple digits: 130 => 1:30 125 => 1:25 quadruple digits: 0530 => 5:30 // strip trailing zero 1555 => 15:55 if pm and hours > 12: hours += 12 - if no p is present, AM is implied */ function convertInput(timeString) { var meridian = findMeridian(timeString); // strip extra characters timeString = timeString.replace(/\D/g, ""); if (timeString.length == 0) return new Time(0, 0); if (timeString.length == 1 || timeString.length == 2) return convertSingleAndDouble(timeString, meridian); if (timeString.length == 3) return convertTriple(timeString, meridian); if (timeString.length == 4) return convertQuadruple(timeString, meridian); return new Time(0, 0); } // returns am, pm or an empty string if neither is found function findMeridian(timeString) { timeString = timeString.toLowerCase(); if (timeString.search("pm") !== -1 || timeString.search("p") !== -1) return "pm"; if (timeString.search("am") !== -1 || timeString.search("a") !== -1) return "am"; return null; } function convertSingleAndDouble(timeString, meridian) { var value = parseInt(timeString) % 24; if (meridian === "pm" && value < 12) value += 12; if (meridian === "am" && value >= 12) value -= 12; return new Time(value % 24, 0); } /* only handles time between 1:01 and 9:99 */ function convertTriple(timeString, meridian) { var hours = parseInt(timeString.substr(0, 1)); if (meridian === "pm") hours += 12; var mins = parseInt(timeString.substr(1, 3)); return new Time(hours, mins); } function convertQuadruple(timeString, meridian) { var hours = parseInt(timeString.substr(0, 2)); if (meridian === "pm" && hours < 12) hours += 12; if (meridian === "am" && hours >= 12) hours -= 12; var mins = parseInt(timeString.substr(2, 5)); return new Time(hours, mins); } // https://stackoverflow.com/questions/8282266/how-to-prevent-invalid-characters-from-being-typed-into-input-fields function filterInput(e) { var inputLength = e.target.value.length; // 0-9 if (e.which > 47 && e.which < 58) { return false; } // https://stackoverflow.com/questions/2353550/how-to-capture-a-backspace-on-the-onkeydown-event/2353562 // backspace, delete, tab and arrow keys if (e.which === 8 || e.which === 46 || e.which === 9 || (e.which >= 37 && e.which <= 40)) { return false; } var key = e.key.toUpperCase(); // AMP /* ensures that the first charater in the input box can not be any of the allowed letters */ if ((inputLength > 0 && key === "A") || (inputLength > 0 && key === "P") || (inputLength > 0 && key === "M")) { return false; } // colon : /* ensures that the first charater in the input box can not be a colon */ if (inputLength > 0 && e.key === ":") { return false; } e.preventDefault(); } exports.filterInput = filterInput; function parse(timeString, format) { return parseDateAsText(timeString, format); } exports.parse = parse; //export default FastTimeInput; //# sourceMappingURL=fast-time-input.js.map