From 894acc7e8ebb60038eb1a8cd7d7a3891d0e2ca23 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Fri, 11 Dec 2020 00:13:51 +0900 Subject: [PATCH 01/41] Start mission --- MISSION.md | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 112 +--------------------------------------------------- 2 files changed, 116 insertions(+), 110 deletions(-) create mode 100644 MISSION.md diff --git a/MISSION.md b/MISSION.md new file mode 100644 index 000000000..e97a1d649 --- /dev/null +++ b/MISSION.md @@ -0,0 +1,114 @@ +# πŸš‡ μ§€ν•˜μ²  노선도 λ―Έμ…˜ + +## πŸš€ κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­ + +### μ§€ν•˜μ²  μ—­ κ΄€λ ¨ κΈ°λŠ₯ +- μ§€ν•˜μ²  역을 λ“±λ‘ν•˜κ³  μ‚­μ œν•  수 μžˆλ‹€. (단, 노선에 λ“±λ‘λœ 역은 μ‚­μ œν•  수 μ—†λ‹€) +- μ€‘λ³΅λœ μ§€ν•˜μ²  μ—­ 이름이 등둝될 수 μ—†λ‹€. +- μ§€ν•˜μ²  역은 2κΈ€μž 이상이어야 ν•œλ‹€. +- μ§€ν•˜μ²  μ—­μ˜ λͺ©λ‘μ„ μ‘°νšŒν•  수 μžˆλ‹€. + +### μ§€ν•˜μ²  λ…Έμ„  κ΄€λ ¨ κΈ°λŠ₯ +- μ§€ν•˜μ²  노선을 λ“±λ‘ν•˜κ³  μ‚­μ œν•  수 μžˆλ‹€. +- μ€‘λ³΅λœ μ§€ν•˜μ²  λ…Έμ„  이름이 등둝될 수 μ—†λ‹€. +- λ…Έμ„  등둝 μ‹œ 상행 쒅점역과 ν•˜ν–‰ 쒅점역을 μž…λ ₯λ°›λŠ”λ‹€. +- μ§€ν•˜μ²  λ…Έμ„ μ˜ λͺ©λ‘μ„ μ‘°νšŒν•  수 μžˆλ‹€. + +### μ§€ν•˜μ²  ꡬ간 μΆ”κ°€ κΈ°λŠ₯ +- μ§€ν•˜μ²  노선에 ꡬ간을 μΆ”κ°€ν•˜λŠ” κΈ°λŠ₯은 노선에 역을 μΆ”κ°€ν•˜λŠ” κΈ°λŠ₯이라고도 ν•  수 μžˆλ‹€. + - μ—­κ³Ό 역사이λ₯Ό ꡬ간이라 ν•˜κ³  이 κ΅¬κ°„λ“€μ˜ λͺ¨μŒμ΄ 노선이닀. +- ν•˜λ‚˜μ˜ 역은 μ—¬λŸ¬κ°œμ˜ 노선에 좔가될 수 μžˆλ‹€. +- μ—­κ³Ό μ—­ 사이에 μƒˆλ‘œμš΄ 역이 μΆ”κ°€ 될 수 μžˆλ‹€. +- λ…Έμ„ μ—μ„œ κ°ˆλž˜κΈΈμ€ 생길 수 μ—†λ‹€. + + + +### μ§€ν•˜μ²  ꡬ간 μ‚­μ œ κΈ°λŠ₯ +- 노선에 λ“±λ‘λœ 역을 μ œκ±°ν•  수 μžˆλ‹€. +- 쒅점을 μ œκ±°ν•  경우 λ‹€μŒ 역이 쒅점이 λœλ‹€. +- 노선에 ν¬ν•¨λœ 역이 λ‘κ°œ μ΄ν•˜μΌ λ•ŒλŠ” 역을 μ œκ±°ν•  수 μ—†λ‹€. + + + +### μ§€ν•˜μ²  노선에 λ“±λ‘λœ μ—­ 쑰회 κΈ°λŠ₯ +- λ…Έμ„ μ˜ 상행 쒅점뢀터 ν•˜ν–‰ μ’…μ κΉŒμ§€ μ—°κ²°λœ μˆœμ„œλŒ€λ‘œ μ—­ λͺ©λ‘μ„ μ‘°νšŒν•  수 μžˆλ‹€. + +
+ +## πŸ’» ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ²°κ³Ό + +### 역관리 + + +### 노선관리 + + +### ꡬ간관리 + + +### 노선도 좜λ ₯ + + + +## βœ… ν”„λ‘œκ·Έλž˜λ° μš”κ΅¬μ‚¬ν•­ + +### 메뉴 λ²„νŠΌ +- μ—­ 관리 button νƒœκ·ΈλŠ” `#station-manager-button` id값을 κ°€μ§„λ‹€. +- λ…Έμ„  관리 button νƒœκ·ΈλŠ” `#line-manager-button` id값을 κ°€μ§„λ‹€. +- ꡬ간 관리 button νƒœκ·ΈλŠ” `#section-manager-button` id값을 κ°€μ§„λ‹€. +- μ§€ν•˜μ²  노선도 좜λ ₯ 관리 button νƒœκ·ΈλŠ” `#map-print-manager-button` id값을 κ°€μ§„λ‹€. + +### μ§€ν•˜μ²  μ—­ κ΄€λ ¨ κΈ°λŠ₯ +- μ§€ν•˜μ²  역을 μž…λ ₯ν•˜λŠ” input νƒœκ·ΈλŠ” `#station-name-input` id값을 κ°€μ§„λ‹€. +- μ§€ν•˜μ²  역을 μΆ”κ°€ν•˜λŠ” button νƒœκ·ΈλŠ” `#station-add-button` id값을 κ°€μ§„λ‹€. +- μ§€ν•˜μ²  역을 μ‚­μ œν•˜λŠ” button νƒœκ·ΈλŠ” `.station-delete-button` class값을 κ°€μ§„λ‹€. + +### μ§€ν•˜μ²  λ…Έμ„  κ΄€λ ¨ κΈ°λŠ₯ +- μ§€ν•˜μ²  λ…Έμ„ μ˜ 이름을 μž…λ ₯ν•˜λŠ” input νƒœκ·ΈλŠ” `#line-name-input` id값을 κ°€μ§„λ‹€. +- μ§€ν•˜μ²  λ…Έμ„ μ˜ 상행 쒅점을 μ„ νƒν•˜λŠ” select νƒœκ·ΈλŠ” `#line-start-station-selector` id값을 κ°€μ§„λ‹€. +- μ§€ν•˜μ²  λ…Έμ„ μ˜ ν•˜ν–‰ 쒅점을 μ„ νƒν•˜λŠ” select νƒœκ·ΈλŠ” `#line-end-station-selector` id값을 κ°€μ§„λ‹€. +- μ§€ν•˜μ²  노선을 μΆ”κ°€ν•˜λŠ” button νƒœκ·ΈλŠ” `#line-add-button` id값을 κ°€μ§„λ‹€. +- μ§€ν•˜μ²  노선을 μ‚­μ œν•˜λŠ” button νƒœκ·ΈλŠ” `.line-delete-button` class값을 κ°€μ§„λ‹€. + +### μ§€ν•˜μ²  ꡬ간 μΆ”κ°€ κΈ°λŠ₯ +- μ§€ν•˜μ²  노선을 μ„ νƒν•˜λŠ” button νƒœκ·ΈλŠ” `.section-line-menu-button` class값을 κ°€μ§„λ‹€. +- μ§€ν•˜μ²  ꡬ간을 μ„€μ •ν•  μ—­ select νƒœκ·ΈλŠ” `#section-station-selector` id값을 κ°€μ§„λ‹€. +- μ§€ν•˜μ²  κ΅¬κ°„μ˜ μˆœμ„œλ₯Ό μž…λ ₯ν•˜λŠ” input νƒœκ·ΈλŠ” `#section-order-input` id값을 κ°€μ§„λ‹€. +- μ§€ν•˜μ²  ꡬ간을 λ“±λ‘ν•˜λŠ” button νƒœκ·ΈλŠ” `#section-add-button` id값을 κ°€μ§„λ‹€. +- μ§€ν•˜μ²  ꡬ간을 μ œκ±°ν•˜λŠ” button νƒœκ·ΈλŠ” `.section-delete-button` class값을 κ°€μ§„λ‹€. + +### μ§€ν•˜μ²  노선도 좜λ ₯ κΈ°λŠ₯ +- μ§€ν•˜μ²  노선도 좜λ ₯ λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ `
` νƒœκ·Έλ₯Ό λ§Œλ“€κ³  ν•΄λ‹Ή νƒœκ·Έ 내뢀에 노선도λ₯Ό 좜λ ₯ν•œλ‹€. + +### κΈ°μ‘΄ μš”κ΅¬μ‚¬ν•­ + +- μ‚¬μš©μžκ°€ 잘λͺ»λœ μž…λ ₯ 값을 μž‘μ„±ν•œ 경우 `alert`을 μ΄μš©ν•΄ λ©”μ‹œμ§€λ₯Ό 보여주고, μž¬μž…λ ₯ν•  수 있게 ν•œλ‹€. +- μ™ΈλΆ€ 라이브러리(jQuery, Lodash λ“±)λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ , 순수 Vanilla JS둜만 κ΅¬ν˜„ν•œλ‹€. +- **μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ μ»¨λ²€μ…˜μ„ μ§€ν‚€λ©΄μ„œ ν”„λ‘œκ·Έλž˜λ°** ν•œλ‹€ + - [https://google.github.io/styleguide/jsguide.html](https://google.github.io/styleguide/jsguide.html) + - [https://ui.toast.com/fe-guide/ko_CODING-CONVENSION/](https://ui.toast.com/fe-guide/ko_CODING-CONVENTION) +- **indent(인덴트, λ“€μ—¬μ“°κΈ°) depthλ₯Ό 3이 λ„˜μ§€ μ•Šλ„λ‘ κ΅¬ν˜„ν•œλ‹€. 2κΉŒμ§€λ§Œ ν—ˆμš©**ν•œλ‹€. + - 예λ₯Ό λ“€μ–΄ whileλ¬Έ μ•ˆμ— if문이 있으면 λ“€μ—¬μ“°κΈ°λŠ” 2이닀. + - 힌트: indent(인덴트, λ“€μ—¬μ“°κΈ°) depthλ₯Ό μ€„μ΄λŠ” 쒋은 방법은 ν•¨μˆ˜(λ˜λŠ” λ©”μ†Œλ“œ)λ₯Ό λΆ„λ¦¬ν•˜λ©΄ λœλ‹€. +- **ν•¨μˆ˜(λ˜λŠ” λ©”μ†Œλ“œ)의 길이가 15라인을 λ„˜μ–΄κ°€μ§€ μ•Šλ„λ‘ κ΅¬ν˜„ν•œλ‹€.** + - ν•¨μˆ˜(λ˜λŠ” λ©”μ†Œλ“œ)κ°€ ν•œ κ°€μ§€ 일만 잘 ν•˜λ„λ‘ κ΅¬ν˜„ν•œλ‹€. +- λ³€μˆ˜ μ„ μ–Έμ‹œ `var` λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. `const` 와 `let` 을 μ‚¬μš©ν•œλ‹€. + - [const](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/const) + - [let](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/let) +- `import` 문을 μ΄μš©ν•΄ 슀크립트λ₯Ό λͺ¨λ“ˆν™”ν•˜κ³  뢈러올 수 있게 λ§Œλ“ λ‹€. + - [https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/import](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/import) +- `template literal`을 μ΄μš©ν•΄ 데이터와 html string을 가독성 μ’‹κ²Œ ν‘œν˜„ν•œλ‹€. + - [https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Template_literals](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Template_literals) + +### μΆ”κ°€λœ μš”κ΅¬μ‚¬ν•­ +- [data](https://developer.mozilla.org/ko/docs/Learn/HTML/Howto/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%86%8D%EC%84%B1_%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0)속성을 ν™œμš©ν•˜μ—¬ html νƒœκ·Έμ— μ—­, λ…Έμ„ , κ΅¬κ°„μ˜ μœ μΌν•œ 데이터 값듀을 κ΄€λ¦¬ν•œλ‹€. +- [localStorage](https://developer.mozilla.org/ko/docs/Web/API/Window/localStorage)λ₯Ό μ΄μš©ν•˜μ—¬, μƒˆλ‘œκ³ μΉ¨ν•˜λ”λΌλ„ κ°€μž₯ μ΅œκ·Όμ— μž‘μ—…ν•œ 정보듀을 뢈러올 수 μžˆλ„λ‘ ν•œλ‹€. + +
+ +## πŸ“ λ―Έμ…˜ μ €μž₯μ†Œ 및 μ§„ν–‰ μš”κ΅¬μ‚¬ν•­ + +- λ―Έμ…˜μ€ [https://github.com/woowacourse/javascript-subway-map-precours](https://github.com/woowacourse/javascript-subway-map-precourse) μ €μž₯μ†Œλ₯Ό fork/cloneν•΄ μ‹œμž‘ν•œλ‹€. +- **κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° 전에 javascript-subway-precourse/docs/README.md νŒŒμΌμ— κ΅¬ν˜„ν•  κΈ°λŠ₯ λͺ©λ‘**을 정리해 μΆ”κ°€ν•œλ‹€. +- **git의 commit λ‹¨μœ„λŠ” μ•ž λ‹¨κ³„μ—μ„œ README.md νŒŒμΌμ— μ •λ¦¬ν•œ κΈ°λŠ₯ λͺ©λ‘ λ‹¨μœ„λ‘œ μΆ”κ°€**ν•œλ‹€. +- [ν”„λ¦¬μ½”μŠ€ 과제 제좜](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) λ¬Έμ„œ 절차λ₯Ό 따라 λ―Έμ…˜μ„ μ œμΆœν•œλ‹€. diff --git a/README.md b/README.md index e97a1d649..20371375d 100644 --- a/README.md +++ b/README.md @@ -1,114 +1,6 @@ # πŸš‡ μ§€ν•˜μ²  노선도 λ―Έμ…˜ -## πŸš€ κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­ +[μš°μ•„ν•œ ν…Œν¬ μ½”μŠ€ - 3κΈ°] ν”„λ¦¬μ½”μŠ€ 3μ£Όμ°¨ λ―Έμ…˜μ„ μ§„ν–‰ν•œ μ €μž₯μ†Œμž…λ‹ˆλ‹€. -### μ§€ν•˜μ²  μ—­ κ΄€λ ¨ κΈ°λŠ₯ -- μ§€ν•˜μ²  역을 λ“±λ‘ν•˜κ³  μ‚­μ œν•  수 μžˆλ‹€. (단, 노선에 λ“±λ‘λœ 역은 μ‚­μ œν•  수 μ—†λ‹€) -- μ€‘λ³΅λœ μ§€ν•˜μ²  μ—­ 이름이 등둝될 수 μ—†λ‹€. -- μ§€ν•˜μ²  역은 2κΈ€μž 이상이어야 ν•œλ‹€. -- μ§€ν•˜μ²  μ—­μ˜ λͺ©λ‘μ„ μ‘°νšŒν•  수 μžˆλ‹€. +[λ―Έμ…˜λ‚΄μš© ν™•μΈν•˜κΈ°](./MISSION.md) -### μ§€ν•˜μ²  λ…Έμ„  κ΄€λ ¨ κΈ°λŠ₯ -- μ§€ν•˜μ²  노선을 λ“±λ‘ν•˜κ³  μ‚­μ œν•  수 μžˆλ‹€. -- μ€‘λ³΅λœ μ§€ν•˜μ²  λ…Έμ„  이름이 등둝될 수 μ—†λ‹€. -- λ…Έμ„  등둝 μ‹œ 상행 쒅점역과 ν•˜ν–‰ 쒅점역을 μž…λ ₯λ°›λŠ”λ‹€. -- μ§€ν•˜μ²  λ…Έμ„ μ˜ λͺ©λ‘μ„ μ‘°νšŒν•  수 μžˆλ‹€. - -### μ§€ν•˜μ²  ꡬ간 μΆ”κ°€ κΈ°λŠ₯ -- μ§€ν•˜μ²  노선에 ꡬ간을 μΆ”κ°€ν•˜λŠ” κΈ°λŠ₯은 노선에 역을 μΆ”κ°€ν•˜λŠ” κΈ°λŠ₯이라고도 ν•  수 μžˆλ‹€. - - μ—­κ³Ό 역사이λ₯Ό ꡬ간이라 ν•˜κ³  이 κ΅¬κ°„λ“€μ˜ λͺ¨μŒμ΄ 노선이닀. -- ν•˜λ‚˜μ˜ 역은 μ—¬λŸ¬κ°œμ˜ 노선에 좔가될 수 μžˆλ‹€. -- μ—­κ³Ό μ—­ 사이에 μƒˆλ‘œμš΄ 역이 μΆ”κ°€ 될 수 μžˆλ‹€. -- λ…Έμ„ μ—μ„œ κ°ˆλž˜κΈΈμ€ 생길 수 μ—†λ‹€. - - - -### μ§€ν•˜μ²  ꡬ간 μ‚­μ œ κΈ°λŠ₯ -- 노선에 λ“±λ‘λœ 역을 μ œκ±°ν•  수 μžˆλ‹€. -- 쒅점을 μ œκ±°ν•  경우 λ‹€μŒ 역이 쒅점이 λœλ‹€. -- 노선에 ν¬ν•¨λœ 역이 λ‘κ°œ μ΄ν•˜μΌ λ•ŒλŠ” 역을 μ œκ±°ν•  수 μ—†λ‹€. - - - -### μ§€ν•˜μ²  노선에 λ“±λ‘λœ μ—­ 쑰회 κΈ°λŠ₯ -- λ…Έμ„ μ˜ 상행 쒅점뢀터 ν•˜ν–‰ μ’…μ κΉŒμ§€ μ—°κ²°λœ μˆœμ„œλŒ€λ‘œ μ—­ λͺ©λ‘μ„ μ‘°νšŒν•  수 μžˆλ‹€. - -
- -## πŸ’» ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ²°κ³Ό - -### 역관리 - - -### 노선관리 - - -### ꡬ간관리 - - -### 노선도 좜λ ₯ - - - -## βœ… ν”„λ‘œκ·Έλž˜λ° μš”κ΅¬μ‚¬ν•­ - -### 메뉴 λ²„νŠΌ -- μ—­ 관리 button νƒœκ·ΈλŠ” `#station-manager-button` id값을 κ°€μ§„λ‹€. -- λ…Έμ„  관리 button νƒœκ·ΈλŠ” `#line-manager-button` id값을 κ°€μ§„λ‹€. -- ꡬ간 관리 button νƒœκ·ΈλŠ” `#section-manager-button` id값을 κ°€μ§„λ‹€. -- μ§€ν•˜μ²  노선도 좜λ ₯ 관리 button νƒœκ·ΈλŠ” `#map-print-manager-button` id값을 κ°€μ§„λ‹€. - -### μ§€ν•˜μ²  μ—­ κ΄€λ ¨ κΈ°λŠ₯ -- μ§€ν•˜μ²  역을 μž…λ ₯ν•˜λŠ” input νƒœκ·ΈλŠ” `#station-name-input` id값을 κ°€μ§„λ‹€. -- μ§€ν•˜μ²  역을 μΆ”κ°€ν•˜λŠ” button νƒœκ·ΈλŠ” `#station-add-button` id값을 κ°€μ§„λ‹€. -- μ§€ν•˜μ²  역을 μ‚­μ œν•˜λŠ” button νƒœκ·ΈλŠ” `.station-delete-button` class값을 κ°€μ§„λ‹€. - -### μ§€ν•˜μ²  λ…Έμ„  κ΄€λ ¨ κΈ°λŠ₯ -- μ§€ν•˜μ²  λ…Έμ„ μ˜ 이름을 μž…λ ₯ν•˜λŠ” input νƒœκ·ΈλŠ” `#line-name-input` id값을 κ°€μ§„λ‹€. -- μ§€ν•˜μ²  λ…Έμ„ μ˜ 상행 쒅점을 μ„ νƒν•˜λŠ” select νƒœκ·ΈλŠ” `#line-start-station-selector` id값을 κ°€μ§„λ‹€. -- μ§€ν•˜μ²  λ…Έμ„ μ˜ ν•˜ν–‰ 쒅점을 μ„ νƒν•˜λŠ” select νƒœκ·ΈλŠ” `#line-end-station-selector` id값을 κ°€μ§„λ‹€. -- μ§€ν•˜μ²  노선을 μΆ”κ°€ν•˜λŠ” button νƒœκ·ΈλŠ” `#line-add-button` id값을 κ°€μ§„λ‹€. -- μ§€ν•˜μ²  노선을 μ‚­μ œν•˜λŠ” button νƒœκ·ΈλŠ” `.line-delete-button` class값을 κ°€μ§„λ‹€. - -### μ§€ν•˜μ²  ꡬ간 μΆ”κ°€ κΈ°λŠ₯ -- μ§€ν•˜μ²  노선을 μ„ νƒν•˜λŠ” button νƒœκ·ΈλŠ” `.section-line-menu-button` class값을 κ°€μ§„λ‹€. -- μ§€ν•˜μ²  ꡬ간을 μ„€μ •ν•  μ—­ select νƒœκ·ΈλŠ” `#section-station-selector` id값을 κ°€μ§„λ‹€. -- μ§€ν•˜μ²  κ΅¬κ°„μ˜ μˆœμ„œλ₯Ό μž…λ ₯ν•˜λŠ” input νƒœκ·ΈλŠ” `#section-order-input` id값을 κ°€μ§„λ‹€. -- μ§€ν•˜μ²  ꡬ간을 λ“±λ‘ν•˜λŠ” button νƒœκ·ΈλŠ” `#section-add-button` id값을 κ°€μ§„λ‹€. -- μ§€ν•˜μ²  ꡬ간을 μ œκ±°ν•˜λŠ” button νƒœκ·ΈλŠ” `.section-delete-button` class값을 κ°€μ§„λ‹€. - -### μ§€ν•˜μ²  노선도 좜λ ₯ κΈ°λŠ₯ -- μ§€ν•˜μ²  노선도 좜λ ₯ λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ `
` νƒœκ·Έλ₯Ό λ§Œλ“€κ³  ν•΄λ‹Ή νƒœκ·Έ 내뢀에 노선도λ₯Ό 좜λ ₯ν•œλ‹€. - -### κΈ°μ‘΄ μš”κ΅¬μ‚¬ν•­ - -- μ‚¬μš©μžκ°€ 잘λͺ»λœ μž…λ ₯ 값을 μž‘μ„±ν•œ 경우 `alert`을 μ΄μš©ν•΄ λ©”μ‹œμ§€λ₯Ό 보여주고, μž¬μž…λ ₯ν•  수 있게 ν•œλ‹€. -- μ™ΈλΆ€ 라이브러리(jQuery, Lodash λ“±)λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ , 순수 Vanilla JS둜만 κ΅¬ν˜„ν•œλ‹€. -- **μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ μ»¨λ²€μ…˜μ„ μ§€ν‚€λ©΄μ„œ ν”„λ‘œκ·Έλž˜λ°** ν•œλ‹€ - - [https://google.github.io/styleguide/jsguide.html](https://google.github.io/styleguide/jsguide.html) - - [https://ui.toast.com/fe-guide/ko_CODING-CONVENSION/](https://ui.toast.com/fe-guide/ko_CODING-CONVENTION) -- **indent(인덴트, λ“€μ—¬μ“°κΈ°) depthλ₯Ό 3이 λ„˜μ§€ μ•Šλ„λ‘ κ΅¬ν˜„ν•œλ‹€. 2κΉŒμ§€λ§Œ ν—ˆμš©**ν•œλ‹€. - - 예λ₯Ό λ“€μ–΄ whileλ¬Έ μ•ˆμ— if문이 있으면 λ“€μ—¬μ“°κΈ°λŠ” 2이닀. - - 힌트: indent(인덴트, λ“€μ—¬μ“°κΈ°) depthλ₯Ό μ€„μ΄λŠ” 쒋은 방법은 ν•¨μˆ˜(λ˜λŠ” λ©”μ†Œλ“œ)λ₯Ό λΆ„λ¦¬ν•˜λ©΄ λœλ‹€. -- **ν•¨μˆ˜(λ˜λŠ” λ©”μ†Œλ“œ)의 길이가 15라인을 λ„˜μ–΄κ°€μ§€ μ•Šλ„λ‘ κ΅¬ν˜„ν•œλ‹€.** - - ν•¨μˆ˜(λ˜λŠ” λ©”μ†Œλ“œ)κ°€ ν•œ κ°€μ§€ 일만 잘 ν•˜λ„λ‘ κ΅¬ν˜„ν•œλ‹€. -- λ³€μˆ˜ μ„ μ–Έμ‹œ `var` λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. `const` 와 `let` 을 μ‚¬μš©ν•œλ‹€. - - [const](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/const) - - [let](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/let) -- `import` 문을 μ΄μš©ν•΄ 슀크립트λ₯Ό λͺ¨λ“ˆν™”ν•˜κ³  뢈러올 수 있게 λ§Œλ“ λ‹€. - - [https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/import](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/import) -- `template literal`을 μ΄μš©ν•΄ 데이터와 html string을 가독성 μ’‹κ²Œ ν‘œν˜„ν•œλ‹€. - - [https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Template_literals](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Template_literals) - -### μΆ”κ°€λœ μš”κ΅¬μ‚¬ν•­ -- [data](https://developer.mozilla.org/ko/docs/Learn/HTML/Howto/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%86%8D%EC%84%B1_%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0)속성을 ν™œμš©ν•˜μ—¬ html νƒœκ·Έμ— μ—­, λ…Έμ„ , κ΅¬κ°„μ˜ μœ μΌν•œ 데이터 값듀을 κ΄€λ¦¬ν•œλ‹€. -- [localStorage](https://developer.mozilla.org/ko/docs/Web/API/Window/localStorage)λ₯Ό μ΄μš©ν•˜μ—¬, μƒˆλ‘œκ³ μΉ¨ν•˜λ”λΌλ„ κ°€μž₯ μ΅œκ·Όμ— μž‘μ—…ν•œ 정보듀을 뢈러올 수 μžˆλ„λ‘ ν•œλ‹€. - -
- -## πŸ“ λ―Έμ…˜ μ €μž₯μ†Œ 및 μ§„ν–‰ μš”κ΅¬μ‚¬ν•­ - -- λ―Έμ…˜μ€ [https://github.com/woowacourse/javascript-subway-map-precours](https://github.com/woowacourse/javascript-subway-map-precourse) μ €μž₯μ†Œλ₯Ό fork/cloneν•΄ μ‹œμž‘ν•œλ‹€. -- **κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° 전에 javascript-subway-precourse/docs/README.md νŒŒμΌμ— κ΅¬ν˜„ν•  κΈ°λŠ₯ λͺ©λ‘**을 정리해 μΆ”κ°€ν•œλ‹€. -- **git의 commit λ‹¨μœ„λŠ” μ•ž λ‹¨κ³„μ—μ„œ README.md νŒŒμΌμ— μ •λ¦¬ν•œ κΈ°λŠ₯ λͺ©λ‘ λ‹¨μœ„λ‘œ μΆ”κ°€**ν•œλ‹€. -- [ν”„λ¦¬μ½”μŠ€ 과제 제좜](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) λ¬Έμ„œ 절차λ₯Ό 따라 λ―Έμ…˜μ„ μ œμΆœν•œλ‹€. From c55231c7a0c0a1ac3a56bbb3956bb684aadb7151 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 01:20:56 +0900 Subject: [PATCH 02/41] Docs: add feature list to README.md --- README.md | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 20371375d..c367a2e61 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,39 @@ # πŸš‡ μ§€ν•˜μ²  노선도 λ―Έμ…˜ -[μš°μ•„ν•œ ν…Œν¬ μ½”μŠ€ - 3κΈ°] ν”„λ¦¬μ½”μŠ€ 3μ£Όμ°¨ λ―Έμ…˜μ„ μ§„ν–‰ν•œ μ €μž₯μ†Œμž…λ‹ˆλ‹€. +[μš°μ•„ν•œ ν…Œν¬ μ½”μŠ€ - 3κΈ°] ν”„λ¦¬μ½”μŠ€ 3μ£Όμ°¨ λ―Έμ…˜μ„ μ§„ν–‰ν•œ μ €μž₯μ†Œμž…λ‹ˆλ‹€. [λ―Έμ…˜λ‚΄μš© ν™•μΈν•˜κΈ°](./MISSION.md) +## πŸš€ κ΅¬ν˜„ κΈ°λŠ₯ + +1. μ—­ 관리 + +- μ €μž₯된 λͺ¨λ“  μ§€ν•˜μ²  μ—­ 이름을 μ‘°νšŒν•œλ‹€. +- μž…λ ₯받은 μ—­ 이름이 2κΈ€μž 이상인지 κ²€μ‚¬ν•œλ‹€. +- μž…λ ₯받은 μ—­ 이름이 기쑴에 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”μ§€ κ²€μ‚¬ν•œλ‹€. +- μž…λ ₯받은 μ—­ μ΄λ¦„μœΌλ‘œ μƒˆλ‘œμš΄ μ§€ν•˜μ²  역을 λ“±λ‘ν•œλ‹€. +- μ„ νƒλœ μ§€ν•˜μ²  역이 노선에 λ“±λ‘λ˜μ–΄μžˆλŠ”μ§€ κ²€μ‚¬ν•œλ‹€. +- μ§€ν•˜μ²  역을 μ‚­μ œν•œλ‹€. + +2. λ…Έμ„  관리 + +- μ €μž₯된 λͺ¨λ“  μ§€ν•˜μ²  노선을 μ‘°νšŒν•œλ‹€. +- μž…λ ₯받은 λ…Έμ„  이름이 1κΈ€μž 이상인지 κ²€μ‚¬ν•œλ‹€. +- μž…λ ₯받은 λ…Έμ„  이름이 기쑴에 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”μ§€ κ²€μ‚¬ν•œλ‹€. +- μž…λ ₯받은 상행 쒅점역과 ν•˜ν–‰ 쒅점역이 λ™μΌν•˜μ§€ μ•Šμ€μ§€ κ²€μ‚¬ν•œλ‹€. +- μƒˆλ‘œμš΄ μ§€ν•˜μ²  노선을 λ“±λ‘ν•œλ‹€. +- μ‚¬μš©μž 확인 ν›„ μ§€ν•˜μ²  노선을 μ‚­μ œν•œλ‹€. + +3. ꡬ간 관리 + +- μ„ νƒλœ 노선에 λ“±λ‘λœ μ§€ν•˜μ²  역을 μ‘°νšŒν•œλ‹€. +- μž…λ ₯받은 ꡬ간 μˆœμ„œκ°€ μˆ«μžμΈμ§€ κ²€μ‚¬ν•œλ‹€. +- μž…λ ₯받은 ꡬ간 μˆœμ„œκ°€ μžμ—°μˆ˜μΈμ§€ κ²€μ‚¬ν•œλ‹€. +- μž…λ ₯받은 ꡬ간 μˆœμ„œ μˆ«μžκ°€ 기쑴에 λ“±λ‘λœ μ§€ν•˜μ²  수λ₯Ό μ΄ˆκ³Όν•˜μ§€ μ•ŠλŠ”μ§€ κ²€μ‚¬ν•œλ‹€. +- 노선에 μƒˆλ‘œμš΄ ꡬ간을 λ“±λ‘ν•œλ‹€. +- 노선에 λ“±λ‘λœ 역이 2개 μ΄ν•˜μΈμ§€ κ²€μ‚¬ν•œλ‹€. +- μ„ νƒλœ μ§€ν•˜μ²  역을 λ…Έμ„ μ—μ„œ μ‚­μ œν•œλ‹€. + +4. μ§€ν•˜μ²  노선도 좜λ ₯ + +- μ €μž₯λ˜μ–΄μžˆλŠ” μ§€ν•˜μ²  노선도λ₯Ό ν˜Έμ„ λ³„λ‘œ 화면에 좜λ ₯ν•œλ‹€ From 52a290860406d2be3de542f3d75f4bab6d26a618 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 01:24:14 +0900 Subject: [PATCH 03/41] Docs: update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c367a2e61..afaf5e4a6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ## πŸš€ κ΅¬ν˜„ κΈ°λŠ₯ -1. μ—­ 관리 +### μ—­ 관리 - μ €μž₯된 λͺ¨λ“  μ§€ν•˜μ²  μ—­ 이름을 μ‘°νšŒν•œλ‹€. - μž…λ ₯받은 μ—­ 이름이 2κΈ€μž 이상인지 κ²€μ‚¬ν•œλ‹€. @@ -15,7 +15,7 @@ - μ„ νƒλœ μ§€ν•˜μ²  역이 노선에 λ“±λ‘λ˜μ–΄μžˆλŠ”μ§€ κ²€μ‚¬ν•œλ‹€. - μ§€ν•˜μ²  역을 μ‚­μ œν•œλ‹€. -2. λ…Έμ„  관리 +### λ…Έμ„  관리 - μ €μž₯된 λͺ¨λ“  μ§€ν•˜μ²  노선을 μ‘°νšŒν•œλ‹€. - μž…λ ₯받은 λ…Έμ„  이름이 1κΈ€μž 이상인지 κ²€μ‚¬ν•œλ‹€. @@ -24,7 +24,7 @@ - μƒˆλ‘œμš΄ μ§€ν•˜μ²  노선을 λ“±λ‘ν•œλ‹€. - μ‚¬μš©μž 확인 ν›„ μ§€ν•˜μ²  노선을 μ‚­μ œν•œλ‹€. -3. ꡬ간 관리 +### ꡬ간 관리 - μ„ νƒλœ 노선에 λ“±λ‘λœ μ§€ν•˜μ²  역을 μ‘°νšŒν•œλ‹€. - μž…λ ₯받은 ꡬ간 μˆœμ„œκ°€ μˆ«μžμΈμ§€ κ²€μ‚¬ν•œλ‹€. @@ -34,6 +34,6 @@ - 노선에 λ“±λ‘λœ 역이 2개 μ΄ν•˜μΈμ§€ κ²€μ‚¬ν•œλ‹€. - μ„ νƒλœ μ§€ν•˜μ²  역을 λ…Έμ„ μ—μ„œ μ‚­μ œν•œλ‹€. -4. μ§€ν•˜μ²  노선도 좜λ ₯ +### μ§€ν•˜μ²  노선도 좜λ ₯ - μ €μž₯λ˜μ–΄μžˆλŠ” μ§€ν•˜μ²  노선도λ₯Ό ν˜Έμ„ λ³„λ‘œ 화면에 좜λ ₯ν•œλ‹€ From b739a24bfe9a6d51620247e49f98d9ebb27f1b34 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 09:10:48 +0900 Subject: [PATCH 04/41] Add: App component --- index.html | 1 + src/components/App.js | 5 +++++ src/index.js | 3 +++ 3 files changed, 9 insertions(+) create mode 100644 src/components/App.js diff --git a/index.html b/index.html index fc99deac2..9aa05c41d 100644 --- a/index.html +++ b/index.html @@ -8,6 +8,7 @@

πŸš‡ μ§€ν•˜μ²  노선도 관리

+ diff --git a/src/components/App.js b/src/components/App.js new file mode 100644 index 000000000..792e3da10 --- /dev/null +++ b/src/components/App.js @@ -0,0 +1,5 @@ +const App = ($app) => { + this.$app = $app; +}; + +export default App; diff --git a/src/index.js b/src/index.js index e69de29bb..a8a730c71 100644 --- a/src/index.js +++ b/src/index.js @@ -0,0 +1,3 @@ +import App from "./components/App.js"; + +new App(document.querySelector("#app")); From 3429e7025fdd40123332fad420f7c9fd173c2831 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 09:18:09 +0900 Subject: [PATCH 05/41] Add: Header component --- index.html | 6 ++---- src/components/App.js | 8 +++++--- src/components/Header.js | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 src/components/Header.js diff --git a/index.html b/index.html index 9aa05c41d..a68ccf6f9 100644 --- a/index.html +++ b/index.html @@ -5,10 +5,8 @@ μ§€ν•˜μ²  노선도 관리 -
-

πŸš‡ μ§€ν•˜μ²  노선도 관리

-
- +
+ diff --git a/src/components/App.js b/src/components/App.js index 792e3da10..1cbf72338 100644 --- a/src/components/App.js +++ b/src/components/App.js @@ -1,5 +1,7 @@ -const App = ($app) => { +import Header from "./Header.js"; + +export default function App($app) { this.$app = $app; -}; -export default App; + this.Header = new Header({ $target: $app }); +} diff --git a/src/components/Header.js b/src/components/Header.js new file mode 100644 index 000000000..bcb12f86f --- /dev/null +++ b/src/components/Header.js @@ -0,0 +1,15 @@ +export default function Header({ $target }) { + this.$target = $target; + + this.render = () => { + const HTMLString = ` +
+

