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

[holee] javascript-subway-map-precourse #1

Closed
wants to merge 117 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
47099c5
[docs] 구현할 기능 목록 추가
hochan222 May 25, 2021
31bcdf8
[docs] id, class tag, code 형식으로 변경
hochan222 May 25, 2021
830106e
feat: 기능 구현에 정의한 html 기본 틀 완성하기
hochan222 May 25, 2021
79f2f58
chore: linter, code formatter, gitignore 추가
hochan222 May 25, 2021
5e55efe
feat: page frame
hochan222 May 25, 2021
42ba961
feat: add station-management view
hochan222 May 25, 2021
7d45183
chore: prettierrc singleQuote 추가
hochan222 May 25, 2021
7ac3e6d
feat: add toggleDisplayStationManagement
hochan222 May 25, 2021
9cd8222
fix: hidden attribute to false for other page
hochan222 May 25, 2021
044d5ad
feat: add controlSubwayRouteMap frame
hochan222 May 25, 2021
8980a62
feat: add toggleDisplayLineManagement
hochan222 May 25, 2021
79904a5
feat: add toggleSectionManagement page
hochan222 May 25, 2021
6eb9db6
feat: add station-management frame for html
hochan222 May 25, 2021
5a307a8
docs: complete for id tag
hochan222 May 25, 2021
0393c38
feat: addStationLocalStroage
hochan222 May 25, 2021
efc602e
docs: complete localStorage에 등록
hochan222 May 25, 2021
5cd878c
feat: add error-message
hochan222 May 25, 2021
ce33ab5
feat: add error message by object
hochan222 May 26, 2021
b9650dc
docs: complete station duplicate && station length err
hochan222 May 26, 2021
4b91ba1
feat: feature add to localstorage
hochan222 May 26, 2021
82beaea
style: renderStation이름 구체적으로 변경
hochan222 May 26, 2021
a2f75b3
feat: add render station
hochan222 May 26, 2021
82bf2c3
feat: divide utils, control, entire
hochan222 May 26, 2021
8ae7e2f
feat: add data attribute to html tag
hochan222 May 26, 2021
1a86244
feat: add data attribute to button
hochan222 May 26, 2021
f64f518
fix: station button id to class
hochan222 May 26, 2021
3f8abab
fix: elementIds button id to class, && feat: getElementClass
hochan222 May 26, 2021
dd4bc39
feat: add delete button
hochan222 May 26, 2021
8cca7da
feat: add model for remove
hochan222 May 26, 2021
446335f
style: apply prettier
hochan222 May 26, 2021
b7de03c
docs: complete 지하철의 역의 목록을 조회 할 수 있다.
hochan222 May 26, 2021
53bce3f
feat: add feature line-management, html
hochan222 May 26, 2021
fac8afb
feat: add line-management-control frame
hochan222 May 26, 2021
9c1754b
feat: add select option to html
hochan222 May 26, 2021
4eeab69
feat: add select options
hochan222 May 26, 2021
98752f6
feat: 역 추가 됐을때 input 값 초기화 + focus
hochan222 May 26, 2021
92e2160
feat: 지하철 역 목록 추가할때 select option 추가
hochan222 May 26, 2021
cfd3faf
feat: 지하철 역 목록 추가시 삭제 버튼 이벤트 추가
hochan222 May 26, 2021
4efa6fb
fix: 중복일때 rendering 되는 현상 수정
hochan222 May 26, 2021
672d5b6
docs: 기능구현_ 지하철 역을 등록하고 삭제할 수 있다.
hochan222 May 26, 2021
0a5b254
refactor: removeLocalStorage를 조금 더 범용성 있게 수정
hochan222 May 26, 2021
b470d57
feat: add checkValidLineSelector
hochan222 May 26, 2021
a1d346b
feat: 노선 localstorage에 추가
hochan222 May 26, 2021
cc14079
feat: add render line Table
hochan222 May 26, 2021
27ea9ec
feat: add render line Table
hochan222 May 26, 2021
f5b5188
refactor: function Name makeLineTable to addLineTable
hochan222 May 26, 2021
e5d6b93
feat: add feature addLineTable
hochan222 May 26, 2021
98cea3f
refactor: apply prettier
hochan222 May 26, 2021
60644a6
feat: 노선관리에서 삭제 버튼 추가.
hochan222 May 26, 2021
7a3c1c8
docs: complete 지하철 노선 관리
hochan222 May 26, 2021
8df6da6
feat: lineNameInput 에서 값 입력시 value 비워주고 focus 하기
hochan222 May 26, 2021
f126979
[FEAT] add LineList
hochan222 May 26, 2021
3473cba
fix: 동일한 노선 출력하는 버그 해결, 렌더링에 동일한 변수설정 문제
hochan222 May 26, 2021
b8a0831
refactor: remove input close tag
hochan222 May 27, 2021
8b050f2
refactor: h tag 앞뒤 일치시키기
hochan222 May 27, 2021
54eaf93
refactor: remove input tag
hochan222 May 27, 2021
74a7658
refactor: line object for array
hochan222 May 27, 2021
34c5afe
refactor: line view rendering
hochan222 May 27, 2021
6e534e2
refactor: complete, line controller
hochan222 May 27, 2021
ee8a457
feat: remove line station forbidden
hochan222 May 27, 2021
21d4a28
docs: 기능 구현 지하철 역을 등록하고 삭제할 수있다.(단, 노선에 등록된 역은 삭제할 수 없다
hochan222 May 27, 2021
6af1d3a
feat: section render buttons
hochan222 May 27, 2021
4f42e2f
feat: 지하철 노선이 생성됐을때 삭제 버튼 이벤트 추가
hochan222 May 27, 2021
1405112
feat: 구간관리에서 노선 버튼 view 부분 완성
hochan222 May 27, 2021
5c52d77
feat: add button event, section
hochan222 May 27, 2021
c4829f2
feat: section 버튼 누르는 것에따른 동적 view 구성
hochan222 May 27, 2021
be6b826
feat: add select options for section management
hochan222 May 27, 2021
bd5454e
feat: add section input placeholder
hochan222 May 27, 2021
b65ff02
feat: add section table
hochan222 May 27, 2021
c1949de
feat: 노선 구간 table에 rendering 이벤트 등록 구현
hochan222 May 27, 2021
44836c2
fix: section 테이블에서 다른 section으로 넘길때 다른 table 남아있는거 해결
hochan222 May 27, 2021
91870f7
feat: 알맞은 option과 input 확인하는 checkValid 함수 구현
hochan222 May 27, 2021
d4b27a7
refactor: valid value 검증 함수 리펙토링
hochan222 May 27, 2021
2cd1360
feat: 구간에 추가된 원소 localstorage에 저장 및 table 추가구현
hochan222 May 27, 2021
7425e93
refactor: remove unused variable, section control
hochan222 May 27, 2021
3573332
fix: section selector에서 다른 버튼 클릭시 중복 추가되는거 수정
hochan222 May 27, 2021
b52fb8a
fix: section selector에서 다른 버튼 클릭시 중복 추가되는거 수정
hochan222 May 27, 2021
94e13e6
docs:노선에 등록된 역을 제거할 수 없다, 노선에 역을 중복해서 추가할 수 없다
hochan222 May 27, 2021
404cfb5
docs: 종점을 제거할 경우 다음 역이 종점이 된다.
hochan222 May 27, 2021
901c82f
feat: section table add removebutton event
hochan222 May 27, 2021
580f08a
feat: 노선의 역 2개 이하로 삭제 안되게 수정
hochan222 May 27, 2021
2ceffe4
feat: 삭제할때 wtable view에 적용되도록 수정
hochan222 May 27, 2021
da35e6e
feat: 구간 역 원소 삭제시 다른 메뉴 렌더링되게 변경
hochan222 May 27, 2021
90d76c2
refactor: render position, section
hochan222 May 27, 2021
40e00aa
feat: section h3 태그 자리에 '관리' 빠진 text 추가
hochan222 May 27, 2021
a19da2d
feat: line-management에서 역 삭제시 section-management view에도 적용
hochan222 May 27, 2021
5440c25
feat: line management 수정시 section management 페이지 리렌더링 추가
hochan222 May 27, 2021
692243d
fix: 잘못 파싱한것 고침 세부내용 아래 참고
hochan222 May 27, 2021
8839288
chore: prettier로 예쁘게 만들자!
hochan222 May 27, 2021
a07e6af
chore: prettier로 예쁘게 만들자!
hochan222 May 27, 2021
2c13a56
docs: 기능 구현 완료
hochan222 May 27, 2021
cfece75
feat: subway route map 구현.. 드디어 끝난것인가...
hochan222 May 27, 2021
797ee2d
docs: 지하철 노선도 출력 기능 구현
hochan222 May 27, 2021
ec6e3da
feat: 맵 출력 후 다른 메뉴 눌러도 알맞은 view가 나오게 수정
hochan222 May 27, 2021
62f0f0a
fix: subway route map 다른 메뉴 클릭시 초기화 문제
hochan222 May 28, 2021
3961555
refactor: seperate toggle-display.js
hochan222 May 28, 2021
2158321
refactor: EOL 추가
hochan222 May 28, 2021
a54fe7d
refactor: error-message
hochan222 May 28, 2021
d0d9fec
refactor: line-management 페이지 기능별로 파일 쪼갬
hochan222 May 28, 2021
328c8a4
refactor: station management 페이지 delete 로직 파일로 분리
hochan222 May 28, 2021
095dc4b
refactor, station-management 페이지 기능 파일별로 리펙토링
hochan222 May 28, 2021
62fe2c6
refactor: line삭제 하는거 remove에서 용어 delete로 통일화
hochan222 May 28, 2021
1a447b3
refactor: export하단으로 정리, controller
hochan222 May 28, 2021
41c0f1a
refactor: section management 페이지 기능별로 파일 나눔
hochan222 May 28, 2021
c4fe9e5
refactor: section-management 페이지 export 정리
hochan222 May 28, 2021
275a728
refactor: seperate toggledisplay, subway-route-map
hochan222 May 28, 2021
503ca20
refactor: rename all of controller toggleDisplay~ to toggleDisplay
hochan222 May 28, 2021
84e4029
refactor: view import 순서
hochan222 May 28, 2021
f8247d4
chore: lint err --fix
hochan222 May 28, 2021
6d88798
chore: lint modify /'to ' in templete string
hochan222 May 28, 2021
114e705
chore: == to ===
hochan222 May 28, 2021
3937cc0
chore: view page, modify '/ to '
hochan222 May 28, 2021
f7d30e1
chore: view page, modify '/ to '
hochan222 May 28, 2021
d1f782a
chore: eslint err
hochan222 May 28, 2021
2ce680c
chore: add no-restricted-syntax for
hochan222 May 28, 2021
ccf281a
chore: lint section checkValidValue 파라미터 개수 줄이기
hochan222 May 28, 2021
c8e2682
fix: 처음 초기값에 아무것도 없을때 입력값 오류 해결,
hochan222 Jun 1, 2021
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
2 changes: 2 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
.eslintrc.js
25 changes: 25 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
module.exports = {
env: {
browser: true,
es2021: true,
},
extends: ['airbnb-base', 'plugin:prettier/recommended'],
parserOptions: {
ecmaVersion: 12,
sourceType: 'module',
},
rules: {
'no-new': 'off',
'no-console': 'off',
'no-alert': 'off',
'no-plusplus': 'error',
'no-param-reassign': 'error',
'no-underscore-dangle': 'off',
'no-return-assign': 'error',
'max-depth': ['error', 2],
'max-lines-per-function': ['error', 15],
'import/extensions': ['off'],
'import/prefer-default-export': 'off',
"no-restricted-syntax": ["error", "ForInStatement", "LabeledStatement", "WithStatement"]
},
};
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.DS_Store
node_modules/
4 changes: 4 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"singleQuote": true,
"trailingComma": "all"
}
63 changes: 63 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
## 📝 구현할 기능 목록

