diff options
Diffstat (limited to 'www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.geoclient.js')
-rw-r--r-- | www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.geoclient.js | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.geoclient.js b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.geoclient.js new file mode 100644 index 00000000..8164743a --- /dev/null +++ b/www/wiki/extensions/UniversalLanguageSelector/resources/js/ext.uls.geoclient.js @@ -0,0 +1,48 @@ +/*! + * ULS GeoIP client + * + * Copyright (C) 2012 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris, + * Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other + * contributors. See CREDITS for a list. + * + * UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't + * have to do anything special to choose one license or the other and you don't + * have to notify anyone which license you are using. You are free to use + * UniversalLanguageSelector in commercial projects as long as the copyright + * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details. + * + * @file + * @ingroup Extensions + * @licence GNU General Public Licence 2.0 or later + * @licence MIT License + */ + +( function () { + 'use strict'; + + var geo, + cacheAge = 60 * 60 * 8, // 8 hours + service = mw.config.get( 'wgULSGeoService' ); + + // This is not supposed to happen. For sanity prefer existing value. + if ( window.Geo ) { + return; + } + + // Using cache for speed and to reduce load on the third-party service. + // Using cookies over localStorage because cookies support automatic expiring. + // This cookie is not currently read server-side. + geo = mw.cookie.get( 'ULSGeo' ); + if ( geo ) { + try { + window.Geo = JSON.parse( geo ); + return; + } catch ( e ) {} + } + + $.getJSON( service ).done( function ( data ) { + window.Geo = data; + mw.cookie.set( 'ULSGeo', JSON.stringify( data ), cacheAge ); + } ); + +}() ); |