![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/cartforge.co/pub/static/frontend/Magento/blank/en_US/mage/ |
/** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ /*eslint max-depth: 0*/ define([ 'jquery', 'jquery-ui-modules/widget', 'jquery-ui-modules/datepicker', 'jquery-ui-modules/timepicker' ], function ($) { 'use strict'; var calendarBasePrototype, datepickerPrototype = $.datepicker.constructor.prototype; $.datepicker.markerClassName = '_has-datepicker'; /** * Extend JQuery date picker prototype with store local time methods */ $.extend(datepickerPrototype, { /** * Get date/time according to store settings. * We use serverTimezoneOffset (in seconds) instead of serverTimezoneSeconds * in order to have ability to know actual store time even if page hadn't been reloaded * @returns {Date} */ _getTimezoneDate: function (options) { // local time in ms var ms = Date.now(); options = options || $.calendarConfig || {}; // Adjust milliseconds according to store timezone offset, // mind the GMT zero offset if (typeof options.serverTimezoneOffset !== 'undefined') { // Make UTC time and add store timezone offset in seconds ms += new Date().getTimezoneOffset() * 60 * 1000 + options.serverTimezoneOffset * 1000; } else if (typeof options.serverTimezoneSeconds !== 'undefined') { //Set milliseconds according to client local timezone offset ms = (options.serverTimezoneSeconds + new Date().getTimezoneOffset() * 60) * 1000; } return new Date(ms); }, /** * Set date/time according to store settings. * @param {String|Object} target - the target input field or division or span */ _setTimezoneDateDatepicker: function (target) { this._setDateDatepicker(target, this._getTimezoneDate()); } }); /** * Widget calendar */ $.widget('mage.calendar', { options: { autoComplete: true }, /** * Merge global options with options passed to widget invoke * @protected */ _create: function () { this._enableAMPM(); this.options = $.extend( {}, $.calendarConfig ? $.calendarConfig : {}, this.options.showsTime ? { showTime: true, showHour: true, showMinute: true } : {}, this.options ); this._initPicker(this.element); this._overwriteGenerateHtml(); }, /** * Get picker name * @protected */ _picker: function () { return this.options.showsTime ? 'datetimepicker' : 'datepicker'; }, /** * Fix for Timepicker - Set ampm option for Timepicker if timeformat contains string 'tt' * @protected */ _enableAMPM: function () { if (this.options.timeFormat && this.options.timeFormat.indexOf('tt') >= 0) { this.options.ampm = true; } }, /** * Wrapper for overwrite jQuery UI datepicker function. */ _overwriteGenerateHtml: function () { /** * Overwrite jQuery UI datepicker function. * Reason: magento date could be set before calendar show * but local date will be styled as current in original _generateHTML * * @param {Object} inst - instance datepicker. * @return {String} html template */ $.datepicker.constructor.prototype._generateHTML = function (inst) { var today = this._getTimezoneDate(), isRTL = this._get(inst, 'isRTL'), showButtonPanel = this._get(inst, 'showButtonPanel'), hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'), navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'), numMonths = this._getNumberOfMonths(inst), showCurrentAtPos = this._get(inst, 'showCurrentAtPos'), stepMonths = this._get(inst, 'stepMonths'), isMultiMonth = parseInt(numMonths[0], 10) !== 1 || parseInt(numMonths[1], 10) !== 1, currentDate = this._daylightSavingAdjust(!inst.currentDay ? new Date(9999, 9, 9) : new Date(inst.currentYear, inst.currentMonth, inst.currentDay)), minDate = this._getMinMaxDate(inst, 'min'), maxDate = this._getMinMaxDate(inst, 'max'), drawMonth = inst.drawMonth - showCurrentAtPos, drawYear = inst.drawYear, maxDraw, prevText = this._get(inst, 'prevText'), prev, nextText = this._get(inst, 'nextText'), next, currentText = this._get(inst, 'currentText'), gotoDate, controls, buttonPanel, firstDay, showWeek = this._get(inst, 'showWeek'), dayNames = this._get(inst, 'dayNames'), dayNamesMin = this._get(inst, 'dayNamesMin'), monthNames = this._get(inst, 'monthNames'), monthNamesShort = this._get(inst, 'monthNamesShort'), beforeShowDay = this._get(inst, 'beforeShowDay'), showOtherMonths = this._get(inst, 'showOtherMonths'), selectOtherMonths = this._get(inst, 'selectOtherMonths'), defaultDate = this._getDefaultDate(inst), html = '', row = 0, col = 0, selectedDate, cornerClass = ' ui-corner-all', group = '', calender = '', dow = 0, thead, day, daysInMonth, leadDays, curRows, numRows, printDate, dRow = 0, tbody, daySettings, otherMonth, unselectable; if (drawMonth < 0) { drawMonth += 12; drawYear--; } if (maxDate) { maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), maxDate.getMonth() - numMonths[0] * numMonths[1] + 1, maxDate.getDate())); maxDraw = minDate && maxDraw < minDate ? minDate : maxDraw; while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { drawMonth--; if (drawMonth < 0) { drawMonth = 11; drawYear--; } } } inst.drawMonth = drawMonth; inst.drawYear = drawYear; prevText = !navigationAsDateFormat ? prevText : this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst)); prev = this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? '<a class="ui-datepicker-prev ui-corner-all" data-handler="prev" data-event="click"' + ' title="' + prevText + '">' + '<span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'e' : 'w') + '">' + '' + prevText + '</span></a>' : hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="' + '' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + '' + (isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'; nextText = !navigationAsDateFormat ? nextText : this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst)); next = this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? '<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click"' + 'title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + '' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' : hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="' + nextText + '">' + '<span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'; gotoDate = this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today; currentText = !navigationAsDateFormat ? currentText : this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)); controls = !inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ' + 'ui-corner-all" data-handler="hide" data-event="click">' + this._get(inst, 'closeText') + '</button>' : ''; buttonPanel = showButtonPanel ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') + (this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ' + 'ui-state-default ui-priority-secondary ui-corner-all" data-handler="today" data-event="click"' + '>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : ''; firstDay = parseInt(this._get(inst, 'firstDay'), 10); firstDay = isNaN(firstDay) ? 0 : firstDay; for (row = 0; row < numMonths[0]; row++) { this.maxRows = 4; for (col = 0; col < numMonths[1]; col++) { selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); calender = ''; if (isMultiMonth) { calender += '<div class="ui-datepicker-group'; if (numMonths[1] > 1) { switch (col) { case 0: calender += ' ui-datepicker-group-first'; cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break; case numMonths[1] - 1: calender += ' ui-datepicker-group-last'; cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break; default: calender += ' ui-datepicker-group-middle'; cornerClass = ''; } } calender += '">'; } calender += '<div class="ui-datepicker-header ' + 'ui-widget-header ui-helper-clearfix' + cornerClass + '">' + (/all|left/.test(cornerClass) && parseInt(row, 10) === 0 ? isRTL ? next : prev : '') + (/all|right/.test(cornerClass) && parseInt(row, 10) === 0 ? isRTL ? prev : next : '') + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers '</div><table class="ui-datepicker-calendar"><thead>' + '<tr>'; thead = showWeek ? '<th class="ui-datepicker-week-col">' + this._get(inst, 'weekHeader') + '</th>' : ''; for (dow = 0; dow < 7; dow++) { // days of the week day = (dow + firstDay) % 7; thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + '<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>'; } calender += thead + '</tr></thead><tbody>'; daysInMonth = this._getDaysInMonth(drawYear, drawMonth); if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) { inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); } leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate numRows = isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows; this.maxRows = numRows; printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows calender += '<tr>'; tbody = !showWeek ? '' : '<td class="ui-datepicker-week-col">' + this._get(inst, 'calculateWeek')(printDate) + '</td>'; for (dow = 0; dow < 7; dow++) { // create date picker days daySettings = beforeShowDay ? beforeShowDay.apply(inst.input ? inst.input[0] : null, [printDate]) : [true, '']; otherMonth = printDate.getMonth() !== drawMonth; unselectable = otherMonth && !selectOtherMonths || !daySettings[0] || minDate && printDate < minDate || maxDate && printDate > maxDate; tbody += '<td class="' + ((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends (otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months (printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent || // user pressed key defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ? // or defaultDate is current printedDate and defaultDate is selectedDate ' ' + this._dayOverClass : '') + // highlight selected day (unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled' : '') + (otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates (printDate.getTime() === currentDate.getTime() ? ' ' + this._currentClass : '') + (printDate.getDate() === today.getDate() && printDate.getMonth() === today.getMonth() && printDate.getYear() === today.getYear() ? ' ui-datepicker-today' : '')) + '"' + ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title (unselectable ? '' : ' data-handler="selectDay" data-event="click" data-month="' + '' + printDate.getMonth() + '" data-year="' + printDate.getFullYear() + '"') + '>' + (otherMonth && !showOtherMonths ? ' ' : // display for other months unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' + (printDate.getTime() === today.getTime() ? ' ' : '') + (printDate.getTime() === currentDate.getTime() ? ' ui-state-active' : '') + (otherMonth ? ' ui-priority-secondary' : '') + '" data-date="' + printDate.getDate() + '" href="#">' + printDate.getDate() + '</a>') + '</td>'; printDate.setDate(printDate.getDate() + 1); printDate = this._daylightSavingAdjust(printDate); } calender += tbody + '</tr>'; } drawMonth++; if (drawMonth > 11) { drawMonth = 0; drawYear++; } calender += '</tbody></table>' + (isMultiMonth ? '</div>' + (numMonths[0] > 0 && col === numMonths[1] - 1 ? '<div class="ui-datepicker-row-break"></div>' : '') : ''); group += calender; } html += group; } html += buttonPanel + ($.ui.ie6 && !inst.inline ? '<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : ''); inst._keyEvent = false; return html; }; }, /** * Set current date if the date is not set * @protected * @param {Object} element */ _setCurrentDate: function (element) { if (!element.val()) { element[this._picker()]('setTimezoneDate').val(''); } }, /** * Init Datetimepicker * @protected * @param {Object} element */ _initPicker: function (element) { var picker = element[this._picker()](this.options), pickerButtonText = picker.next('.ui-datepicker-trigger') .find('img') .attr('title'); picker.next('.ui-datepicker-trigger') .addClass('v-middle') .text('') // Remove jQuery UI datepicker generated image .append('<span>' + pickerButtonText + '</span>'); $(element).attr('autocomplete', this.options.autoComplete ? 'on' : 'off'); this._setCurrentDate(element); }, /** * destroy instance of datetimepicker */ _destroy: function () { this.element[this._picker()]('destroy'); this._super(); }, /** * Method is kept for backward compatibility and unit-tests acceptance * see \mage\calendar\calendar-test.js * @return {Object} date */ getTimezoneDate: function () { return datepickerPrototype._getTimezoneDate.call(this, this.options); } }); calendarBasePrototype = $.mage.calendar.prototype; /** * Extension for Calendar - date and time format convert functionality * @var {Object} */ $.widget('mage.calendar', $.extend({}, calendarBasePrototype, /** @lends {$.mage.calendar.prototype} */ { /** * key - backend format, value - jquery format * @type {Object} * @private */ dateTimeFormat: { date: { 'EEEE': 'DD', 'EEE': 'D', 'EE': 'D', 'E': 'D', 'D': 'o', 'MMMM': 'MM', 'MMM': 'M', 'MM': 'mm', 'M': 'mm', 'yyyy': 'yy', 'y': 'yy', 'Y': 'yy', 'yy': 'yy' // Always long year format on frontend }, time: { 'a': 'TT' } }, /** * Add Date and Time converting to _create method * @protected */ _create: function () { if (this.options.dateFormat) { this.options.dateFormat = this._convertFormat(this.options.dateFormat, 'date'); } if (this.options.timeFormat) { this.options.timeFormat = this._convertFormat(this.options.timeFormat, 'time'); } calendarBasePrototype._create.apply(this, arguments); }, /** * Converting date or time format * @protected * @param {String} format * @param {String} type * @return {String} */ _convertFormat: function (format, type) { var symbols = format.match(/([a-z]+)/ig), separators = format.match(/([^a-z]+)/ig), self = this, convertedFormat = ''; if (symbols) { $.each(symbols, function (key, val) { convertedFormat += (self.dateTimeFormat[type][val] || val) + (separators[key] || ''); }); } return convertedFormat; } }) ); /** * Widget dateRange * @extends $.mage.calendar */ $.widget('mage.dateRange', $.mage.calendar, { /** * creates two instances of datetimepicker for date range selection * @protected */ _initPicker: function () { var from, to; if (this.options.from && this.options.to) { from = this.element.find('#' + this.options.from.id); to = this.element.find('#' + this.options.to.id); this.options.onSelect = $.proxy(function (selectedDate) { to[this._picker()]('option', 'minDate', selectedDate); }, this); $.mage.calendar.prototype._initPicker.call(this, from); from.on('change', $.proxy(function () { to[this._picker()]('option', 'minDate', from[this._picker()]('getDate')); }, this)); this.options.onSelect = $.proxy(function (selectedDate) { from[this._picker()]('option', 'maxDate', selectedDate); }, this); $.mage.calendar.prototype._initPicker.call(this, to); to.on('change', $.proxy(function () { from[this._picker()]('option', 'maxDate', to[this._picker()]('getDate')); }, this)); } }, /** * destroy two instances of datetimepicker */ _destroy: function () { if (this.options.from) { this.element.find('#' + this.options.from.id)[this._picker()]('destroy'); } if (this.options.to) { this.element.find('#' + this.options.to.id)[this._picker()]('destroy'); } this._super(); } }); // Overrides the "today" button functionality to select today's date when clicked. $.datepicker._gotoTodayOriginal = $.datepicker._gotoToday; /** * overwrite jQuery UI _showDatepicker function for proper HTML generation conditions. * */ $.datepicker._showDatepickerOriginal = $.datepicker._showDatepicker; /** * Triggers original method showDataPicker for rendering calendar * @param {HTMLObject} input * @private */ $.datepicker._showDatepicker = function (input) { if (!input.disabled) { $.datepicker._showDatepickerOriginal.call(this, input); } }; /** * _gotoToday * @param {Object} el */ $.datepicker._gotoToday = function (el) { //Set date/time according to timezone offset $(el).datepicker('setTimezoneDate') // To ensure that user can re-select date field without clicking outside it first. .trigger('blur').trigger('change'); }; return { dateRange: $.mage.dateRange, calendar: $.mage.calendar }; });