"Unvote" a poll

AI-generated summary

A discussion about implementing an “unvote” feature in polls on Discourse forums was initiated by MiguelAngelLV. It came to light that currently, users can only change their vote, but not cancel it entirely. zogstrip and codinghorror confirmed this limitation. anon23840344 shared a personal experience where they accidentally voted in a poll while trying to highlight text, further emphasizing the need for the “unvote” feature.

sam suggested that it’s time to implement this feature, and zogstrip agreed. A possible design for the feature was proposed, which included adding a “Remove Vote” button after the “Show results” button.

The feature was implemented by nbianca and tested by bletch, who noticed a small, unintended change where the “Show results” button is always enabled, even when there are no votes. However, bletch later found a simpler solution to their problem and decided not to pursue the issue further.

nbianca then reimplemented the original behavior of the “Show results” button and also confirmed that the method signature of DiscoursePoll::Poll.vote was changed during the refactoring of the poll code.

The “unvote” feature is now available, and it seems to work well, according to bletch.

Is posible remove a vote from a poll?

I only can change my vote, but I can’t “cancel”

4개의 좋아요

Not sure if that is possible at the current time.

1개의 좋아요

Nope, there’s currently no way to “unvote” on a poll. Added to my :pencil:

8개의 좋아요

이 부분은 꼭 구현해 주세요! 투표 항목의 텍스트를 복사/붙여넣기하려고 하던 중(솔직히 왜 허용되지 않는지 모르겠는데), 실수로 투표까지 마쳐 버렸어요.

1개의 좋아요

그렇게 하셔도 됩니다. 다시 투표하시거나, 경우에 따라 투표 취소 버튼이 있을 수도 있습니다. 플러그인인지, 아니면 이제 기본으로 제공되는지 정확히 알 수는 없습니다.

다른 옵션에 투표할 의도는 없었습니다. 저는 표결에서 기권한 상태였습니다. 단순히 텍스트를 클릭해서 드래그하여 강조 표시한 뒤 복사해서 붙여넣기만 하려 했을 뿐입니다.

안녕하세요, 이 문제에 대해 새로운 소식 있나요? 한 사용자가 공개 투표에서 자신의 선택을 취소할 수 없어 불만을 제기했습니다.

유사한 주제가 여기에 있습니다: Ability to remove my choice in a poll

아직도 방법이 없다고 생각합니다. @zogstrip 이 작업은 한동안 해보려고 했던 것이니, 이 문제를 누군가에게 배정하는 것이 좋을 수도 있습니다.

  • 1
  • 2
  • 3
0 voters

@designers 여기서 가장 먼저 해야 할 일은 이 기능을 무조건 허용할지, 아니면 특정 투표에서만 허용할지 결정하는 것일 것입니다.

5개의 좋아요

동의합니다. 이제 때가 된 것 같습니다.

@nbianca 이 내용을 목록에 추가해 주시겠어요?

1개의 좋아요

아, 이 화면만 건드리면 될 것 같네요:

“결과 표시” 버튼 뒤에 “투표 취소” 버튼을 추가하세요.

설문조사가 어떻게 렌더링되는지에는 영향을 주지 않습니다. 옵션을 확인하려면 더 깊이 들어가야 하니까요.

2개의 좋아요

저는 플러그인에서 구조화된 사용자 입력을 수집하기 위해 투표(poll) 기능을 많이 사용하므로, 이 변경사항은 저에게 매우 큰 도움이 될 것입니다.

투표가 제거될 때도 vote 이벤트가 여전히 발생하도록 해 주실 수 있을까요? 이렇게 하면 변경 사항이 있었는지 알 수 있을 것 같습니다.

3개의 좋아요

다음에서 투표 취소(unvote) 기능을 구현했습니다:

10개의 좋아요

안녕하세요, 최신 빌드를 개발 환경에 받아서 테스트해 보았는데, 의도하지 않은 작은 변경 사항을 발견했습니다.

작은 변경 사항이지만, 제가 설문조사를 사용하는 독특한 방식 때문에 저에게는 중요한 문제입니다.

이전에는 설문조사에 표결이 하나도 없으면 “결과 보기” 버튼이 비활성화되어 있었습니다. 이는 결과 볼 것이 없으므로 “결과 보기” 버튼을 누를 수 없어야 한다는 점에서 합리적였습니다. 다음과 같은 모습이었습니다…


표결이 없음을 확인하고 “결과 보기” 버튼이 비활성화되어 있습니다

새로운 “투표 취소(Unvote)” 빌드에서는 표결이 있든 없든 “결과 보기” 버튼이 항상 활성화되어 있는 것으로 보입니다.


표결이 없음을 확인하고 “결과 보기” 버튼이 활성화되어 있습니다

