Approval-Correlation: 0543bb321a84cb936bc0ac4988615840
Plan-SHA256: 437a85f68d151ed4db780511812834041cfec5e7cf021fb77e238d5a6196e6fb
Base-SHA: 256be64ac7
1.5 KiB
1.5 KiB
인터페이스 계약
메시지 제출 이벤트
Textual의 Input.Submitted 이벤트가 #user-input에서 발생하면 ChatApp.on_input_submitted가 처리한다.
입력 정규화
- 이벤트의
value에strip()을 적용한다. - 입력 위젯의 값을 빈 문자열로 초기화한다.
- 정규화 결과가 빈 문자열이면 추가 처리를 중단한다.
공백만 포함한 입력은 사용자 메시지, 응답 선택, 대화 항목을 생성하지 않는다.
유효한 입력 처리
정규화 결과가 비어 있지 않으면 다음 순서로 처리한다.
- 정규화된 사용자 메시지를
submitted_inputs에 추가한다. random.choice(RESPONSE_MESSAGES)로 응답을 선택한다.- 선택 응답을
selected_responses에 추가한다. - 대화 영역에 사용자 메시지
Label을 추가한다. - 바로 이어서 응답
Label을 추가한다. - 대화 영역을 마지막 항목까지 스크롤한다.
사용자 메시지와 응답은 별도 대화 항목이며, 화면 표시 순서는 항상 사용자 메시지 다음 응답이다.
화면 위젯 계약
- 대화 영역은
#conversation식별자의VerticalScroll이다. - 입력창은
#user-input식별자의Input이다. - 사용자 메시지는
user-message클래스를 사용한다. - 응답은
response-message클래스를 사용한다. - 애플리케이션 마운트 시 입력창에 포커스를 둔다.
종료 계약
Escape와 Ctrl+Q는 기존 quit 바인딩을 통해 애플리케이션 종료를 요청한다.