diff --git a/UniversalLanguageSelector.php b/UniversalLanguageSelector.php
index b98cc727..628840f6 100644
--- a/UniversalLanguageSelector.php
+++ b/UniversalLanguageSelector.php
@@ -77,11 +77,24 @@ $wgResourceModules['ext.uls.init'] = array(
'position' => 'top',
);
+$wgResourceModules['ext.uls.preferences'] = array(
+ 'scripts' => 'resources/js/ext.uls.preferences.js',
+ 'localBasePath' => $dir,
+ 'remoteExtPath' => 'UniversalLanguageSelector',
+ 'dependencies' => array(
+ 'mediawiki.user',
+ 'jquery.json',
+ ),
+);
+
$wgResourceModules['ext.uls.languagesettings'] = array(
'scripts' => 'resources/js/ext.uls.languagesettings.js',
'styles' => 'resources/css/ext.uls.languagesettings.css',
'localBasePath' => $dir,
'remoteExtPath' => 'UniversalLanguageSelector',
+ 'dependencies' => array(
+ 'ext.uls.preferences',
+ ),
);
$wgResourceModules['ext.uls.webfonts'] = array(
diff --git a/resources/js/ext.uls.displaysettings.js b/resources/js/ext.uls.displaysettings.js
index 20a581b6..e4058a28 100644
--- a/resources/js/ext.uls.displaysettings.js
+++ b/resources/js/ext.uls.displaysettings.js
@@ -40,15 +40,17 @@
+ '
'
+ ''
+ ''
- + ''
+ + ''
+ '
'; // FIXME i18n and too much hardcoding.
- var DisplaySettings = function () {
+ var DisplaySettings = function ( $parent ) {
this.name = "Display";
this.description = "Set the languages of menus and fonts";
this.$template = $( template );
this.language = this.currentLanguage();
this.$webfonts = null;
+ this.$parent = $parent;
+ this.webfontPreferences = new $.fn.uls.preferences( 'webfonts' );
};
DisplaySettings.prototype = {
@@ -57,12 +59,11 @@
/**
* Render the module into a given target
- * @param $target
*/
- render: function ( $target ) {
- $target.empty();
+ render: function ( ) {
+ this.$parent.$settingsPanel.empty();
this.$webfonts = $( 'body' ).data( 'webfonts' );
- $target.append( this.$template );
+ this.$parent.$settingsPanel.append( this.$template );
this.prepareLanguages();
this.prepareFonts();
this.listen();
@@ -84,10 +85,10 @@
.addClass( 'two columns button' )
.text( $.uls.data.autonym( language ) );
if ( language === this.language ) {
- $button.addClass( 'down' );
+ $button.addClass( 'down' );
}
if ( i > 0 ) {
- $button.addClass( 'offset-by-one' );
+ $button.addClass( 'offset-by-one' );
}
$button.data( 'language', language );
$languages.append( $button );
@@ -129,10 +130,18 @@
var fonts = this.$webfonts.list( this.language );
var $fontSelector = $( 'select.uls-font-select' );
$fontSelector.find( 'option' ).remove();
- $.each( fonts, function ( key, font ) {
- $fontSelector.append( $( "" )
- .attr( "value", font ).text( font ) );
- } );
+ var savedFont = this.webfontPreferences.get( this.language );
+ if( fonts && fonts.length ) {
+ $.each( fonts, function ( key, font ) {
+ var $fontOption = $( "