Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
7d8dc08
initial commit
dudtjr913 Dec 10, 2020
9a612fb
Update : README.md - 기능 구현 목록 작성
dudtjr913 Dec 10, 2020
f0c9888
Update : README.md - 기능 구현 목록 추가
dudtjr913 Dec 10, 2020
e2baad2
Update : HTML 태그 추가
dudtjr913 Dec 10, 2020
fd7a38e
Feat : 버튼 클릭 시 화면에 출력 함수 구현 중
dudtjr913 Dec 10, 2020
cb248f4
Feat : 모든 section display : none으로 만드는 함수 구현
dudtjr913 Dec 10, 2020
71fbbf1
Update : HTML에 map section추가
dudtjr913 Dec 10, 2020
ef485fd
Feat : 버튼 클릭 -> 화면 출력 구현 완료
dudtjr913 Dec 10, 2020
7b8cf16
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 10, 2020
8bbb601
Feat : 버튼 클릭 시 역 추가 기능 구현 중
dudtjr913 Dec 11, 2020
f3d150a
Feat : 역 추가 시 화면에 출력 완료
dudtjr913 Dec 11, 2020
56526a7
Feat : 역 추가 시 click 이벤트 및 dataset등록 완료
dudtjr913 Dec 11, 2020
f8f5309
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 11, 2020
eafe132
Feat : 삭제 버튼 클릭 시 storage에서 삭제
dudtjr913 Dec 11, 2020
fd65151
Feat : 화면에서 역 삭제 기능 구현
dudtjr913 Dec 11, 2020
ef6a0c2
Feat : 역을 추가할 때 input의 유효성 검사
dudtjr913 Dec 11, 2020
82447d5
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 11, 2020
8dfe107
Refactor : local-storage 모듈화
dudtjr913 Dec 11, 2020
2ec1135
Feat : 삭제할 때 확인받는 기능 추가
dudtjr913 Dec 11, 2020
7ae9f61
Feat : localStorage를 통해 로드 기능 완료
dudtjr913 Dec 11, 2020
762f9e4
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 11, 2020
dd57dfa
Feat : Station class 추가
dudtjr913 Dec 11, 2020
5de3c5f
Update : local => class 변환 작업
dudtjr913 Dec 11, 2020
6b25f0f
Feat : 화면을 누를 때마다 화면 랜더링
dudtjr913 Dec 11, 2020
f8cab4a
Update : 버튼 클릭 시 랜더링 취소
dudtjr913 Dec 11, 2020
51e3de6
Feat : 노선 option 추가 기능 구현
dudtjr913 Dec 11, 2020
5fd90cc
Feat : 역 추가 시 종점 option 추가
dudtjr913 Dec 11, 2020
98f4177
Feat : 역 제거 시 종점 제거 기능 구현
dudtjr913 Dec 11, 2020
bf82da0
Style : 역을 삭제하는 버튼에 class추가
dudtjr913 Dec 11, 2020
db9292e
Refactor : element들을 input.js로 이동
dudtjr913 Dec 11, 2020
1d4045a
Feat : 노선을 localStorage에 추가
dudtjr913 Dec 11, 2020
f0e93c4
Feat : 노선 class 생성 및 노선 추가 시 프로퍼티에 추가
dudtjr913 Dec 11, 2020
30f893f
Feat : 노선 추가 시 화면에 출력하는 기능 구현
dudtjr913 Dec 11, 2020
a19e11c
Feat : 지하철 노선 삭제 시 localStorage에서 삭제
dudtjr913 Dec 11, 2020
b669488
Feat : 노선 삭제 기능 추가
dudtjr913 Dec 11, 2020
96e2d7d
Feat : 노선 추가 시 유효성 검사 - 예외처리 완료
dudtjr913 Dec 11, 2020
5181593
Style : 에러 메시지 변경
dudtjr913 Dec 11, 2020
826674d
Style : 변수,함수 명 변경
dudtjr913 Dec 11, 2020
9dda803
Refactor : 유효성 검사 함수 분리
dudtjr913 Dec 11, 2020
1d2635d
Feat : 페이지 로드 시 노선 자동 가져오기 완료
dudtjr913 Dec 11, 2020
cb8fd84
Update : README.md - 기능 구현 목록 최신화 및 변경
dudtjr913 Dec 11, 2020
e164411
Feat : 구간 선택 버튼 추가
dudtjr913 Dec 12, 2020
1dd82be
Refactor : 종점 추가 함수 재사용
dudtjr913 Dec 12, 2020
490916c
Style : 함수 명 변경
dudtjr913 Dec 12, 2020
828f0a8
Feat : 구간 관리에 역 선택 추가
dudtjr913 Dec 12, 2020
1cd678f
Refactor : 역 추가 옵션과 같게 역 제거 옵션 변경
dudtjr913 Dec 12, 2020
c32c894
Feat : 구간 클릭 시 화면에 표시하는 함수 구현 중
dudtjr913 Dec 12, 2020
5f21391
Refactor : 노선 data 형식 변경
dudtjr913 Dec 12, 2020
dd1a165
Update : 노선 로드 시 종점의 알고리즘 변경
dudtjr913 Dec 12, 2020
725ce54
Bug : 연산자 실수
dudtjr913 Dec 12, 2020
6f51f50
Feat : Section class 생성 및 로드 완료
dudtjr913 Dec 12, 2020
309bc07
Style : lastStop -> station 변경
dudtjr913 Dec 12, 2020
2876fee
Feat : 구간 노선 추가 구현
dudtjr913 Dec 12, 2020
f7ab4a9
Update : 변수 명 변경 및 구간 숨기기
dudtjr913 Dec 12, 2020
3f4bfe4
Style : section => line 변경
dudtjr913 Dec 12, 2020
ac0ecb6
Feat : 구간 선택 시 노선을 화면에 표시
dudtjr913 Dec 12, 2020
f593ee8
Feat : 구간 등록 시 localStorage 업데이트 완료
dudtjr913 Dec 12, 2020
17e6b3f
Feat : 구간 추가 시 Section class 업데이트
dudtjr913 Dec 12, 2020
891a373
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 12, 2020
95c71fc
Feat : 구간 추가 시 화면 실시간 업데이트
dudtjr913 Dec 12, 2020
4da78d8
Feat : 구간 삭제 시 화면 실시간 업데이트
dudtjr913 Dec 12, 2020
7bc2d33
Update : Section class method 삭제
dudtjr913 Dec 12, 2020
860d98d
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 12, 2020
b95f756
Feat : 구간 등록 시 유효성 검사
dudtjr913 Dec 12, 2020
d105902
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 12, 2020
0fa1154
Style : 변수 명 변경
dudtjr913 Dec 12, 2020
dd2ee02
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 12, 2020
6f0a570
Feat : 구간 등록 시 input 초기화
dudtjr913 Dec 12, 2020
bcb4ed2
Feat : 화면 실시간 업데이트 기능 추가 중
dudtjr913 Dec 12, 2020
ae3c8c9
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 12, 2020
d4ade93
Feat : 노선에 존재하는 역 삭제 불가 기능 추가
dudtjr913 Dec 12, 2020
bbde448
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 12, 2020
4a947fb
Feat : 노선에 역이 2개이면 삭제 불가 기능 추가
dudtjr913 Dec 12, 2020
81543a9
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 12, 2020
cccc5e5
Feat : 관리하는 노선 화면에 출력
dudtjr913 Dec 12, 2020
d9e919f
Bug : 숫자를 입력할 때 0은 불가능인 것 패치
dudtjr913 Dec 12, 2020
355a7c7
Feat : 노선과 구간 삭제 메시지 추가
dudtjr913 Dec 12, 2020
f6f7212
Feat : 지하철 노선도 출력 기능 구현 중
dudtjr913 Dec 12, 2020
b6570eb
Feat : 지하철 노선도 실시간 랜더링 완료
dudtjr913 Dec 12, 2020
424c25b
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 12, 2020
a3b03c7
Refactor : Section class 삭제
dudtjr913 Dec 13, 2020
e3713d8
Refactor : station관련 control 분리
dudtjr913 Dec 13, 2020
b1950b0
Refactor : line 관련 control 분리
dudtjr913 Dec 13, 2020
fc92a12
Refactor : section 관련 control 분리
dudtjr913 Dec 13, 2020
ede2795
Refactor : map 관련 control 분리
dudtjr913 Dec 13, 2020
9837d8e
Refactor : element를 모두 element.js에서 관리
dudtjr913 Dec 13, 2020
3882553
Refactor : 함수 분리
dudtjr913 Dec 13, 2020
0ec0874
Refactor : 버튼을 셋팅하는 함수 쪼개기
dudtjr913 Dec 13, 2020
5eee1a7
Refactor : screen change 관련 가독성 증가 및 함수 쪼개기
dudtjr913 Dec 13, 2020
c8f6b9d
Refactor : screen change관련 함수 쪼개기
dudtjr913 Dec 13, 2020
d9c4b3b
Refactor : 비슷한 함수 합치기
dudtjr913 Dec 13, 2020
37309fd
Refactor : 쓸데 없는 화면 로드를 하지 않기 위한 리팩토링
dudtjr913 Dec 13, 2020
03118f6
Refactor : 더 이상 화면을 로드할 때 화면 삭제 기능 필요 x
dudtjr913 Dec 13, 2020
57816a8
Refactor : 구간 추가 시 화면 랜더링 완료
dudtjr913 Dec 13, 2020
ffa1a38
Refactor : 구간 제거 시 실시간 화면 랜더링
dudtjr913 Dec 13, 2020
3ec3fbc
Update : README.md - 기능 구현 목록 최신화
dudtjr913 Dec 13, 2020
ed43f7d
Refactor : View 상수화 작업 완료
dudtjr913 Dec 14, 2020
51f3132
Refactor : 각종 element 추출
dudtjr913 Dec 14, 2020
8d57b2d
Bug : 노선에 역 추가 시 구간에 등록되지 않는 버그 수정
dudtjr913 Dec 14, 2020
3a7e3df
Refactor : element 정리
dudtjr913 Dec 14, 2020
ec55e68
Bug : 노선 삭제 시 구간에 남아있는 버그 수정
dudtjr913 Dec 14, 2020
e4c055a
Refactor : return 추가
dudtjr913 Dec 14, 2020
3efb7da
Refactor : element 이름 직관적이게 변경
dudtjr913 Dec 14, 2020
6a76d5e
Refactor : return 전에 한 줄 띄는 것을 깜빡함
dudtjr913 Dec 14, 2020
4f7a88c
Refactor : 각종 key 상수화
dudtjr913 Dec 14, 2020
e22c698
Refactor : 변수의 에러메시지 상수화
dudtjr913 Dec 14, 2020
4ae585a
Refactor : confirm 메시지 상수화 및 KEY 적용
dudtjr913 Dec 14, 2020
dbcd24e
Style : 메시지에 이모티콘 적용
dudtjr913 Dec 14, 2020
be1a7cf
Refactor : 역 이름이나 노선 이름에 name추가
dudtjr913 Dec 14, 2020
64f221e
Bug : 노선도가 숨겨지지 않는 버그 발견
dudtjr913 Dec 14, 2020
ca0ffa9
Refactor : 더이상 사용하지 않는 함수 제거
dudtjr913 Dec 14, 2020
029ca36
Style : error message 변경
dudtjr913 Dec 14, 2020
8423ae8
Style : 제목에 이모티콘 추가
dudtjr913 Dec 15, 2020
4f90c63
Refactor : Model에서 Control참조 x
dudtjr913 Dec 15, 2020
db989fe
Bug : 노선 삭제 시 구간에서 삭제되지 않는 버그 해결
dudtjr913 Dec 15, 2020
0d7db3e
Style : line -> lineName으로 변경
dudtjr913 Dec 15, 2020
1854339
Refactor : Station class refactoring
dudtjr913 Dec 15, 2020
3e179c1
Style : utils => constant 변경
dudtjr913 Dec 15, 2020
2a13db1
Refactor : View => index로 이동 작업
dudtjr913 Dec 15, 2020
bc561f4
Refactor : View에서 controller 참조하는 값 분리 중
dudtjr913 Dec 15, 2020
325d766
Refactor : 변수 명 변경
dudtjr913 Dec 15, 2020
7740bd3
Refactor : View에서 button event 분리 완료
dudtjr913 Dec 15, 2020
a0349f0
Refactor : constant 위치 변경
dudtjr913 Dec 15, 2020
3468219
Refactor : 함수 선언식 -> 함수 표현식(arrow)
dudtjr913 Dec 15, 2020
f0305bd
Refactor : arrow함수로 전환
dudtjr913 Dec 15, 2020
a0cd528
Style : 이모티콘 오류 확인 후 수정
dudtjr913 Dec 15, 2020
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
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
git-commit-template.txt
node_modules
package.json
package-lock.json
.eslintrc.js
61 changes: 61 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
## 기능 구현 목록

