Add support for multiple ULS buttons

- Update document click handler for loading ULS
- Use data attributes to ensure ULS isnt loaded multiple times for an element

Bug: T289815
Change-Id: Iba6cbbd6c6e48a1abfda342421822e3ff2715362
This commit is contained in:
bwang
2021-09-07 13:58:55 -05:00
parent a55369e0e2
commit 9e952f28af

View File

@@ -442,6 +442,11 @@
var $target = $( ev.currentTarget ); var $target = $( ev.currentTarget );
ev.preventDefault(); ev.preventDefault();
// Avoid reinitializing ULS multiple times for an element
if ( $target.attr( 'data-uls-loaded' ) ) {
return;
}
mw.loader.using( 'ext.uls.mediawiki' ).then( function () { mw.loader.using( 'ext.uls.mediawiki' ).then( function () {
var parent, languageNodes, standalone, uls; var parent, languageNodes, standalone, uls;
@@ -449,6 +454,8 @@
languageNodes = parent ? parent.querySelectorAll( '.interlanguage-link-target' ) : []; languageNodes = parent ? parent.querySelectorAll( '.interlanguage-link-target' ) : [];
standalone = isUsingStandaloneLanguageButton(); standalone = isUsingStandaloneLanguageButton();
$target.attr( 'data-uls-loaded', true );
// Setup click handler for ULS // Setup click handler for ULS
launchULS( launchULS(
$target, $target,
@@ -483,7 +490,8 @@
// if there are many languages. Warning: Both this module and ext.uls.compactlinks // if there are many languages. Warning: Both this module and ext.uls.compactlinks
// module may run simultaneously. Using event delegation to avoid race conditions where // module may run simultaneously. Using event delegation to avoid race conditions where
// the trigger may be created after this code. // the trigger may be created after this code.
$( document ).one( 'click', '.mw-interlanguage-selector', loadContentLanguageSelector ); $( document ).on( 'click', '.mw-interlanguage-selector', loadContentLanguageSelector );
} }
} }