OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 cr.define('ntp4', function() { | 5 cr.define('ntp4', function() { |
6 'use strict'; | 6 'use strict'; |
7 | 7 |
8 var TilePage = ntp4.TilePage; | 8 var TilePage = ntp4.TilePage; |
9 | 9 |
10 /** | 10 /** |
| 11 */ |
| 12 var tileID = 0; |
| 13 |
| 14 /** |
11 * Creates a new Most Visited object for tiling. | 15 * Creates a new Most Visited object for tiling. |
12 * @constructor | 16 * @constructor |
13 * @extends {HTMLAnchorElement} | 17 * @extends {HTMLAnchorElement} |
14 */ | 18 */ |
15 function MostVisited() { | 19 function MostVisited() { |
16 var el = cr.doc.createElement('a'); | 20 var el = cr.doc.createElement('a'); |
17 el.__proto__ = MostVisited.prototype; | 21 el.__proto__ = MostVisited.prototype; |
18 el.initialize(); | 22 el.initialize(); |
19 | 23 |
20 return el; | 24 return el; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 // thumbnail-shield provides a gradient fade effect. | 60 // thumbnail-shield provides a gradient fade effect. |
57 '<div class="thumbnail-shield fills-parent"></div>' + | 61 '<div class="thumbnail-shield fills-parent"></div>' + |
58 '</span>' + | 62 '</span>' + |
59 '<span class="color-bar"></span>' + | 63 '<span class="color-bar"></span>' + |
60 '</span>' + | 64 '</span>' + |
61 '<span class="title"></span>' + | 65 '<span class="title"></span>' + |
62 '</div>'; | 66 '</div>'; |
63 | 67 |
64 this.tabIndex = -1; | 68 this.tabIndex = -1; |
65 this.data_ = null; | 69 this.data_ = null; |
| 70 this.removeAttribute('id'); |
66 }, | 71 }, |
67 | 72 |
68 /** | 73 /** |
69 * Update the appearance of this tile according to |data|. | 74 * Update the appearance of this tile according to |data|. |
70 * @param {Object} data A dictionary of relevant data for the page. | 75 * @param {Object} data A dictionary of relevant data for the page. |
71 */ | 76 */ |
72 updateForData: function(data) { | 77 updateForData: function(data) { |
73 if (!data || data.filler) { | 78 if (!data || data.filler) { |
74 if (this.data_) | 79 if (this.data_) |
75 this.reset(); | 80 this.reset(); |
76 return; | 81 return; |
77 } | 82 } |
78 | 83 |
| 84 var id = tileID++; |
| 85 this.setAttribute('id', 'tile' + id); |
79 this.data_ = data; | 86 this.data_ = data; |
80 this.tabIndex = 0; | 87 this.tabIndex = 0; |
81 this.classList.remove('filler'); | 88 this.classList.remove('filler'); |
82 | 89 |
83 var colorBar = this.querySelector('.color-bar'); | 90 var colorBar = this.querySelector('.color-bar'); |
84 var faviconUrl = data.faviconUrl || 'chrome://favicon/' + data.url; | 91 var faviconUrl = data.faviconUrl || 'chrome://favicon/' + data.url; |
85 colorBar.style.backgroundImage = url(faviconUrl); | 92 colorBar.style.backgroundImage = url(faviconUrl); |
86 colorBar.dir = data.direction; | 93 colorBar.dir = data.direction; |
87 // TODO(estade): add a band of color based on the favicon. | 94 if (data.faviconDominantColor) |
| 95 this.setBarColor(data.faviconDominantColor); |
| 96 else |
| 97 chrome.send('getFaviconDominantColor', [faviconUrl, id]); |
88 | 98 |
89 var title = this.querySelector('.title'); | 99 var title = this.querySelector('.title'); |
90 title.textContent = data.title; | 100 title.textContent = data.title; |
91 title.dir = data.direction; | 101 title.dir = data.direction; |
92 | 102 |
93 var thumbnailUrl = data.thumbnailUrl || 'chrome://thumb/' + data.url; | 103 var thumbnailUrl = data.thumbnailUrl || 'chrome://thumb/' + data.url; |
94 this.querySelector('.thumbnail').style.backgroundImage = | 104 this.querySelector('.thumbnail').style.backgroundImage = |
95 url(thumbnailUrl); | 105 url(thumbnailUrl); |
96 | 106 |
97 this.href = data.url; | 107 this.href = data.url; |
98 | 108 |
99 this.updatePinnedState_(); | 109 this.updatePinnedState_(); |
100 }, | 110 }, |
101 | 111 |
102 /** | 112 /** |
| 113 * Sets the color of the favicon dominant color bar. |
| 114 * @param {string} color The css-parsable value for the color. |
| 115 */ |
| 116 setBarColor: function(color) { |
| 117 // TODO(estade): use color. |
| 118 }, |
| 119 |
| 120 /** |
103 * Handles a click on the tile. | 121 * Handles a click on the tile. |
104 * @param {Event} e The click event. | 122 * @param {Event} e The click event. |
105 */ | 123 */ |
106 handleClick_: function(e) { | 124 handleClick_: function(e) { |
107 var target = e.target; | 125 var target = e.target; |
108 | 126 |
109 // Don't navigate on edit bar clicks. | 127 // Don't navigate on edit bar clicks. |
110 if (this.querySelector('.edit-bar').contains(target)) | 128 if (this.querySelector('.edit-bar').contains(target)) |
111 e.preventDefault(); | 129 e.preventDefault(); |
112 | 130 |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 | 401 |
384 // Clear 'updated' flags so this function will work next time it's called. | 402 // Clear 'updated' flags so this function will work next time it's called. |
385 for (var i = 0; i < THUMBNAIL_COUNT; i++) { | 403 for (var i = 0; i < THUMBNAIL_COUNT; i++) { |
386 if (oldData[i]) | 404 if (oldData[i]) |
387 oldData[i].updated = false; | 405 oldData[i].updated = false; |
388 } | 406 } |
389 | 407 |
390 return oldData; | 408 return oldData; |
391 }; | 409 }; |
392 | 410 |
| 411 function setFaviconDominantColor(id, color) { |
| 412 var tile = $('tile' + id); |
| 413 if (tile) |
| 414 tile.setBarColor(color); |
| 415 }; |
| 416 |
393 return { | 417 return { |
394 MostVisitedPage: MostVisitedPage, | 418 MostVisitedPage: MostVisitedPage, |
395 refreshData: refreshData, | 419 refreshData: refreshData, |
| 420 setFaviconDominantColor: setFaviconDominantColor, |
396 }; | 421 }; |
397 }); | 422 }); |
OLD | NEW |