πŸš‡ μ§€ν•˜μ²  노선도 관리

+
+ `; + + this.$target.insertAdjacentHTML("afterbegin", HTMLString); + }; + + this.render(); +} From aca737eeec087bccc37e94ec8878dcd8c1a8878c Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 09:34:58 +0900 Subject: [PATCH 06/41] Add: Navigator component --- index.html | 1 + src/components/App.js | 4 +++- src/components/Navigator.js | 20 ++++++++++++++++++++ src/util/constants.js | 1 + style.css | 10 ++++++++++ 5 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/components/Navigator.js create mode 100644 src/util/constants.js create mode 100644 style.css diff --git a/index.html b/index.html index a68ccf6f9..6f3862daa 100644 --- a/index.html +++ b/index.html @@ -3,6 +3,7 @@ μ§€ν•˜μ²  노선도 관리 +
diff --git a/src/components/App.js b/src/components/App.js index 1cbf72338..6323acf6c 100644 --- a/src/components/App.js +++ b/src/components/App.js @@ -1,7 +1,9 @@ import Header from "./Header.js"; +import Navigator from "./Navigator.js"; export default function App($app) { this.$app = $app; - this.Header = new Header({ $target: $app }); + this.header = new Header({ $target: $app }); + this.navigator = new Navigator({ $target: $app }); } diff --git a/src/components/Navigator.js b/src/components/Navigator.js new file mode 100644 index 000000000..2166728bf --- /dev/null +++ b/src/components/Navigator.js @@ -0,0 +1,20 @@ +import { NAV_TEXTS } from "../util/constants.js"; + +export default function Navigator({ $target }) { + this.$target = $target; + this.NAV_TEXTS = NAV_TEXTS; + + this.render = () => { + const HTMLString = ` + + `; + + this.$target.insertAdjacentHTML("beforeend", HTMLString); + }; + + this.render(); +} diff --git a/src/util/constants.js b/src/util/constants.js new file mode 100644 index 000000000..728256bb7 --- /dev/null +++ b/src/util/constants.js @@ -0,0 +1 @@ +export const NAV_TEXTS = ["μ—­ 관리", "λ…Έμ„  관리", "ꡬ간 관리", "μ§€ν•˜μ²  노선도 좜λ ₯"]; diff --git a/style.css b/style.css new file mode 100644 index 000000000..f0ce57cf4 --- /dev/null +++ b/style.css @@ -0,0 +1,10 @@ +ul, +ol { + padding: 0; +} + +nav li { + list-style: none; + display: inline; + margin-right: 10px; +} From 293620682e5f996cecbf561445acb6dd6de9cacf Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 09:39:08 +0900 Subject: [PATCH 07/41] Docs: add reference site --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index afaf5e4a6..30d162023 100644 --- a/README.md +++ b/README.md @@ -37,3 +37,7 @@ ### μ§€ν•˜μ²  노선도 좜λ ₯ - μ €μž₯λ˜μ–΄μžˆλŠ” μ§€ν•˜μ²  노선도λ₯Ό ν˜Έμ„ λ³„λ‘œ 화면에 좜λ ₯ν•œλ‹€ + +## πŸ“ μ°Έκ³  μ‚¬μ΄νŠΈ + +- [[HTML λ°”λ‘œ μ•ŒκΈ°] Semantic Web을 μœ„ν•œ Semantic Elements - bono](https://blueshw.github.io/2020/05/09/know-html-semantic-elements/) From a2f9950ff35aa71afb51113fcbffe09c852497c0 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 10:32:32 +0900 Subject: [PATCH 08/41] Add: StationManagement and StationNameInput component --- src/components/App.js | 13 +++++++++++-- src/components/StationManagement.js | 11 +++++++++++ src/components/StationNameInput.js | 20 ++++++++++++++++++++ src/util/constants.js | 11 +++++++++++ style.css | 8 ++++++++ 5 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 src/components/StationManagement.js create mode 100644 src/components/StationNameInput.js diff --git a/src/components/App.js b/src/components/App.js index 6323acf6c..81783fe8d 100644 --- a/src/components/App.js +++ b/src/components/App.js @@ -1,9 +1,18 @@ import Header from "./Header.js"; import Navigator from "./Navigator.js"; +import StationManagement from "./StationManagement.js"; export default function App($app) { this.$app = $app; - this.header = new Header({ $target: $app }); - this.navigator = new Navigator({ $target: $app }); + this.header = new Header({ $target: this.$app }); + this.navigator = new Navigator({ $target: this.$app }); + + this.$main = document.createElement("main"); + this.$app.append(this.$main); + + this.stationManagement = new StationManagement({ + $target: this.$main, + isShow: true, + }); } diff --git a/src/components/StationManagement.js b/src/components/StationManagement.js new file mode 100644 index 000000000..e6beed5ac --- /dev/null +++ b/src/components/StationManagement.js @@ -0,0 +1,11 @@ +import StationNameInput from "./StationNameInput.js"; + +export default function StationManagement({ $target, isShow }) { + this.$container = document.createElement("div"); + this.$container.className = "station-management"; + $target.append(this.$container); + + this.isShow = isShow; + + this.stationNameInput = new StationNameInput({ $target: this.$container }); +} diff --git a/src/components/StationNameInput.js b/src/components/StationNameInput.js new file mode 100644 index 000000000..c83f07b12 --- /dev/null +++ b/src/components/StationNameInput.js @@ -0,0 +1,20 @@ +import { ELEMENT_INFO } from "../util/constants.js"; + +export default function StationNameInput({ $target }) { + this.$container = document.createElement("form"); + $target.append(this.$container); + + const { stationNameInput, stationNameSubmit } = ELEMENT_INFO; + + this.render = () => { + this.$container.innerHTML = ` + + + `; + }; + + this.render(); +} diff --git a/src/util/constants.js b/src/util/constants.js index 728256bb7..51b291bea 100644 --- a/src/util/constants.js +++ b/src/util/constants.js @@ -1 +1,12 @@ export const NAV_TEXTS = ["μ—­ 관리", "λ…Έμ„  관리", "ꡬ간 관리", "μ§€ν•˜μ²  노선도 좜λ ₯"]; + +export const ELEMENT_INFO = { + stationNameInput: { + text: "μ—­ 이름", + id: "station-name-input", + }, + stationNameSubmit: { + text: "μ—­ μΆ”κ°€", + id: "station-add-button", + }, +}; diff --git a/style.css b/style.css index f0ce57cf4..bf5f9d85c 100644 --- a/style.css +++ b/style.css @@ -8,3 +8,11 @@ nav li { display: inline; margin-right: 10px; } + +.sr-only { + position: fixed; + top: -100px; + width: 1px; + height: 1px; + overflow: hidden; +} From af54086bffe445798ffb224685c32ce60789ac76 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 10:43:43 +0900 Subject: [PATCH 09/41] Chore: add id of navigator buttons --- src/components/Navigator.js | 7 ++++--- src/util/constants.js | 20 ++++++++++++++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/components/Navigator.js b/src/components/Navigator.js index 2166728bf..7538b23a3 100644 --- a/src/components/Navigator.js +++ b/src/components/Navigator.js @@ -1,14 +1,15 @@ -import { NAV_TEXTS } from "../util/constants.js"; +import { ELEMENT_INFO } from "../util/constants.js"; export default function Navigator({ $target }) { this.$target = $target; - this.NAV_TEXTS = NAV_TEXTS; + + const { navigator: navInfo } = ELEMENT_INFO; this.render = () => { const HTMLString = ` `; diff --git a/src/util/constants.js b/src/util/constants.js index 51b291bea..1b2aea922 100644 --- a/src/util/constants.js +++ b/src/util/constants.js @@ -1,6 +1,22 @@ -export const NAV_TEXTS = ["μ—­ 관리", "λ…Έμ„  관리", "ꡬ간 관리", "μ§€ν•˜μ²  노선도 좜λ ₯"]; - export const ELEMENT_INFO = { + navigator: [ + { + text: "μ—­ 관리", + id: "station-manager-button", + }, + { + text: "λ…Έμ„  관리", + id: "line-manager-button", + }, + { + text: "ꡬ간 관리", + id: "section-manager-button", + }, + { + text: "μ§€ν•˜μ²  노선도 좜λ ₯", + id: "map-print-manager-button", + }, + ], stationNameInput: { text: "μ—­ 이름", id: "station-name-input", From 82a3684627086acc6a4a6ed368e3f0053b10e3f2 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 12:02:05 +0900 Subject: [PATCH 10/41] Docs: update reference site --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 30d162023..a5ae72a9d 100644 --- a/README.md +++ b/README.md @@ -41,3 +41,4 @@ ## πŸ“ μ°Έκ³  μ‚¬μ΄νŠΈ - [[HTML λ°”λ‘œ μ•ŒκΈ°] Semantic Web을 μœ„ν•œ Semantic Elements - bono](https://blueshw.github.io/2020/05/09/know-html-semantic-elements/) +- [비ꡬ쑰화 ν• λ‹Ή(ꡬ쑰뢄해) 문법 - velopert](https://learnjs.vlpt.us/useful/06-destructuring.html) From aec813892b933c408bfa799a1ffd73e55560491b Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 12:05:42 +0900 Subject: [PATCH 11/41] Chore: rename StationManagement to StationManager --- src/components/App.js | 4 ++-- src/components/{StationManagement.js => StationManager.js} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/components/{StationManagement.js => StationManager.js} (82%) diff --git a/src/components/App.js b/src/components/App.js index 81783fe8d..f3b9f2cff 100644 --- a/src/components/App.js +++ b/src/components/App.js @@ -1,6 +1,6 @@ import Header from "./Header.js"; import Navigator from "./Navigator.js"; -import StationManagement from "./StationManagement.js"; +import StationManager from "./StationManager.js"; export default function App($app) { this.$app = $app; @@ -11,7 +11,7 @@ export default function App($app) { this.$main = document.createElement("main"); this.$app.append(this.$main); - this.stationManagement = new StationManagement({ + this.stationManager = new StationManager({ $target: this.$main, isShow: true, }); diff --git a/src/components/StationManagement.js b/src/components/StationManager.js similarity index 82% rename from src/components/StationManagement.js rename to src/components/StationManager.js index e6beed5ac..de41a6591 100644 --- a/src/components/StationManagement.js +++ b/src/components/StationManager.js @@ -1,6 +1,6 @@ import StationNameInput from "./StationNameInput.js"; -export default function StationManagement({ $target, isShow }) { +export default function StationManager({ $target, isShow }) { this.$container = document.createElement("div"); this.$container.className = "station-management"; $target.append(this.$container); From a2c303e233cf8989318a9da1f8156a240d3020c4 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 12:25:34 +0900 Subject: [PATCH 12/41] Add: StationList component --- src/components/StationList.js | 30 ++++++++++++++++++++++++++++++ src/components/StationManager.js | 2 ++ src/util/constants.js | 4 ++++ style.css | 19 +++++++++++++++++++ 4 files changed, 55 insertions(+) create mode 100644 src/components/StationList.js diff --git a/src/components/StationList.js b/src/components/StationList.js new file mode 100644 index 000000000..eb23bd5bf --- /dev/null +++ b/src/components/StationList.js @@ -0,0 +1,30 @@ +import { ELEMENT_INFO } from "../util/constants.js"; + +export default function StationList({ $target }) { + this.$container = document.createElement("section"); + $target.append(this.$container); + + const { stationDeleteButton } = ELEMENT_INFO; + + this.render = () => { + this.$container.innerHTML = ` +

