Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1주차] 김영서 미션 제출합니다. #10

Open
wants to merge 27 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
d450975
feat: Todo 기본 UI 구현
kkys00 Mar 13, 2025
066fbf8
chore: prettier 설정
kkys00 Mar 14, 2025
a562dee
feat: input에 대해 엔터, 버튼 클릭 처리 구현
kkys00 Mar 14, 2025
dbb736f
feat: Todo 상단에 오늘 날짜 반영 구현
kkys00 Mar 14, 2025
115cb9d
feat: 추가된 todo를 화면에 표시 구현
kkys00 Mar 14, 2025
d2cfe5d
refactor: todo 삭제를 쉽게 하기 위해 todoList를 객체로 변경
kkys00 Mar 14, 2025
418e7e1
feat: todo 삭제 기능 구현
kkys00 Mar 14, 2025
645efa0
feat: 완료된 todo를 위한 todoListFinished 별도 관리, 상태 토글, 삭제 구현
kkys00 Mar 14, 2025
89e14b2
feat: 체크 토글 시 아이콘 변경 기능 구현
kkys00 Mar 14, 2025
d326f3e
feat: 완료 task 개수 / 총 task 개수 표시 기능 구현
kkys00 Mar 14, 2025
47eb816
style: Pretendard 폰트 적용
kkys00 Mar 15, 2025
0205071
feat: 날짜 선택 및 화면 표시 구현
kkys00 Mar 15, 2025
82283b6
feat: 날짜별 todo 저장 및 표시 구현
kkys00 Mar 15, 2025
3f15dd0
chore: 주석 제거, console.log 제거
kkys00 Mar 15, 2025
64488b6
feat: LocalStorage 저장 기능 구현
kkys00 Mar 15, 2025
e9637c1
style: 날짜에 대한 hover 스타일 추가
kkys00 Mar 15, 2025
ced5d03
feat: Todo header에 홈 기능 추가
kkys00 Mar 15, 2025
f84a445
docs: README 작성
kkys00 Mar 15, 2025
7be6e17
chore: 사용하지 않는 코드 삭제 및 정리
kkys00 Mar 15, 2025
6c941b0
style: weekly 추가를 위한 view 조정
kkys00 Mar 15, 2025
f4ca3d6
feat: 주간 todo count를 화면에 표시하고 계산 구현
kkys00 Mar 15, 2025
9f091fe
fix: task 통계 NaN 오류 수정
kkys00 Mar 15, 2025
c1d16d9
feat: weekly 연월 element 클릭 시 날짜 선택 기능 추가
kkys00 Mar 15, 2025
30dee3b
feat: weekly data 클릭 시 daily view 이동 구현
kkys00 Mar 15, 2025
e074068
feat: task를 추가할 때만 객체 생성으로 로직 변경
kkys00 Mar 15, 2025
5e06d48
feat: KS 기준 week 표시 구현
kkys00 Mar 15, 2025
ab4c712
docs: README 작성 추가
kkys00 Mar 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"semi": false,
"singleQuote": true,
"trailingComma": "es5",
"bracketSpacing": true,
"arrowParens": "always",
"useTabs": false,
"tabWidth": 2,
"printWidth": 80,
"endOfLine": "lf"
}
60 changes: 35 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,49 +2,59 @@

# 서론

안녕하세요 🙌🏻 21기 프론트엔드 운영진 **윤영준**입니다.
안녕하세요. 저는 21기 프론트엔드 **김영서**입니다😊
바닐라 자바스크립트를 사용하여 To do list를 만들었습니다.