### 화면 출력

- ✔ 버튼을 누르면 버튼에 맞는 화면을 출력한다.

### localStorage

- ✔ localStorage를 사용해 새로고침하더라도 이전에 작업한 정보를 불러온다.

### data

- ✔ data속성을 활용해 역, 노선, 구간의 데이터 값을 관리한다.

### 역 관리

- ✔ 역을 추가할 수 있고, 화면에 추가한다.

- 예외처리)
- ✔ 중복 불가
- ✔ 2글자 미만 불가
- ✔ 한글과 숫자만 가능(기능 추가)

- ✔ 역을 삭제할 수 있고, 화면에서 삭제한다.
- 예외처리)
- ✔ 노선에 등록된 역 삭제 불가

### 노선 관리

- ✔ 존재하는 역을 통해 상행과 하행 종점을 선택할 수 있고, 이름을 정해서 노선을 추가할 수 있으며, 화면에 추가한다.

- 예외처리)
- ✔ 노선 이름 중복 불가
- ✔ 한글과 숫자만 가능(기능 추가)
- ✔ 2글자 미만 불가(기능 추가)
- ✔ 한 노선에서 중복된 역 입력 불가(기능 추가)

- ✔ 노선을 삭제할 수 있고, 화면에서 삭제한다.

### 구간 관리

