ultimatepos/Modules/Maintenance/Resources/views/layouts/calendar_persian_patch.blade.php

121 lines
4.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script type="text/javascript">
(function (window, $) {
if (window.MmCalendarPersian) {
return;
}
var jalaliMonthNames = ['فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'];
var persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
var arabicDigits = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
function toEnglishDigits(value) {
value = String(value || '');
for (var i = 0; i < 10; i++) {
value = value.replace(new RegExp(persianDigits[i], 'g'), String(i));
value = value.replace(new RegExp(arabicDigits[i], 'g'), String(i));
}
return value;
}
function gregorianToJalaliParts(gy, gm, gd) {
var gdm = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
var gy2 = (gm > 2) ? (gy + 1) : gy;
var days = 355666 + (365 * gy) + Math.floor((gy2 + 3) / 4) - Math.floor((gy2 + 99) / 100) + Math.floor((gy2 + 399) / 400) + gd + gdm[gm - 1];
var jy = -1595 + (33 * Math.floor(days / 12053));
days %= 12053;
jy += 4 * Math.floor(days / 1461);
days %= 1461;
if (days > 365) {
jy += Math.floor((days - 1) / 365);
days = (days - 1) % 365;
}
var jm, jd;
if (days < 186) {
jm = 1 + Math.floor(days / 31);
jd = 1 + (days % 31);
} else {
jm = 7 + Math.floor((days - 186) / 30);
jd = 1 + ((days - 186) % 30);
}
return { jy: jy, jm: jm, jd: jd };
}
function jalaliPartsFromMoment(m) {
return gregorianToJalaliParts(
parseInt(m.format('YYYY'), 10),
parseInt(m.format('M'), 10),
parseInt(m.format('D'), 10)
);
}
function toPersianDigits(value) {
if (typeof persian_number === 'function') {
return persian_number(value);
}
return value;
}
function monthName(jm) {
var idx = parseInt(jm, 10);
return (idx >= 1 && idx <= 12) ? jalaliMonthNames[idx - 1] : 'ماه';
}
function titleForView($cal, view) {
var start = view.intervalStart ? view.intervalStart.clone() : view.start.clone();
var end = view.intervalEnd ? view.intervalEnd.clone().subtract(1, 'day') : view.end.clone().subtract(1, 'day');
var sj = jalaliPartsFromMoment(start);
var ej = jalaliPartsFromMoment(end);
if (view.name === 'month') {
var anchor = $cal.fullCalendar('getDate');
if (anchor && anchor.isValid && anchor.isValid()) {
sj = jalaliPartsFromMoment(anchor.clone());
}
return toPersianDigits(monthName(sj.jm) + ' ' + sj.jy);
}
if (view.name === 'agendaWeek') {
if (sj.jy === ej.jy && sj.jm === ej.jm) {
return toPersianDigits(sj.jd + ' - ' + ej.jd + ' ' + monthName(ej.jm) + ' ' + ej.jy);
}
return toPersianDigits(sj.jd + ' ' + monthName(sj.jm) + ' ' + sj.jy + ' - ' + ej.jd + ' ' + monthName(ej.jm) + ' ' + ej.jy);
}
return toPersianDigits(sj.jd + ' ' + monthName(sj.jm) + ' ' + sj.jy);
}
window.MmCalendarPersian = {
patch: function (selector) {
var $cal = $(selector);
if (!$cal.length) return;
var view = $cal.fullCalendar('getView');
if (!view) return;
var customTitle = titleForView($cal, view);
if (customTitle) {
$cal.find('.fc-toolbar .fc-center h2, .fc-center h2').text(customTitle);
}
$cal.find('.fc-day-top[data-date]').each(function () {
var dateValue = $(this).attr('data-date');
if (!dateValue) return;
var m = moment(dateValue, 'YYYY-MM-DD');
if (!m.isValid()) return;
var j = jalaliPartsFromMoment(m);
$(this).find('.fc-day-number').text(toPersianDigits(j.jd));
});
},
bind: function (selector) {
var $cal = $(selector);
if (!$cal.length) return;
var refresh = function () {
setTimeout(function () { window.MmCalendarPersian.patch(selector); }, 0);
};
$cal.on('viewRender eventAfterAllRender', refresh);
$(document).on('click', selector + ' .fc-prev-button, ' + selector + ' .fc-next-button, ' + selector + ' .fc-today-button, ' + selector + ' .fc-month-button, ' + selector + ' .fc-agendaWeek-button', refresh);
refresh();
}
};
})(window, jQuery);
</script>