Код JS из HTT-Блоков

Код JS из HTT-Блоков


❗️ Данный код может отличаться от варианта из видео. Возможны: исправления ошибок, удаление лишних фрагментов кода, упрощение кода

➖➖➖

👨‍💻 Автор кода для календаря:
@KonstantinSimplify

➖➖➖

HTTP-БЛОК 1

var mes_id = response.data.result.message_id;

setContactVariable("mes_id", mes_id);


setContactVariable("step_date", 0);

setContactVariable("date_day", "empty");

setContactVariable("page", "←.→");

setContactVariable("menu", "Меню");

setContactVariable("back", "Назад");


var date = new Date();

setContactVariable("current_date", 

date.getMonth() + 1 + "." + date.getFullYear());

➖➖➖

HTTP-БЛОК 2

function getInlineKeyboard(current_date, step_date) {

 var buttons = []; // Будущий массив кнопок

   

 var days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс']; // Дни недели

 var months = ['Янв', 'Фев', 'Март', 'Апр', 'Май', 'Июнь', 'Июль', 'Авг', 'Сент', 'Окт', 'Нояб', 'Дек']; // Месяцы

   

 // Разделяем полученную дату на месяц и год

 var month = parseInt(current_date.split(".")[0]);

 var year = parseInt(current_date.split(".")[1]);


 // Создаем объект Date и устанавливаем новый месяц с учетом step_date

 var date = new Date(year, month - 1); // Месяцы в объекте Date начинаются с 0

 date.setMonth(date.getMonth() + step_date);


 // Обновляем месяц и год после применения step_date

 month = date.getMonth() + 1;

 year = date.getFullYear();


 // Добавляем дни недели в первый ряд кнопок

 var row = [];

 for (var i = 0; i < 7; i++) {

   row.push({

     text: days[i],

     callback_data: 'empty'

   });

 }

 buttons.push(row);

   

 // Получаем количество дней в месяце

 var daysInMonth = new Date(year, month, 0).getDate();

   

 // Находим день недели первого дня месяца (0 - Воскресенье, 1 - Понедельник, ..., 6 - Суббота)

 var firstDayOfWeek = new Date(year, month - 1, 1).getDay();

 firstDayOfWeek = firstDayOfWeek === 0 ? 7 : firstDayOfWeek; // Преобразуем Воскресенье в 7

   

 // Добавляем пустые кнопки в начало месяца

 row = [];

 for (var i = 1; i < firstDayOfWeek; i++) {

   row.push({

     text: ' ',

     callback_data: 'empty'

   });

 }

   

 // Добавляем дни месяца

 for (var i = 1; i <= daysInMonth; i++) {

   var day = i < 10 ? '0' + i : i; // Добавляем ведущий ноль для дней меньше 10

   var callback_date = day + '.' + (month < 10 ? '0' + month : month) + '.' + year; // Форматируем дату для callback_data

   row.push({

     text: String(i),

     callback_data: callback_date

   });

     

  // Если достигли конца недели или месяца, добавляем ряд в массив кнопок

  if ((i + firstDayOfWeek - 1) % 7 === 0 || i === daysInMonth) {

   // Добавляем пустые кнопки в конец недели, если это последняя неделя месяца

   while (i === daysInMonth && row.length < 7) {

    row.push({

    text: ' ',

    callback_data: 'empty'

    });

   }

   buttons.push(row);

   row = [];

   }

 }

   

 // Добавляем ряд с кнопками навигации по месяцам

 buttons.push(

  [

   {

    text: page2,

    callback_data: page2

   },

   {

    text: months[date.getMonth()] + ' ' + date.getFullYear(),

    callback_data: 'empty'

   },

   {

    text: page1,

    callback_data: page1

   }

  ],

  [

   {

    text: back,

    callback_data: back

   },

   {

    text: menu,

    callback_data: menu

   } 

  ]

 );  

 return buttons;

}


var menu = getContactVariable("menu");

var back = getContactVariable("back");

var page = getContactVariable("page");

page1 = page.split(".")[1];

page2 = page.split(".")[0];


// Обработка ответа пользователя

var date_day = getContactVariable("date_day");

var step_date = +getContactVariable("step_date");

if (date_day == page1) {

 step_date = step_date + 1;

} else 

 if (date_day == page2) {

 step_date = step_date - 1;

} else

 if (date_day == menu) {

  goToBlock(id); // указать id блока с меню

  disableContinue();

} else

 if (date_day == back) {

  goToBlock(id); // id предыдущего блока

  disableContinue();

} else

 if (date_day != "empty") {

  goToBlock(id); // id блока с выбранной пользователем датой

  disableContinue();

};

setContactVariable("step_date", step_date);


var current_date = getContactVariable("current_date");

var step_date = parseInt(step_date, 10);


var buttons = getInlineKeyboard(current_date, step_date);

setContactVariable("buttons", JSON.stringify(buttons).slice(1, -1));

Report Page