Remove browser checks and use MediaWiki browser policy
We had a browser check to blacklist all browsers older than IE 8 IE <= 7 But that is no longer required since JS support is not there for such browsers as per https://www.mediawiki.org/wiki/Compatibility#Modern We can support all modern browsers listed there and we don't need additional blacklisting now. From 1.27 onwards, there is no JS loaded for IE 8 too. So we can just use MW browser support policy. In this commit, the code to do brower checks removed and simplified the initialization code. Still I am not happy with the interface module, that need further refactoring. Change-Id: I655826c55fb2c7c5c88f16368110142d64a96eec
This commit is contained in:
@@ -160,7 +160,6 @@
|
|||||||
"mediawiki.api",
|
"mediawiki.api",
|
||||||
"mediawiki.api.options",
|
"mediawiki.api.options",
|
||||||
"mediawiki.cookie",
|
"mediawiki.cookie",
|
||||||
"jquery.client",
|
|
||||||
"jquery.cookie"
|
"jquery.cookie"
|
||||||
],
|
],
|
||||||
"position": "top",
|
"position": "top",
|
||||||
@@ -251,7 +250,8 @@
|
|||||||
"scripts": "js/ext.uls.webfonts.js",
|
"scripts": "js/ext.uls.webfonts.js",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"ext.uls.init",
|
"ext.uls.init",
|
||||||
"ext.uls.preferences"
|
"ext.uls.preferences",
|
||||||
|
"jquery.client"
|
||||||
],
|
],
|
||||||
"localBasePath": "resources",
|
"localBasePath": "resources",
|
||||||
"remoteExtPath": "UniversalLanguageSelector/resources"
|
"remoteExtPath": "UniversalLanguageSelector/resources"
|
||||||
|
|||||||
@@ -183,40 +183,4 @@
|
|||||||
return unique;
|
return unique;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether the browser is supported.
|
|
||||||
* Browser support policy: http://www.mediawiki.org/wiki/Browser_support#Grade_A
|
|
||||||
*
|
|
||||||
* @return {boolean}
|
|
||||||
*/
|
|
||||||
function isBrowserSupported() {
|
|
||||||
var blacklist = {
|
|
||||||
msie: [
|
|
||||||
[ '<=', 7 ]
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
return !$.client.test( blacklist, null, true );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize ULS front-end if browser is supported.
|
|
||||||
*
|
|
||||||
* @param {Function} callback callback function to be called after initialization.
|
|
||||||
*/
|
|
||||||
mw.uls.init = function ( callback ) {
|
|
||||||
if ( !isBrowserSupported() ) {
|
|
||||||
$( '#pt-uls' ).hide();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( callback ) {
|
|
||||||
callback.call( this );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$( document ).ready( function () {
|
|
||||||
mw.uls.init();
|
|
||||||
} );
|
|
||||||
}( jQuery, mediaWiki ) );
|
}( jQuery, mediaWiki ) );
|
||||||
|
|||||||
@@ -317,178 +317,181 @@
|
|||||||
// TODO: Refactor this, because it doesn't directly belong
|
// TODO: Refactor this, because it doesn't directly belong
|
||||||
// to the tooltip.
|
// to the tooltip.
|
||||||
$.cookie( mw.uls.previousLanguageAutonymCookie,
|
$.cookie( mw.uls.previousLanguageAutonymCookie,
|
||||||
mw.config.get( 'wgULSCurrentAutonym' ),
|
mw.config.get( 'wgULSCurrentAutonym' ), {
|
||||||
{ path: '/' }
|
path: '/'
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$( document ).ready( function () {
|
function initInterface() {
|
||||||
mw.uls.init( function () {
|
var $triggers,
|
||||||
var $triggers,
|
$pLang,
|
||||||
$pLang,
|
$ulsTrigger = $( '.uls-trigger' ),
|
||||||
$ulsTrigger = $( '.uls-trigger' ),
|
rtlPage = $( 'body' ).hasClass( 'rtl' ),
|
||||||
rtlPage = $( 'body' ).hasClass( 'rtl' ),
|
anonMode = ( mw.user.isAnon() &&
|
||||||
anonMode = ( mw.user.isAnon() &&
|
!mw.config.get( 'wgULSAnonCanChangeLanguage' ) ),
|
||||||
!mw.config.get( 'wgULSAnonCanChangeLanguage' ) ),
|
imeSelector = mw.config.get( 'wgULSImeSelectors' ).join( ', ' ),
|
||||||
imeSelector = mw.config.get( 'wgULSImeSelectors' ).join( ', ' ),
|
ulsPosition = mw.config.get( 'wgULSPosition' );
|
||||||
ulsPosition = mw.config.get( 'wgULSPosition' );
|
|
||||||
|
|
||||||
if ( ulsPosition === 'interlanguage' ) {
|
if ( ulsPosition === 'interlanguage' ) {
|
||||||
// TODO: Refactor this block
|
// TODO: Refactor this block
|
||||||
// The interlanguage links section
|
// The interlanguage links section
|
||||||
$pLang = $( '#p-lang' );
|
$pLang = $( '#p-lang' );
|
||||||
// Add an element near the interlanguage links header
|
// Add an element near the interlanguage links header
|
||||||
$ulsTrigger = $( '<span>' ).addClass( 'uls-settings-trigger' );
|
$ulsTrigger = $( '<span>' ).addClass( 'uls-settings-trigger' );
|
||||||
// Append ULS cog to languages section.
|
// Append ULS cog to languages section.
|
||||||
$pLang.prepend( $ulsTrigger );
|
$pLang.prepend( $ulsTrigger );
|
||||||
// Take care of any other elements with this class.
|
// Take care of any other elements with this class.
|
||||||
$ulsTrigger = $( '.uls-settings-trigger' );
|
$ulsTrigger = $( '.uls-settings-trigger' );
|
||||||
// Remove the dummy link, which was added to make sure that the section appears
|
// Remove the dummy link, which was added to make sure that the section appears
|
||||||
$pLang.find( '.uls-p-lang-dummy' ).remove();
|
$pLang.find( '.uls-p-lang-dummy' ).remove();
|
||||||
|
|
||||||
if ( !$pLang.find( 'div ul' ).children().length ) {
|
if ( !$pLang.find( 'div ul' ).children().length ) {
|
||||||
// Replace the title of the interlanguage links area
|
// Replace the title of the interlanguage links area
|
||||||
// if there are no interlanguage links
|
// if there are no interlanguage links
|
||||||
$pLang.find( 'h3' )
|
$pLang.find( 'h3' )
|
||||||
.text( mw.msg( 'uls-plang-title-languages' ) );
|
.text( mw.msg( 'uls-plang-title-languages' ) );
|
||||||
}
|
|
||||||
|
|
||||||
$ulsTrigger.attr( {
|
|
||||||
title: mw.msg( 'ext-uls-select-language-settings-icon-tooltip' )
|
|
||||||
} );
|
|
||||||
|
|
||||||
$ulsTrigger.on( 'click', function ( e, eventParams ) {
|
|
||||||
var languagesettings = $ulsTrigger.data( 'languagesettings' ),
|
|
||||||
languageSettingsOptions;
|
|
||||||
|
|
||||||
if ( languagesettings ) {
|
|
||||||
if ( !languagesettings.shown ) {
|
|
||||||
mw.hook( 'mw.uls.settings.open' ).fire( eventParams && eventParams.source || 'interlanguage' );
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Initialize the Language settings window
|
|
||||||
languageSettingsOptions = {
|
|
||||||
defaultModule: 'display',
|
|
||||||
onVisible: function () {
|
|
||||||
var topRowHeight, caretHeight, caretWidth,
|
|
||||||
$caretBefore = $( '<span>' ).addClass( 'caret-before' ),
|
|
||||||
$caretAfter = $( '<span>' ).addClass( 'caret-after' ),
|
|
||||||
ulsTriggerWidth = this.$element.width(),
|
|
||||||
ulsTriggerOffset = this.$element.offset();
|
|
||||||
|
|
||||||
// Add the callout caret triangle
|
|
||||||
// pointing to the trigger icon
|
|
||||||
this.$window.addClass( 'callout' );
|
|
||||||
this.$window.prepend( $caretBefore, $caretAfter );
|
|
||||||
|
|
||||||
// Calculate the positioning of the panel
|
|
||||||
// according to the position of the trigger icon
|
|
||||||
if ( rtlPage ) {
|
|
||||||
caretWidth = parseInt( $caretBefore.css( 'border-left-width' ), 10 );
|
|
||||||
this.left = ulsTriggerOffset.left - this.$window.width() - caretWidth;
|
|
||||||
} else {
|
|
||||||
caretWidth = parseInt( $caretBefore.css( 'border-right-width' ), 10 );
|
|
||||||
this.left = ulsTriggerOffset.left + ulsTriggerWidth + caretWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
topRowHeight = this.$window.find( '.row' ).height();
|
|
||||||
caretHeight = parseInt( $caretBefore.css( 'top' ), 10 );
|
|
||||||
this.top = ulsTriggerOffset.top - topRowHeight - caretHeight / 2;
|
|
||||||
|
|
||||||
this.position();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
mw.loader.using( mw.uls.languageSettingsModules, function () {
|
|
||||||
$ulsTrigger.languagesettings( languageSettingsOptions ).click();
|
|
||||||
} );
|
|
||||||
|
|
||||||
e.stopPropagation();
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
} else if ( anonMode ) {
|
|
||||||
$ulsTrigger.on( 'click', function ( e, eventParams ) {
|
|
||||||
var languagesettings = $ulsTrigger.data( 'languagesettings' );
|
|
||||||
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
if ( languagesettings ) {
|
|
||||||
if ( !languagesettings.shown ) {
|
|
||||||
mw.hook( 'mw.uls.settings.open' ).fire( eventParams && eventParams.source || 'personal' );
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
mw.loader.using( mw.uls.languageSettingsModules, function () {
|
|
||||||
$ulsTrigger.languagesettings();
|
|
||||||
|
|
||||||
$ulsTrigger.trigger( 'click', eventParams );
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
} else {
|
|
||||||
$ulsTrigger.on( 'click', function ( e, eventParams ) {
|
|
||||||
var uls = $ulsTrigger.data( 'uls' );
|
|
||||||
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
if ( uls ) {
|
|
||||||
if ( !uls.shown ) {
|
|
||||||
mw.hook( 'mw.uls.settings.open' ).fire( eventParams && eventParams.source || 'personal' );
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
mw.loader.using( 'ext.uls.mediawiki', function () {
|
|
||||||
$ulsTrigger.uls( {
|
|
||||||
quickList: function () {
|
|
||||||
return mw.uls.getFrequentLanguageList();
|
|
||||||
},
|
|
||||||
onReady: function () {
|
|
||||||
var uls = this;
|
|
||||||
mw.loader.using( mw.uls.languageSettingsModules, function () {
|
|
||||||
addDisplaySettings( uls );
|
|
||||||
addInputSettings( uls );
|
|
||||||
} );
|
|
||||||
},
|
|
||||||
onSelect: function ( language ) {
|
|
||||||
mw.uls.changeLanguage( language );
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
|
|
||||||
// Allow styles to apply first and position to work by
|
|
||||||
// delaying the activation after them.
|
|
||||||
window.setTimeout( function () {
|
|
||||||
$ulsTrigger.trigger( 'click', eventParams );
|
|
||||||
}, 0 );
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// At this point we don't care which kind of trigger it is
|
$ulsTrigger.attr( {
|
||||||
$triggers = $( '.uls-settings-trigger, .uls-trigger' );
|
title: mw.msg( 'ext-uls-select-language-settings-icon-tooltip' )
|
||||||
addAccessibilityFeatures( $triggers );
|
} );
|
||||||
|
|
||||||
// Bind language settings to preferences page link
|
$ulsTrigger.on( 'click', function ( e, eventParams ) {
|
||||||
$( '#uls-preferences-link' )
|
var languagesettings = $ulsTrigger.data( 'languagesettings' ),
|
||||||
.text( mw.msg( 'ext-uls-language-settings-preferences-link' ) )
|
languageSettingsOptions;
|
||||||
.click( function () {
|
|
||||||
$ulsTrigger.trigger( 'click', {
|
if ( languagesettings ) {
|
||||||
source: 'preferences'
|
if ( !languagesettings.shown ) {
|
||||||
|
mw.hook( 'mw.uls.settings.open' ).fire( eventParams && eventParams.source || 'interlanguage' );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Initialize the Language settings window
|
||||||
|
languageSettingsOptions = {
|
||||||
|
defaultModule: 'display',
|
||||||
|
onVisible: function () {
|
||||||
|
var topRowHeight, caretHeight, caretWidth,
|
||||||
|
$caretBefore = $( '<span>' ).addClass( 'caret-before' ),
|
||||||
|
$caretAfter = $( '<span>' ).addClass( 'caret-after' ),
|
||||||
|
ulsTriggerWidth = this.$element.width(),
|
||||||
|
ulsTriggerOffset = this.$element.offset();
|
||||||
|
|
||||||
|
// Add the callout caret triangle
|
||||||
|
// pointing to the trigger icon
|
||||||
|
this.$window.addClass( 'callout' );
|
||||||
|
this.$window.prepend( $caretBefore, $caretAfter );
|
||||||
|
|
||||||
|
// Calculate the positioning of the panel
|
||||||
|
// according to the position of the trigger icon
|
||||||
|
if ( rtlPage ) {
|
||||||
|
caretWidth = parseInt( $caretBefore.css( 'border-left-width' ), 10 );
|
||||||
|
this.left = ulsTriggerOffset.left - this.$window.width() - caretWidth;
|
||||||
|
} else {
|
||||||
|
caretWidth = parseInt( $caretBefore.css( 'border-right-width' ), 10 );
|
||||||
|
this.left = ulsTriggerOffset.left + ulsTriggerWidth + caretWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
topRowHeight = this.$window.find( '.row' ).height();
|
||||||
|
caretHeight = parseInt( $caretBefore.css( 'top' ), 10 );
|
||||||
|
this.top = ulsTriggerOffset.top - topRowHeight - caretHeight / 2;
|
||||||
|
|
||||||
|
this.position();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
mw.loader.using( mw.uls.languageSettingsModules, function () {
|
||||||
|
$ulsTrigger.languagesettings( languageSettingsOptions ).click();
|
||||||
} );
|
} );
|
||||||
|
|
||||||
return false;
|
e.stopPropagation();
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
} else if ( anonMode ) {
|
||||||
|
$ulsTrigger.on( 'click', function ( e, eventParams ) {
|
||||||
|
var languagesettings = $ulsTrigger.data( 'languagesettings' );
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
if ( languagesettings ) {
|
||||||
|
if ( !languagesettings.shown ) {
|
||||||
|
mw.hook( 'mw.uls.settings.open' ).fire( eventParams && eventParams.source || 'personal' );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mw.loader.using( mw.uls.languageSettingsModules, function () {
|
||||||
|
$ulsTrigger.languagesettings();
|
||||||
|
|
||||||
|
$ulsTrigger.trigger( 'click', eventParams );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
} else {
|
||||||
|
$ulsTrigger.on( 'click', function ( e, eventParams ) {
|
||||||
|
var uls = $ulsTrigger.data( 'uls' );
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
if ( uls ) {
|
||||||
|
if ( !uls.shown ) {
|
||||||
|
mw.hook( 'mw.uls.settings.open' ).fire( eventParams && eventParams.source || 'personal' );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mw.loader.using( 'ext.uls.mediawiki', function () {
|
||||||
|
$ulsTrigger.uls( {
|
||||||
|
quickList: function () {
|
||||||
|
return mw.uls.getFrequentLanguageList();
|
||||||
|
},
|
||||||
|
onReady: function () {
|
||||||
|
var uls = this;
|
||||||
|
mw.loader.using( mw.uls.languageSettingsModules, function () {
|
||||||
|
addDisplaySettings( uls );
|
||||||
|
addInputSettings( uls );
|
||||||
|
} );
|
||||||
|
},
|
||||||
|
onSelect: function ( language ) {
|
||||||
|
mw.uls.changeLanguage( language );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
// Allow styles to apply first and position to work by
|
||||||
|
// delaying the activation after them.
|
||||||
|
window.setTimeout( function () {
|
||||||
|
$ulsTrigger.trigger( 'click', eventParams );
|
||||||
|
}, 0 );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
// At this point we don't care which kind of trigger it is
|
||||||
|
$triggers = $( '.uls-settings-trigger, .uls-trigger' );
|
||||||
|
addAccessibilityFeatures( $triggers );
|
||||||
|
|
||||||
|
// Bind language settings to preferences page link
|
||||||
|
$( '#uls-preferences-link' )
|
||||||
|
.text( mw.msg( 'ext-uls-language-settings-preferences-link' ) )
|
||||||
|
.click( function () {
|
||||||
|
$ulsTrigger.trigger( 'click', {
|
||||||
|
source: 'preferences'
|
||||||
} );
|
} );
|
||||||
|
|
||||||
if ( userCanChangeLanguage() && userHasChangedLanguage() ) {
|
return false;
|
||||||
showUndoTooltip();
|
} );
|
||||||
}
|
|
||||||
|
|
||||||
$( 'body' ).on( 'focus.imeinit', imeSelector, function () {
|
if ( userCanChangeLanguage() && userHasChangedLanguage() ) {
|
||||||
var $input = $( this );
|
showUndoTooltip();
|
||||||
$( 'body' ).off( '.imeinit' );
|
}
|
||||||
mw.loader.using( 'ext.uls.ime', function () {
|
|
||||||
mw.ime.setup();
|
$( 'body' ).on( 'focus.imeinit', imeSelector, function () {
|
||||||
mw.ime.handleFocus( $input );
|
var $input = $( this );
|
||||||
} );
|
$( 'body' ).off( '.imeinit' );
|
||||||
|
mw.loader.using( 'ext.uls.ime', function () {
|
||||||
|
mw.ime.setup();
|
||||||
|
mw.ime.handleFocus( $input );
|
||||||
} );
|
} );
|
||||||
} );
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
$( document ).ready( function () {
|
||||||
|
initInterface();
|
||||||
} );
|
} );
|
||||||
}( jQuery, mediaWiki ) );
|
}( jQuery, mediaWiki ) );
|
||||||
|
|||||||
@@ -87,7 +87,9 @@
|
|||||||
length = Math.min( 4, text.length ),
|
length = Math.min( 4, text.length ),
|
||||||
detected = false;
|
detected = false;
|
||||||
|
|
||||||
if ( $.client.test( { msie: false } ) ) {
|
if ( $.client.test( {
|
||||||
|
msie: false
|
||||||
|
} ) ) {
|
||||||
// IE shows a different tofu for unassigned code points!
|
// IE shows a different tofu for unassigned code points!
|
||||||
text = tofuSalt + text;
|
text = tofuSalt + text;
|
||||||
}
|
}
|
||||||
@@ -222,12 +224,10 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
$( document ).ready( function () {
|
$( document ).ready( function () {
|
||||||
mw.uls.init( function () {
|
mw.webfonts.preferences.load();
|
||||||
mw.webfonts.preferences.load();
|
|
||||||
|
|
||||||
if ( mw.webfonts.preferences.isEnabled() ) {
|
if ( mw.webfonts.preferences.isEnabled() ) {
|
||||||
mw.loader.using( 'ext.uls.webfonts.fonts', mw.webfonts.setup );
|
mw.loader.using( 'ext.uls.webfonts.fonts', mw.webfonts.setup );
|
||||||
}
|
}
|
||||||
} );
|
|
||||||
} );
|
} );
|
||||||
}( jQuery, mediaWiki ) );
|
}( jQuery, mediaWiki ) );
|
||||||
|
|||||||
Reference in New Issue
Block a user