Retort - a reaction-style plugin for Discourse

Hmm the demo site is running the latest Discourse / Retort and doesn’t seem to be having issues; could you share your customizations, and link me to the site in question?

I just got the same error after updating to v2.2.0.beta8 +63 and the latest retort version (b65cac1).

Here’s an example post showing UNDEFINED instead of the emoji: Possibilities Considering Symbiosis - Future Game - Thrive Community Forum

I think the test site you linked uses a different version as on my site clicking the UNDEFINED button opens a list of people who added reactions (when you are logged in) and on that test side the list of people who reacted is shown on mouse hover.

Edit: I looked through my theme and tried commenting out a few retort related rules but that did nothing.

Same problem for us on a different instance!

yup. :point_up:

@8BIT Can you link me to that post on your instance please? It looks like you have the new ‘retort_standard_count’ setting enabled; is that the case?

1 Like

For now, I’ve reverted a recent change which I believe caused this, and will investigate further. Rebuilding should fix this for now; thanks for the reports everyone. :slight_smile:

1 Like

Can I use this for android?

that’s right, i turned it on just for shits… but, it didn’t do anything.

a bunch of examples in this large thread.

Updating to the latest commit of retort seems to have fixed it.

I’ve got a couple of issues to report - I’ll keep them in separate posts.

Firstly, there seems to be an issue between the Retort plugin and the panel that is displayed by the Insert Date widget.

When the date panel is displayed it will appear to go ‘behind’ posts beneath it.

Before clicking on the date widget

After clicking on the date widget

in case it is not clear from the screen-grab, the orange rectangle is the panel containing the list of timezones for that local time. It clearly goes ‘beneath’ the post below.

To Reproduce

I’m able to reproduce this on our live site under the latest v2.3.0.beta1 +8 with the Retort plugin enabled.

Simply insert a date into a post, then post a reply to the topic so there is at least one post below the post with the date widget on it.


It looks like the issue is down to the Retort plugin setting the z-index of the div.topic-body to 3 in retort.scss.

If I use dev tools so that the style is not applied to .topic-post .topic-body, then the date panel behaves as I’d expect.

Disabling Retorts was not enough as the CSS remains active, so I had to rebuild without the Retorts plugin in my app.yml.

Having rebuilt without the Retorts plugin the date panel is displayed as I would expect.


Any chance at a fix for when you react, it updates position randomly? I’d like to have them act just like Discord reactions; it seems kind of strange they change order constantly.

Can provide screencast if this is confusing.

With this plugin installed my threads won’t load properly. Only the thread titles load when you enter them. I see this in my browser’s console when attempting to enter a thread as well:

jQuery.Deferred exception: _.contains is not a function TypeError: _.contains is not a function
    at i.disabledFor (https://my.domain/assets/plugin-third-party-1d55784558cdcd6124db8591d65834deef8c0a9b8c91a3b36d1b974f222a6c4e.js:1:17654)
    at https://my.domain/assets/plugin-third-party-1d55784558cdcd6124db8591d65834deef8c0a9b8c91a3b36d1b974f222a6c4e.js:1:18638
    at https://my.domain/assets/application-1abdf3d6a5342abca6f161d4a9029f4ef1297449c34b2814446a56ceb8cf85cb.js:73:1207
    at (<anonymous>)
    at c (https://my.domain/assets/application-1abdf3d6a5342abca6f161d4a9029f4ef1297449c34b2814446a56ceb8cf85cb.js:73:1184)
    at t.html (https://my.domain/assets/application-1abdf3d6a5342abca6f161d4a9029f4ef1297449c34b2814446a56ceb8cf85cb.js:71:15014)
    at t.m [as draw] (https://my.domain/assets/application-1abdf3d6a5342abca6f161d4a9029f4ef1297449c34b2814446a56ceb8cf85cb.js:73:2257)
    at t.value (https://my.domain/assets/application-1abdf3d6a5342abca6f161d4a9029f4ef1297449c34b2814446a56ceb8cf85cb.js:73:5322)
    at i (https://my.domain/assets/vendor-0be2caae262101ee53b4a9b626a820c715f41bdbc380301c6827609341ccdb43.js:5:16633)
    at r (https://my.domain/assets/vendor-0be2caae262101ee53b4a9b626a820c715f41bdbc380301c6827609341ccdb43.js:5:16563) undefined
Te.Deferred.exceptionHook @ _ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.js:3855
f @ _ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.js:3643
setTimeout (async)
(anonymous) @ _ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.js:3677
c @ _ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.js:3305
fireWith @ _ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.js:3435
fire @ _ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.js:3443
c @ _ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.js:3305
fireWith @ _ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.js:3435
ready @ _ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.js:3915
f @ _ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.js:3925
_ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df081b7ee94f26d9c3.js:3864 Uncaught TypeError: _.contains is not a function
    at i.disabledFor (_plugin-third-party-1d55784558cdcd6124db8591d65834deef8c0a9b8c91a3b36d1b974f222a6c4e.js:501)
    at _plugin-third-party-1d55784558cdcd6124db8591d65834deef8c0a9b8c91a3b36d1b974f222a6c4e.js:544
    at _application-1abdf3d6a5342abca6f161d4a9029f4ef1297449c34b2814446a56ceb8cf85cb.js:72229
    at (<anonymous>)
    at c (_application-1abdf3d6a5342abca6f161d4a9029f4ef1297449c34b2814446a56ceb8cf85cb.js:72228)
    at t.html (_application-1abdf3d6a5342abca6f161d4a9029f4ef1297449c34b2814446a56ceb8cf85cb.js:69218)
    at t.m [as draw] (_application-1abdf3d6a5342abca6f161d4a9029f4ef1297449c34b2814446a56ceb8cf85cb.js:72310)
    at t.value (_application-1abdf3d6a5342abca6f161d4a9029f4ef1297449c34b2814446a56ceb8cf85cb.js:72487)
    at i (_vendor-0be2caae262101ee53b4a9b626a820c715f41bdbc380301c6827609341ccdb43.js:18156)
    at r (_vendor-0be2caae262101ee53b4a9b626a820c715f41bdbc380301c6827609341ccdb43.js:18143)

This error first appeared after I installed this plugin:

However, it persisted after I removed it. By process of elimination, I figured out that I will continue to have this error until Retort is removed from my plugin list specifically. Not sure if this is because of a code change related to Retort or because Topic List Previews makes some kind of permanent change that Retort doesn’t like.

1 Like

I also experienced the same. In safe mode it was enough to disable unofficial plugins, but I cannot disable retort from the plugin list.

Is this related to the lodash update @gdpelican?

1 Like

I think it was stated lodash related in a bug post?

I’m gonna try reenabling and rebuilding as it appears fixed now?

I’ll let you know if I got success!

I’ve just pushed a fix which removes _.contains from the repo, so this should start working again.


Awesome, thanks for getting to this so quickly.

Lodash was fixed, it’s still worth letting developers know when a dependency change interferes with their plugin.

Hey, gdpelican. Do you think its possible that Instead of opening a pop up…

have a option for similar Facebook-style box when you try to react?


1 Like

It’s already possible to reduce the style of the picker using the retort limited emoji set setting, and reducing the window size via CSS:

.retort-picker.emoji-picker {
height: 30px;

It’s going to default to relaxed|laughing|+1|heart|rage|poop, but that can be changed too.

The Facebook UI element is still a popup, the only difference there would be the shade, which could also be overridden in CSS:

.retort__emoji-picker-wrapper--active {
    background: rgba(0,0,0,0.5);

Although in that case you may also want to make the picker border darker, to be more visible and potentially play around with the location.


Yeah, but I was thinking that, instead of opening a box, you could choose like Facebook (hover opening the options).

Its javascript, I think.