| Index: chrome/browser/resources/options2/font_settings.js
|
| diff --git a/chrome/browser/resources/options2/font_settings.js b/chrome/browser/resources/options2/font_settings.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c00f52580dac2ba65d6128ad9c78f0b7f67d78e3
|
| --- /dev/null
|
| +++ b/chrome/browser/resources/options2/font_settings.js
|
| @@ -0,0 +1,234 @@
|
| +// Copyright (c) 2011 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.
|
| +
|
| +cr.define('options', function() {
|
| +
|
| + var OptionsPage = options.OptionsPage;
|
| +
|
| + /**
|
| + * This is the absolute difference maintained between standard and
|
| + * fixed-width font sizes. Refer http://crbug.com/91922.
|
| + */
|
| + const SIZE_DIFFERENCE_FIXED_STANDARD = 3;
|
| +
|
| + /**
|
| + * FontSettings class
|
| + * Encapsulated handling of the 'Fonts and Encoding' page.
|
| + * @class
|
| + */
|
| + function FontSettings() {
|
| + OptionsPage.call(this,
|
| + 'fonts',
|
| + templateData.fontSettingsPageTabTitle,
|
| + 'font-settings');
|
| + }
|
| +
|
| + cr.addSingletonGetter(FontSettings);
|
| +
|
| + FontSettings.prototype = {
|
| + __proto__: OptionsPage.prototype,
|
| +
|
| + /**
|
| + * Initialize the page.
|
| + */
|
| + initializePage: function() {
|
| + OptionsPage.prototype.initializePage.call(this);
|
| +
|
| + var standardFontRange = $('standard-font-size');
|
| + standardFontRange.valueMap = [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];
|
| + standardFontRange.continuous = false;
|
| + standardFontRange.notifyChange = this.standardRangeChanged_.bind(this);
|
| + standardFontRange.notifyPrefChange =
|
| + this.standardFontSizeChanged_.bind(this);
|
| +
|
| + var minimumFontRange = $('minimum-font-size');
|
| + minimumFontRange.valueMap = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
| + 18, 20, 22, 24];
|
| + minimumFontRange.continuous = false;
|
| + minimumFontRange.notifyChange = this.minimumRangeChanged_.bind(this);
|
| + minimumFontRange.notifyPrefChange =
|
| + this.minimumFontSizeChanged_.bind(this);
|
| +
|
| + var placeholder = localStrings.getString('fontSettingsPlaceholder');
|
| + var elements = [$('standard-font-family'), $('serif-font-family'),
|
| + $('sans-serif-font-family'), $('fixed-font-family'),
|
| + $('font-encoding')];
|
| + elements.forEach(function(el) {
|
| + el.appendChild(new Option(placeholder));
|
| + el.setDisabled('noFontsAvailable', true);
|
| + });
|
| + },
|
| +
|
| + /**
|
| + * Called by the options page when this page has been shown.
|
| + */
|
| + didShowPage: function() {
|
| + // The fonts list may be large so we only load it when this page is
|
| + // loaded for the first time. This makes opening the options window
|
| + // faster and consume less memory if the user never opens the fonts
|
| + // dialog.
|
| + if (!this.hasShown) {
|
| + chrome.send('fetchFontsData');
|
| + this.hasShown = true;
|
| + }
|
| + },
|
| +
|
| + /**
|
| + * Called as the user changes the standard font size. This allows for
|
| + * reflecting the change in the UI before the preference has been changed.
|
| + * @param {Element} el The slider input element.
|
| + * @param {number} value The mapped value currently set by the slider.
|
| + * @private
|
| + */
|
| + standardRangeChanged_: function(el, value) {
|
| + var fontSampleEl = $('standard-font-sample');
|
| + this.setUpFontSample_(fontSampleEl, value, fontSampleEl.style.fontFamily,
|
| + true);
|
| +
|
| + fontSampleEl = $('serif-font-sample');
|
| + this.setUpFontSample_(fontSampleEl, value, fontSampleEl.style.fontFamily,
|
| + true);
|
| +
|
| + fontSampleEl = $('sans-serif-font-sample');
|
| + this.setUpFontSample_(fontSampleEl, value, fontSampleEl.style.fontFamily,
|
| + true);
|
| +
|
| + fontSampleEl = $('fixed-font-sample');
|
| + this.setUpFontSample_(fontSampleEl,
|
| + value - SIZE_DIFFERENCE_FIXED_STANDARD,
|
| + fontSampleEl.style.fontFamily, false);
|
| + },
|
| +
|
| + /**
|
| + * Sets the 'default_fixed_font_size' preference when the standard font
|
| + * size has been changed by the user.
|
| + * @param {Element} el The slider input element.
|
| + * @param {number} value The mapped value that has been saved.
|
| + * @private
|
| + */
|
| + standardFontSizeChanged_: function(el, value) {
|
| + Preferences.setIntegerPref('webkit.webprefs.default_fixed_font_size',
|
| + value - SIZE_DIFFERENCE_FIXED_STANDARD, '');
|
| + },
|
| +
|
| + /**
|
| + * Called as the user changes the miniumum font size. This allows for
|
| + * reflecting the change in the UI before the preference has been changed.
|
| + * @param {Element} el The slider input element.
|
| + * @param {number} value The mapped value currently set by the slider.
|
| + * @private
|
| + */
|
| + minimumRangeChanged_: function(el, value) {
|
| + var fontSampleEl = $('minimum-font-sample');
|
| + this.setUpFontSample_(fontSampleEl, value, fontSampleEl.style.fontFamily,
|
| + true);
|
| + },
|
| +
|
| + /**
|
| + * Sets the 'minimum_logical_font_size' preference when the minimum font
|
| + * size has been changed by the user.
|
| + * @param {Element} el The slider input element.
|
| + * @param {number} value The mapped value that has been saved.
|
| + * @private
|
| + */
|
| + minimumFontSizeChanged_: function(el, value) {
|
| + Preferences.setIntegerPref('webkit.webprefs.minimum_logical_font_size',
|
| + value, '');
|
| + },
|
| +
|
| + /**
|
| + * Sets the text, font size and font family of the sample text.
|
| + * @param {Element} el The div containing the sample text.
|
| + * @param {number} size The font size of the sample text.
|
| + * @param {string} font The font family of the sample text.
|
| + * @param {bool} showSize True if the font size should appear in the sample.
|
| + * @private
|
| + */
|
| + setUpFontSample_: function(el, size, font, showSize) {
|
| + var prefix = showSize ? (size + ': ') : '';
|
| + el.textContent = prefix +
|
| + localStrings.getString('fontSettingsLoremIpsum');
|
| + el.style.fontSize = size + 'px';
|
| + if (font)
|
| + el.style.fontFamily = font;
|
| + },
|
| +
|
| + /**
|
| + * Populates a select list and selects the specified item.
|
| + * @param {Element} element The select element to populate.
|
| + * @param {Array} items The array of items from which to populate.
|
| + * @param {string} selectedValue The selected item.
|
| + * @private
|
| + */
|
| + populateSelect_: function(element, items, selectedValue) {
|
| + // Remove any existing content.
|
| + element.textContent = '';
|
| +
|
| + // Insert new child nodes into select element.
|
| + var value, text, selected, option;
|
| + for (var i = 0; i < items.length; i++) {
|
| + value = items[i][0];
|
| + text = items[i][1];
|
| + if (text) {
|
| + selected = value == selectedValue;
|
| + element.appendChild(new Option(text, value, false, selected));
|
| + } else {
|
| + element.appendChild(document.createElement('hr'));
|
| + }
|
| + }
|
| +
|
| + element.setDisabled('noFontsAvailable', false);
|
| + }
|
| + };
|
| +
|
| + // Chrome callbacks
|
| + FontSettings.setFontsData = function(fonts, encodings, selectedValues) {
|
| + FontSettings.getInstance().populateSelect_($('standard-font-family'), fonts,
|
| + selectedValues[0]);
|
| + FontSettings.getInstance().populateSelect_($('serif-font-family'), fonts,
|
| + selectedValues[1]);
|
| + FontSettings.getInstance().populateSelect_($('sans-serif-font-family'),
|
| + fonts, selectedValues[2]);
|
| + FontSettings.getInstance().populateSelect_($('fixed-font-family'), fonts,
|
| + selectedValues[3]);
|
| + FontSettings.getInstance().populateSelect_($('font-encoding'), encodings,
|
| + selectedValues[4]);
|
| + };
|
| +
|
| + FontSettings.setUpStandardFontSample = function(font, size) {
|
| + FontSettings.getInstance().setUpFontSample_($('standard-font-sample'), size,
|
| + font, true);
|
| + };
|
| +
|
| + FontSettings.setUpSerifFontSample = function(font, size) {
|
| + FontSettings.getInstance().setUpFontSample_($('serif-font-sample'), size,
|
| + font, true);
|
| + };
|
| +
|
| + FontSettings.setUpSansSerifFontSample = function(font, size) {
|
| + FontSettings.getInstance().setUpFontSample_($('sans-serif-font-sample'),
|
| + size, font, true);
|
| + };
|
| +
|
| + FontSettings.setUpFixedFontSample = function(font, size) {
|
| + FontSettings.getInstance().setUpFontSample_($('fixed-font-sample'),
|
| + size, font, false);
|
| + };
|
| +
|
| + FontSettings.setUpMinimumFontSample = function(size) {
|
| + // If size is less than 6, represent it as six in the sample to account
|
| + // for the minimum logical font size.
|
| + if (size < 6)
|
| + size = 6;
|
| + FontSettings.getInstance().setUpFontSample_($('minimum-font-sample'), size,
|
| + null, true);
|
| + };
|
| +
|
| + // Export
|
| + return {
|
| + FontSettings: FontSettings
|
| + };
|
| +});
|
| +
|
|
|