Overriding "toggle reply" button

This is a repost from: Could we get the link to post replies in mobile view?, but it probably belongs here in #dev 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. Where should I be attaching the widget action to overwrite the toggleReplyAbove action?

1 Like

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.

4 Likes