Add webfonts reset functionality to the checkbox

Change-Id: I983d261fa018416c36ad2123b94850986beeca70
This commit is contained in:
Amir E. Aharoni
2012-08-16 07:21:03 +03:00
parent d78074a1df
commit 5bb5ca0118
4 changed files with 50 additions and 12 deletions

View File

@@ -68,9 +68,8 @@
* @param fontFamily String: font family name * @param fontFamily String: font family name
*/ */
apply : function(fontFamily, $element) { apply : function(fontFamily, $element) {
var fontStack;
$element = $element || this.$element; $element = $element || this.$element;
fontStack = this.options.fontStack.slice(0); var fontStack = this.options.fontStack.slice(0);
this.load(fontFamily); this.load(fontFamily);
fontStack.unshift(fontFamily); fontStack.unshift(fontFamily);
$element.css('font-family', fontStack.join() ); $element.css('font-family', fontStack.join() );

View File

@@ -27,7 +27,7 @@
+ '<div class="row"><div class="twelve columns"><h4>Font Settings</h4></div></div>' + '<div class="row"><div class="twelve columns"><h4>Font Settings</h4></div></div>'
+ '<div class="row">' + '<div class="row">'
+ '<div class="eleven columns">' + '<div class="eleven columns">'
+ '<label class="checkbox"><input type="checkbox" checked id="webfonts-enable-checkbox" />' + '<label class="checkbox"><input type="checkbox" id="webfonts-enable-checkbox" />'
+ '<strong>Download fonts automatically when needed</strong> ' + '<strong>Download fonts automatically when needed</strong> '
+ 'Web fonts will be downloaded when text in special scripts is displayed. ' + 'Web fonts will be downloaded when text in special scripts is displayed. '
+ '<a href="#">More Information</a>' + '<a href="#">More Information</a>'
@@ -64,17 +64,30 @@
/** /**
* Render the module into a given target * Render the module into a given target
*/ */
render: function ( ) { render: function () {
this.$parent.$settingsPanel.empty(); this.$parent.$settingsPanel.empty();
this.$webfonts = $( 'body' ).data( 'webfonts' ); this.$webfonts = $( 'body' ).data( 'webfonts' );
this.$parent.$settingsPanel.append( this.$template ); this.$parent.$settingsPanel.append( this.$template );
$( 'select.uls-font-select' ).val( );
this.prepareLanguages(); this.prepareLanguages();
this.prepareFonts(); this.prepareFonts();
this.prepareWebfontsCheckbox();
this.listen(); this.listen();
}, },
prepareWebfontsCheckbox: function () {
var enable = this.webfontPreferences.get( 'webfontsEnabled' );
// If the user didn't use the checkbox, the preference will be undefined.
// The default for now is to enable webfonts if the user didn't select anything.
if ( enable === undefined ) {
enable = true;
}
$( '#webfonts-enable-checkbox' ).prop( 'checked', enable );
},
/** /**
* Prepare the UI language chooser * Prepare the UI language selector
*/ */
prepareLanguages: function () { prepareLanguages: function () {
var $languages = $( 'div.uls-ui-languages' ); var $languages = $( 'div.uls-ui-languages' );
@@ -83,6 +96,7 @@
var languages = [this.language]; var languages = [this.language];
$.merge( languages, previousLanguages); $.merge( languages, previousLanguages);
$.unique( languages ); $.unique( languages );
for ( var i = 0; i < 3; i++ ) { for ( var i = 0; i < 3; i++ ) {
var language = languages[i]; var language = languages[i];
var $button = $( '<button>' ) var $button = $( '<button>' )
@@ -125,13 +139,15 @@
}, },
/** /**
* Prepare the font chooser. * Prepare the font selector.
*/ */
prepareFonts: function () { prepareFonts: function () {
var fonts = this.$webfonts.list( this.language ); var fonts = this.$webfonts.list( this.language );
var $fontSelector = $( 'select.uls-font-select' ); var $fontSelector = $( 'select.uls-font-select' );
$fontSelector.find( 'option' ).remove(); $fontSelector.find( 'option' ).remove();
var savedFont = this.webfontPreferences.get( this.language ); var savedFont = this.webfontPreferences.get( this.language );
if( fonts && fonts.length ) { if( fonts && fonts.length ) {
$.each( fonts, function ( key, font ) { $.each( fonts, function ( key, font ) {
var $fontOption = $( "<option>" ) var $fontOption = $( "<option>" )
@@ -140,27 +156,42 @@
$fontOption.attr( 'selected', savedFont === font ); $fontOption.attr( 'selected', savedFont === font );
} ); } );
} }
var $systemFont = $( "<option>" ).val( 'system' ).text( 'System font' ); var $systemFont = $( "<option>" ).val( 'system' ).text( 'System font' );
$fontSelector.append( $systemFont ); $fontSelector.append( $systemFont );
$systemFont.attr( 'selected', savedFont === 'system' ); $systemFont.attr( 'selected', savedFont === 'system' || !savedFont );
var $fontLabel = $( 'label#font-selector' ); var $fontLabel = $( 'label#font-selector' );
$fontLabel.text( "Select font for " + $.uls.data.autonym( this.language ) ); $fontLabel.text( "Select font for " + $.uls.data.autonym( this.language ) );
}, },
selectedFont: function () {
return $( 'select.uls-font-select' ).find( 'option:selected' ).val();
},
/** /**
* Register general event listeners * Register general event listeners
*/ */
listen: function () { listen: function () {
var that = this; var that = this;
$( "div.uls-ui-languages button.button" ).click( function () { $( "div.uls-ui-languages button.button" ).click( function () {
$( "button.button" ).removeClass( "down" ); $( "button.button" ).removeClass( "down" );
$( this ).addClass( "down" ); $( this ).addClass( "down" );
that.language = $( this ).data( 'language' ) || that.language; that.language = $( this ).data( 'language' ) || that.language;
that.prepareFonts(); that.prepareFonts();
} ); } );
$( '#uls-displaysettings-apply' ).on( 'click', function () { $( '#uls-displaysettings-apply' ).on( 'click', function () {
that.apply(); that.apply();
} ); } );
$( '#webfonts-enable-checkbox' ).on( 'click', function () {
if ( this.checked ) {
that.$webfonts.apply( that.selectedFont() );
} else {
that.$webfonts.reset();
}
} );
}, },
/** /**
@@ -195,9 +226,9 @@
* Handle the apply button press * Handle the apply button press
*/ */
apply: function () { apply: function () {
var that = this; var that = this,
var $fontSelector = $( 'select.uls-font-select' ); font = this.selectedFont();
var font = $fontSelector.find( 'option:selected' ).val();
// Live font update if current UI language match with language selection // Live font update if current UI language match with language selection
if ( this.language === this.currentLanguage() ) { if ( this.language === this.currentLanguage() ) {
if ( font === 'system' ) { if ( font === 'system' ) {
@@ -206,8 +237,11 @@
this.$webfonts.apply( font ); this.$webfonts.apply( font );
} }
} }
// Save the preferences // Save the preferences
this.webfontPreferences.set( this.language, font ); this.webfontPreferences.set( this.language, font );
this.webfontPreferences.set( 'webfontsEnabled',
$( '#webfonts-enable-checkbox' ).prop( 'checked' ) ? true : false );
this.webfontPreferences.save( function ( result ) { this.webfontPreferences.save( function ( result ) {
// closure for not losing the scope // closure for not losing the scope
that.onSave( result ); that.onSave( result );

View File

@@ -18,7 +18,7 @@
* @licence MIT License * @licence MIT License
*/ */
(function( $, mw ) { ( function( $, mw ) {
"use strict"; "use strict";
var ULSPreferences = function ( group ) { var ULSPreferences = function ( group ) {

View File

@@ -18,16 +18,21 @@
*/ */
( function ( $, mw ) { ( function ( $, mw ) {
"use strict"; "use strict";
$( document ).ready( function() { $( document ).ready( function() {
var mediawikiFontRepository = $.webfonts.repository; var mediawikiFontRepository = $.webfonts.repository;
mediawikiFontRepository.base = mw.config.get( 'wgExtensionAssetsPath' ) mediawikiFontRepository.base = mw.config.get( 'wgExtensionAssetsPath' )
+ '/UniversalLanguageSelector/data/fontrepo/fonts/'; + '/UniversalLanguageSelector/data/fontrepo/fonts/';
$( 'body' ).webfonts( { $( 'body' ).webfonts( {
repository: mediawikiFontRepository repository: mediawikiFontRepository
} ); } );
var $webfonts = $( 'body' ).data( 'webfonts' ); var $webfonts = $( 'body' ).data( 'webfonts' );
var webfontPreferences = new $.fn.uls.preferences( 'webfonts' ); var webfontPreferences = new $.fn.uls.preferences( 'webfonts' );
var rememberedFont = webfontPreferences.get( mw.config.get( 'wgUserLanguage' ) ); var rememberedFont = webfontPreferences.get( mw.config.get( 'wgUserLanguage' ) );
if ( rememberedFont === 'system' ) { if ( rememberedFont === 'system' ) {
$webfonts.reset(); $webfonts.reset();
} else { } else {