이번 미션은 개발 환경 구축과 스터디 진행 방식에 익숙해지실 수 있도록 간단한 **to-do list** 만들기를 진행합니다. 무작정 첫 스터디부터 React를 다루는 것보다는 왜 React가 필요한지, React가 없으면 무엇이 불편한지 느껴 보고 본격적인 스터디에 들어가는 것이 React를 이해하는 데 더 많은 도움이 될 것이라 생각합니다.
1. 와이어프레임 작성
<img src="./docs/wireframe.jpg" width="300">
2. [피그마](https://www.figma.com/design/oUJT679EyBJYQmCJgNdgvJ/CEOS-Frontend-21-%EA%B9%80%EC%98%81%EC%84%9C?node-id=0-1&t=NApCyJNiTO7XhMKT-1) 작성
![Figma](./docs/figma-design.png)
3. 개발

비교적 가벼운 미션인 만큼 코드를 짜는 데 있어 여러분의 **창의성**을 충분히 발휘해 보시기 바랍니다. 작동하기만 하면 되는 것보다 같은 코드를 짜는 여러가지 방식과 패턴에 대해 고민해 보시고, 본인이 생각한 가장 창의적인 방법으로 코드를 작성해 주세요. 여러분이 미션을 수행하는 과정에서 겪는 고민과 생각의 깊이만큼 스터디에서 더 많은 것을 얻어가실 수 있을 것입니다.
**YS-Todo 기능**

막히는 부분이 있더라도 우선은 스스로 공부하고 찾아보는 방법을 권고드리지만, 운영진의 도움이 필요하시다면 얼마든지 프론트엔드 카톡방에 편하게 질문을 남겨 주세요!
1. 날짜를 클릭하여 날짜 선택 가능
2. task 완료 개수 / 전체 개수 표시
3. 추가 버튼, `Enter` 키를 이용한 task 추가 / X 버튼 삭제 / O 버튼 완료 체크
4. localStorage에 데이터 저장
5. Weekly로 날짜 이동
6. Weekly에서 한 주의 task 확인

# 미션

## 미션 목표

- VSCode, Prettier를 이용하여 개발 환경을 관리합니다.
- HTML/CSS의 기초를 이해합니다.
- JavaScript를 이용한 DOM 조작을 이해합니다.
- Vanilla Js를 이용한 어플리케이션 상태 관리 방법을 이해합니다.

## 기한

- 2025년 3월 15일 토요일 23:59까지
⭕️ VSCode, Prettier를 이용하여 개발 환경을 관리합니다.
⭕️ HTML/CSS의 기초를 이해합니다.
⭕️ JavaScript를 이용한 DOM 조작을 이해합니다.
⭕️ Vanilla Js를 이용한 어플리케이션 상태 관리 방법을 이해합니다.

## Key Questions

- DOM은 무엇인가요?
- 이벤트 흐름 제어(버블링 & 캡처링)이 무엇인가요?
- 클로저와 스코프가 무엇인가요?

## 필수 요건
## 필수 요구사항

⭕️ [결과 화면](https://vanilla-todo-19th-dh.vercel.app/)의 기능을 구현
✅ 추가 버튼, `Enter` 키를 이용한 task 추가
✅ task 삭제
✅ task 체크 토글
✅ task 개수
✅ 날짜 표시 및 변경

- [결과 화면](https://vanilla-todo-19th-dh.vercel.app/)의 기능을 구현합니다. (날짜, 요일별 todo 개수)
- 결과 링크의 화면 디자인 그대로 구현해도 좋고, 자신만의 디자인을 적용해도 좋습니다.
- CSS의 Flexbox를 이용하여 레이아웃을 구성합니다.
- JQuery, React, Bootstrap 등 외부 라이브러리를 사용하지 않습니다.
- 함수와 변수의 이름은 lowerCamelCase로 짓습니다.
- 코딩의 단위를 기능별로 나누어 Commit 메세지를 작성합니다.
- Semantic tag를 활용하여 HTML 구조를 완성합니다.
⭕️ CSS의 Flexbox를 이용하여 레이아웃을 구성합니다.
⭕️ 함수와 변수의 이름은 lowerCamelCase로 짓습니다.
⭕️ 코딩의 단위를 기능별로 나누어 Commit 메세지를 작성합니다.
⭕️ Semantic tag를 활용하여 HTML 구조를 완성합니다.
✅ `<header>`, `<main>`, `<section>` 사용

## 선택 요건
## 선택 요구사항

- 외부 폰트 Pretendard를 적용합니다.
- 브라우저의 `localStorage` 혹은 `sessionStorage`를 이용하여 다음 번 접속 시에 기존의 투두 데이터를 불러옵니다.
- 이 외에도 추가하고 싶은 기능이 있다면 마음껏 추가하셔도 됩니다.
- 미디어쿼리를 이용해서 반응형을 적용합니다.
⭕️ 외부 폰트 Pretendard를 적용합니다.
⭕️ 브라우저의 `localStorage` 혹은 `sessionStorage`를 이용하여 다음 번 접속 시에 기존의 투두 데이터를 불러옵니다.
✅ `sessionStorage`는 탭을 닫으면 사라지므로 다음 번 접속 시에도 기존 투두 데이터를 보기 위해 `localStorage` 사용

# 링크 및 참고자료

Expand Down
Binary file added docs/figma-design.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/wireframe.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added font/Pretendard-Regular.otf
Binary file not shown.
143 changes: 143 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="./style.css" />
<title>YS-Todo</title>
</head>
<body>
<header>
<a href="/">
<h1>Todo</h1>
</a>
</header>
<main>
<div class="weekly-check view">
<section class="todoDate">
<h1 class="date">Weekly Check</h1>
<span id="weekly-week" class="year"></span>
</section>
<section class="weeklyDataContainer">
<div class="weeklyDataItem">
<div class="dataHeader sun">Sun</div>
<div class="weekly-date"></div>
<div class="weekly-state"></div>
</div>
<div class="weeklyDataItem">
<div class="dataHeader">Mon</div>
<div class="weekly-date"></div>
<div class="weekly-state"></div>
</div>
<div class="weeklyDataItem">
<div class="dataHeader">Tue</div>
<div class="weekly-date"></div>
<div class="weekly-state"></div>
</div>
<div class="weeklyDataItem">
<div class="dataHeader">Wed</div>
<div class="weekly-date"></div>
<div class="weekly-state"></div>
</div>
<div class="weeklyDataItem">
<div class="dataHeader">Thu</div>
<div class="weekly-date"></div>
<div class="weekly-state"></div>
</div>
<div class="weeklyDataItem">
<div class="dataHeader">Fri</div>
<div class="weekly-date"></div>
<div class="weekly-state"></div>
</div>
<div class="weeklyDataItem">
<div class="dataHeader sat">Sat</div>
<div class="weekly-date"></div>
<div class="weekly-state"></div>
</div>
<div id="weekly-total"></div>
</section>
</div>
<div class="daily-view view">
<section class="todoDate">
<span id="daily-year" class="year"></span>
<h1 class="date">
<span id="daily-date"></span>
<span id="todo-count" class="count"></span>
</h1>
<input id="date-input" type="date" hidden />
</section>
<section class="todoInput">
<input id="todo-input" placeholder="무엇을 하고 싶은가요?" />
<button id="add-button" class="plusBtn">
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="lucide lucide-plus"
>
<path d="M5 12h14" />
<path d="M12 5v14" />
</svg>
</button>
</section>

<svg style="display: none">
<symbol
id="icon-circle-dashed"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10.1 2.182a10 10 0 0 1 3.8 0" />
<path d="M13.9 21.818a10 10 0 0 1-3.8 0" />
<path d="M17.609 3.721a10 10 0 0 1 2.69 2.7" />
<path d="M2.182 13.9a10 10 0 0 1 0-3.8" />
<path d="M20.279 17.609a10 10 0 0 1-2.7 2.69" />
<path d="M21.818 10.1a10 10 0 0 1 0 3.8" />
<path d="M3.721 6.391a10 10 0 0 1 2.7-2.69" />
<path d="M6.391 20.279a10 10 0 0 1-2.69-2.7" />
</symbol>
Comment on lines +91 to +108

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

심볼에 관련한 부분은 svg 파일로 분리를 해서 재사용성을 높여주는 것도 좋은 방법일 것 같습니당


<symbol
id="icon-circle-check-big"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M21.801 10A10 10 0 1 1 17 3.335" />
<path d="m9 11 3 3L22 4" />
</symbol>

<symbol
id="icon-x"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M18 6 6 18" />
<path d="m6 6 12 12" />
</symbol>
</svg>

<section id="todoList-container" class="todoList"></section>
</div>
</main>
<footer></footer>
<script src="./script.js"></script>
</body>
</html>
Loading