Page MenuHomePhabricator

WikibaseMediaInfo StatementWidget uses messages from another ResourceLoader module
Closed, ResolvedPublic

Description

The StatementWidget class is defined in the wikibase.mediainfo.statements ResourceLoader module, but uses messages such as wikibasemediainfo-filepage-edit and wikibasemediainfo-filepage-edit-depicts, which are part of the wikibase.mediainfo.filePageDisplay module. Since the statements module doesn’t depend on the filePageDisplay module (in fact, filePageDisplay depends on statements), this means that other modules which import the statements module but not the filePageDisplay module will have missing messages in the UI.

This was reported to me as a bug in the AC/DC gadget, but I imagine it could also start happening in WikibaseMediaInfo, e.g. in the post-upload step of the UploadWizard. (Though currently it seems like the affected messages aren’t used in that case.)

Event Timeline

Worked around this in AC/DC by loading the other ResourceLoader module as well (commit, on-wiki diff).

The workaround in AC/DC of loading wikibase.mediainfo.filePageDisplay causes an error on all non-file pages, because that module tries to infuse the MediaInfo tabs, but can't find any.

Change 731307 had a related patch set uploaded (by AntiCompositeNumber; author: AntiCompositeNumber):

[mediawiki/extensions/WikibaseMediaInfo@master] explicitly declare 2 message dependencies in wikibase.mediainfo.statements

https://gerrit.wikimedia.org/r/731307

Change 731307 merged by jenkins-bot:

[mediawiki/extensions/WikibaseMediaInfo@master] explicitly declare 2 message dependencies in wikibase.mediainfo.statements

https://gerrit.wikimedia.org/r/731307

Etonkovidova subscribed.

Will check on commons wmf.6.

Using the JavaScript console on any non-file page (like https://commons.wikimedia.beta.wmflabs.org/wiki/Main_Page)

> mw.loader.getState("wikibase.mediainfo.statements")
"registered"
> mw.messages.get("wikibasemediainfo-filepage-edit")
null
> mw.messages.get("wikibasemediainfo-filepage-edit-depicts")
null
> mw.loader.load("wikibase.mediainfo.statements")
undefined
> mw.loader.getState("wikibase.mediainfo.statements")
"ready"
> mw.messages.get("wikibasemediainfo-filepage-edit")
"Edit"
> mw.messages.get("wikibasemediainfo-filepage-edit-depicts")
"Edit depicts"

Compared to Commons currently:

> mw.loader.getState("wikibase.mediainfo.statements")
"registered"
> mw.messages.get("wikibasemediainfo-filepage-edit")
null
> mw.messages.get("wikibasemediainfo-filepage-edit-depicts")
null
> mw.loader.load("wikibase.mediainfo.statements")
undefined
> mw.loader.getState("wikibase.mediainfo.statements")
"ready"
> mw.messages.get("wikibasemediainfo-filepage-edit")
null
> mw.messages.get("wikibasemediainfo-filepage-edit-depicts")
null

AC/DC is not present in betalabs

You can manually load AC/DC there (see the README), and it looks like the message is loaded now. AC/DC version with my workaround reverted, on production:

Screenshot 2021-10-22 at 19-42-36 Blank page - Wikimedia Commons.png (797×1 px, 41 KB)

And on Beta:
Screenshot 2021-10-22 at 19-42-59 Blank page - Wikimedia Commons BETA.png (797×1 px, 37 KB)

Change 734310 had a related patch set uploaded (by AntiCompositeNumber; author: AntiCompositeNumber):

[mediawiki/extensions/WikibaseMediaInfo@wmf/1.38.0-wmf.5] explicitly declare 2 message dependencies in wikibase.mediainfo.statements

https://gerrit.wikimedia.org/r/734310

Change 734310 abandoned by Jforrester:

[mediawiki/extensions/WikibaseMediaInfo@wmf/1.38.0-wmf.5] explicitly declare 2 message dependencies in wikibase.mediainfo.statements

Reason:

Let's just go with the train.

https://gerrit.wikimedia.org/r/734310

Etonkovidova claimed this task.

Thanks @LucasWerkmeister and @AntiCompositeNumber for comments & testing tips!

Checked in commons wmf.6 - seems to be ok.

mw.loader.getState("wikibase.mediainfo.statements")
'ready'
mw.messages.get("wikibasemediainfo-filepage-edit")
'(wikibasemediainfo-filepage-edit)'
mw.messages.get("wikibasemediainfo-filepage-edit-depicts")
'(wikibasemediainfo-filepage-edit-depicts)'
mw.loader.load("wikibase.mediainfo.statements")
undefined
 mw.loader.getState("wikibase.mediainfo.statements")
'ready'
mw.messages.get("wikibasemediainfo-filepage-edit")
'(wikibasemediainfo-filepage-edit)'
mw.messages.get("wikibasemediainfo-filepage-edit-depicts")
'(wikibasemediainfo-filepage-edit-depicts)'

Thanks! I reverted the workaround in AC/DC and everything still seems to be working.