몇 가지 질문이 있습니다: 이것이 사실인가요? 의도적인 변경이었나요, 아니면 실수인가요? 다시 원래대로 바꿀 계획이 있나요?

그대로 유지된다면, 제가 원하는 결과를 얻기 위해 다른 방법을 시도해 보겠습니다.

어떤 경우든, 매우 잘 작동하는 것 같은 투표 취소 기능에 감사드립니다!

배경 정보

배경 정보…

이것이 저에게 왜 문제가 될까요? 저는 (대부분) 개별 사용자의 입력을 수집하기 위해 설문조사를 사용합니다. 즉, 설문조사를 통해 특정 맥락에서 개별 사용자에게 구체적인 질문을 할 수 있습니다. 설문조사에 표결이 하나 이상인 경우는 드물지만, 구조화된 데이터를 수집하는 데 매우 유용합니다.

제 플러그인에서는 하나의 주제에 여러 설문조사가 포함될 수 있고, 이러한 설문조사에는 많은 옵션이 포함될 수 있어 스크롤이 많이 필요합니다. 사용자가 내비게이션을 더 쉽게 할 수 있도록, 사용자가 표결을 한 후 제가 작성한 테마 컴포넌트가 설문조사 UI에서 다른 옵션을 제거하고 사용자가 선택한 옵션만 남깁니다.

이 옵션들을 제거하기 위해, 제 테마 컴포넌트는 활성화된 “결과 보기” 버튼을 대상으로 "클릭"합니다. 결과가 표시되면 표결이 없는 모든 옵션이 제거됩니다.

결국 다음과 같은 모습이 됩니다.

현재 “결과 보기” 버튼이 기본적으로 활성화되어 있으므로, 제 코드가 이를 클릭하게 되고, 표결이 없었기 때문에 모든 옵션이 제거되어 다음과 같은 모습이 됩니다…

결과가 항상 표시되도록 변경된 상황에서 이 문제를 다른 방식으로 접근해 볼 수 있을지 살펴보다가, 훨씬 더 간단한 방법으로 원하는 것을 이룰 수 있다는 걸 깨달았습니다.

그러니 그대로 두셔도 됩니다! ㅋㅋ :upside_down_face:

그냥 선택된(또는 .chosen가 아닌) 결과 요소들을 대상으로 해서 표시하지 않도록 설정하면 됩니다.

div.poll div.poll-container ul.results > li:not(.chosen) {
    display: none;
}

몇 년 전에 코드를 작성했을 때 .chosen 클래스를 못 봤거나, 나중에 추가된 건지 모르겠네요.

어쨌든, 제가 이전에 작성한 방식은 (JavaScript로 폴링을 돌리는 방식!) 현저히 과잉 설계되어 있었는데, 이 방식이 제가 필요한 것을 잘 처리하는 것 같습니다.

6451AF5C-2351-49E0-9A1F-C6C0A3D0D5E9

다시 한번 감사합니다.

1개의 좋아요

아, 내 실수였네요. 방금 해당 부분을 다시 구현했고 곧 사용 가능할 예정입니다:

제 생각에는 꽤 오래전부터 그렇게 되어 있던 것 같습니다.

3개의 좋아요

방금 @nbianca 님과 함께 테스트해 봤는데, 이제 버튼이 이전처럼 정상적으로 작동하는 것 같습니다. 감사합니다!

또 다른 질문이 하나 있습니다. 저는 DiscoursePoll::Poll.vote 메서드를 사용해 투표에 자동으로 참여하고 있습니다. 제 코드에서 몇 가지 문제를 겪고 있는데, 투표 관련 코드 리팩토링 과정에서 메서드 시그니처가 변경된 것이 맞는지 확인해 주실 수 있을까요?

제 코드는 원래 다음과 같은 시그니처를 가정하고 있었습니다:

def vote(post_id, poll_name, options, user)

그러나 변경 사항 이후 시그니처가 다음과 같이 바뀐 것으로 보입니다:

def self.vote(user, post_id, poll_name, options)

즉, user 파라미터가 4번째 위치에서 1번째로 이동했고, 나머지 파라미터들도 그에 따라 순서가 바뀌었습니다.

위와 같은 제 가정이 맞는지 확인해 주실 수 있으며, 저를 당황시킬 수 있는 다른 유사한 리팩토링 변경 사항이 있는지 아시나요?

참고로, 투표 취소 기능은 잘 작동하는 것 같습니다!

맞습니다. 대부분의 함수에서 user를 첫 번째 매개변수로 이동시킨 이유는 우리가 보통 따르는 관례이기 때문입니다.

3개의 좋아요

이 주제는 9일 후 자동으로 닫혔습니다. 더 이상 새 답변을 작성할 수 없습니다.