Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 | 5 |
| 6 /** | 6 /** |
| 7 * @fileoverview Utilities for rendering most visited thumbnails and titles. | 7 * @fileoverview Utilities for rendering most visited thumbnails and titles. |
| 8 */ | 8 */ |
| 9 | 9 |
| 10 <include src="instant_iframe_validation.js"> | 10 <include src="instant_iframe_validation.js"> |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 155 ntpApiHandle.navigateContentWindow(href, getDispositionFromEvent(e)); | 155 ntpApiHandle.navigateContentWindow(href, getDispositionFromEvent(e)); |
| 156 } | 156 } |
| 157 // Else follow <a> normally, so transition type would be LINK. | 157 // Else follow <a> normally, so transition type would be LINK. |
| 158 }); | 158 }); |
| 159 | 159 |
| 160 return link; | 160 return link; |
| 161 } | 161 } |
| 162 | 162 |
| 163 | 163 |
| 164 /** | 164 /** |
| 165 * Returns the color to display string with, depending on whether title is | |
| 166 * displayed, the current theme, and URL parameters. | |
| 167 * @param {Object.<string, string>} params URL parameters specifying style. | |
| 168 * @param {boolean} isTitle if the style is for the Most Visited Title. | |
| 169 * @return {string} The color to use. | |
|
Mathieu
2014/08/27 14:54:53
nit: can you mention output format
huangs
2014/08/27 18:13:52
Done.
| |
| 170 */ | |
| 171 function getTextColor(params, isTitle) { | |
| 172 // 'RRGGBBAA' color format overrides everything. | |
| 173 if ('c' in params && params.c.match(/^[0-9A-Fa-f]{8}$/)) { | |
| 174 // Extract the 4 pairs of hex digits, map to number, then form rgba(). | |
| 175 var t = params.c.match(/(..)(..)(..)(..)/).slice(1).map(function(s) { | |
| 176 return parseInt(s, 16); | |
| 177 }); | |
| 178 return 'rgba(' + t[0] + ',' + t[1] + ',' + t[2] + ',' + t[3] / 255 + ')'; | |
| 179 } | |
| 180 | |
| 181 // For backward compatibility with server-side NTP, look at themes directly | |
|
Mathieu
2014/08/27 14:54:53
nit: have you tested with server ntp to make sure
huangs
2014/08/27 18:13:52
Yeah it's easy to test.
| |
| 182 // and use param.c for non-title or as fallback. | |
| 183 var apiHandle = chrome.embeddedSearch.newTabPage; | |
| 184 var themeInfo = apiHandle.themeBackgroundInfo; | |
| 185 var c = '#777'; | |
| 186 if (isTitle && themeInfo && !themeInfo.usingDefaultTheme) { | |
| 187 // read from theme directly | |
| 188 c = convertArrayToRGBAColor(themeInfo.textColorRgba) || c; | |
| 189 } else if ('c' in params) { | |
| 190 c = convertToHexColor(parseInt(params.c, 16)) || c; | |
| 191 } | |
| 192 return c; | |
| 193 } | |
| 194 | |
| 195 | |
| 196 /** | |
| 165 * Decodes most visited styles from URL parameters. | 197 * Decodes most visited styles from URL parameters. |
| 166 * - c: A hexadecimal number interpreted as a hex color code. | 198 * - c: A hexadecimal number interpreted as a hex color code. |
| 167 * - f: font-family. | 199 * - f: font-family. |
| 168 * - fs: font-size as a number in pixels. | 200 * - fs: font-size as a number in pixels. |
| 169 * - ta: text-align property, as a string. | 201 * - ta: text-align property, as a string. |
| 170 * - tf: specifying a text fade starting position, in pixels. | 202 * - tf: specifying a text fade starting position, in pixels. |
| 171 * @param {Object.<string, string>} params URL parameters specifying style. | 203 * @param {Object.<string, string>} params URL parameters specifying style. |
| 172 * @param {boolean} isTitle if the style is for the Most Visited Title. | 204 * @param {boolean} isTitle if the style is for the Most Visited Title. |
| 173 * @return {Object} Styles suitable for CSS interpolation. | 205 * @return {Object} Styles suitable for CSS interpolation. |
| 174 */ | 206 */ |
| 175 function getMostVisitedStyles(params, isTitle) { | 207 function getMostVisitedStyles(params, isTitle) { |
| 176 var styles = { | 208 var styles = { |
| 177 color: '#777', | 209 color: getTextColor(params, isTitle), // Handles 'c' in params. |
| 178 fontFamily: '', | 210 fontFamily: '', |
| 179 fontSize: 11 | 211 fontSize: 11 |
| 180 }; | 212 }; |
| 181 var apiHandle = chrome.embeddedSearch.newTabPage; | |
| 182 var themeInfo = apiHandle.themeBackgroundInfo; | |
| 183 if (isTitle && themeInfo && !themeInfo.usingDefaultTheme) { | |
| 184 styles.color = convertArrayToRGBAColor(themeInfo.textColorRgba) || | |
| 185 styles.color; | |
| 186 } else if ('c' in params) { | |
| 187 styles.color = convertToHexColor(parseInt(params.c, 16)) || styles.color; | |
| 188 } | |
| 189 if ('f' in params && /^[-0-9a-zA-Z ,]+$/.test(params.f)) | 213 if ('f' in params && /^[-0-9a-zA-Z ,]+$/.test(params.f)) |
| 190 styles.fontFamily = params.f; | 214 styles.fontFamily = params.f; |
| 191 if ('fs' in params && isFinite(parseInt(params.fs, 10))) | 215 if ('fs' in params && isFinite(parseInt(params.fs, 10))) |
| 192 styles.fontSize = parseInt(params.fs, 10); | 216 styles.fontSize = parseInt(params.fs, 10); |
| 193 if ('ta' in params && /^[-0-9a-zA-Z ,]+$/.test(params.ta)) | 217 if ('ta' in params && /^[-0-9a-zA-Z ,]+$/.test(params.ta)) |
| 194 styles.textAlign = params.ta; | 218 styles.textAlign = params.ta; |
| 195 if ('tf' in params) { | 219 if ('tf' in params) { |
| 196 var tf = parseInt(params.tf, 10); | 220 var tf = parseInt(params.tf, 10); |
| 197 if (isFinite(tf)) | 221 if (isFinite(tf)) |
| 198 styles.textFadePos = tf; | 222 styles.textFadePos = tf; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 254 if (navigator.sendBeacon) { | 278 if (navigator.sendBeacon) { |
| 255 navigator.sendBeacon(url); | 279 navigator.sendBeacon(url); |
| 256 } else { | 280 } else { |
| 257 // if sendBeacon is not enabled, we fallback for "a ping". | 281 // if sendBeacon is not enabled, we fallback for "a ping". |
| 258 var a = document.createElement('a'); | 282 var a = document.createElement('a'); |
| 259 a.href = '#'; | 283 a.href = '#'; |
| 260 a.ping = url; | 284 a.ping = url; |
| 261 a.click(); | 285 a.click(); |
| 262 } | 286 } |
| 263 } | 287 } |
| OLD | NEW |