blob: 2e26c5905a3b0531ec03d78bea6fc9a9e68f2bba [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(function() {
'use strict';
/**
* This is the absolute difference maintained between standard and
* fixed-width font sizes. http://crbug.com/91922.
* @const @private {number}
*/
var SIZE_DIFFERENCE_FIXED_STANDARD_ = 3;
/** @const @private {!Array<number>} */
var FONT_SIZE_RANGE_ = [
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36,
40, 44, 48, 56, 64, 72,
];
/** @const @private {!Array<number>} */
var MINIMUM_FONT_SIZE_RANGE_ = [
6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 24
];
/**
* 'settings-appearance-fonts-page' is the settings page containing appearance
* settings.
*
* Example:
*
* <settings-appearance-fonts-page prefs="{{prefs}}">
* </settings-appearance-fonts-page>
*/
Polymer({
is: 'settings-appearance-fonts-page',
behaviors: [I18nBehavior, WebUIListenerBehavior],
properties: {
/** @private */
advancedExtensionInstalled_: Boolean,
/** @private */
advancedExtensionSublabel_: String,
/** @private */
advancedExtensionUrl_: String,
/** @private {!settings.FontsBrowserProxy} */
browserProxy_: Object,
/** @private {!DropdownMenuOptionList} */
fontOptions_: Object,
/**
* Common font sizes.
* @private {!Array<number>}
*/
fontSizeRange_: {
readOnly: true,
type: Array,
value: FONT_SIZE_RANGE_,
},
/**
* Reasonable, minimum font sizes.
* @private {!Array<number>}
*/
minimumFontSizeRange_: {
readOnly: true,
type: Array,
value: MINIMUM_FONT_SIZE_RANGE_,
},
/**
* Preferences state.
*/
prefs: {
type: Object,
notify: true,
},
},
observers: [
'fontSizeChanged_(prefs.webkit.webprefs.default_font_size.value)',
],
/** @override */
created: function() {
this.browserProxy_ = settings.FontsBrowserProxyImpl.getInstance();
},
/** @override */
ready: function() {
this.addWebUIListener('advanced-font-settings-installed',
this.setAdvancedExtensionInstalled_.bind(this));
this.browserProxy_.observeAdvancedFontExtensionAvailable();
this.browserProxy_.fetchFontsData().then(
this.setFontsData_.bind(this));
},
/** @private */
openAdvancedExtension_: function() {
if (this.advancedExtensionInstalled_)
this.browserProxy_.openAdvancedFontSettings();
else
window.open(this.advancedExtensionUrl_);
},
/**
* @param {boolean} isInstalled Whether the advanced font settings
* extension is installed.
* @private
*/
setAdvancedExtensionInstalled_: function(isInstalled) {
this.advancedExtensionInstalled_ = isInstalled;
this.advancedExtensionSublabel_ = this.i18n(isInstalled ?
'openAdvancedFontSettings' : 'requiresWebStoreExtension');
},
/**
* @param {!FontsData} response A list of fonts and the advanced
* font settings extension URL.
* @private
*/
setFontsData_: function(response) {
var fontMenuOptions = [];
for (var i = 0; i < response.fontList.length; ++i) {
fontMenuOptions.push({
value: response.fontList[i][0],
name: response.fontList[i][1]
});
}
this.fontOptions_ = fontMenuOptions;
this.advancedExtensionUrl_ = response.extensionUrl;
},
/**
* @param {number} value The changed font size slider value.
* @private
*/
fontSizeChanged_: function(value) {
// TODO(michaelpg): Whitelist this pref in prefs_utils.cc so it is
// included in the <settings-prefs> getAllPrefs call, otherwise this path
// is invalid and nothing happens. See crbug.com/612535.
this.set('prefs.webkit.webprefs.default_fixed_font_size.value',
value - SIZE_DIFFERENCE_FIXED_STANDARD_);
},
/**
* Creates an html style value.
* @param {number} fontSize The font size to use.
* @param {string} fontFamily The name of the font family use.
* @return {string}
* @private
*/
computeStyle_: function(fontSize, fontFamily) {
return 'font-size: ' + fontSize + "px; font-family: '" + fontFamily +
"';";
},
});
})();