- ✔ 존재하는 노선을 선택할 수 있고, 선택 시 화면에 출력한다.

- ✔ 노선에 존재하는 역을 추가할 수 있으며, 순서를 정할 수 있다.
- 예외처리)
- ✔ 같은 노선에 중복된 역 추가 불가
- ✔ 노선 내에서 갈래길이 존재할 수 없음
- ✔ 가장 큰 순서보다 큰 수 입력 불가
- ✔ 0부터 입력가능
- ✔ 이때 순서에 맞게 화면이 랜더링된다.
- ✔ 또한, 순서 0이 입력되면, 상행 종점이 된다.

- ✔ 노선에서 역을 삭제할 수 있으며, 화면에서 삭제한다.

- 예외처리)
- ✔ 한 노선에서 역이 두 개 이하일 때 삭제 불가
- ✔ 이때, 종점을 삭제하면 종점 전의 역이 종점이 되고, 화면을 랜더링한다.

### 노선도 출력

- ✔ 노선 별 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 화면에 출력한다.
68 changes: 67 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,73 @@
</head>
<body>
<div id="app">
<h1>🚇 지하철 노선도 관리 </h1>
<h1>🚇 지하철 노선도 관리</h1>
<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>
<section id="station" style="margin-top: 20px; display: none">
<div>역 이름</div>
<input id="station-name-input" />
<button id="station-add-button">역 추가</button>
<h1>🚉 지하철 역 목록</h1>
<table border="1">
<tbody>
<tr>
<th>역 이름</th>
<th>설정</th>
</tr>
</tbody>
</table>
</section>
<section id="line" style="margin-top: 20px; display: none;">
<div>노선 이름</div>
<input id="line-name-input" />
<p>
<div>
상행 종점
<select id="line-start-station-selector"></select>
</div>
<div>
하행 종점
<select id="line-end-station-selector"></select>
</div>
</p>
<button id="line-add-button">노선 추가</button>
<h1>🚉 지하철 노선 목록</h1>
<table border="1">
<tbody>
<tr>
<th>노선 이름</th>
<th>상행 종점역</th>
<th>하행 종점역</th>
<th>설정</th>
</tr>
</tbody>
</table>
</section>
<section id="subway-section" style="margin-top: 20px; display: none">
<h2>구간을 수정할 노선을 선택해주세요.</h2>
<div id="section-select-button"></div>
<div id="subway-section-edit" style="display: none">
<h2></h2>
<h4>구간 등록</h4>
<select id="section-station-selector"></select>
<input placeholder="순서" id="section-order-input" />
<button id="section-add-button">등록</button>
<table border="1" style="margin-top: 30px">
<tbody>
<tr>
<th>순서</th>
<th>이름</th>
<th>설정</th>
</tr>
</tbody>
</table>
</div>
</section>
<section id="map-section" style="display: none;">
</section>
</div>
<script type="module" src="src/index.js"></script>
</body>
Expand Down
81 changes: 81 additions & 0 deletions src/Controller/line-control.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import {
$lineNameInput,
$upStreamSelector,
$downStreamSelector,
} from '../View/element.js';
import {
addLineScreen,
addMapPrint,
addSectionButton,
addSectionScreen,
addSelectorOption,
} from '../View/add-screen.js';
import {
removeLineScreen,
removeSectionButton,
removeSectionScreen,
removeMapPrint,
} from '../View/remove-screen.js';
import {hideSectionEditContainer} from '../View/hide-screen.js';
import {
setLocalStorage,
getLocalStorage,
removeLocalStorage,
} from './local-storage.js';
import {stationInstance, lineInstance} from '../index.js';
import {
setLineButtonDeleteEvent,
setSectionButtonLoadEvent,
setSectionButtonDeleteEvent,
} from './set-button-event.js';
import {isLineInputValid} from './valid.js';
import {KEY, TEXT} from '../constant.js';