### 🗂 공통 메뉴

- [x] 역 관리 button 태그는 `#station-manager-button` id값을 가진다.
- [x] 노선 관리 button 태그는 `#line-manager-button` id값을 가진다.
- [x] 구간 관리 button 태그는 `#section-manager-button` id값을 가진다.
- [x] 지하철 노선도 출력 관리 button 태그는 `#map-print-manager-button` id값을 가진다.

### 🚋 지하철 역 관리

- [x] 지하철 역을 입력하는 input 태그는 `#station-name-input` id값을 가진다.
- [x] 지하철 역을 추가하는 button 태그는 `#station-add-button` id값을 가진다.
- [x] 지하철 역을 삭제하는 button 태그는 `.station-delete-button` class값을 가진다.

- [x] 지하철 역을 등록하고 삭제할 수 있다. (단, 노선에 등록된 역은 삭제할 수 없다)
- [x] localStorage에 등록
- [x] 중복된 지하철 역 이름이 등록될 수 없다.
- [x] 지하철 역은 2글자 이상이어야 한다.
- [x] 지하철 역의 목록을 조회할 수 있다.

### 🛤 지하철 노선 관리

- [x] 지하철 노선의 이름을 입력하는 input 태그는 `#line-name-input` id값을 가진다.
- [x] 지하철 노선의 상행 종점을 선택하는 select 태그는 `#line-start-station-selector` id값을 가진다.
- [x] 지하철 노선의 하행 종점을 선택하는 select 태그는 `#line-end-station-selector` id값을 가진다.
- [x] 지하철 노선을 추가하는 button 태그는 `#line-add-button` id값을 가진다.
- [x] 지하철 노선을 삭제하는 button 태그는 `.line-delete-button` class값을 가진다.

