말씀하신 대로 시도해 보았습니다. 새로운 테마 컴포넌트를 생성한 후, CSS/HTML 편집 옵션을 사용하여 해당 코드를 common>header 섹션에 삽입했습니다. 웹사이트에서 타이머는 확인되지만, 문제는 타이머가 작동하지 않는다는 점입니다. 재생과 정지 버튼이 있고, 로컬에서는 정상적으로 작동하지만 웹사이트에서는 타이머만 표시되고 실제 기능이 작동하지 않습니다.
네, CSP에 의해 코드가 차단되고 있습니다. (보안 설정 참조)
설정에서 unsafe-inline를 화이트리스트에 추가할 수 있지만, 좋은 아이디어라고는 생각되지 않습니다.
귀하의 경우, CSP가 활성화된 상태에서 코드가 작동하려면 클릭 처리 방식을 다르게 해야 한다고 생각합니다.
참고로, 귀하의 코드를 사용하는 테마 컴포넌트가 있습니다: https://github.com/Arkshine/discourse-timer-component. 포크하여 Discourse에 설치하는 것을 자유롭게 하십시오.
제 코드가 너무 엉망이 아니기를 바랍니다. 이 컨텍스트에서 순수 JavaScript를 추가하는 것보다 이 방식이 권장됩니다.
추가적인 반응성 처리, 설정 및 로케일 지원도 동일하게 작동해야 합니다.
너무 부담스러울 수 있지만, 테마 컴포넌트 개발을 깊이 있게 파고들기 위한 훌륭한 기회입니다! 이해가 안 되는 부분이 있으면 주저하지 말고 질문하십시오.
이것은 연속적인 타이머입니다. 처음에는 1분 30초로 시작하여 8분으로 전환되고, 다시 1분 30초로 전환되는 식으로 영원히 반복됩니다.
타이머가 작동 중일 때, 사용자는 ‘방 입장(enter room)’ 버튼을 클릭하여 8분으로 바로 건너뛰거나, ‘태스크 읽기(read task)’ 타이머를 클릭하여 1분 30초 타이머로 전환할 수 있어야 합니다. 따라서 타이머가 작동하지 않을 때 일시 정지 및 중지 버튼을 비활성화하는 것은 합리적이지만, 타이머가 작동 중일 때 ‘태스크 읽기’ 및 ‘방 입장’ 버튼을 비활성화하면 사용자가 타이머를 우회할 수 없게 됩니다.
향후 변경 사항:
1분 30초 타이머 시작 시, 8분 타이머 시작 시, 8분 타이머의 남은 시간 2분 시점, 그리고 8분 타이머 종료 시점(즉, 1분 30초 시작 시점)에 음성 메모를 추가합니다. 따라서 총 3개의 음성 메모가 필요합니다.
각 음성 메모마다 팝업 알림을 추가합니다. 이 알림은 나타났다가 사라져야 하며, 전체 화면을 차지하지 말고 타이머가 위치한 영역에만 표시되어야 합니다.
타이머가 시작되지 않은 상태에서 해당 일시정지/중단 버튼을 클릭할 수 있도록 하는 것은 의미가 없습니다. “일시정지” 또는 "재개"를 표시하는 것과도 같습니다. 마치 대기 상태에 활성 타이머가 있는 것과 같은 상황이죠. 실제로는 버튼 자체를 숨기는 것이 나을 것 같습니다. 하지만 기본값으로 “일시정지” 라벨을 사용하는 것도 괜찮을 것 같습니다.
두 가지 사이를 번갈아 가며 작동하는군요, 알겠습니다. 처음에는 그 타이머 중 하나를 가진 루프인 줄 알았어요.
컨텍스트를 정확히 이해하지 못하는 것 같고, 제 입장에서는 꽤 이상해 보입니다. 수정할 수 있습니다.
이 타이머가 실제로 작동하는 모습을 보니 정말 놀랍습니다. 정말 대단하고 영감을 주는 분이시네요.
이것은 의사들이 치르는 시험용 타이머입니다. 저도 의사로서 다른 의사들을 도우려고 이렇게 만들었습니다.
이 시험은 16개의 방으로 구성되어 있으며, 각 방에는 진단하고 관리해야 하는 16명의 서로 다른 환자가 있습니다. 방에 들어가기 전에, 밖에서 1분 30초 동안 읽을 수 있는 과제가 준비되어 있습니다. 이후 방에 들어가면 8분 동안 해당 과제를 수행하고 환자를 관리해야 하며, 이 과정이 나머지 15개 방에 대해 반복됩니다. 전체 소요 시간은 3시간입니다.
저는 불행히도 이 시험에 떨어졌는데, 그 이유는 이 시험에 대한 잘못된 정보와 잘못된 안내 때문이었습니다. 이 경험이 다른 의사들을 올바르게 안내하기 위해 이 포럼을 만들게 된 계기가 되었습니다.