Overriding "toggle reply" button

AI-generated summary

The discussion is about overriding the “toggle reply” button in Discourse. Ellibereth is trying to modify the “toggleReplyAbove” action to show a modal of the replied-to-post on mobile instead of jumping to the post. However, using api.attachWidgetAction does not seem to work, and Ellibereth is unsure where to attach the widget action to overwrite the “toggleReplyAbove” action.

Eviltrout responds that the issue is due to a bug in the plugin API, which has been fixed in a recent commit. The bug prevented looking up widgets by name if they were not the only widget exported by a JavaScript file.

This is a repost from: Could we get the link to post replies in mobile view? - #12 by Ellibereth, but it probably belongs here in Development and not in that topic.

I’m trying to modify the “toggleReplyAbove” action, to show a modal of the replied-to-post on mobile instead of jumping to the post (why we’re doing this is described in the above topic).

It looks to be in the post widget, but if I use the following code to try and replace the action I don’t see any effect - nothing is printed to console and it behaves as normal:

api.attachWidgetAction('post', 'toggleReplyAbove', () => {
    console.log('toggle triggered');
  });

In the post widget code, it looks like the toggleReplyAbove function is defined inside the created widget post-article , but that doesn’t seem to be modifiable with attachWidgetAction since the following code trying to modify that widget results in the error Uncaught TypeError: Cannot read property 'class' of undefined :

api.attachWidgetAction('post-article', 'toggleReplyAbove', () => {
    console.log('toggle triggered');
  });

I’m able to overwrite the “like” action on post-menu fine as described here Updating Discourse Plugins, taking the first step - #9 by eviltrout. Where should I be attaching the widget action to overwrite the toggleReplyAbove action?

Looks like this was a bug in the plugin api:

https://github.com/discourse/discourse/commit/6fec4982d903cbb088f95b5dcae7b67f52a90e99

The issue here is that we were only looking in the container for the widget class, which only works if it’s the only widget exported by a javascript file.

This patch allows us to look up any widget registered with that name.