"use strict"; import $ from "jquery"; import Events from "../_events"; import "bootstrap-datepicker/dist/js/bootstrap-datepicker.js"; import "bootstrap-timepicker/js/bootstrap-timepicker.js"; const DatetimeUI = (($) => { // Constants const W = window; const D = document; const $Body = $("body"); const NAME = "jsDatetimeUI"; const DATA_KEY = NAME; const datepickerOptions = { autoclose: true, startDate: 0, //todayBtn: true, todayHighlight: true, clearBtn: true, }; class DatetimeUI { constructor(el) { console.log(`${NAME}: init`); const ui = this; const $el = $(el); ui._el = el; // datepicker if ($el.hasClass("date") || $el.attr("type") === "date") { const defaultDate = $el.attr("name").toLowerCase().indexOf("end") !== -1 ? "+4d" : "+3d"; $el.attr("readonly", "true"); $el.datepicker( $.extend( datepickerOptions, { defaultViewDate: defaultDate, multidate: $el.data("multidate"), }, $el.data() ) ); } // timepicker else if ($el.hasClass("time") || $el.attr("type") === "time") { $el.attr("readonly", "true"); $el .timepicker( $.extend( { snapToStep: true, icons: { up: "fas fa-chevron-up", down: "fas fa-chevron-down", }, }, $el.data() ) ) .on("show.timepicker", (e) => { const $el = $(e.currentTarget); const $dropdown = $Body.find(".bootstrap-timepicker-widget"); if (!$dropdown.find('[data-action="clear"]').length) { $dropdown .find("tbody") .append( 'Clear' ); } const $clearBtn = $dropdown.find('[data-action="clear"]'); $clearBtn.on("click", (e) => { e.preventDefault(); $el.timepicker("clear"); $el.timepicker("hideWidget"); }); }); } } static dispose() { console.log(`${NAME}: dispose`); } static _jQueryInterface() { return this.each(function () { // attach functionality to element const $el = $(this); let data = $el.data(DATA_KEY); if (!data) { data = new DatetimeUI(this); $el.data(DATA_KEY, data); } }); } } // jQuery interface $.fn[NAME] = DatetimeUI._jQueryInterface; $.fn[NAME].Constructor = DatetimeUI; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return DatetimeUI._jQueryInterface; }; // auto-apply $(window).on(`${NAME}.init ${Events.AJAX} ${Events.LOADED}`, () => { $( 'input.date, input.time,input[type="date"], input[type="time"]' ).jsDatetimeUI(); }); return DatetimeUI; })($); export default DatetimeUI;