export const onAddLine = () => {
const lineValue = getLineValue();
if (isLineInputValid(lineValue, lineInstance.lines)) {
setLocalStorage(KEY.LINE, lineValue);
lineInstance.addLine(lineValue);
addLineScreen(lineValue);
addSectionButton(lineValue.lineName);
addSectionScreen(lineValue);
addMapPrint([lineValue]);
setSectionButtonDeleteEvent(lineValue);
setLineButtonDeleteEvent(lineValue.lineName);
setSectionButtonLoadEvent(lineValue.lineName);
}
$lineNameInput.value = '';
};

export const onRemoveLine = (e) => {
const removeConfirm = confirm(TEXT.CONFIRM_DELETE);
if (removeConfirm) {
removeLocalStorage(KEY.LINE, e.target.dataset.lineName);
lineInstance.removeLine(e.target.dataset.lineName);
removeLineScreen(e.target);
removeSectionButton(e.target.dataset.lineName);
removeSectionScreen(e.target.dataset.lineName);
removeMapPrint(e.target.dataset.lineName);
hideSectionEditContainer();
}
};

export const loadLine = () => {
const lines = getLocalStorage(KEY.LINE);
lineInstance.loadLine(lines);
stationInstance.stations.forEach((station) => {
addSelectorOption($upStreamSelector, station);
addSelectorOption($downStreamSelector, station);
});
lineInstance.lines.forEach((line) => {
addLineScreen(line);
setLineButtonDeleteEvent(line.lineName);
});
};

