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:
Santhosh Thottingal
2016-04-12 10:39:28 +05:30
parent d964a10c83
commit 64eab95b94
4 changed files with 170 additions and 203 deletions

View File

@@ -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"

View File

@@ -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 ) );

View File

@@ -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 ) );

View File

@@ -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 ) );