etherpad-lite icon indicating copy to clipboard operation
etherpad-lite copied to clipboard

Error when using `window._()` localization in documentReady hook

Open brunob opened this issue 1 year ago • 11 comments

Describe the bug

Using window._() localization function in a script called by documentReady hook generate an error TypeError: window._ is not a function.

To Reproduce Steps to reproduce the behavior:

  1. Installe https://framagit.org/framasoft/Etherpad/ep_delete_after_delay/ plugin
  2. Load an existing pad
  3. See the "An error occurred" window

Server (please complete the following information):

  • Etherpad version: 2.2.2
  • OS: Ubuntu 20.04
  • Node.js version (node --version): v20.17.0
  • npm version (npm --version): 10.8.2
  • Is the server free of plugins: only the ep_delete_after_delay plugin

Desktop (please complete the following information):

  • OS: Ubuntu 20.04
  • Browser Firefox
  • Version 129.0.2

Additional context

Bur reported on plugin repo here https://framagit.org/framasoft/Etherpad/ep_delete_after_delay/-/issues/23 but it seems to be an etherpad regression.

brunob avatar Sep 04 '24 13:09 brunob

@SamTV12345 this fix the error but now it generate a warning "No translations available (yet)" :\

brunob avatar Sep 06 '24 08:09 brunob

Ok then there is another problem. Maybe a fork would solve the issues. @ldidry Do you have an idea why the plugin is not working?

SamTV12345 avatar Sep 06 '24 16:09 SamTV12345

No, but I didn’t tried to reproduce the bug (no time for that right now).

ldidry avatar Sep 06 '24 17:09 ldidry

FTR, it worked on v2.1.0 and it's stated to be broken on 2.2.0.

If i log translations from https://github.com/ether/etherpad-lite/blob/develop/src/static/js/vendors/html10n.ts#L691 i can see the ep_delete_after_delay items in it for all the calls that concern an item from etherpad core eg pad.userlist.entername. But, when the item come from ep_delete_after_delay translations var is undefined.

brunob avatar Sep 06 '24 17:09 brunob

FTR, it worked on v2.1.0 and it's stated to be broken on 2.2.0.

If i log translations from https://github.com/ether/etherpad-lite/blob/develop/src/static/js/vendors/html10n.ts#L691 i can see the ep_delete_after_delay items in it for all the calls that concern an item from etherpad core eg pad.userlist.entername. But, when the item come from ep_delete_after_delay translations var is undefined.

Thanks I'll debug it . I guess this is an issue on Etherpad

SamTV12345 avatar Sep 07 '24 13:09 SamTV12345

@SamTV12345, did you have time to debug this?

brknkfr avatar Sep 28 '24 16:09 brknkfr

@SamTV12345, did you have time to debug this?

Yes the fix is relatively easy. The plugin needs to substitute any occurrence with the html10n.get() expression and it will work.

SamTV12345 avatar Sep 29 '24 19:09 SamTV12345

Ah, I don't really know how to program in javascript, but you mean all the occurrences of _ (underscore) have to be replaced by html10n.get(). Correct? I'll probably create a PR.

brknkfr avatar Sep 29 '24 20:09 brknkfr

Ah, I don't really know how to program in javascript, but you mean all the occurrences of _ (underscore) have to be replaces by html10n.get(). Correct? I'll probably create a PR.

Yes you need to import the Etherpad module and then call html.get with the correct value. I have no idea why the underscore does not work. Could be that the bundler optimized things incorrectly.

SamTV12345 avatar Sep 29 '24 20:09 SamTV12345

Just checking: Was this solved? Changelog mentions something like this. And I think I noticed a problem with this while testing previous versions, but now it seems gone.

dcht00 avatar Oct 14 '24 03:10 dcht00

Just checking: Was this solved? Changelog mentions something like this. And I think I noticed a problem with this while testing previous versions, but now it seems gone.

I have no idea what JavaScript does here. It is normally just a shortcut. The .get() version works. ._ does not.

SamTV12345 avatar Oct 28 '24 17:10 SamTV12345