diff --git a/UniversalLanguageSelector.hooks.php b/UniversalLanguageSelector.hooks.php index a7004913..86527d44 100644 --- a/UniversalLanguageSelector.hooks.php +++ b/UniversalLanguageSelector.hooks.php @@ -26,11 +26,8 @@ class UniversalLanguageSelectorHooks { * @return bool */ public static function addModules( $out, $skin ) { - global $wgULSGeoService; $out->addModules( 'ext.uls.init' ); - if ( $wgULSGeoService ) { - $out->addModules( 'ext.uls.geoclient' ); - } + $out->addModules( 'ext.uls.geoclient' ); return true; } diff --git a/UniversalLanguageSelector.php b/UniversalLanguageSelector.php index 223149d1..95cb1feb 100644 --- a/UniversalLanguageSelector.php +++ b/UniversalLanguageSelector.php @@ -49,7 +49,7 @@ $wgExtensionCredits['other'][] = array( * ULS can use geolocation services to suggest languages based on the * country the user is vising from. Setting this to false will prevent * builtin geolocation from being used. You can provide your own geolocation - * by setting window.GEO to object which has key 'country_code' or 'country'. + * by setting window.Geo to object which has key 'country_code' or 'country'. * This is what Wikipedia does. * * The service should return jsonp that uses the supplied callback parameter. diff --git a/resources/js/ext.uls.geoclient.js b/resources/js/ext.uls.geoclient.js index e814cee3..f49c4450 100644 --- a/resources/js/ext.uls.geoclient.js +++ b/resources/js/ext.uls.geoclient.js @@ -22,19 +22,31 @@ mw.uls = mw.uls || {}; mw.uls.setGeo = function ( data ) { - window.GEO = data; + window.Geo = data; }; mw.uls.getCountryCode = function () { - /*jshint camelcase: false*/ - return window.GEO && ( window.GEO.country || window.GEO.country_code ); + return window.Geo && ( window.Geo.country || window.Geo.country_code ); }; - var settings = { - cache: true, - dataType: 'jsonp', - jsonpCallback: 'mw.uls.setGeo' - }; - $.ajax( mw.config.get( 'wgULSGeoService' ), settings ); + var currentProto, httpOnly, + service = mw.config.get( 'wgULSGeoService' ); + + // Call the service only if defined, and if the current + // protocol is https, only if the service is not configured + // with http:// as the protocol + if ( service ) { + httpOnly = service.substring(0, 7) === 'http://'; + currentProto = document.location.protocol; + if ( !httpOnly || currentProto === 'http:' ) { + var settings = { + cache: true, + dataType: 'jsonp', + jsonpCallback: 'mw.uls.setGeo' + }; + + $.ajax( service, settings ); + } + } }( mediaWiki, jQuery ) ); diff --git a/resources/js/ext.uls.init.js b/resources/js/ext.uls.init.js index 66355279..a2525371 100644 --- a/resources/js/ext.uls.init.js +++ b/resources/js/ext.uls.init.js @@ -63,7 +63,8 @@ }; mw.uls.getFrequentLanguageList = function () { - var unique = [], + var countryCode, + unique = [], list = [ mw.config.get( 'wgUserLanguage' ), mw.config.get( 'wgContentLanguage' ), @@ -72,8 +73,9 @@ .concat( mw.uls.getPreviousLanguages() ) .concat( mw.uls.getAcceptLanguageList() ); - if ( window.GEO ) { - list = list.concat( $.uls.data.getLanguagesInTerritory( mw.uls.getCountryCode() ) ); + countryCode = mw.uls.getCountryCode() + if ( countryCode ) { + list = list.concat( $.uls.data.getLanguagesInTerritory( countryCode ) ); } $.each( list, function ( i, v ) {