πŸš‰ μ§€ν•˜μ²  μ—­ λͺ©λ‘

+ + + + + + + + + + + + + +
μ—­ 이름섀정
test
+ `; + }; + + this.render(); +} diff --git a/src/components/StationManager.js b/src/components/StationManager.js index de41a6591..11fcb60e5 100644 --- a/src/components/StationManager.js +++ b/src/components/StationManager.js @@ -1,4 +1,5 @@ import StationNameInput from "./StationNameInput.js"; +import StationList from "./StationList.js"; export default function StationManager({ $target, isShow }) { this.$container = document.createElement("div"); @@ -8,4 +9,5 @@ export default function StationManager({ $target, isShow }) { this.isShow = isShow; this.stationNameInput = new StationNameInput({ $target: this.$container }); + this.stationList = new StationList({ $target: this.$container }); } diff --git a/src/util/constants.js b/src/util/constants.js index 1b2aea922..dc44cec9c 100644 --- a/src/util/constants.js +++ b/src/util/constants.js @@ -25,4 +25,8 @@ export const ELEMENT_INFO = { text: "μ—­ μΆ”κ°€", id: "station-add-button", }, + stationDeleteButton: { + text: "μ‚­μ œ", + className: "station-delete-button", + }, }; diff --git a/style.css b/style.css index bf5f9d85c..b72232202 100644 --- a/style.css +++ b/style.css @@ -9,6 +9,25 @@ nav li { margin-right: 10px; } +table { + border-spacing: 0; + border: 2px solid black; +} + +th { + padding: 6px; + border-bottom: 2px solid black; +} + +td { + padding: 6px; + border-bottom: 1px solid black; +} + +tr:last-child > td { + border-bottom: none; +} + .sr-only { position: fixed; top: -100px; From e1b83f25deaa4bdb94b6d938dde4335833d0336c Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 12:31:05 +0900 Subject: [PATCH 13/41] Feat: toggle if StationManager show --- src/components/StationManager.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/components/StationManager.js b/src/components/StationManager.js index 11fcb60e5..48c76d4d4 100644 --- a/src/components/StationManager.js +++ b/src/components/StationManager.js @@ -10,4 +10,10 @@ export default function StationManager({ $target, isShow }) { this.stationNameInput = new StationNameInput({ $target: this.$container }); this.stationList = new StationList({ $target: this.$container }); + + this.render = () => { + this.$container.style.display = this.isShow ? "block" : "none"; + }; + + this.render(); } From 219214b78ddbc6ccc10b07a8470beafb3fb5bf82 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 12:37:30 +0900 Subject: [PATCH 14/41] Docs: update features of README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index a5ae72a9d..b33245cee 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,11 @@ ## πŸš€ κ΅¬ν˜„ κΈ°λŠ₯ +각 κΈ°λŠ₯으둜 μ΄λ™ν•˜λŠ” navigator 화면을 κ΅¬μ„±ν•œλ‹€. + ### μ—­ 관리 +- μ—­ 관리 화면을 κ΅¬μ„±ν•œλ‹€. - μ €μž₯된 λͺ¨λ“  μ§€ν•˜μ²  μ—­ 이름을 μ‘°νšŒν•œλ‹€. - μž…λ ₯받은 μ—­ 이름이 2κΈ€μž 이상인지 κ²€μ‚¬ν•œλ‹€. - μž…λ ₯받은 μ—­ 이름이 기쑴에 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”μ§€ κ²€μ‚¬ν•œλ‹€. @@ -17,6 +20,7 @@ ### λ…Έμ„  관리 +- λ…Έμ„  관리 화면을 κ΅¬μ„±ν•œλ‹€. - μ €μž₯된 λͺ¨λ“  μ§€ν•˜μ²  노선을 μ‘°νšŒν•œλ‹€. - μž…λ ₯받은 λ…Έμ„  이름이 1κΈ€μž 이상인지 κ²€μ‚¬ν•œλ‹€. - μž…λ ₯받은 λ…Έμ„  이름이 기쑴에 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”μ§€ κ²€μ‚¬ν•œλ‹€. @@ -26,6 +30,7 @@ ### ꡬ간 관리 +- ꡬ간 관리 화면을 κ΅¬μ„±ν•œλ‹€. - μ„ νƒλœ 노선에 λ“±λ‘λœ μ§€ν•˜μ²  역을 μ‘°νšŒν•œλ‹€. - μž…λ ₯받은 ꡬ간 μˆœμ„œκ°€ μˆ«μžμΈμ§€ κ²€μ‚¬ν•œλ‹€. - μž…λ ₯받은 ꡬ간 μˆœμ„œκ°€ μžμ—°μˆ˜μΈμ§€ κ²€μ‚¬ν•œλ‹€. @@ -36,6 +41,7 @@ ### μ§€ν•˜μ²  노선도 좜λ ₯ +- μ§€ν•˜μ²  노선도 좜λ ₯ 화면을 κ΅¬μ„±ν•œλ‹€. - μ €μž₯λ˜μ–΄μžˆλŠ” μ§€ν•˜μ²  노선도λ₯Ό ν˜Έμ„ λ³„λ‘œ 화면에 좜λ ₯ν•œλ‹€ ## πŸ“ μ°Έκ³  μ‚¬μ΄νŠΈ From 9dbf48495ff4160669266b729c38c0710bc10016 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 13:04:13 +0900 Subject: [PATCH 15/41] Feat: inquire stored station names --- src/components/StationList.js | 18 +++++++++++++----- src/components/StationManager.js | 11 ++++++++++- src/util/constants.js | 10 ++++++++++ src/util/localStorage.js | 25 +++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 src/util/localStorage.js diff --git a/src/components/StationList.js b/src/components/StationList.js index eb23bd5bf..e07ed6077 100644 --- a/src/components/StationList.js +++ b/src/components/StationList.js @@ -1,11 +1,22 @@ import { ELEMENT_INFO } from "../util/constants.js"; -export default function StationList({ $target }) { +export default function StationList({ $target, stations }) { this.$container = document.createElement("section"); $target.append(this.$container); + this.stations = stations; + const { stationDeleteButton } = ELEMENT_INFO; + this.createTableRowHTMLString = (stationName) => { + return ` + + ${stationName} + + + `; + }; + this.render = () => { this.$container.innerHTML = `