- [x] 지하철 노선을 등록하고 삭제할 수 있다.
- [x] 중복된 지하철 노선 이름이 등록될 수 없다.
- [x] 노선 등록 시 상행 종점역과 하행 종점역을 입력받는다.
- [x] 지하철 노선의 목록을 조회할 수 있다.

### 🚉 지하철 구간 관리

#### 삭제

- [x] 지하철 노선에 구간을 추가하는 기능은 노선에 역을 추가하는 기능이라고도 할 수 있다.
- [x] 역과 역사이를 구간이라 하고 이 구간들의 모음이 노선이다.
- [x] 하나의 역은 여러개의 노선에 추가될 수 있다.
- [x] 역과 역 사이에 새로운 역이 추가 될 수 있다.
- [x] 노선에서 갈래길은 생길 수 없다.

#### 추가

- [x] 지하철 노선을 선택하는 button 태그는 `.section-line-menu-button` class값을 가진다.
- [x] 지하철 구간을 설정할 역 select 태그는 `#section-station-selector` id값을 가진다.
- [x] 지하철 구간의 순서를 입력하는 input 태그는 `#section-order-input` id값을 가진다.
- [x] 지하철 구간을 등록하는 button 태그는 `#section-add-button` id값을 가진다.
- [x] 지하철 구간을 제거하는 button 태그는 `.section-delete-button` class값을 가진다.

