191 lines
8.0 KiB
JavaScript
191 lines
8.0 KiB
JavaScript
// time-selector.js - Управление выбором даты и времени для задач
|
||
|
||
// Функция для установки времени задачи (создание)
|
||
function setTaskTime(time) {
|
||
const timeButtons = document.querySelectorAll('.time-btn');
|
||
const hiddenTimeInput = document.getElementById('due-time');
|
||
|
||
// Убираем активный класс со всех кнопок
|
||
timeButtons.forEach(btn => {
|
||
btn.classList.remove('active');
|
||
});
|
||
|
||
// Добавляем активный класс к нажатой кнопке
|
||
const activeButton = Array.from(timeButtons).find(btn => {
|
||
if (time === '12:00') {
|
||
return btn.textContent.includes('До обеда');
|
||
} else {
|
||
return btn.textContent.includes('После обеда');
|
||
}
|
||
});
|
||
|
||
if (activeButton) {
|
||
activeButton.classList.add('active');
|
||
}
|
||
|
||
// Устанавливаем значение в скрытое поле
|
||
hiddenTimeInput.value = time;
|
||
|
||
// Обновляем отображение
|
||
updateDateTimeDisplay();
|
||
}
|
||
|
||
// Функция для установки времени задачи (редактирование)
|
||
function setEditTaskTime(time) {
|
||
const timeButtons = document.querySelectorAll('.edit-time-btn');
|
||
const hiddenTimeInput = document.getElementById('edit-due-time');
|
||
|
||
// Убираем активный класс со всех кнопок
|
||
timeButtons.forEach(btn => {
|
||
btn.classList.remove('active');
|
||
});
|
||
|
||
// Добавляем активный класс к нажатой кнопке
|
||
const activeButton = Array.from(timeButtons).find(btn => {
|
||
if (time === '12:00') {
|
||
return btn.textContent.includes('До обеда');
|
||
} else {
|
||
return btn.textContent.includes('После обеда');
|
||
}
|
||
});
|
||
|
||
if (activeButton) {
|
||
activeButton.classList.add('active');
|
||
}
|
||
|
||
// Устанавливаем значение в скрытое поле
|
||
hiddenTimeInput.value = time;
|
||
|
||
// Обновляем отображение
|
||
updateEditDateTimeDisplay();
|
||
}
|
||
|
||
// Функция для обновления отображения даты и времени (создание)
|
||
function updateDateTimeDisplay() {
|
||
const dateInput = document.getElementById('due-date');
|
||
const timeInput = document.getElementById('due-time');
|
||
const timeButtons = document.querySelectorAll('.time-btn');
|
||
|
||
if (dateInput.value && timeInput.value) {
|
||
// Обновляем текст кнопок с полной датой
|
||
const selectedDate = new Date(dateInput.value);
|
||
const formattedDate = selectedDate.toLocaleDateString('ru-RU', {
|
||
weekday: 'short',
|
||
day: 'numeric',
|
||
month: 'short'
|
||
});
|
||
|
||
timeButtons.forEach(btn => {
|
||
const timeText = btn.textContent.includes('До обеда') ? 'До обеда' : 'После обеда';
|
||
btn.innerHTML = `<i class="fas fa-${btn.textContent.includes('До обеда') ? 'sun' : 'moon'}"></i> ${timeText} (${timeInput.value})`;
|
||
});
|
||
}
|
||
}
|
||
|
||
// Функция для обновления отображения даты и времени (редактирование)
|
||
function updateEditDateTimeDisplay() {
|
||
const dateInput = document.getElementById('edit-due-date');
|
||
const timeInput = document.getElementById('edit-due-time');
|
||
const timeButtons = document.querySelectorAll('.edit-time-btn');
|
||
|
||
if (dateInput.value && timeInput.value) {
|
||
timeButtons.forEach(btn => {
|
||
const timeText = btn.textContent.includes('До обеда') ? 'До обеда' : 'После обеда';
|
||
btn.innerHTML = `<i class="fas fa-${btn.textContent.includes('До обеда') ? 'sun' : 'moon'}"></i> ${timeText} (${timeInput.value})`;
|
||
});
|
||
}
|
||
}
|
||
|
||
// Функция для инициализации выбора времени
|
||
function initializeTimeSelectors() {
|
||
// Устанавливаем сегодняшнюю дату по умолчанию для создания задачи
|
||
const today = new Date();
|
||
const tomorrow = new Date();
|
||
tomorrow.setDate(today.getDate() + 1);
|
||
|
||
// Форматируем дату для input[type="date"]
|
||
const formattedDate = tomorrow.toISOString().split('T')[0];
|
||
const dueDateInput = document.getElementById('due-date');
|
||
|
||
if (dueDateInput) {
|
||
dueDateInput.value = formattedDate;
|
||
|
||
// Устанавливаем время по умолчанию (12:00)
|
||
document.getElementById('due-time').value = '19:00';
|
||
|
||
// Добавляем активный класс к первой кнопке
|
||
const timeButtons = document.querySelectorAll('.time-btn');
|
||
if (timeButtons.length > 0) {
|
||
timeButtons[0].classList.add('active');
|
||
}
|
||
|
||
// Добавляем обработчик изменения даты
|
||
dueDateInput.addEventListener('change', function() {
|
||
updateDateTimeDisplay();
|
||
});
|
||
|
||
// Инициализируем отображение
|
||
updateDateTimeDisplay();
|
||
}
|
||
|
||
// Инициализация для редактирования
|
||
const editDueDateInput = document.getElementById('edit-due-date');
|
||
if (editDueDateInput) {
|
||
editDueDateInput.addEventListener('change', function() {
|
||
updateEditDateTimeDisplay();
|
||
});
|
||
}
|
||
}
|
||
|
||
// Функция для форматирования полной даты из отдельных полей
|
||
function getFullDateTime(dateInputId, timeInputId) {
|
||
const dateValue = document.getElementById(dateInputId).value;
|
||
const timeValue = document.getElementById(timeInputId).value;
|
||
|
||
if (!dateValue || !timeValue) {
|
||
return null;
|
||
}
|
||
|
||
return `${dateValue}T${timeValue}:00`;
|
||
}
|
||
|
||
// Функция для установки даты и времени в форму редактирования
|
||
function setDateTimeForEdit(taskDueDate) {
|
||
if (!taskDueDate) return;
|
||
|
||
const dateTime = new Date(taskDueDate);
|
||
const dateStr = dateTime.toISOString().split('T')[0];
|
||
const hours = dateTime.getHours().toString().padStart(2, '0');
|
||
const minutes = dateTime.getMinutes().toString().padStart(2, '0');
|
||
const timeStr = `${hours}:${minutes}`;
|
||
|
||
// Устанавливаем значения полей
|
||
document.getElementById('edit-due-date').value = dateStr;
|
||
document.getElementById('edit-due-time').value = timeStr;
|
||
|
||
// Устанавливаем активную кнопку времени
|
||
const timeButtons = document.querySelectorAll('.edit-time-btn');
|
||
timeButtons.forEach(btn => btn.classList.remove('active'));
|
||
|
||
// Определяем, какая кнопка должна быть активна
|
||
const isBeforeLunch = parseInt(hours) < 12 || (parseInt(hours) === 12 && parseInt(minutes) === 0);
|
||
const activeButton = isBeforeLunch ?
|
||
document.querySelector('.edit-time-btn:first-child') :
|
||
document.querySelector('.edit-time-btn:last-child');
|
||
|
||
if (activeButton) {
|
||
activeButton.classList.add('active');
|
||
// Обновляем текст кнопки
|
||
const timeText = isBeforeLunch ? 'До обеда' : 'После обеда';
|
||
activeButton.innerHTML = `<i class="fas fa-${isBeforeLunch ? 'sun' : 'moon'}"></i> ${timeText} (${timeStr})`;
|
||
|
||
// Обновляем другую кнопку
|
||
const otherButton = isBeforeLunch ?
|
||
document.querySelector('.edit-time-btn:last-child') :
|
||
document.querySelector('.edit-time-btn:first-child');
|
||
|
||
const otherTimeText = isBeforeLunch ? 'После обеда' : 'До обеда';
|
||
const otherTimeValue = isBeforeLunch ? '19:00' : '12:00';
|
||
otherButton.innerHTML = `<i class="fas fa-${isBeforeLunch ? 'moon' : 'sun'}"></i> ${otherTimeText} (${otherTimeValue})`;
|
||
}
|
||
} |