πŸš‰ μ§€ν•˜μ²  μ—­ λͺ©λ‘

@@ -17,10 +28,7 @@ export default function StationList({ $target }) { - - test - - + ${this.stations.map((station) => this.createTableRowHTMLString(station)).join("")} `; diff --git a/src/components/StationManager.js b/src/components/StationManager.js index 48c76d4d4..a8be5f9cf 100644 --- a/src/components/StationManager.js +++ b/src/components/StationManager.js @@ -1,5 +1,7 @@ import StationNameInput from "./StationNameInput.js"; import StationList from "./StationList.js"; +import localStorageManager from "../util/localStorage.js"; +import { STORAGE_KEY } from "../util/constants.js"; export default function StationManager({ $target, isShow }) { this.$container = document.createElement("div"); @@ -7,9 +9,16 @@ export default function StationManager({ $target, isShow }) { $target.append(this.$container); this.isShow = isShow; + this.stations = localStorageManager.getItem({ + key: STORAGE_KEY.station, + defaultValue: [], + }); this.stationNameInput = new StationNameInput({ $target: this.$container }); - this.stationList = new StationList({ $target: this.$container }); + this.stationList = new StationList({ + $target: this.$container, + stations: this.stations, + }); this.render = () => { this.$container.style.display = this.isShow ? "block" : "none"; diff --git a/src/util/constants.js b/src/util/constants.js index dc44cec9c..5cd36c9ea 100644 --- a/src/util/constants.js +++ b/src/util/constants.js @@ -30,3 +30,13 @@ export const ELEMENT_INFO = { className: "station-delete-button", }, }; + +export const ERROR_MESSAGE = { + getItem: "⚠ 데이터λ₯Ό κ°€μ Έμ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€.", + setItem: "⚠ 데이터λ₯Ό μ €μž₯ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.", +}; + +export const STORAGE_KEY = { + station: "station", + line: "line", +}; diff --git a/src/util/localStorage.js b/src/util/localStorage.js new file mode 100644 index 000000000..6db253a1c --- /dev/null +++ b/src/util/localStorage.js @@ -0,0 +1,25 @@ +import { ERROR_MESSAGE } from "./constants.js"; + +const localStorageManager = { + getItem({ key, defaultValue }) { + try { + const storedData = localStorage.getItem(key); + + return storedData ? JSON.parse(storedData) : defaultValue; + } catch (e) { + alert(ERROR_MESSAGE.getItem); + console.error(e); + return defaultValue; + } + }, + setItem({ key, item }) { + try { + localStorage.setItem(key, JSON.stringify(item)); + } catch (e) { + alert(ERROR_MESSAGE.setItem); + console.error(e); + } + }, +}; + +export default localStorageManager; From 157f651026ec5477479e77ca2dd951221b8b78f8 Mon Sep 17 00:00:00 2001 From: sunyoung Date: Tue, 15 Dec 2020 13:57:02 +0900 Subject: [PATCH 16/41] Feat: check length of station name --- src/components/StationNameInput.js | 28 +++++++++++++++++++++++++++- src/util/constants.js | 3 +++ src/util/validation.js | 3 +++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/util/validation.js diff --git a/src/components/StationNameInput.js b/src/components/StationNameInput.js index c83f07b12..0c24439ba 100644 --- a/src/components/StationNameInput.js +++ b/src/components/StationNameInput.js @@ -1,4 +1,5 @@ -import { ELEMENT_INFO } from "../util/constants.js"; +import { isTextOverMinLength } from "../util/validation.js"; +import { ELEMENT_INFO, STATION_NAME_MIN_LENGTH, ERROR_MESSAGE } from "../util/constants.js"; export default function StationNameInput({ $target }) { this.$container = document.createElement("form"); @@ -6,6 +7,30 @@ export default function StationNameInput({ $target }) { const { stationNameInput, stationNameSubmit } = ELEMENT_INFO; + this.bindOnSubmit = () => { + this.$container.addEventListener("submit", (e) => { + const $stationNameInput = document.querySelector(`#${stationNameInput.id}`); + + if (this.isValidStationName($stationNameInput.value)) { + // TODO: μ§€ν•˜μ²  μ—­ 등둝 + } + + $stationNameInput.value = ""; + + e.preventDefault(); + }); + }; + + this.isValidStationName = (stationName) => { + if (!isTextOverMinLength(stationName, STATION_NAME_MIN_LENGTH)) { + alert(ERROR_MESSAGE.shortStationName); + + return false; + } + + return true; + }; + this.render = () => { this.$container.innerHTML = `