| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 cr.define('options', function() { | |
| 6 | |
| 7 var OptionsPage = options.OptionsPage; | |
| 8 | |
| 9 /** | |
| 10 * FontSettings class | |
| 11 * Encapsulated handling of the 'Fonts and Encoding' page. | |
| 12 * @class | |
| 13 */ | |
| 14 function FontSettings() { | |
| 15 OptionsPage.call(this, | |
| 16 'fonts', | |
| 17 templateData.fontSettingsPageTabTitle, | |
| 18 'font-settings'); | |
| 19 } | |
| 20 | |
| 21 cr.addSingletonGetter(FontSettings); | |
| 22 | |
| 23 FontSettings.prototype = { | |
| 24 __proto__: OptionsPage.prototype, | |
| 25 | |
| 26 /** | |
| 27 * Initialize the page. | |
| 28 */ | |
| 29 initializePage: function() { | |
| 30 OptionsPage.prototype.initializePage.call(this); | |
| 31 | |
| 32 var standardFontRange = $('standard-font-size'); | |
| 33 standardFontRange.valueMap = [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, | |
| 34 22, 24, 26, 28, 30, 32, 34, 36, 40, 44, 48, 56, 64, 72]; | |
| 35 standardFontRange.continuous = false; | |
| 36 standardFontRange.notifyChange = this.standardRangeChanged_.bind(this); | |
| 37 | |
| 38 var minimumFontRange = $('minimum-font-size'); | |
| 39 minimumFontRange.valueMap = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, | |
| 40 18, 20, 22, 24]; | |
| 41 minimumFontRange.continuous = false; | |
| 42 minimumFontRange.notifyChange = this.minimumRangeChanged_.bind(this); | |
| 43 minimumFontRange.notifyPrefChange = | |
| 44 this.minimumFontSizeChanged_.bind(this); | |
| 45 | |
| 46 var placeholder = localStrings.getString('fontSettingsPlaceholder'); | |
| 47 $('standard-font-family').appendChild(new Option(placeholder)); | |
| 48 $('serif-font-family').appendChild(new Option(placeholder)); | |
| 49 $('sans-serif-font-family').appendChild(new Option(placeholder)); | |
| 50 $('fixed-font-family').appendChild(new Option(placeholder)); | |
| 51 $('font-encoding').appendChild(new Option(placeholder)); | |
| 52 }, | |
| 53 | |
| 54 /** | |
| 55 * Called by the options page when this page has been shown. | |
| 56 */ | |
| 57 didShowPage: function() { | |
| 58 // The fonts list may be large so we only load it when this page is | |
| 59 // loaded for the first time. This makes opening the options window | |
| 60 // faster and consume less memory if the user never opens the fonts | |
| 61 // dialog. | |
| 62 if (!this.hasShown) { | |
| 63 chrome.send('fetchFontsData'); | |
| 64 this.hasShown = true; | |
| 65 } | |
| 66 }, | |
| 67 | |
| 68 /** | |
| 69 * Called as the user changes the standard font size. This allows for | |
| 70 * reflecting the change in the UI before the preference has been changed. | |
| 71 * @param {Element} el The slider input element. | |
| 72 * @param {number} value The mapped value currently set by the slider. | |
| 73 * @private | |
| 74 */ | |
| 75 standardRangeChanged_: function(el, value) { | |
| 76 var fontSampleEl = $('standard-font-sample'); | |
| 77 this.setUpFontSample_(fontSampleEl, value, fontSampleEl.style.fontFamily, | |
| 78 true); | |
| 79 | |
| 80 fontSampleEl = $('serif-font-sample'); | |
| 81 this.setUpFontSample_(fontSampleEl, value, fontSampleEl.style.fontFamily, | |
| 82 true); | |
| 83 | |
| 84 fontSampleEl = $('sans-serif-font-sample'); | |
| 85 this.setUpFontSample_(fontSampleEl, value, fontSampleEl.style.fontFamily, | |
| 86 true); | |
| 87 }, | |
| 88 | |
| 89 /** | |
| 90 * Called as the user changes the miniumum font size. This allows for | |
| 91 * reflecting the change in the UI before the preference has been changed. | |
| 92 * @param {Element} el The slider input element. | |
| 93 * @param {number} value The mapped value currently set by the slider. | |
| 94 * @private | |
| 95 */ | |
| 96 minimumRangeChanged_: function(el, value) { | |
| 97 var fontSampleEl = $('minimum-font-sample'); | |
| 98 this.setUpFontSample_(fontSampleEl, value, fontSampleEl.style.fontFamily, | |
| 99 true); | |
| 100 }, | |
| 101 | |
| 102 /** | |
| 103 * Sets the 'minimum_logical_font_size' preference when the minimum font | |
| 104 * size has been changed by the user. | |
| 105 * @param {Element} el The slider input element. | |
| 106 * @param {number} value The mapped value that has been saved. | |
| 107 * @private | |
| 108 */ | |
| 109 minimumFontSizeChanged_: function(el, value) { | |
| 110 Preferences.setIntegerPref('webkit.webprefs.minimum_logical_font_size', | |
| 111 value, ''); | |
| 112 }, | |
| 113 | |
| 114 /** | |
| 115 * Sets the text, font size and font family of the sample text. | |
| 116 * @param {Element} el The div containing the sample text. | |
| 117 * @param {number} size The font size of the sample text. | |
| 118 * @param {string} font The font family of the sample text. | |
| 119 * @param {bool} showSize True if the font size should appear in the sample. | |
| 120 * @private | |
| 121 */ | |
| 122 setUpFontSample_: function(el, size, font, showSize) { | |
| 123 var prefix = showSize ? (size + ': ') : ''; | |
| 124 el.textContent = prefix + | |
| 125 localStrings.getString('fontSettingsLoremIpsum'); | |
| 126 el.style.fontSize = size + 'px'; | |
| 127 if (font) | |
| 128 el.style.fontFamily = font; | |
| 129 }, | |
| 130 | |
| 131 /** | |
| 132 * Populates a select list and selects the specified item. | |
| 133 * @param {Element} element The select element to populate. | |
| 134 * @param {Array} items The array of items from which to populate. | |
| 135 * @param {string} selectedValue The selected item. | |
| 136 * @private | |
| 137 */ | |
| 138 populateSelect_: function(element, items, selectedValue) { | |
| 139 // Remove any existing content. | |
| 140 element.textContent = ''; | |
| 141 | |
| 142 // Insert new child nodes into select element. | |
| 143 var value, text, selected, option; | |
| 144 for (var i = 0; i < items.length; i++) { | |
| 145 value = items[i][0]; | |
| 146 text = items[i][1]; | |
| 147 if (text) { | |
| 148 selected = value == selectedValue; | |
| 149 element.appendChild(new Option(text, value, false, selected)); | |
| 150 } else { | |
| 151 element.appendChild(document.createElement('hr')); | |
| 152 } | |
| 153 } | |
| 154 | |
| 155 // Enable if not a managed pref. | |
| 156 if (!element.managed) | |
| 157 element.disabled = false; | |
| 158 } | |
| 159 }; | |
| 160 | |
| 161 // Chrome callbacks | |
| 162 FontSettings.setFontsData = function(fonts, encodings, selectedValues) { | |
| 163 FontSettings.getInstance().populateSelect_($('standard-font-family'), fonts, | |
| 164 selectedValues[0]); | |
| 165 FontSettings.getInstance().populateSelect_($('serif-font-family'), fonts, | |
| 166 selectedValues[1]); | |
| 167 FontSettings.getInstance().populateSelect_($('sans-serif-font-family'), | |
| 168 fonts, selectedValues[2]); | |
| 169 FontSettings.getInstance().populateSelect_($('fixed-font-family'), fonts, | |
| 170 selectedValues[3]); | |
| 171 FontSettings.getInstance().populateSelect_($('font-encoding'), encodings, | |
| 172 selectedValues[4]); | |
| 173 }; | |
| 174 | |
| 175 FontSettings.setUpStandardFontSample = function(font, size) { | |
| 176 FontSettings.getInstance().setUpFontSample_($('standard-font-sample'), size, | |
| 177 font, true); | |
| 178 }; | |
| 179 | |
| 180 FontSettings.setUpSerifFontSample = function(font, size) { | |
| 181 FontSettings.getInstance().setUpFontSample_($('serif-font-sample'), size, | |
| 182 font, true); | |
| 183 }; | |
| 184 | |
| 185 FontSettings.setUpSansSerifFontSample = function(font, size) { | |
| 186 FontSettings.getInstance().setUpFontSample_($('sans-serif-font-sample'), | |
| 187 size, font, true); | |
| 188 }; | |
| 189 | |
| 190 FontSettings.setUpFixedFontSample = function(font, size) { | |
| 191 FontSettings.getInstance().setUpFontSample_($('fixed-font-sample'), | |
| 192 size, font, false); | |
| 193 }; | |
| 194 | |
| 195 FontSettings.setUpMinimumFontSample = function(size) { | |
| 196 // If size is less than 6, represent it as six in the sample to account | |
| 197 // for the minimum logical font size. | |
| 198 if (size < 6) | |
| 199 size = 6; | |
| 200 FontSettings.getInstance().setUpFontSample_($('minimum-font-sample'), size, | |
| 201 null, true); | |
| 202 }; | |
| 203 | |
| 204 // Export | |
| 205 return { | |
| 206 FontSettings: FontSettings | |
| 207 }; | |
| 208 }); | |
| 209 | |
| OLD | NEW |