Update index.html
Browse files- index.html +22 -8
index.html
CHANGED
|
@@ -3,8 +3,9 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
-
<title>Interactive Calendar</title>
|
| 7 |
<style>
|
|
|
|
| 8 |
* {
|
| 9 |
margin: 0;
|
| 10 |
padding: 0;
|
|
@@ -248,7 +249,24 @@
|
|
| 248 |
let selectedDate = null;
|
| 249 |
let draggedEvent = null;
|
| 250 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 251 |
function initCalendar() {
|
|
|
|
| 252 |
updateMonthDisplay();
|
| 253 |
renderCalendar();
|
| 254 |
initEventListeners();
|
|
@@ -265,7 +283,6 @@
|
|
| 265 |
const grid = document.querySelector('.calendar-grid');
|
| 266 |
grid.innerHTML = '';
|
| 267 |
|
| 268 |
-
// Add day headers
|
| 269 |
const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
| 270 |
days.forEach(day => {
|
| 271 |
const dayHeader = document.createElement('div');
|
|
@@ -277,7 +294,6 @@
|
|
| 277 |
const firstDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
|
| 278 |
const lastDay = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0);
|
| 279 |
|
| 280 |
-
// Add padding days from previous month
|
| 281 |
const paddingDays = firstDay.getDay();
|
| 282 |
const prevLastDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), 0);
|
| 283 |
for (let i = paddingDays - 1; i >= 0; i--) {
|
|
@@ -285,13 +301,11 @@
|
|
| 285 |
grid.appendChild(dayCell);
|
| 286 |
}
|
| 287 |
|
| 288 |
-
// Add current month days
|
| 289 |
for (let day = 1; day <= lastDay.getDate(); day++) {
|
| 290 |
const dayCell = createDayCell(day, false);
|
| 291 |
grid.appendChild(dayCell);
|
| 292 |
}
|
| 293 |
|
| 294 |
-
// Add padding days for next month
|
| 295 |
const remainingDays = 42 - (paddingDays + lastDay.getDate());
|
| 296 |
for (let i = 1; i <= remainingDays; i++) {
|
| 297 |
const dayCell = createDayCell(i, true);
|
|
@@ -306,7 +320,6 @@
|
|
| 306 |
cell.addEventListener('dragover', e => e.preventDefault());
|
| 307 |
cell.addEventListener('drop', handleDrop);
|
| 308 |
|
| 309 |
-
// Add events for this day
|
| 310 |
if (!isDifferentMonth) {
|
| 311 |
const date = new Date(currentDate.getFullYear(), currentDate.getMonth(), day);
|
| 312 |
const dayEvents = events.filter(event => {
|
|
@@ -352,10 +365,10 @@
|
|
| 352 |
const dayNumber = dayCell.querySelector('.day-number').textContent;
|
| 353 |
const newDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), dayNumber);
|
| 354 |
|
| 355 |
-
// Update event date
|
| 356 |
const eventIndex = events.findIndex(e => e.id === draggedEvent.id);
|
| 357 |
events[eventIndex].date = newDate;
|
| 358 |
|
|
|
|
| 359 |
draggedEvent = null;
|
| 360 |
renderCalendar();
|
| 361 |
}
|
|
@@ -388,6 +401,7 @@
|
|
| 388 |
};
|
| 389 |
|
| 390 |
events.push(newEvent);
|
|
|
|
| 391 |
renderCalendar();
|
| 392 |
closeModal();
|
| 393 |
document.getElementById('eventTitle').value = '';
|
|
@@ -411,7 +425,7 @@
|
|
| 411 |
});
|
| 412 |
}
|
| 413 |
|
| 414 |
-
//
|
| 415 |
initCalendar();
|
| 416 |
</script>
|
| 417 |
</body>
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Interactive Calendar with LocalStorage</title>
|
| 7 |
<style>
|
| 8 |
+
/* 이전 스타일 코드는 동일하게 유지 */
|
| 9 |
* {
|
| 10 |
margin: 0;
|
| 11 |
padding: 0;
|
|
|
|
| 249 |
let selectedDate = null;
|
| 250 |
let draggedEvent = null;
|
| 251 |
|
| 252 |
+
// LocalStorage에서 이벤트 데이터 로드
|
| 253 |
+
function loadEvents() {
|
| 254 |
+
const savedEvents = localStorage.getItem('calendarEvents');
|
| 255 |
+
if (savedEvents) {
|
| 256 |
+
events = JSON.parse(savedEvents).map(event => ({
|
| 257 |
+
...event,
|
| 258 |
+
date: new Date(event.date)
|
| 259 |
+
}));
|
| 260 |
+
}
|
| 261 |
+
}
|
| 262 |
+
|
| 263 |
+
// LocalStorage에 이벤트 데이터 저장
|
| 264 |
+
function saveEvents() {
|
| 265 |
+
localStorage.setItem('calendarEvents', JSON.stringify(events));
|
| 266 |
+
}
|
| 267 |
+
|
| 268 |
function initCalendar() {
|
| 269 |
+
loadEvents(); // 초기화 시 저장된 이벤트 로드
|
| 270 |
updateMonthDisplay();
|
| 271 |
renderCalendar();
|
| 272 |
initEventListeners();
|
|
|
|
| 283 |
const grid = document.querySelector('.calendar-grid');
|
| 284 |
grid.innerHTML = '';
|
| 285 |
|
|
|
|
| 286 |
const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
| 287 |
days.forEach(day => {
|
| 288 |
const dayHeader = document.createElement('div');
|
|
|
|
| 294 |
const firstDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
|
| 295 |
const lastDay = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0);
|
| 296 |
|
|
|
|
| 297 |
const paddingDays = firstDay.getDay();
|
| 298 |
const prevLastDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), 0);
|
| 299 |
for (let i = paddingDays - 1; i >= 0; i--) {
|
|
|
|
| 301 |
grid.appendChild(dayCell);
|
| 302 |
}
|
| 303 |
|
|
|
|
| 304 |
for (let day = 1; day <= lastDay.getDate(); day++) {
|
| 305 |
const dayCell = createDayCell(day, false);
|
| 306 |
grid.appendChild(dayCell);
|
| 307 |
}
|
| 308 |
|
|
|
|
| 309 |
const remainingDays = 42 - (paddingDays + lastDay.getDate());
|
| 310 |
for (let i = 1; i <= remainingDays; i++) {
|
| 311 |
const dayCell = createDayCell(i, true);
|
|
|
|
| 320 |
cell.addEventListener('dragover', e => e.preventDefault());
|
| 321 |
cell.addEventListener('drop', handleDrop);
|
| 322 |
|
|
|
|
| 323 |
if (!isDifferentMonth) {
|
| 324 |
const date = new Date(currentDate.getFullYear(), currentDate.getMonth(), day);
|
| 325 |
const dayEvents = events.filter(event => {
|
|
|
|
| 365 |
const dayNumber = dayCell.querySelector('.day-number').textContent;
|
| 366 |
const newDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), dayNumber);
|
| 367 |
|
|
|
|
| 368 |
const eventIndex = events.findIndex(e => e.id === draggedEvent.id);
|
| 369 |
events[eventIndex].date = newDate;
|
| 370 |
|
| 371 |
+
saveEvents(); // 드래그 앤 드롭 후 저장
|
| 372 |
draggedEvent = null;
|
| 373 |
renderCalendar();
|
| 374 |
}
|
|
|
|
| 401 |
};
|
| 402 |
|
| 403 |
events.push(newEvent);
|
| 404 |
+
saveEvents(); // 새 이벤트 추가 후 저장
|
| 405 |
renderCalendar();
|
| 406 |
closeModal();
|
| 407 |
document.getElementById('eventTitle').value = '';
|
|
|
|
| 425 |
});
|
| 426 |
}
|
| 427 |
|
| 428 |
+
// 초기화
|
| 429 |
initCalendar();
|
| 430 |
</script>
|
| 431 |
</body>
|