- Introduced common.js for shared functions including API calls, error reporting, and UI helpers. - Implemented feedback.js for the feedback reporting page, including form handling and displaying feedback status. - Added layout.js for managing galaxy and section layouts in the visualization. - Created login.js for user authentication with session management. - Developed search.js for term searching based on user input and synonyms. - Implemented signup.js for user registration with validation and immediate login.
143 lines
5.3 KiB
Python
143 lines
5.3 KiB
Python
"""교재 PDF 목록과 은하(대단원) 구성.
|
|
|
|
은하는 2026 지역사회간호학 목차의 9개 장을 기준으로 삼고,
|
|
나머지 교재의 장은 아래 매핑표로 가장 가까운 은하에 연결한다.
|
|
"""
|
|
from pathlib import Path
|
|
import fnmatch
|
|
import unicodedata
|
|
|
|
ROOT = Path(__file__).resolve().parent.parent
|
|
DATA_DIR = ROOT / "data"
|
|
|
|
|
|
def _find(pattern: str) -> str:
|
|
nfc = lambda x: unicodedata.normalize("NFC", x)
|
|
hits = sorted(str(p) for p in ROOT.iterdir() if fnmatch.fnmatch(nfc(p.name), nfc(pattern)))
|
|
if not hits:
|
|
raise FileNotFoundError(pattern)
|
|
return hits[0]
|
|
|
|
|
|
# toc_pages / index_pages: 0부터 시작하는 PDF 파일상 페이지 번호
|
|
BOOKS = [
|
|
{
|
|
"book_id": "cn26a",
|
|
"title": "지역사회간호학 1권",
|
|
"short": "지간 2026-1",
|
|
"edition": "2026",
|
|
"year": 2026,
|
|
"primary": True,
|
|
"file": lambda: _find("2026 지역사회간호학 1권.pdf"),
|
|
"toc_style": "cn2026",
|
|
"toc_pages": range(6, 17),
|
|
"index_pages": range(402, 408),
|
|
},
|
|
{
|
|
"book_id": "cn26b",
|
|
"title": "지역사회간호학 2권",
|
|
"short": "지간 2026-2",
|
|
"edition": "2026",
|
|
"year": 2026,
|
|
"primary": True,
|
|
"file": lambda: _find("2026 지역사회간호학 2권.pdf"),
|
|
"toc_style": "cn2026",
|
|
"toc_pages": range(6, 14),
|
|
"index_pages": range(312, 317),
|
|
},
|
|
{
|
|
"book_id": "pac23a",
|
|
"title": "지역사회간호학 1 (5판, 퍼시픽북스)",
|
|
"short": "퍼시픽 5판-1",
|
|
"edition": "5판",
|
|
"year": 2023,
|
|
"primary": False,
|
|
"file": lambda: _find("*pacific*-1_*.pdf"),
|
|
"toc_style": "pacific",
|
|
"toc_pages": range(9, 17),
|
|
"index_pages": None, # 자동 탐지
|
|
},
|
|
{
|
|
"book_id": "pac23b",
|
|
"title": "지역사회간호학 2 (5판, 퍼시픽북스)",
|
|
"short": "퍼시픽 5판-2",
|
|
"edition": "5판",
|
|
"year": 2023,
|
|
"primary": False,
|
|
"file": lambda: _find("*pacific*-2_*.pdf"),
|
|
"toc_style": "pacific",
|
|
"toc_pages": range(9, 17),
|
|
"index_pages": None,
|
|
},
|
|
{
|
|
"book_id": "he23",
|
|
"title": "보건교육학",
|
|
"short": "보건교육학 2023",
|
|
"edition": "2023",
|
|
"year": 2023,
|
|
"primary": False,
|
|
"file": lambda: _find("2023 보건교육학*.pdf"),
|
|
"toc_style": "healthedu",
|
|
"toc_pages": range(5, 12),
|
|
"index_pages": range(305, 309),
|
|
},
|
|
]
|
|
|
|
# 은하 = 2026 교재의 장. sub(쉬운 보조 설명)는 교수자 검수 대상 초안.
|
|
GALAXIES = [
|
|
{"id": "g1", "chapter_no": 1, "name": "지역사회간호개론", "sub": "지역사회와 간호의 기본 생각", "color": "#9de0cc"},
|
|
{"id": "g2", "chapter_no": 2, "name": "지역사회보건행정", "sub": "제도·정책·조직으로 건강 지키기", "color": "#e5a7c5"},
|
|
{"id": "g3", "chapter_no": 3, "name": "지역사회 간호과정", "sub": "문제를 찾고, 해결하고, 돌아보기", "color": "#c4a5ff"},
|
|
{"id": "g4", "chapter_no": 4, "name": "건강증진", "sub": "건강하게 살아갈 힘 기르기", "color": "#8fd694"},
|
|
{"id": "g5", "chapter_no": 5, "name": "보건교육", "sub": "건강을 배우고 실천하도록 돕기", "color": "#f2d17c"},
|
|
{"id": "g6", "chapter_no": 6, "name": "역학", "sub": "질병은 얼마나, 누구에게, 왜 생길까", "color": "#93c8f3"},
|
|
{"id": "g7", "chapter_no": 7, "name": "생애주기별 인구집단 간호", "sub": "아기부터 노인까지 나이에 맞는 돌봄", "color": "#f0a98a"},
|
|
{"id": "g8", "chapter_no": 8, "name": "건강문제별 인구집단 간호", "sub": "감염병·만성질환 등 문제별 관리", "color": "#ef8f9f"},
|
|
{"id": "g9", "chapter_no": 9, "name": "생활터별 인구집단 간호", "sub": "가정·학교·일터·환경에서의 돌봄", "color": "#e5bd8a"},
|
|
]
|
|
|
|
# 보조 교재 장 번호 → 은하. (book_id, 장 번호) 기준, 절 제목 키워드로 덮어쓸 수 있음.
|
|
SECONDARY_CHAPTER_MAP = {
|
|
("pac23a", 1): "g1",
|
|
("pac23a", 2): "g2",
|
|
("pac23a", 3): "g3",
|
|
("pac23a", 4): "g3",
|
|
("pac23a", 5): "g4",
|
|
("pac23b", 6): "g9",
|
|
("pac23b", 7): "g7",
|
|
("pac23b", 8): "g6",
|
|
("pac23b", 9): "g8",
|
|
("pac23b", 10): "g9",
|
|
("pac23b", 11): "g8",
|
|
("he23", None): "g5",
|
|
}
|
|
# 절/항 제목에 이 키워드가 있으면 해당 은하로 보냄 (보조 교재에만 적용)
|
|
SECONDARY_KEYWORD_MAP = [
|
|
("보건교육", "g5"),
|
|
("건강증진", "g4"),
|
|
("역학", "g6"),
|
|
("가족", "g9"),
|
|
("학교", "g9"),
|
|
("산업", "g9"),
|
|
("환경", "g9"),
|
|
("재난", "g8"),
|
|
("감염", "g8"),
|
|
("만성질환", "g8"),
|
|
]
|
|
|
|
# 보조 교재 목차 경로에 키워드가 있으면 2026 교재의 해당 제목 절로 우선 배정
|
|
SECONDARY_SECTION_OVERRIDES = [
|
|
("산업", "직업건강간호"),
|
|
("작업환경", "직업건강간호"),
|
|
("근로자", "직업건강간호"),
|
|
("재난", "재난관리"),
|
|
("학교", "학교보건"),
|
|
("학생", "학교보건"),
|
|
("가족", "가족간호"),
|
|
("보건통계", "역학적 측정지표"),
|
|
("모자보건", "모자보건사업"),
|
|
("영유아", "모자보건사업"),
|
|
("노인", "노인보건사업"),
|
|
("재활", "재활간호사업"),
|
|
]
|