새로운 "게시물 유형" Composer 작업 드롭다운 소개

enable_new_composer_actions 뒤에서 진행 중인 Composer 재설계

이 변경사항은 재설계된 composer 경험을 도입하며, 새로운 알파 단계의 예정된 변경사항(upcoming-change) 뒤에 배치되어 배포됩니다. 플래그가 꺼져 있는 상태(기본값)에서는 눈에 띄는 변화가 없습니다. 관리자는 예정된 변경사항 관리 페이지에서 옵트인할 수 있습니다.

플래그가 켜졌을 때 변경되는 사항

  • 통합된 액션 드롭다운. 기존 SelectKit composer-actions 드롭다운이 새로운 Glimmer/DMenu 컴포넌트(composer-actions-new.gjs)로 대체됩니다. 여전히 동일한 모드 전환 행(토픽에 답글, 새 토픽으로 답글, PM 생성 등)을 더 명확한 라벨과 아이콘과 함께 표시합니다.

  • 액션과 함께 존재하는 토글. Whisper / no-bump / unlist는 이제 해당 드롭다운 하단에 <DToggleSwitch> 항목으로 렌더링됩니다 — 별도의 콤보 버튼 메뉴가 없습니다. 토글 상태는 모드 전환 시에도 유지됩니다(예: whisper를 켜고 → 토픽에 답글에서 게시글에 답글로 전환 → 여전히 whisper 상태).

  • Whisper 지표 필(pill). 드롭다운 트리거 오른쪽에 작은 버튼이 있어 현재 whisper 상태를 두 가지 시각적 변형으로 표시합니다: --public(삼차 색, 눈 아이콘, “답글이 표시됩니다”) 및 --whispering(primary-medium / primary-very-low 배경, 눈-슬래시 아이콘, “Whispering”). 클릭하면 whisper가 토글됩니다 — 드롭다운 내부의 토글과 동일한 코드 경로이므로 두 요소가 항상 동기화됩니다. 트리거 아이콘 자체도 whisper 상태일 때 far-eye-slash로 교체됩니다.

  • 편집 UX. 게시글을 편집할 때 드롭다운은 정적인, 캐럿이 없는 라벨(연필 아이콘 + “게시글 편집”)로 축소됩니다. 이전에 composer 크롬의 다른 곳에 있던 “편집 이유 추가” 버튼은 이 정적인 트리거 내에 클릭 가능한 “편집 내용 설명” 버튼으로 통합됩니다. 클릭하면 라벨이 composer.editReason에 바인딩된 텍스트 입력 필드로 교체되고 포커스가 맞춰집니다.

    • editing
  • Composer 크롬. .action-title 텍스트/스팬이 제거됩니다 — 드롭다운 트리거 자체가 현재 모드를 표시합니다.

  • 게시글/토픽 링크는 이제 필요할 때만 표시됩니다. 토픽에서 벗어나 이동할 때 토픽 링크가 렌더링되고, 게시글에서 스크롤로 벗어나거나 이동할 때 게시글 링크가 렌더링됩니다.

플러그인 개발자 참고 사항

새로운 컴포넌트는 SelectKit의 하위 클래스가 아니므로, 기존 확장 API는 이를 도달하지 못합니다. 이 알파 단계에서 두 플래그 상태를 모두 지원하기 위해 플러그인은 두 API를 모두 등록해야 합니다:

기존 API (기존 컴포넌트에서만 작동) 새로운 API (새 컴포넌트에서만 작동)
api.modifySelectKit("composer-actions").appendContent(...) api.registerValueTransformer("composer-actions-content", ({ value, context }) => { value.push(...); return value; })
api.modifyClass("component:composer-actions", { fooSelected(options, model) { ... } }) api.registerBehaviorTransformer("composer-actions-on-select", ({ context, next }) => { if (context.actionId === "foo") { ...; return; } next(); })

행 형상({ name, description, icon, id })은 양쪽에서 동일합니다. behavior transformer는 컨텍스트에서 { actionId, options, model }를 수신합니다.

