ether / etherpad-lite

Etherpad: A modern really-real-time collaborative document editor.
http://docs.etherpad.org/
Apache License 2.0
16.55k stars 2.84k forks source link

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

Open brunob opened 1 month ago

brunob commented 1 month ago

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):

Desktop (please complete the following information):

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 commented 1 month ago

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

SamTV12345 commented 1 month ago

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?

ldidry commented 1 month ago

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

brunob commented 1 month ago

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.

SamTV12345 commented 1 month ago

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

brknkfr commented 1 week ago

@SamTV12345, did you have time to debug this?

SamTV12345 commented 1 week ago

@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.

brknkfr commented 1 week ago

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.

SamTV12345 commented 1 week ago

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.