Conversation
refactor: 코드 단순화, 폴더 구조 재정리 및 보안 취약점 해결
* feat: 다국어(i18n) 지원 추가 (ko, en, ja, zh) - react-i18next 도입 및 4개 네임스페이스(common, option, popover, player) 구성 - 한국어/영어/일본어/중국어 번역 파일 작성 - Chrome _locales 설정 및 manifest __MSG_*__ 적용 - 모든 UI 컴포넌트 하드코딩 문자열을 t() 함수로 교체 - dateUtils/stringUtils에서 i18n.t() 직접 사용 - TimeDifferenceResult에 status 필드 추가 (문자열 매칭 제거) - SummaryCard type prop 리팩터 (title.includes 패턴 제거) - 사이드바에 언어 전환 드롭다운 추가 * refactor: LMS 파싱 키워드를 lmsKeywords.ts로 분리 - NOT_SUBMITTED, BULK_APPROVED 배열을 별도 파일로 추출 - 새 LMS 언어 추가 시 배열에 문자열만 추가하면 동작 * feat: LMS 날짜 형식 다국어 정규화 추가 - normalizeLmsDate/normalizeLmsRange 함수로 ja/zh 날짜 형식 대응 - fetchAssign, fetchQuiz, fetchVodList에서 파싱 단계에서 날짜 정규화 * feat: mock 모드에서 실제 LMS fetch 테스트 지원 - VITE_MOCK_COURSES로 과목 지정 시 실제 scrapeCourseData 호출 - VITE_MOCK_SKIP_DATE_FILTER로 마감 필터링 비활성화 (지난 학기 테스트용)
* feat: popover 설정(Setting) 탭 추가 - Setting 컴포넌트 구현 (언어 전환 Select + 문의 링크) - shadcn Select/DropdownMenu Shadow DOM Portal 대응 - TabNavigation에 설정 탭 추가 (4칸 그리드) - DashboardHeader에서 Setting 탭일 때 검색/필터/새로고침 숨김 - 4개 언어 번역 파일에 setting, contact, refresh 키 추가 * feat: 팝오버 설정 탭 UI 개선 및 다국어 키 추가 - Setting 컴포넌트에 Google Calendar 배너, 문의하기, GitHub Star 배너 추가 - common.json에 calendar, bubble, github 번역 키 추가 (ko/en/ja/zh) - DashboardHeader, TabNavigation, Dashboard UI 개선 - InfoBubble 컴포넌트 추가 * feat: InfoBubble 등장 애니메이션 추가 및 언어 설정 UI 개선 - InfoBubble에 아래에서 올라오는 framer-motion fade-in 애니메이션 추가 - 언어 선택 드롭다운 화살표 아이콘 제거, 선택값 폰트 크기 증가 * feat: 팝오버에 구글 캘린더 연동 기능 추가 * chore: 옵션 페이지 삭제 * chore: 청킹 리밋 변경 * feat: InfoBubble UX 개선 및 새로고침 블로킹 제거 - deprecated @types/gapi.client.calendar를 @types/gapi.client.calendar-v3로 교체 - InfoBubble 멘트를 친근한 톤으로 변경 (4개 언어) - 최신화 시간 30분 이상 시 주황색 표시 - VOD 카운팅을 주차 그룹 기준으로 변경 - 팝오버 닫을 때 InfoBubble 복귀 (X 버튼 dismiss와 분리) - InfoBubble 그림자 강화 - PendingDialog 전체 화면 블로킹 제거 - 카카오 오픈채팅 링크 업데이트 * feat: 캘린더 동기화 개선 및 알림 시스템 추가 - NotificationBubble 컴포넌트 추가 (InfoBubble 스타일 통일) - popover 열림: content 상단에 표시 / 닫힘: trigger 위에 표시 - i18n key 기반 렌더링으로 언어 변경 즉시 반영 - loading/success/error/warning 4가지 타입 - 캘린더 일괄 전송 (동시 2건 + 500ms 딜레이) 및 실패 건 자동 재시도 - OAuth 401 토큰 만료 감지 및 재로그인 유도 알림 - getCalendarEvents 페이지네이션 (maxResults=2500) 지원 - DashboardHeader props를 FilterHandlers/HeaderActions로 그룹화 - TabNavigation 미완료 탭 빨간 dot 표시 - PendingDialog 삭제 - useCourseData deps에 useMockData 추가 - handleToggleOpen setTimeout cleanup 개선 - mock: 오늘 날짜 테스트 태스크 및 로그인 만료 알림 추가
* feat: 과목별 트래킹 선택 및 UX 개선 - 커뮤니티 포함 전체 과목 파싱, DOM 토글로 트래킹 on/off - 강의 추가 시 해당 강의만 fetch, 삭제 시 storage에서 제거 - 캐시 TTL 24시간→1시간, visibilitychange 기반 자동 갱신 - 새로고침 시 NotificationBubble 알림 표시 - macOS 스타일 스크롤바 통일 (플랫폼 간 일관성) - 새로고침 버튼 제한 제거, i18n 번역 추가 * fix: trackedCourseIds 변경 감지 로직 개선 - Set 기반 비교로 배열 참조 동일성 문제 해결 - stale courseId 검증 추가 (allCourses에 없는 ID 무시)
* feat: 퀴즈 제출 여부 트래킹 및 태스크 숨김 기능 추가 - 퀴즈 상세 페이지(view.php)를 fetch하여 제출 여부(isSubmit) 판단 - 마감된 퀴즈는 캐시된 isSubmit 값을 재사용하여 불필요한 요청 방지 - 퀴즈/과제 정렬: 미제출 우선 → 마감일순, dueDate null은 각 그룹 맨 뒤 - dueDate가 null인 과제/퀴즈도 홈 화면에 표시 - 우클릭 컨텍스트 메뉴로 VOD/과제/퀴즈 숨김 처리 (chrome.storage 저장) - VOD 카드 우클릭 시 그룹 전체 숨김, 개별 영상 우클릭 시 해당 영상만 숨김 - 설정 탭에서 숨긴 태스크 확인 및 해제 - 태스크 모두 완료 시 InfoBubble에 완료 메시지 표시 - 다국어(ko/en/ja/zh) 키 추가 * feat: 퀴즈 제출 필터 추가 퀴즈 탭에도 과제와 동일한 제출완료/제출필요 필터 적용
- 강의 페이지(/course/view.php) 진입 시 VOD/과제/퀴즈 상태 배지 자동 표시 - 현재 주차 하이라이트 및 스크롤 이동 버튼 추가 (4개 언어 날짜 파싱) - 상단 상태 바로 fetch 로딩/성공/실패 표시 (navbar 밀어내기 애니메이션) - 트래킹/비트래킹 강의 모두 지원 (비트래킹은 임시 저장 후 1분 자동 삭제) - 뒤로가기/앞으로가기 시 캐시 사용으로 불필요한 재요청 방지 - storage에 전체 데이터 저장, 대시보드에서는 날짜 필터링 적용 - 숨김 처리된 태스크 배지 표시 - 시스템 폰트 스택 최적화 (Windows ClearType 대응)
Vitest + jsdom 환경을 설정하고, src/lib 하위 유틸리티 함수들에 대한 edge case 중심의 단위 테스트를 작성한다. 테스트 대상 모듈: - attendance, dateUtils, stringUtils, lmsKeywords - filterData, transformCourseData, transformCalendarEvents - summarizeCourseData, parseCourses, cache, generateKey - deduplicateInto, fetchHtml (getText/getHref)
* docs: VitePress 문서 사이트 세팅 및 사용 설명서 작성 * docs: 다국어 문서 추가 및 배지/플레이어 설명 업데이트 - VitePress i18n 설정 (en/ja/zh 로케일) - 다국어 문서 생성 (간단/고급 가이드, 캘린더, 업데이트 로그) - 브라우저 언어 기반 자동 리다이렉트 - VOD 배지 테이블 추가 (출석/시청중/미시청/결석) - 과제/퀴즈 배지 좌우 배치 - 스마트 재생 info 블록 추가 - 새로고침 설명 수정 (5분 빨간 점, 1시간 자동 갱신) - 마감 임박 알림 기능 설명 제거 * docs: FAQ 페이지 추가 (ko/en/ja/zh) - 설치, 대시보드, 플레이어, 캘린더, 기타 카테고리별 FAQ - details 접기/펼치기 형식 - 사이드바 및 홈 hero 버튼에 FAQ 링크 추가
- 커뮤니티 강좌 VOD 출석 트래킹 (user_progress.php 파싱) - 시청중 배지 추가 (프로그레스 시각화, 임박 시 빨간색) - 모든 강좌에서 시청 진도 데이터 수집 (fetchVodProgress) - 배지 텍스트 정리 (출석/시청중/미시청/결석) - 마감 임박 알림 기능 삭제 (alarms/notifications 권한 제거) - 빨간 점 표시 기준 60분 → 5분으로 변경 - 커뮤니티 강좌 ID 저장 및 isCommunity 분기 처리
- 릴리즈 워크플로우: dist.zip 첨부, 커밋 내역 자동 생성, deprecated actions 업데이트 - manifest.config.ts에서 package.json 버전 참조하여 버전 관리 일원화 - 확장 프로그램 첫 설치 시 VitePress 문서 사이트로 이동 - VitePress nav에 Chrome 웹스토어 설치 링크 추가 (4개 언어)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Test plan
npm run build정상 빌드 확인npm run test전체 테스트 통과 확인