UNPKG

jquery-grid

Version:

jQuery Grid by Gijgo.com is a plug-in for the jQuery Javascript library. It is a very fast and extandable datagrid, and will add advanced interaction controls to any HTML table. This plugin has build-in integration with Bootstrap and Material Design. Free

323 lines (273 loc) 13.7 kB
/* * Gijgo DateTimePicker v1.9.13 * http://gijgo.com/datetimepicker * * Copyright 2014, 2019 gijgo.com * Released under the MIT license */ /* global window alert jQuery gj */ /** */ gj.datetimepicker = { plugins: {}, messages: { 'en-us': { } } }; gj.datetimepicker.config = { base: { /** The datepicker configuration options. Valid only for datepicker specific configuration options. */ datepicker: gj.datepicker.config.base, timepicker: gj.timepicker.config.base, /** The name of the UI library that is going to be in use. */ uiLibrary: 'materialdesign', /** The initial datetimepicker value. */ value: undefined, /** Specifies the format, which is used to format the value of the DatePicker displayed in the input. */ format: 'HH:MM mm/dd/yyyy', /** The width of the datetimepicker. */ width: undefined, /** If set to true, the datetimepicker will have modal behavior. */ modal: false, /** If set to true, add footer with ok and cancel buttons to the datetimepicker. */ footer: false, /** The size of the datetimepicker input. */ size: 'default', /** The language that needs to be in use. */ locale: 'en-us', icons: {}, style: { calendar: 'gj-picker gj-picker-md datetimepicker gj-unselectable' } }, bootstrap: { style: { calendar: 'gj-picker gj-picker-bootstrap datetimepicker gj-unselectable' }, iconsLibrary: 'glyphicons' }, bootstrap4: { style: { calendar: 'gj-picker gj-picker-bootstrap datetimepicker gj-unselectable' } } }; gj.datetimepicker.methods = { init: function (jsConfig) { gj.widget.prototype.init.call(this, jsConfig, 'datetimepicker'); this.attr('data-datetimepicker', 'true'); gj.datetimepicker.methods.initialize(this); return this; }, getConfig: function (clientConfig, type) { var config = gj.widget.prototype.getConfig.call(this, clientConfig, type); uiLibrary = clientConfig.hasOwnProperty('uiLibrary') ? clientConfig.uiLibrary : config.uiLibrary; if (gj.datepicker.config[uiLibrary]) { $.extend(true, config.datepicker, gj.datepicker.config[uiLibrary]); } if (gj.timepicker.config[uiLibrary]) { $.extend(true, config.timepicker, gj.timepicker.config[uiLibrary]); } iconsLibrary = clientConfig.hasOwnProperty('iconsLibrary') ? clientConfig.iconsLibrary : config.iconsLibrary; if (gj.datepicker.config[iconsLibrary]) { $.extend(true, config.datepicker, gj.datepicker.config[iconsLibrary]); } if (gj.timepicker.config[iconsLibrary]) { $.extend(true, config.timepicker, gj.timepicker.config[iconsLibrary]); } return config; }, initialize: function ($datetimepicker) { var $picker, $header, $date, $time, date, $switch, $calendarMode, $clockMode, data = $datetimepicker.data(); // Init datepicker data.datepicker.uiLibrary = data.uiLibrary; data.datepicker.iconsLibrary = data.iconsLibrary; data.datepicker.width = data.width; data.datepicker.format = data.format; data.datepicker.locale = data.locale; data.datepicker.modal = data.modal; data.datepicker.footer = data.footer; data.datepicker.style.calendar = data.style.calendar; data.datepicker.value = data.value; data.datepicker.size = data.size; data.datepicker.autoClose = false; gj.datepicker.methods.initialize($datetimepicker, data.datepicker); $datetimepicker.on('select', function (e, type) { var date, value; if (type === 'day') { gj.datetimepicker.methods.createShowHourHandler($datetimepicker, $picker, data)(); } else if (type === 'minute') { if ($picker.attr('selectedDay') && data.footer !== true) { selectedDay = $picker.attr('selectedDay').split('-'); date = new Date(selectedDay[0], selectedDay[1], selectedDay[2], $picker.attr('hour') || 0, $picker.attr('minute') || 0); value = gj.core.formatDate(date, data.format, data.locale); $datetimepicker.val(value); gj.datetimepicker.events.change($datetimepicker); gj.datetimepicker.methods.close($datetimepicker); } } }); $datetimepicker.on('open', function () { var $header = $picker.children('[role="header"]'); $header.find('[role="calendarMode"]').addClass("selected"); $header.find('[role="clockMode"]').removeClass("selected"); }); $picker = $('body').find('[role="calendar"][guid="' + $datetimepicker.attr('data-guid') + '"]'); date = data.value ? gj.core.parseDate(data.value, data.format, data.locale) : new Date(); $picker.attr('hour', date.getHours()); $picker.attr('minute', date.getMinutes()); // Init timepicker data.timepicker.uiLibrary = data.uiLibrary; data.timepicker.iconsLibrary = data.iconsLibrary; data.timepicker.format = data.format; data.timepicker.locale = data.locale; data.timepicker.header = true; data.timepicker.footer = data.footer; data.timepicker.size = data.size; data.timepicker.mode = '24hr'; data.timepicker.autoClose = false; // Init header $header = $('<div role="header" />'); $date = $('<div role="date" class="selected" />'); $date.on('click', gj.datetimepicker.methods.createShowDateHandler($datetimepicker, $picker, data)); $date.html(gj.core.formatDate(new Date(), 'ddd, mmm dd', data.locale)); $header.append($date); $switch = $('<div role="switch"></div>'); $calendarMode = $('<i class="gj-icon selected" role="calendarMode">event</i>'); $calendarMode.on('click', gj.datetimepicker.methods.createShowDateHandler($datetimepicker, $picker, data)); $switch.append($calendarMode); $time = $('<div role="time" />'); $time.append($('<div role="hour" />').on('click', gj.datetimepicker.methods.createShowHourHandler($datetimepicker, $picker, data)).html(gj.core.formatDate(new Date(), 'HH', data.locale))); $time.append(':'); $time.append($('<div role="minute" />').on('click', gj.datetimepicker.methods.createShowMinuteHandler($datetimepicker, $picker, data)).html(gj.core.formatDate(new Date(), 'MM', data.locale))); $switch.append($time); $clockMode = $('<i class="gj-icon" role="clockMode">clock</i>'); $clockMode.on('click', gj.datetimepicker.methods.createShowHourHandler($datetimepicker, $picker, data)); $switch.append($clockMode); $header.append($switch); $picker.prepend($header); }, createShowDateHandler: function ($datetimepicker, $picker, data) { return function (e) { var $header = $picker.children('[role="header"]'); $header.find('[role="calendarMode"]').addClass("selected"); $header.find('[role="date"]').addClass("selected"); $header.find('[role="clockMode"]').removeClass("selected"); $header.find('[role="hour"]').removeClass("selected"); $header.find('[role="minute"]').removeClass("selected"); gj.datepicker.methods.renderMonth($datetimepicker, $picker, data.datepicker); }; }, createShowHourHandler: function ($datetimepicker, $picker, data) { return function () { var $header = $picker.children('[role="header"]'); $header.find('[role="calendarMode"]').removeClass("selected"); $header.find('[role="date"]').removeClass("selected"); $header.find('[role="clockMode"]').addClass("selected"); $header.find('[role="hour"]').addClass("selected"); $header.find('[role="minute"]').removeClass("selected"); gj.timepicker.methods.initMouse($picker.children('[role="body"]'), $datetimepicker, $picker, data.timepicker); gj.timepicker.methods.renderHours($datetimepicker, $picker, data.timepicker); }; }, createShowMinuteHandler: function ($datetimepicker, $picker, data) { return function () { var $header = $picker.children('[role="header"]'); $header.find('[role="calendarMode"]').removeClass("selected"); $header.find('[role="date"]').removeClass("selected"); $header.find('[role="clockMode"]').addClass("selected"); $header.find('[role="hour"]').removeClass("selected"); $header.find('[role="minute"]').addClass("selected"); gj.timepicker.methods.initMouse($picker.children('[role="body"]'), $datetimepicker, $picker, data.timepicker); gj.timepicker.methods.renderMinutes($datetimepicker, $picker, data.timepicker); }; }, close: function ($datetimepicker) { var $calendar = $('body').find('[role="calendar"][guid="' + $datetimepicker.attr('data-guid') + '"]'); $calendar.hide(); $calendar.closest('div[role="modal"]').hide(); //gj.datepicker.events.close($datepicker); }, value: function ($datetimepicker, value) { var $calendar, date, hour, data = $datetimepicker.data(); if (typeof (value) === "undefined") { return $datetimepicker.val(); } else { date = gj.core.parseDate(value, data.format, data.locale); if (date) { $calendar = $('body').find('[role="calendar"][guid="' + $datetimepicker.attr('data-guid') + '"]'); gj.datepicker.methods.dayClickHandler($datetimepicker, $calendar, data, date)(); // Set Time hour = date.getHours(); if (data.mode === 'ampm') { $calendar.attr('mode', hour > 12 ? 'pm' : 'am'); } $calendar.attr('hour', hour); $calendar.attr('minute', date.getMinutes()); $datetimepicker.val(value); } else { $datetimepicker.val(''); } return $datetimepicker; } }, destroy: function ($datetimepicker) { var data = $datetimepicker.data(), $parent = $datetimepicker.parent(), $picker = $('body').find('[role="calendar"][guid="' + $datetimepicker.attr('data-guid') + '"]'); if (data) { $datetimepicker.off(); if ($picker.parent('[role="modal"]').length > 0) { $picker.unwrap(); } $picker.remove(); $datetimepicker.removeData(); $datetimepicker.removeAttr('data-type').removeAttr('data-guid').removeAttr('data-datetimepicker'); $datetimepicker.removeClass(); $parent.children('[role="right-icon"]').remove(); $datetimepicker.unwrap(); } return $datetimepicker; } }; gj.datetimepicker.events = { /** * Fires when the datetimepicker value changes as a result of selecting a new value. * */ change: function ($datetimepicker) { return $datetimepicker.triggerHandler('change'); } }; gj.datetimepicker.widget = function ($element, jsConfig) { var self = this, methods = gj.datetimepicker.methods; self.mouseMove = false; /** Gets or sets the value of the datetimepicker. */ self.value = function (value) { return methods.value(this, value); }; /** Open the calendar. */ self.open = function () { gj.datepicker.methods.open(this, this.data().datepicker); }; /** Close the calendar. */ self.close = function () { gj.datepicker.methods.close(this); }; /** Remove datetimepicker functionality from the element. */ self.destroy = function () { return methods.destroy(this); }; $.extend($element, self); if ('true' !== $element.attr('data-datetimepicker')) { methods.init.call($element, jsConfig); } return $element; }; gj.datetimepicker.widget.prototype = new gj.widget(); gj.datetimepicker.widget.constructor = gj.datetimepicker.widget; gj.datetimepicker.widget.prototype.getConfig = gj.datetimepicker.methods.getConfig; (function ($) { $.fn.datetimepicker = function (method) { var $widget; if (this && this.length) { if (typeof method === 'object' || !method) { return new gj.datetimepicker.widget(this, method); } else { $widget = new gj.datetimepicker.widget(this, null); if ($widget[method]) { return $widget[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else { throw 'Method ' + method + ' does not exist.'; } } } }; })(jQuery);