Files
ms1inscription-v5/rapports/components/js/pgui.datetimepicker.js
2026-05-13 09:43:32 -04:00

97 lines
3.8 KiB
JavaScript

define(function(require, exports) {
var Class = require('class'),
events = require('microevent'),
_ = require('underscore');
var DateTimePicker = exports.DateTimePicker = Class.extend({
init: function($container, $triggerButton) {
var self = this;
this.$container = $container;
this.$triggerButton = $triggerButton || $container;
this.$container.data('DateTimePicker-class', self);
this.dateFormat = this.$container.attr('data-picker-format');
this.showTime = this.$container.attr('data-picker-show-time') == 'true';
this.fdow = this.$container.attr('data-picker-first-day-of-week');
self.visible = false;
this.calendar = null;
require(["libs/calendar/js/jscal2.js"], function() {
self._initCalendar();
self.$triggerButton.click(function() {
if (self.visible)
self.calendar.hide();
else {
var av = /(^|[^%])%[bBmo]/.exec(self.calendar.args.dateFormat);
var au = /(^|[^%])%[de]/.exec(self.calendar.args.dateFormat);
if (av && au) {
var at = av.index < au.index;
}
var aw = Calendar.parseDate(self.$container.val(), at);
if (aw) {
self.calendar.selection.set(aw, false, true);
self.calendar.moveTo(aw);
}
self.calendar.els.topCont.style.visibility = "";
self.calendar.els.topCont.style.display = "";
document.body.appendChild(self.calendar.els.topCont);
var fixedCont = (self.$container.closest('.modal').length > 0);
self.calendar.showAt(
self.$container.offset().left,
self.$container.offset().top + self.$container.outerHeight() - (fixedCont ? $(window).scrollTop() : 0),
true,
fixedCont ? "fixed" : "absolute"); //'Bl/Bl/Bl/Bl/Bl'
self.calendar.focus();
}
self.visible = !self.visible;
});
});
},
onChange: function(callback) {
this.bind('change', callback);
},
_initCalendar: function() {
var self = this;
var options = {
showTime : self.showTime,
inputField : this.$container.get(),
minuteStep : 1,
onSelect : function() {
var dateFormat = (this.args.dateFormat == 0) ? self.dateFormat : this.args.dateFormat;
this.hide();
self.visible = false;
self.$container.val(this.selection.print(this.args.dateFormat));
self.$container.focus();
self.$container.keyup();
self.trigger('change');
}
};
if (this.dateFormat)
options = _.extend(options, { dateFormat: this.dateFormat });
if (this.fdow)
options = _.extend(options, { fdow: this.fdow-0 });
this.calendar = Calendar.setup(options);
this.calendar.addEventListener("onBlur", function() {
self.$container.focus();
});
}
});
events.mixin(DateTimePicker);
exports.setupCalendarControls = function(container) {
container.find('[data-calendar=true]').each(function() {
new DateTimePicker($(this));
});
};
});