- [x] 노선에 등록된 역을 제거할 수 있다.
- [x] 노선에 역을 중복해서 추가할 수 없다.
- [x] 종점을 제거할 경우 다음 역이 종점이 된다.
- [x] 노선에 포함된 역이 두개 이하일 때는 역을 제거할 수 없다.


### 🗺 지하철 노선도 출력

- [x] 지하철 노선도 출력 버튼을 누르면 `<div class="map"></div>` 태그를 만들고 해당 태그 내부에 노선도를 출력한다.

- [x] 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 조회할 수 있다.
91 changes: 90 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,99 @@
<head>
<meta charset="UTF-8" />
<title>지하철 노선도 관리</title>
<style>
table {
border: 1px solid #444444;
}

th,
td {
border: 1px solid #444444;
}
</style>
</head>

<body>
<div id="app">
<h1>🚇 지하철 노선도 관리 </h1>
<h1>🚇 지하철 노선도 관리</h1>
<div>
<button id="station-manager-button">1. 역 관리</button>
<button id="line-manager-button">2. 노선 관리</button>
<button id="section-manager-button">3. 구간 관리</button>
<button id="map-print-manager-button">4. 지하철 노선도 출력</button>
</div>
<div id="station-management" hidden>
<h2>
역 이름
<br />
<input
id="station-name-input"
placeholder="역 이름을 입력해주세요."
/>
<button id="station-add-button">역 추가</button>
</h2>
<h2>🚉 지하철 역 목록</h2>
<table>
<thead>
<tr>
<th>역 이름</th>
<th>설정</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div id="line-management" hidden>
<p>
<strong>노선 이름</strong>
<br />
<input id="line-name-input" placeholder="노선 이름을 입력해주세요." />
</p>
<span><strong>상행 종점</strong></span>
<select id="line-start-station-selector"></select>
<br />
<span><strong>하행 종점</strong></span>
<select id="line-end-station-selector"></select>
<p>
<button id="line-add-button">노선 추가</button>
</p>
<h2>🚉 지하철 노선 목록</h2>
<table id="line-table">
<thead>
<tr>
<th>노선 이름</th>
<th>상행 종점역</th>
<th>하행 종점역</th>
<th>설정</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div id="section-management" hidden>
<h4>구간을 수정할 노선을 선택해주세요.</h4>
<h3></h3>
<div id="section-buttons"></div>
<div id="section-register" hidden>
<div id="section-manage-text"></div>
<p>구간 등록</p>
<select id="section-station-selector"></select>
<input id="section-order-input" placeholder="순서" />
<button id="section-add-button">등록</button>
<br>
<br>
<table id="section-table">
<thead>
<tr>
<th>순서</th>
<th>이름</th>
<th>설정</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
<script type="module" src="src/index.js"></script>
</body>
Expand Down
19 changes: 19 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"name": "javascript-subway-map-precourse",
"version": "1.0.0",
"main": "index.js",
"repository": "https://github.com/transcendence42/javascript-subway-map-precourse.git",
"author": "hochan Lee <hochan049@gmail.com>",
"license": "MIT",
"devDependencies": {
"eslint": "^7.27.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.23.3",
"eslint-plugin-prettier": "^3.4.0",
"prettier": "^2.3.0"
},
"scripts": {
"lint": "eslint ."
}
}
8 changes: 8 additions & 0 deletions src/controller/error-message.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export const errorMessage = {
stationDuplicate: '❗역이 중복되었습니다. ❗',
stationLength: '❗두글자 미만으로는 설정 할 수 없습니다.❗',
lineDuplicate: '❗중복된 노선입니다. ❗',
lineStationForbidden: '❗노선에 등록된 역은 삭제할 수 없습니다.❗',
sectionInvalidRangeInput: '❗범위에 맞지 않은 입력입니다. 재입력 해주세요!❗',
sectionInvalidOption: '❗노선에 이미 등록된 역입니다. 재선택 해주세요!❗',
};
11 changes: 11 additions & 0 deletions src/controller/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { controlStationManagement } from './station-management/index.js';
import { controlLineManagement } from './line-management/index.js';
import { controlSectionManagement } from './section-management/index.js';
import { controlSubwayRouteMap } from './subway-route-map/index.js';

