jQuery(document).ready(function($){
'use strict';
function formatDateTime(date){
var year=date.getFullYear();
var month=String(date.getMonth() + 1).padStart(2, '0');
var day=String(date.getDate()).padStart(2, '0');
var hours=String(date.getHours()).padStart(2, '0');
var minutes=String(date.getMinutes()).padStart(2, '0');
return year + '-' + month + '-' + day + 'T' + hours + ':' + minutes;
}
function parseDateString(dateStr){
if(!dateStr) return null;
var date=new Date(dateStr);
if(!isNaN(date.getTime())){
return date;
}
var match=dateStr.match(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})$/);
if(match){
return new Date(match[1], match[2] - 1, match[3], match[4], match[5]);
}
match=dateStr.match(/^(\d{2})\.(\d{2})\.(\d{4}) (\d{2}):(\d{2})$/);
if(match){
return new Date(match[3], match[2] - 1, match[1], match[4], match[5]);
}
return null;
}
function setInitialValues($calculator){
var $config=$calculator.find('.dic-config');
var rememberDates=$config.data('remember-dates')==='yes';
var defaultFrom=$config.data('default-from');
var defaultTo=$config.data('default-to');
var now=new Date();
var oneHourAgo=new Date(now.getTime() - 60 * 60 * 1000);
var dateFrom=null;
var dateTo=null;
if(rememberDates){
var savedFrom=localStorage.getItem('dic_last_date_from');
var savedTo=localStorage.getItem('dic_last_date_to');
if(savedFrom&&savedTo){
var savedDateFrom=parseDateString(savedFrom);
var savedDateTo=parseDateString(savedTo);
if(savedDateFrom&&savedDateTo){
var weekAgo=new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
if(savedDateFrom > weekAgo&&savedDateTo > weekAgo){
dateFrom=savedDateFrom;
dateTo=savedDateTo;
}}
}}
if(!dateFrom&&defaultFrom){
dateFrom=parseDateString(defaultFrom);
}
if(!dateTo&&defaultTo){
dateTo=parseDateString(defaultTo);
}
if(!dateFrom){
dateFrom=oneHourAgo;
}
if(!dateTo){
dateTo=now;
}
$calculator.find('.dic-date-from').val(formatDateTime(dateFrom));
$calculator.find('.dic-date-to').val(formatDateTime(dateTo));
}
$('.dic-calculator').each(function(){
var $calculator=$(this);
setInitialValues($calculator);
initCalculator($calculator);
});
function initCalculator($calculator){
var $form=$calculator.find('.dic-form');
var $result=$calculator.find('.dic-result');
var $detailResult=$calculator.find('.dic-result-content');
var $submitButton=$calculator.find('.dic-calculate-button');
var $resetButton=$calculator.find('.dic-reset-button');
$calculator.find('.dic-now-btn').on('click', function(){
var field=$(this).data('field');
var now=new Date();
var formattedNow=formatDateTime(now);
if(field==='from'){
$calculator.find('.dic-date-from').val(formattedNow);
}else{
$calculator.find('.dic-date-to').val(formattedNow);
}});
$calculator.find('.dic-quick-btn').on('click', function(){
var action=$(this).data('action');
var now=new Date();
var dateFrom, dateTo;
switch(action){
case 'today':
dateFrom=new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0);
dateTo=new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59);
break;
case 'yesterday':
var yesterday=new Date(now);
yesterday.setDate(now.getDate() - 1);
dateFrom=new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate(), 0, 0);
dateTo=new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate(), 23, 59);
break;
case 'tomorrow':
var tomorrow=new Date(now);
tomorrow.setDate(now.getDate() + 1);
dateFrom=new Date(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate(), 0, 0);
dateTo=new Date(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate(), 23, 59);
break;
case 'week_start':
var monday=new Date(now);
var day=monday.getDay();
var diff=monday.getDate() - day + (day==0 ? -6:1);
monday.setDate(diff);
dateFrom=new Date(monday.getFullYear(), monday.getMonth(), monday.getDate(), 0, 0);
dateTo=new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes());
break;
case 'week_end':
var sunday=new Date(now);
var day=sunday.getDay();
var diff=sunday.getDate() + (7 - day);
sunday.setDate(diff);
dateFrom=new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes());
dateTo=new Date(sunday.getFullYear(), sunday.getMonth(), sunday.getDate(), 23, 59);
break;
case 'month_start':
var firstDay=new Date(now.getFullYear(), now.getMonth(), 1);
dateFrom=new Date(firstDay.getFullYear(), firstDay.getMonth(), firstDay.getDate(), 0, 0);
dateTo=new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes());
break;
case 'month_end':
var lastDay=new Date(now.getFullYear(), now.getMonth() + 1, 0);
dateFrom=new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes());
dateTo=new Date(lastDay.getFullYear(), lastDay.getMonth(), lastDay.getDate(), 23, 59);
break;
default:
return;
}
$calculator.find('.dic-date-from').val(formatDateTime(dateFrom));
$calculator.find('.dic-date-to').val(formatDateTime(dateTo));
});
$resetButton.on('click', function(){
var now=new Date();
var oneHourAgo=new Date(now.getTime() - 60 * 60 * 1000);
$calculator.find('.dic-date-from').val(formatDateTime(oneHourAgo));
$calculator.find('.dic-date-to').val(formatDateTime(now));
$result.slideUp(300);
$calculator.find('.dic-loading').hide();
$submitButton.prop('disabled', false).text('Рассчитать');
localStorage.removeItem('dic_last_date_from');
localStorage.removeItem('dic_last_date_to');
localStorage.removeItem('dic_last_calculation');
document.cookie="dic_last_used=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
});
$submitButton.on('click', function(e){
e.preventDefault();
var $button=$(this);
var $loading=$calculator.find('.dic-loading');
var date_from=$form.find('input[name="dic_date_from"]').val();
var date_to=$form.find('input[name="dic_date_to"]').val();
if(!date_from||!date_to){
alert('Пожалуйста, заполните обе даты');
return;
}
if(new Date(date_to) < new Date(date_from)){
alert('Дата "До" не может быть раньше даты "От"');
return;
}
$button.prop('disabled', true).text('Расчет...');
$loading.show();
$result.hide();
$.ajax({
url: dic_ajax.ajax_url,
type: 'POST',
data: {
action: 'dic_calculate',
nonce: dic_ajax.nonce,
date_from: date_from,
date_to: date_to
},
dataType: 'json',
success: function(response){
if(response.success){
$calculator.find('.dic-interval').text(response.data.formatted);
$calculator.find('.dic-total-minutes').text(response.data.total_minutes);
$calculator.find('.dic-total-seconds').text(response.data.total_seconds);
$result.slideDown(300);
localStorage.setItem('dic_last_date_from', date_from);
localStorage.setItem('dic_last_date_to', date_to);
localStorage.setItem('dic_last_calculation', JSON.stringify({
date: new Date().toISOString(),
result: response.data.formatted
}));
}else{
alert('Произошла ошибка при расчете');
}},
error: function(xhr, status, error){
console.error('AJAX Error:', status, error);
alert('Ошибка соединения с сервером');
var date1=new Date(date_from);
var date2=new Date(date_to);
var diffMs=date2 - date1;
var diffSec=Math.floor(diffMs / 1000);
var diffMin=Math.floor(diffSec / 60);
var diffHour=Math.floor(diffMin / 60);
var diffDay=Math.floor(diffHour / 24);
var resultText='';
if(diffDay > 0) resultText +=diffDay + ' дней ';
if(diffHour % 24 > 0) resultText +=(diffHour % 24) + ' часов ';
if(diffMin % 60 > 0) resultText +=(diffMin % 60) + ' минут ';
if(diffSec % 60 > 0) resultText +=(diffSec % 60) + ' секунд';
$calculator.find('.dic-interval').text(resultText.trim());
$calculator.find('.dic-total-minutes').text(diffMin);
$calculator.find('.dic-total-seconds').text(diffSec);
$result.slideDown(300);
},
complete: function(){
$button.prop('disabled', false).text('Рассчитать');
$loading.hide();
}});
});
$calculator.find('.dic-date-input').on('keypress', function(e){
if(e.which===13){
e.preventDefault();
$submitButton.click();
}});
}});
(()=>{var t={507:(t,e,r)=>{"use strict";r.d(e,{A:()=>A});var n=function(t){return"string"!=typeof t||""===t?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(t)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)};var i=function(t){return"string"!=typeof t||""===t?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(t)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(t)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)};var o=function(t,e){return function(r,o,s,c=10){const l=t[e];if(!i(r))return;if(!n(o))return;if("function"!=typeof s)return void console.error("The hook callback must be a function.");if("number"!=typeof c)return void console.error("If specified, the hook priority must be a number.");const a={callback:s,priority:c,namespace:o};if(l[r]){const t=l[r].handlers;let e;for(e=t.length;e>0&&!(c>=t[e-1].priority);e--);e===t.length?t[e]=a:t.splice(e,0,a),l.__current.forEach((t=>{t.name===r&&t.currentIndex>=e&&t.currentIndex++}))}else l[r]={handlers:[a],runs:0};"hookAdded"!==r&&t.doAction("hookAdded",r,o,s,c)}};var s=function(t,e,r=!1){return function(o,s){const c=t[e];if(!i(o))return;if(!r&&!n(s))return;if(!c[o])return 0;let l=0;if(r)l=c[o].handlers.length,c[o]={runs:c[o].runs,handlers:[]};else{const t=c[o].handlers;for(let e=t.length-1;e>=0;e--)t[e].namespace===s&&(t.splice(e,1),l++,c.__current.forEach((t=>{t.name===o&&t.currentIndex>=e&&t.currentIndex--})))}return"hookRemoved"!==o&&t.doAction("hookRemoved",o,s),l}};var c=function(t,e){return function(r,n){const i=t[e];return void 0!==n?r in i&&i[r].handlers.some((t=>t.namespace===n)):r in i}};var l=function(t,e,r,n){return function(i,...o){const s=t[e];s[i]||(s[i]={handlers:[],runs:0}),s[i].runs++;const c=s[i].handlers;if(!c||!c.length)return r?o[0]:void 0;const l={name:i,currentIndex:0};return(n?async function(){try{s.__current.add(l);let t=r?o[0]:void 0;for(;l.currentIndex<c.length;){const e=c[l.currentIndex];t=await e.callback.apply(null,o),r&&(o[0]=t),l.currentIndex++}return r?t:void 0}finally{s.__current.delete(l)}}:function(){try{s.__current.add(l);let t=r?o[0]:void 0;for(;l.currentIndex<c.length;){t=c[l.currentIndex].callback.apply(null,o),r&&(o[0]=t),l.currentIndex++}return r?t:void 0}finally{s.__current.delete(l)}})()}};var a=function(t,e){return function(){const r=t[e],n=Array.from(r.__current);return n.at(-1)?.name??null}};var d=function(t,e){return function(r){const n=t[e];return void 0===r?n.__current.size>0:Array.from(n.__current).some((t=>t.name===r))}};var u=function(t,e){return function(r){const n=t[e];if(i(r))return n[r]&&n[r].runs?n[r].runs:0}};class h{actions;filters;addAction;addFilter;removeAction;removeFilter;hasAction;hasFilter;removeAllActions;removeAllFilters;doAction;doActionAsync;applyFilters;applyFiltersAsync;currentAction;currentFilter;doingAction;doingFilter;didAction;didFilter;constructor(){this.actions=Object.create(null),this.actions.__current=new Set,this.filters=Object.create(null),this.filters.__current=new Set,this.addAction=o(this,"actions"),this.addFilter=o(this,"filters"),this.removeAction=s(this,"actions"),this.removeFilter=s(this,"filters"),this.hasAction=c(this,"actions"),this.hasFilter=c(this,"filters"),this.removeAllActions=s(this,"actions",!0),this.removeAllFilters=s(this,"filters",!0),this.doAction=l(this,"actions",!1,!1),this.doActionAsync=l(this,"actions",!1,!0),this.applyFilters=l(this,"filters",!0,!1),this.applyFiltersAsync=l(this,"filters",!0,!0),this.currentAction=a(this,"actions"),this.currentFilter=a(this,"filters"),this.doingAction=d(this,"actions"),this.doingFilter=d(this,"filters"),this.didAction=u(this,"actions"),this.didFilter=u(this,"filters")}}var A=function(){return new h}},8770:()=>{}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";r.r(n),r.d(n,{actions:()=>x,addAction:()=>s,addFilter:()=>c,applyFilters:()=>m,applyFiltersAsync:()=>v,createHooks:()=>t.A,currentAction:()=>y,currentFilter:()=>F,defaultHooks:()=>o,didAction:()=>b,didFilter:()=>k,doAction:()=>f,doActionAsync:()=>p,doingAction:()=>_,doingFilter:()=>g,filters:()=>w,hasAction:()=>d,hasFilter:()=>u,removeAction:()=>l,removeAllActions:()=>h,removeAllFilters:()=>A,removeFilter:()=>a});var t=r(507),e=r(8770),i={};for(const t in e)["default","actions","addAction","addFilter","applyFilters","applyFiltersAsync","createHooks","currentAction","currentFilter","defaultHooks","didAction","didFilter","doAction","doActionAsync","doingAction","doingFilter","filters","hasAction","hasFilter","removeAction","removeAllActions","removeAllFilters","removeFilter"].indexOf(t)<0&&(i[t]=()=>e[t]);r.d(n,i);const o=(0,t.A)(),{addAction:s,addFilter:c,removeAction:l,removeFilter:a,hasAction:d,hasFilter:u,removeAllActions:h,removeAllFilters:A,doAction:f,doActionAsync:p,applyFilters:m,applyFiltersAsync:v,currentAction:y,currentFilter:F,doingAction:_,doingFilter:g,didAction:b,didFilter:k,actions:x,filters:w}=o})(),(window.wp=window.wp||{}).hooks=n})();
(()=>{"use strict";var t={d:(n,e)=>{for(var r in e)t.o(e,r)&&!t.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:e[r]})},o:(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},n={};t.r(n),t.d(n,{__:()=>F,_n:()=>L,_nx:()=>D,_x:()=>w,createI18n:()=>h,defaultI18n:()=>b,getLocaleData:()=>g,hasTranslation:()=>O,isRTL:()=>P,resetLocaleData:()=>x,setLocaleData:()=>v,sprintf:()=>l,subscribe:()=>m});var e,r,a,i,o=/%(((\d+)\$)|(\(([$_a-zA-Z][$_a-zA-Z0-9]*)\)))?[ +0#-]*\d*(\.(\d+|\*))?(ll|[lhqL])?([cduxXefgsp%])/g;function l(t,...n){return function(t,...n){var e=0;return Array.isArray(n[0])&&(n=n[0]),t.replace(o,(function(){var t,r,a,i,o;return t=arguments[3],r=arguments[5],"%"===(i=arguments[9])?"%":("*"===(a=arguments[7])&&(a=n[e],e++),void 0===r?(void 0===t&&(t=e+1),e++,o=n[t-1]):n[0]&&"object"==typeof n[0]&&n[0].hasOwnProperty(r)&&(o=n[0][r]),"f"===i?o=parseFloat(o)||0:"d"===i&&(o=parseInt(o)||0),void 0!==a&&("f"===i?o=o.toFixed(a):"s"===i&&(o=o.substr(0,a))),null!=o?o:"")}))}(t,...n)}e={"(":9,"!":8,"*":7,"/":7,"%":7,"+":6,"-":6,"<":5,"<=":5,">":5,">=":5,"==":4,"!=":4,"&&":3,"||":2,"?":1,"?:":1},r=["(","?"],a={")":["("],":":["?","?:"]},i=/<=|>=|==|!=|&&|\|\||\?:|\(|!|\*|\/|%|\+|-|<|>|\?|\)|:/;var s={"!":function(t){return!t},"*":function(t,n){return t*n},"/":function(t,n){return t/n},"%":function(t,n){return t%n},"+":function(t,n){return t+n},"-":function(t,n){return t-n},"<":function(t,n){return t<n},"<=":function(t,n){return t<=n},">":function(t,n){return t>n},">=":function(t,n){return t>=n},"==":function(t,n){return t===n},"!=":function(t,n){return t!==n},"&&":function(t,n){return t&&n},"||":function(t,n){return t||n},"?:":function(t,n,e){if(t)throw n;return e}};function u(t){var n=function(t){for(var n,o,l,s,u=[],d=[];n=t.match(i);){for(o=n[0],(l=t.substr(0,n.index).trim())&&u.push(l);s=d.pop();){if(a[o]){if(a[o][0]===s){o=a[o][1]||o;break}}else if(r.indexOf(s)>=0||e[s]<e[o]){d.push(s);break}u.push(s)}a[o]||d.push(o),t=t.substr(n.index+o.length)}return(t=t.trim())&&u.push(t),u.concat(d.reverse())}(t);return function(t){return function(t,n){var e,r,a,i,o,l,u=[];for(e=0;e<t.length;e++){if(o=t[e],i=s[o]){for(r=i.length,a=Array(r);r--;)a[r]=u.pop();try{l=i.apply(null,a)}catch(t){return t}}else l=n.hasOwnProperty(o)?n[o]:+o;u.push(l)}return u[0]}(n,t)}}var d={contextDelimiter:"",onMissingKey:null};function c(t,n){var e;for(e in this.data=t,this.pluralForms={},this.options={},d)this.options[e]=void 0!==n&&e in n?n[e]:d[e]}c.prototype.getPluralForm=function(t,n){var e,r,a,i=this.pluralForms[t];return i||("function"!=typeof(a=(e=this.data[t][""])["Plural-Forms"]||e["plural-forms"]||e.plural_forms)&&(r=function(t){var n,e,r;for(n=t.split(";"),e=0;e<n.length;e++)if(0===(r=n[e].trim()).indexOf("plural="))return r.substr(7)}(e["Plural-Forms"]||e["plural-forms"]||e.plural_forms),a=function(t){var n=u(t);return function(t){return+n({n:t})}}(r)),i=this.pluralForms[t]=a),i(n)},c.prototype.dcnpgettext=function(t,n,e,r,a){var i,o,l;return i=void 0===a?0:this.getPluralForm(t,a),o=e,n&&(o=n+this.options.contextDelimiter+e),(l=this.data[t][o])&&l[i]?l[i]:(this.options.onMissingKey&&this.options.onMissingKey(e,t),0===i?e:r)};const p={plural_forms:t=>1===t?0:1},f=/^i18n\.(n?gettext|has_translation)(_|$)/,h=(t,n,e)=>{const r=new c({}),a=new Set,i=()=>{a.forEach((t=>t()))},o=(t,n="default")=>{r.data[n]={...r.data[n],...t},r.data[n][""]={...p,...r.data[n]?.[""]},delete r.pluralForms[n]},l=(t,n)=>{o(t,n),i()},s=(t="default",n,e,a,i)=>(r.data[t]||o(void 0,t),r.dcnpgettext(t,n,e,a,i)),u=t=>t||"default",d=(t,n,r)=>{let a=s(r,n,t);return e?(a=e.applyFilters("i18n.gettext_with_context",a,t,n,r),e.applyFilters("i18n.gettext_with_context_"+u(r),a,t,n,r)):a};if(t&&l(t,n),e){const t=t=>{f.test(t)&&i()};e.addAction("hookAdded","core/i18n",t),e.addAction("hookRemoved","core/i18n",t)}return{getLocaleData:(t="default")=>r.data[t],setLocaleData:l,addLocaleData:(t,n="default")=>{r.data[n]={...r.data[n],...t,"":{...p,...r.data[n]?.[""],...t?.[""]}},delete r.pluralForms[n],i()},resetLocaleData:(t,n)=>{r.data={},r.pluralForms={},l(t,n)},subscribe:t=>(a.add(t),()=>a.delete(t)),__:(t,n)=>{let r=s(n,void 0,t);return e?(r=e.applyFilters("i18n.gettext",r,t,n),e.applyFilters("i18n.gettext_"+u(n),r,t,n)):r},_x:d,_n:(t,n,r,a)=>{let i=s(a,void 0,t,n,r);return e?(i=e.applyFilters("i18n.ngettext",i,t,n,r,a),e.applyFilters("i18n.ngettext_"+u(a),i,t,n,r,a)):i},_nx:(t,n,r,a,i)=>{let o=s(i,a,t,n,r);return e?(o=e.applyFilters("i18n.ngettext_with_context",o,t,n,r,a,i),e.applyFilters("i18n.ngettext_with_context_"+u(i),o,t,n,r,a,i)):o},isRTL:()=>"rtl"===d("ltr","text direction"),hasTranslation:(t,n,a)=>{const i=n?n+""+t:t;let o=!!r.data?.[a??"default"]?.[i];return e&&(o=e.applyFilters("i18n.has_translation",o,t,n,a),o=e.applyFilters("i18n.has_translation_"+u(a),o,t,n,a)),o}}},_=window.wp.hooks,y=h(void 0,void 0,_.defaultHooks);var b=y;const g=y.getLocaleData.bind(y),v=y.setLocaleData.bind(y),x=y.resetLocaleData.bind(y),m=y.subscribe.bind(y),F=y.__.bind(y),w=y._x.bind(y),L=y._n.bind(y),D=y._nx.bind(y),P=y.isRTL.bind(y),O=y.hasTranslation.bind(y);(window.wp=window.wp||{}).i18n=n})();