Merge "Allow always logging tofu detection"
This commit is contained in:
@@ -273,8 +273,12 @@ class UniversalLanguageSelectorHooks {
|
||||
global $wgULSGeoService,
|
||||
$wgULSIMEEnabled, $wgULSWebfontsEnabled,
|
||||
$wgULSPosition, $wgULSNoWebfontsSelectors,
|
||||
$wgULSAnonCanChangeLanguage, $wgULSEventLogging, $wgULSImeSelectors,
|
||||
$wgULSNoImeSelectors, $wgULSFontRepositoryBasePath, $wgExtensionAssetsPath;
|
||||
$wgULSAnonCanChangeLanguage,
|
||||
$wgULSEventLogging,
|
||||
$wgULSTofuLoggingChance, $wgULSTofuLoggingMaxTime,
|
||||
$wgULSImeSelectors, $wgULSNoImeSelectors,
|
||||
$wgULSFontRepositoryBasePath,
|
||||
$wgExtensionAssetsPath;
|
||||
|
||||
// Place constant stuff here (not depending on request context)
|
||||
if ( is_string( $wgULSGeoService ) ) {
|
||||
@@ -286,6 +290,8 @@ class UniversalLanguageSelectorHooks {
|
||||
$vars['wgULSPosition'] = $wgULSPosition;
|
||||
$vars['wgULSAnonCanChangeLanguage'] = $wgULSAnonCanChangeLanguage;
|
||||
$vars['wgULSEventLogging'] = $wgULSEventLogging;
|
||||
$vars['wgULSTofuLoggingChance'] = $wgULSTofuLoggingChance;
|
||||
$vars['wgULSTofuLoggingMaxTime'] = $wgULSTofuLoggingMaxTime;
|
||||
$vars['wgULSImeSelectors'] = $wgULSImeSelectors;
|
||||
$vars['wgULSNoImeSelectors'] = $wgULSNoImeSelectors;
|
||||
$vars['wgULSNoWebfontsSelectors'] = $wgULSNoWebfontsSelectors;
|
||||
|
||||
@@ -136,6 +136,25 @@ $GLOBALS['wgULSPosition'] = 'personal';
|
||||
*/
|
||||
$GLOBALS['wgULSEventLogging'] = false;
|
||||
|
||||
/**
|
||||
* How frequently to run tofu detection for all languages and to log them.
|
||||
* This must be a number between 0 and 100, which signifies the percentage
|
||||
* of pages for which this will be done. If it's 100, then it will be
|
||||
* done for all pages. If it's 20, then it will be done on 20% of pages.
|
||||
* The default is not to do it on any pages.
|
||||
* @since 2014.04
|
||||
*/
|
||||
$GLOBALS['wgULSTofuLoggingChance'] = 0;
|
||||
|
||||
/**
|
||||
* If tofu detection for all languages is enabled, and this value is non-zero
|
||||
* this specifies the maximum time in milliseconds that the tofu detection
|
||||
* is allowed to run before it's forced to stop.
|
||||
* The default is 0 - not to force it to stop.
|
||||
* @since 2014.04
|
||||
*/
|
||||
$GLOBALS['wgULSTofuLoggingMaxTime'] = 0;
|
||||
|
||||
/**
|
||||
* Array of jQuery selectors of elements on which IME should be enabled.
|
||||
*
|
||||
|
||||
@@ -223,11 +223,70 @@
|
||||
|
||||
$( document ).ready( function () {
|
||||
mw.uls.init( function () {
|
||||
var tofuStartTime, tofuEndTime, tofuTime;
|
||||
|
||||
mw.webfonts.preferences.load();
|
||||
|
||||
if ( mw.webfonts.preferences.isEnabled() ) {
|
||||
mw.loader.using( 'ext.uls.webfonts.fonts', mw.webfonts.setup );
|
||||
}
|
||||
|
||||
// If event logging is enabled and this page "wins" the tofu logging lottery
|
||||
// try to detect tofu
|
||||
if ( !mw.config.get( 'wgULSEventLogging' ) ||
|
||||
mw.config.get( 'wgULSTofuLoggingChance' ) < mw.config.get( 'wgArticleId' ) % 100
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
setTimeout( function () {
|
||||
var i, lang, text,
|
||||
$langElements, $element,
|
||||
maxTime = mw.config.get( 'wgULSTofuLoggingMaxTime' );
|
||||
|
||||
tofuStartTime = ( new Date() ).getTime();
|
||||
|
||||
// Check all elements that have the lang attribute,
|
||||
// except the root <html> - it has lang,
|
||||
// but its text is not useful for testing.
|
||||
// mw-content-text also always has lang,
|
||||
// and its text is more relevant.
|
||||
$langElements = $( 'body [lang]' );
|
||||
|
||||
for ( i = 0; i < $langElements.length; i++ ) {
|
||||
$element = $( $langElements[ i ] );
|
||||
lang = $element.prop( 'lang' );
|
||||
|
||||
// Skip if this languages was already tested
|
||||
if ( tofuLanguages[lang] !== undefined ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
text = $.trim( $element.text() ).substr( 0, 4 );
|
||||
|
||||
// Skip if the text only has basic ASCII and Latin
|
||||
if ( !text.match( /[^\u0009-\u0200]/ ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tofuLanguages[lang] = detectTofu( text );
|
||||
|
||||
if ( tofuLanguages[lang] ) {
|
||||
mw.log( 'tofu detected for ' + lang );
|
||||
mw.hook( 'mw.uls.webfonts.tofudetected' ).fire( lang );
|
||||
}
|
||||
|
||||
// Force to break the detection loop if it's taking too long
|
||||
if ( maxTime && ( new Date() ).getTime() - tofuStartTime > maxTime ) {
|
||||
mw.log( 'tofu detection max time reached. last lang: ' + lang );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
tofuEndTime = ( new Date() ).getTime();
|
||||
tofuTime = ( tofuEndTime - tofuStartTime ) / 1000;
|
||||
mw.log( 'tofu detection took ' + tofuTime + ' seconds' );
|
||||
}, 1000 );
|
||||
} );
|
||||
} );
|
||||
}( jQuery, mediaWiki ) );
|
||||
|
||||
Reference in New Issue
Block a user