export const controller = () => {
controlStationManagement();
controlLineManagement();
controlSectionManagement();
controlSubwayRouteMap();
};
52 changes: 52 additions & 0 deletions src/controller/line-management/add-line.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { rerenderSectionButtons } from '../section-management/index.js';
import { addLineLocalStorage, addLineList } from './model.js';
import { checkValidLineSelector } from './check.js';
import { deleteLine } from './delete-line.js';
import { storage } from '../../model/index.js';
import { addButtonEvent } from '../utils.js';
import { elementIds } from '../../utils.js';
import { initLineInput } from './init.js';
import { renderLine } from './view.js';

const addLineButtonEvent = (lineName) => {
for (const item of document.querySelectorAll(
`table[id=line-table] tbody tr td button`,
)) {
if (item.dataset.line === `${lineName}-button`) {
addButtonEvent(item, deleteLine);
}
}
};

export const addLine = () => {
const lineName = elementIds.lineNameInput.value;
const lineStartStationSelectorValue =
elementIds.lineStartStationSelector.value;
const lineEndStationSelectorValue = elementIds.lineEndStationSelector.value;
if (
!checkValidLineSelector(
lineStartStationSelectorValue,
lineEndStationSelectorValue,
)
) {
return;
}
if (
!addLineLocalStorage(
lineStartStationSelectorValue,
lineEndStationSelectorValue,
)
) {
return;
}
renderLine({
lineName,
lineStartStationSelectorValue,
lineEndStationSelectorValue,
});
initLineInput();
addLineList(lineStartStationSelectorValue, lineEndStationSelectorValue);
addLineButtonEvent(lineName);
rerenderSectionButtons();
console.log(storage.getLocalStorageMap('subway-line'));
};
12 changes: 12 additions & 0 deletions src/controller/line-management/check.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { errorMessage } from '../error-message.js';

export const checkValidLineSelector = (
lineStartStationSelectorValue,
lineEndStationSelectorValue,
) => {
if (lineStartStationSelectorValue === lineEndStationSelectorValue) {
alert(errorMessage.stationDuplicate);
return false;
}
return true;
};
16 changes: 16 additions & 0 deletions src/controller/line-management/delete-line.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { rerenderSectionButtons } from '../section-management/index.js';
import { storage } from '../../model/index.js';