:double_exclamation_mark: 기존 훅만 등록하는 플러그인은 관리자가 플래그를 활성화하는 순간 composer에서 조용히 사라집니다. 새로운 트랜스포머만 등록하는 플러그인은 플래그가 꺼져 있는 동안(모든 사용자에게 병합 시 기본값) 보이지 않게 됩니다.

참고 자료:

  • discourse-post-voting/extend-composer-actions.js — 이중 등록의 작동 예시 (코어 내)

  • discourse-staff-alias — 별도의 PR에서 이중 등록을 추가합니다

  • transformers.js — 두 개의 새로운 트랜스포머 이름

롤아웃 참고 사항

  • 플래그 상태는 알파입니다 — 내부 테스트용 옵트인.

  • composer 액션과 통합되는 플러그인은 beta/stable로 승격되기 전에 이중 등록을 추가해야 합니다.

  • 테스트는 두 상태를 모두 커버합니다: 기존 인수/시스템 스펙은 플래그 꺼짐 상태를, 동생 *-new-test.js 파일들은 플래그 켜짐 상태를 커버합니다(통합 드롭다운, 토글 항목, whisper 지표, 분할 라벨 스팬을 위한 새 컴포넌트 DOM 셀렉터 포함).

23개의 좋아요

"토픽 링크"가 토픽 제목과 함께 HTML 코드로도 렌더링되고 있습니다…

이것은 올바르지 않을 것입니다

여기에서 수정됨 → FIX: Do not render fancyTitle link in composer header - Pull Request #40500 - discourse/discourse - GitHub

4개의 좋아요

선택된 카테고리 유형이 Ideas가 아니거나, 카테고리 설정에서 게시물 투표 기능이 활성화되지 않은 경우 “게시물 투표 전환” 옵션을 표시하지 않도록 할 수 있을까요? : ))

6개의 좋아요

나도 그렇게 생각해요. 회귀(regression) 문제일 수도 있겠네요? 아니면 원래부터 그런 건가요, @jordan.vidrine ?

1개의 좋아요

이것은 항상 그런 것이었습니다. 게시물 투표 플러그인은 카테고리별로 범위가 제한되는 것이 아니라 사이트 전체에 적용됩니다. 해당 플러그인의 카테고리 수준 설정은 사용을 제한하기 위한 것이 아니라 기본값을 설정하는 용도로만 사용됩니다.

현재 게시물 투표 플러그인은 약간 과도기적인 상태에 있습니다. 특정 카테고리로 제한하기 전에, 더 일반적인 사용 사례가 깨지지 않도록 이식을 어떻게 진행할지 알아봐야 할 것 같습니다.

3개의 좋아요

좋은 소식은, 그 사이에 테마 컴포넌트에서 이를 허용하기 위한 두 개의 훅(hook)이 있다는 것입니다. 다음 코드는 초기자(initializer)에서 아이디어 카테고리에만 토글을 표시하도록 작동합니다:

import { withPluginApi } from "discourse/lib/plugin-api";

export default {
    name: "hide-post-voting-toggle",
    after: "extend-composer-actions", 

    initialize() {
      withPluginApi((api) => {
        api.registerValueTransformer(
          "composer-actions-content",
          ({ value, context }) => {
            const category = context.composerModel?.category;
    
            if (!category?.isType("ideas")) {
              return value.filter((item) => item.id !== "togglePostVoting");
            }
    
            return value;
          }
        );
      });
    }
};

10개의 좋아요

제 태블릿에서는 드롭다운이 작성창 뒤에 가려져 있습니다.

2개의 좋아요

안녕하세요 @Moin, 이 문제를 알려주셔서 감사합니다.

저는 Chromium, Firefox, Safari에서 해당 문제를 재현하지 못했으며, 불행히도 첨부된 비디오도 재생되지 않습니다.

문제를 진단하고 추적하는 데 도움을 주실 수 있도록 몇 가지 추가 정보를 제공해 주시겠어요?

  • 운영 체제: (예: Android, iOS, Windows, macOS, Linux)

  • 브라우저 및 버전: (예: Chrome 125, Safari 17)

  • Discourse 버전: 관리자 대시보드에서 확인하거나 Meta의 이 가이드를 따르시면 됩니다.

지금 바로 시도해 볼 수 있는 방법:

사이트 URL 끝에 /safe-mode를 추가하여 안전 모드에서 동작을 테스트해 보세요. (예: https://discourse.example.com/safe-mode)

  • 문제가 사라진다면: 사이트의 사용자 지정 설정(플러그인, 테마 또는 컴포넌트) 중 하나가 충돌을 일으키고 있을 가능성이 큽니다.

  • 문제가 지속된다면: 이는 코어 버그이며, 위에서 제공해 주신 브라우저/기기 세부 정보가 문제를 정확히 파악하고 수정하는 데 도움이 됩니다.

꾸준히 문제를 공유해 주셔서 감사하며, 여기에서 공유한 정보에 대해 질문이 있으시면 언제든지 알려주세요.

4개의 좋아요

위쪽 동영상에서 보실 수 있듯이(오늘 왜 고장 났는지 모르겠지만 다시 업로드했습니다) 저는 안전 모드(safe mode)를 활성화해 두었습니다.

현재 버전은 2a08d5d입니다(리포트를 작성했을 때와는 달랐습니다). 여기에서도 재현할 수 있습니다. 관리자가 더 많은 옵션을 가지고 있어 숨겨진 메뉴가 더 잘 보이도록 제 포럼을 선택했을 뿐입니다. 메타(Meta)에서는 거의 보이지 않습니다. 대부분의 경우 버튼이 아예 작동하지 않는 것 같습니다.

저는 Samsung Galaxy Tab S9 FE(Android 16)에서 Firefox를 사용하고 있습니다.


방금 Chrome도 확인해 보았는데, 같은 것 같습니다:

보통 이런 유형의 문제는 제 태블릿이 "데스크톱 크기"이면서 터치 방식이기 때문에 발생합니다. 여기여기의 문제와 유사합니다.

4개의 좋아요

감사합니다. 이 맥락이 도움이 됩니다.

저는 안드로이드 터치 태블릿은 가지고 있지 않지만, Firefox에서 시뮬레이션된 터치 버튼을 사용하면 이 문제를 안정적으로 재현할 수 있습니다.

일단, 다음 스타일링 규칙으로 해결할 수 있습니다:

.composer-toggles-menu-content, .composer-actions-dropdown {
    z-index: 1100;
}

이 의도된 수정 사항으로 Discourse를 업데이트하고, 변경 사항이 병합되면 알리겠습니다. *업데이트: 변경 사항이 병합되었습니다. d82dc7c 또는 그 이상의 버전이 실행되는 다음 배포에서 수정 사항을 확인할 수 있습니다.

다시 한번, 문제를 보고해 주셔서 감사합니다.

6개의 좋아요

감사합니다!

참고로: 마지막 게시글의 수정은 더 이상 주제에 알림을 보내지 않아, 수정을 알림 수단으로 사용하기가 잘 작동하지 않습니다. 한 동료분이 업데이트는 별도의 게시글로 작성하는 것이 좋다고 한 적이 있습니다. 그런데 여러분도 스스로는 그렇게 하지 않는 경우가 많은 것 같아 흥미롭습니다.

3개의 좋아요

조금 주제에서 벗어난 질문이라 죄송합니다: 이 문제를 재현하기 위해 브라우저와 운영체제에 대한 세부 정보 중 실제로 필요한 것은 무엇이었나요?

첫 번째 게시물에서 “태블릿”이라고 언급한 것만으로도 터치스크린 기기임을 충분히 나타낸 것이라고 생각했습니다. 그리고 Chrome과 Firefox 양쪽에서 발생한다는 사실은 브라우저 정보가 덜 중요하게 만듭니다.

따라서 다음에는 불필요한 정보를 너무 많이 언급하지 않으면서도 중요한 세부 정보를 바로 입력할 수 있도록, “태블릿” 외에 반드시 언급했어야 하는 것이 무엇인가요?

1개의 좋아요

태블릿/터치가 핵심이었기 때문에 원래 보고서는 문제없었습니다… 때로는 이러한 세부 사항이 간과되거나, 터치/비터치 간의 차이가 예상치 못한 결과를 낳기도 합니다.

2개의 좋아요

오늘부로 이것이 정식 버전으로 전환되며, 다음 주에는 코어에 병합될 예정입니다.

2개의 좋아요