편집 요약 없음 태그: 수동 되돌리기 |
편집 요약 없음 |
||
| 2번째 줄: | 2번째 줄: | ||
== == | == == | ||
<html lang="ko"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<title>커뮤니티</title> | |||
<style> | |||
:root { | |||
--bg: #f4f6f8; | |||
--panel: #ffffff; | |||
--text: #1f2937; | |||
--subtext: #6b7280; | |||
--border: #e5e7eb; | |||
--accent: #3b82f6; | |||
--accent-hover: #2563eb; | |||
--danger: #ef4444; | |||
} | |||
* { box-sizing: border-box; font-family: "Pretendard", system-ui, -apple-system, sans-serif; } | |||
body { margin:0; padding:16px; background:var(--bg); color:var(--text); min-width:320px; } | |||
.container { width:100%; max-width:100%; } | |||
.write-box { background:var(--panel); border-radius:14px; padding:16px; margin-bottom:20px; box-shadow:0 6px 18px rgba(0,0,0,0.05);} | |||
.write-row { display:flex; gap:10px; margin-bottom:10px; flex-wrap:nowrap;} | |||
.write-row input { flex:1 1 0; min-width:0; border:1px solid var(--border); background:#fafafa; padding:12px; border-radius:8px; font-size:14px; } | |||
.write-row input:focus { outline:none; border-color:var(--accent); background:#fff;} | |||
#titleInput { width:100%; margin-bottom:10px; border:1px solid var(--border); background:#fafafa; padding:12px; border-radius:8px; font-size:14px; } | |||
#titleInput:focus { outline:none; border-color:var(--accent); background:#fff;} | |||
textarea { width:100%; min-height:150px; resize:vertical; margin-bottom:12px; border:1px solid var(--border); background:#fafafa; padding:12px; border-radius:8px; font-size:14px; } | |||
textarea:focus { outline:none; border-color:var(--accent); background:#fff;} | |||
button { background:var(--accent); color:white; border:none; padding:10px 18px; border-radius:8px; cursor:pointer; font-size:14px; } | |||
button:hover { background:var(--accent-hover); } | |||
.list { background:var(--panel); border-radius:14px; padding:6px; box-shadow:0 6px 18px rgba(0,0,0,0.05); } | |||
.post { padding:14px 16px; border-radius:10px; cursor:pointer; } | |||
.post:hover { background:#f3f4f6; } | |||
.post + .post { border-top:1px solid var(--border); } | |||
.title { font-size:15px; font-weight:600; } | |||
.meta { font-size:12px; color:var(--subtext); margin-top:4px; } | |||
.modal { position:fixed; inset:0; background:rgba(0,0,0,.45); display:none; align-items:center; justify-content:center; z-index:999; } | |||
.modal-content { background:var(--panel); padding:22px; width:90%; max-width:900px; border-radius:16px; } | |||
#modalTitle { margin:0; font-size:20px; } | |||
.modal-meta { font-size:13px; color:var(--subtext); margin:6px 0 14px; } | |||
#modalContent { white-space:pre-wrap; line-height:1.6; margin-bottom:20px; } | |||
.modal-actions { display:flex; justify-content:flex-end; gap:10px; } | |||
.delete { background:var(--danger); } | |||
.delete:hover { background:#dc2626; } | |||
</style> | |||
</head> | |||
<body> | |||
<div class="container"> | |||
<!-- 글쓰기 --> | |||
<div class="write-box"> | |||
<div class="write-row"> | |||
<input id="nicknameInput" placeholder="닉네임"> | |||
<input id="passwordInput" type="password" placeholder="비밀번호"> | |||
</div> | |||
<input id="titleInput" placeholder="제목"> | |||
<textarea id="contentInput" placeholder="내용"></textarea> | |||
<button onclick="addPost()">등록</button> | |||
</div> | |||
<!-- 글 목록 --> | |||
<div class="list" id="list"></div> | |||
</div> | |||
<!-- 모달 --> | |||
<div class="modal" id="modal" onclick="closeModal()"> | |||
<div class="modal-content" onclick="event.stopPropagation()"> | |||
<h3 id="modalTitle"></h3> | |||
<div class="modal-meta" id="modalNickname"></div> | |||
<div id="modalContent"></div> | |||
<div class="modal-actions"> | |||
<button class="delete" onclick="deletePost()">삭제</button> | |||
<button onclick="closeModal()">닫기</button> | |||
</div> | |||
</div> | |||
</div> | |||
<script> | |||
const nicknameInput = document.getElementById("nicknameInput"); | |||
const passwordInput = document.getElementById("passwordInput"); | |||
const titleInput = document.getElementById("titleInput"); | |||
const contentInput = document.getElementById("contentInput"); | |||
const list = document.getElementById("list"); | |||
const modal = document.getElementById("modal"); | |||
const modalTitle = document.getElementById("modalTitle"); | |||
const modalNickname = document.getElementById("modalNickname"); | |||
const modalContent = document.getElementById("modalContent"); | |||
let posts = []; // 문법 문자열로 저장 | |||
let currentPostId = null; | |||
// 문법 예시: [[닉네임]]|비밀번호|제목|내용 | |||
function addPost() { | |||
const nick = nicknameInput.value.trim(); | |||
const pass = passwordInput.value.trim(); | |||
const t = titleInput.value.trim(); | |||
const c = contentInput.value.trim(); | |||
if(!nick || !pass || !t || !c){ alert("모든 항목을 입력하세요."); return; } | |||
const line = `[[${nick}]]|${pass}|${t}|${c}`; | |||
posts.unshift(line); | |||
nicknameInput.value=""; passwordInput.value=""; titleInput.value=""; contentInput.value=""; | |||
render(); | |||
} | |||
function parsePost(line) { | |||
const [nickPart, pass, title, content] = line.split("|"); | |||
const nick = nickPart.replace(/^\[\[|\]\]$/g,""); | |||
return { nick, pass, title, content }; | |||
} | |||
function render() { | |||
list.innerHTML = ""; | |||
posts.forEach((line, idx)=>{ | |||
const p = parsePost(line); | |||
const d = document.createElement("div"); | |||
d.className = "post"; | |||
d.innerHTML = `<div class="title">${p.title}</div><div class="meta">작성자: ${p.nick}</div>`; | |||
d.onclick = ()=>openPost(idx); | |||
list.appendChild(d); | |||
}); | |||
} | |||
function openPost(idx){ | |||
const p = parsePost(posts[idx]); | |||
currentPostId = idx; | |||
modal.style.display="flex"; | |||
modalTitle.innerText = p.title; | |||
modalNickname.innerText = "작성자: "+p.nick; | |||
modalContent.innerText = p.content; | |||
} | |||
function deletePost(){ | |||
const p = parsePost(posts[currentPostId]); | |||
const input = prompt("비밀번호를 입력하세요"); | |||
if(input !== p.pass){ alert("비밀번호가 틀렸습니다."); return; } | |||
posts.splice(currentPostId,1); | |||
closeModal(); | |||
render(); | |||
} | |||
function closeModal(){ modal.style.display="none"; currentPostId=null; } | |||
render(); | |||
</script> | |||
</body> | |||
</html> | |||
== 대형사철 == | == 대형사철 == | ||
2026년 2월 2일 (월) 17:29 판
레웨걸용 연습장
대형사철
대한철도 (수도권) 한성메트로 네오트랜스 경진철도 대원철도 경기철도 강화철도 경동철도 (동남권)
(평양권) 평양메트로
수도권
- 한성메트로 (사철)
- 1호선
- 2호선
- 3호선
- 4호선
- 한성도시철도공사
- 5호선
- 6호선
- 7호선
- 8호선
- 한성부메트로9호선 (사철)
- 9호선
- 안산전철 (사철)
- 10호선
- 분당급행전철 (사철)
- 11호선
- 철도청
- 12호선
- 13호선
- 서해철도
- 14호선
수도권 사철
- 네오트랜스
- 신분당선
- 신일산선
- 새서울철도
- 신용산선
- 경진철도
- 사당선
- 경기철도
- 대원철도
- 경인급행전철
- 신경인선
- 강화철도
- 강화본선
- 경동철도
- 경동본선
만철
일본 국철
2
| 김유성 金流盛 | Kim yu-sŏng | |||
|---|---|---|---|
| 나이 | 18세 | 혈액형 | B형 |
| 신장 | 162㎝ | 체중 | 45㎏ |
| 생년 | 2009년 5월 12일 |
성별 | 여성 |
| 국적 | 대한제국 | 쓰는 손 | 오른손 |
| 출신지 | 평안북도 선천시 | 거주지 | 경기도 시흥부 |
| 다른 이름 | 류세이 (リュウセイ) 메테오 (メテオ) | ||
| 학력 | 상반중학교 (전학) 일직중학교 (졸업)[2] 금천공업고등학교 (재학 중) | ||
| 가족 | 김구성 (아버지) 이세류 (어머니) 김유미 (여동생) 김유한 (남동생) | ||
| 취미 | 철도 덕질, 사진 찍기, 자전거 타기, 트위터 하기, 트친들과 놀러다니기 | ||
3
| 대한제국 행정구역 단계 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
[ 펼치기 · 접기 ]
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