export const deleteLine = (e) => {
const dataLine = e.currentTarget.dataset.line.slice(0, -7);
for (const item of document.querySelectorAll(
`table[id=line-table] tbody tr`,
Comment on lines +6 to +7
Copy link
Member

Choose a reason for hiding this comment

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

querySelectorAll 인자 사용 예시 배워갑니다!

)) {
if (item.dataset.line === dataLine) {
storage.removeLocalStorage('subway-line', item.dataset.line);
item.remove();
}
}
window.removeEventListener(e.currentTarget, deleteLine);
rerenderSectionButtons();
};
15 changes: 15 additions & 0 deletions src/controller/line-management/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { toggleDisplay } from './toggle-display.js';
import { deleteLine } from './delete-line.js';
import { addButtonEvent } from '../utils.js';
import { elementIds } from '../../utils.js';
import { addLine } from './add-line.js';

export const controlLineManagement = () => {
addButtonEvent(elementIds.lineManagerButton, toggleDisplay);
addButtonEvent(elementIds.lineAddButton, addLine);
for (const item of document.querySelectorAll(
`table[id=line-table] tbody tr button`,
Copy link
Member

Choose a reason for hiding this comment

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

이런 querySelectorAll 표현도 다음에 활용해봐야겠어요 👍

)) {
addButtonEvent(item, deleteLine);
}
};
6 changes: 6 additions & 0 deletions src/controller/line-management/init.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { elementIds } from '../../utils.js';

export const initLineInput = () => {
elementIds.lineNameInput.value = '';
elementIds.lineNameInput.focus();
};
37 changes: 37 additions & 0 deletions src/controller/line-management/model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { errorMessage } from '../error-message.js';
import { storage } from '../../model/index.js';
import { elementIds } from '../../utils.js';

const addLineList = (
lineStartStationSelectorValue,
lineEndStationSelectorValue,
) => {
if (!storage.getLocalStorage('subway-line-list')) {
storage.setLocalStorageArray('subway-line-list', []);
}
const lineList = storage.getLocalStorageArray('subway-line-list');
lineList.push(lineStartStationSelectorValue, lineEndStationSelectorValue);
storage.setLocalStorageArray('subway-line-list', lineList);
};

const addLineLocalStorage = (
lineStartStationSelectorValue,
lineEndStationSelectorValue,
) => {
if (!storage.getLocalStorage('subway-line')) {
storage.setLocalStorageMap('subway-line', new Map());
}
const subwayLine = storage.getLocalStorageMap('subway-line');
if (subwayLine.get(elementIds.lineNameInput.value)) {
alert(errorMessage.lineDuplicate);
return false;
}
subwayLine.set(elementIds.lineNameInput.value, [
lineStartStationSelectorValue,
lineEndStationSelectorValue,
]);
storage.setLocalStorageMap('subway-line', subwayLine);
return true;
};

export { addLineList, addLineLocalStorage };
12 changes: 12 additions & 0 deletions src/controller/line-management/toggle-display.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { initSubwayRouteMap } from '../subway-route-map/init.js';
import { elementIds } from '../../utils.js';

export const toggleDisplay = () => {
elementIds.stationManagement.hidden = true;
elementIds.lineManagement.hidden = !elementIds.lineManagement.hidden;
elementIds.sectionManagement.hidden = true;
if (elementIds.mapPrintManagement) {
elementIds.mapPrintManagement.hidden = true;
}
initSubwayRouteMap();
};
Comment on lines +4 to +12
Copy link
Member

@jwon42 jwon42 Jun 1, 2021

Choose a reason for hiding this comment

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

저도 이 코드를 참고해서 같은 구조로 구현했습니다만,
사실상 하드코딩이라 toggle 해야하는 양이 많아졌을 때는 적합하지 않은 방법 같습니다.
일괄적으로 명령어를 전달하는 방법을 고민해야 할 것 같아요. (div class로 toggle해야하는 버튼들을 가둬두고 데이터속성 등의 방법으로 순회하며 요소에 접근하는 등....?? 잘은 모르겠습니다. 신박한 방법을 알게되면 공유하겠습니다.)

Copy link
Member Author

@hochan222 hochan222 Jun 1, 2021

Choose a reason for hiding this comment

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

맨처음에 작성한뒤 나중에 보았을때 저는 굉장히 안좋은 패턴이라고 결론 내렸습니다. 저에게 만약에 다실 짤 기회가 주어진다면 https://github.com/transcendence42/javascript-subway-map-precourse/blob/jwon/src/view/01-station/template.js 다음과 같이 작성한 후 메뉴 버튼을 클릭할 때마다 한 페이지를 통으로 생성하고 삭제를 해주는 로직으로 다실 짤 것같습니다.

Loading