const getLineValue = () => {
return {
lineName: $lineNameInput.value,
station: [$upStreamSelector.value, $downStreamSelector.value],
};
};
59 changes: 59 additions & 0 deletions src/Controller/local-storage.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import {KEY} from '../constant.js';

export const addSectionOnLocalStorage = (key, value) => {
const localStorageValue = getLocalStorage(key);
const sectionIndex = localStorageValue.findIndex(
(line) => line.lineName === value.lineName,
);
localStorageValue[sectionIndex].station.splice(
value.number,
0,
value.sectionName,
);

return localStorage.setItem(key, JSON.stringify([...localStorageValue]));
};

export const setLocalStorage = (key, value) => {
const localStorageValue = getLocalStorage(key);
if (localStorageValue === null) {
return localStorage.setItem(key, JSON.stringify([value]));
}

return localStorage.setItem(
key,
JSON.stringify([...localStorageValue, value]),
);
};

export const getLocalStorage = (key) => {
const localStorageValue = JSON.parse(localStorage.getItem(key));

return localStorageValue;
};

export const removeSectionOnLocalStorage = (key, value) => {
const localStorageValue = getLocalStorage(key);
const sectionIndex = localStorageValue.findIndex(
(line) => line.lineName === value.lineName,
);
localStorageValue[sectionIndex].station = localStorageValue[
sectionIndex
].station.filter((station) => station !== value.station);

return localStorage.setItem(key, JSON.stringify([...localStorageValue]));
};

export const removeLocalStorage = (key, value) => {
const localStorageValue = getLocalStorage(key);
const filteredStorage = localStorageValue.filter((storage) => {
if (key === KEY.STATION) {
return storage !== value;
}
if (key === KEY.LINE) {
return storage.lineName !== value;
}
});

return localStorage.setItem(key, JSON.stringify(filteredStorage));
};
7 changes: 7 additions & 0 deletions src/Controller/map-print-control.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import {addMapPrint} from '../View/add-screen.js';
import {lineInstance} from '../index.js';

export const loadMapPrint = () => {
lineInstance.loadLine();
addMapPrint(lineInstance.lines);
};
Loading