effcd80471c2ccbe9250532421d445531b041db9
The createCompactList() function runs synchronously during the module execution burst. Due to it visually changing the page, I won't defer it with rIC for the time being, although that should be considered for the future. For this commit, I'm trying to make it fit the budget of <50ms because ULS is currently usually taking 80ms-180ms on desktop (MacBook/Chrome CPU/4), and that's during batch execution with other modules as well, thus freezing the UI thread for much longer than that. constructor: * Remove needless clone of jQuery object. Use $foo instead of $( $foo ). * Remove creation of 'interlanguageList' and 'compactList' objects that are immediately removed and re-created by init(). init/getInterlanguageList: * Use the HTMLElement.lang and HTMLAnchorElement.href properties directly instead of the DOM getAttribute(). This means stores a full url instead of a relative url, which should help avoid other bugs in the future. * Remove needless jQuery() constructor and jQuery.text() call. Use Node.textContent directly instead. * Use HTMLElement#querySelectorAll instead of jQuery#find(). init/getCompactList/../filterByLangsInText: * Avoid jQuery() constructor and jQuery.attr(), use the HTMLElement.lang property directly. * Avoid jQuery() selector, call querySelectorAll directly. init/getCompactList/../getCommonLanguages/../getFrequentLanguageList: * Avoid temporary array copies from concat() and function overhead with forEach() and filter(). Instead, keep only a single array, and iterate it once. init/getCompactList/../filterByBadges (~10m -> ~0.5ms): * Use one query via $(), instead of two queries $()+find(). * Use $.map() directly instead of map()+fakejQueryObject+toArray(). * Use querySelector(One) for the child instead of $()+find(). * Use HTMLElement.lang property directly. init/hideOriginal (~5m -> ~0.8ms): * Use querySelectorAll() directly instead of jQuery find(). * Set HTMLElement.style directly instead of jQuery() css(). init/render/addTrigger: * Use createElement() and direct properties instead of $(), addClass(), prop() and text(). * The mw.msg() calls use text() and jqueryMsg#parser which is expensive. Use plain() for 'ext-uls-compact-link-info', which doesn't need parsing. Keep text() for the other message, and document why. init/listen: * Use async Deferred#then() instead of sometimes-sync Deferred#done(). Bug: T127328 Change-Id: I424c34fb82c8e95407f7b934e6d42019becbf909
== Universal Language Selector == The Universal Language Selector extension (ULS) provides a flexible way to configure and deliver language settings like interface language, fonts, and input methods (keyboard mappings). This will allow users to type text in different languages not directly supported by their keyboard, read content in a script for which fonts are not available locally, or customise the language in which menus are displayed. For more information see: https://www.mediawiki.org/wiki/Universal_Language_Selector == Copying == You may use any Project Milkshake product, including the Universal Language Selector, under the terms of either the MIT License or the GNU General Public License (GPL) Version 2 or later. See GPL-LICENSE and MIT-LICENSE for details. == Installation == For a very, very quick start add the following lines to LocalSettings.php of your MediaWiki setup: wfLoadExtension( 'UniversalLanguageSelector' ); By default, ULS will appear at personal toolbar position. If you want ULS at interlanguage position, add the following line: $wgULSPosition = 'interlanguage'; == For Developers == The MediaWiki Universal Language Selector project uses jquery.uls: https://github.com/wikimedia/jquery.uls Its development is at Wikimedia Github account. Any fixes to lib/ should happen at Github. Follow the build instructions of jquery.uls to create jquery.uls.js. Bugs for the extension are handled in Phabricator: https://phabricator.wikimedia.org/tag/mediawiki-extensions-universallanguageselector/
Description
Languages
JavaScript
79.4%
HTML
11.9%
PHP
4.7%
Less
2.5%
CSS
1.4%
Other
0.1%