Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(276)

Unified Diff: chrome/browser/resources/ntp_search/most_visited_page.js

Issue 10823052: Refactoring the NTP. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/ntp_search/most_visited_page.js
diff --git a/chrome/browser/resources/ntp_search/most_visited_page.js b/chrome/browser/resources/ntp_search/most_visited_page.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8da10d388099921eb3268d8d72acd9635c0bade
--- /dev/null
+++ b/chrome/browser/resources/ntp_search/most_visited_page.js
@@ -0,0 +1,154 @@
+// Copyright (c) 2012 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('ntp', function() {
+ 'use strict';
+
+ var Thumbnail = ntp.Thumbnail;
+ var ThumbnailPage = ntp.ThumbnailPage;
+
+ /**
+ * Creates a new Most Visited object for tiling.
+ * @constructor
+ * @extends {HTMLAnchorElement}
+ */
+ function MostVisited() {
jeremycho_google 2012/07/31 03:09:16 Pass in gridValues?
jeremycho_google 2012/07/31 03:09:16 This doesn't seem to get called.
pedrosimonetti2 2012/08/03 18:14:01 Done. See comments on the new CL.
pedrosimonetti2 2012/08/03 18:14:01 Done.
+ var el = cr.doc.createElement('a');
+ el.__proto__ = MostVisited.prototype;
+ el.initialize();
+
+ return el;
+ }
+
+ MostVisited.prototype = {
+ __proto__: Thumbnail.prototype,
+ };
+
+ var THUMBNAIL_COUNT = 8;
+
+ /**
+ * Creates a new MostVisitedPage object.
+ * @constructor
+ * @extends {TilePage}
+ */
+ function MostVisitedPage() {
+ var el = new ThumbnailPage();
+ el.__proto__ = MostVisitedPage.prototype;
+ el.initialize();
+
+ return el;
+ }
+
+ MostVisitedPage.prototype = {
+ __proto__: ThumbnailPage.prototype,
+
+ set data(data) {
jeremycho_google 2012/07/31 03:09:16 Is it possible to avoid duplicating this from Thum
pedrosimonetti2 2012/08/03 18:14:01 I replaced the code from ThumbnailPage.prototype.s
+ var startTime = Date.now();
+
+ // The first time data is set, create the tiles.
+ if (!this.data_) {
+ this.createTiles_();
+ this.data_ = data.slice(0, THUMBNAIL_COUNT);
+ } else {
+ this.data_ = refreshData(this.data_, data);
+ }
+
+ this.updateTiles_();
+ logEvent('mostVisited.layout: ' + (Date.now() - startTime));
+ },
+ };
+
+ /**
+ * Executed once the NTP has loaded. Checks if the Most Visited pane is
+ * shown or not. If it is shown, the 'mostVisitedSelected' message is sent
+ * to the C++ code, to record the fact that the user has seen this pane.
+ */
+ MostVisitedPage.onLoaded = function() {
+ if (ntp.getCardSlider() &&
+ ntp.getCardSlider().currentCardValue &&
+ ntp.getCardSlider().currentCardValue.classList
+ .contains('most-visited-page')) {
+ chrome.send('mostVisitedSelected');
+ }
+ }
+
+ /**
+ * We've gotten additional Most Visited data. Update our old data with the
+ * new data. The ordering of the new data is not important, except when a
+ * page is pinned. Thus we try to minimize re-ordering.
+ * @param {Array} oldData The current Most Visited page list.
+ * @param {Array} newData The new Most Visited page list.
+ * @return {Array} The merged page list that should replace the current page
+ * list.
+ */
+ function refreshData(oldData, newData) {
+ oldData = oldData.slice(0, THUMBNAIL_COUNT);
+ newData = newData.slice(0, THUMBNAIL_COUNT);
+
+ // Copy over pinned sites directly.
+ for (var j = 0; j < newData.length; j++) {
+ if (newData[j].pinned) {
+ oldData[j] = newData[j];
+ // Mark the entry as 'updated' so we don't try to update again.
+ oldData[j].updated = true;
+ // Mark the newData page as 'used' so we don't try to re-use it.
+ newData[j].used = true;
+ }
+ }
+
+ // Look through old pages; if they exist in the newData list, keep them
+ // where they are.
+ for (var i = 0; i < oldData.length; i++) {
+ if (!oldData[i] || oldData[i].updated)
+ continue;
+
+ for (var j = 0; j < newData.length; j++) {
+ if (newData[j].used)
+ continue;
+
+ if (newData[j].url == oldData[i].url) {
+ // The background image and other data may have changed.
+ oldData[i] = newData[j];
+ oldData[i].updated = true;
+ newData[j].used = true;
+ break;
+ }
+ }
+ }
+
+ // Look through old pages that haven't been updated yet; replace them.
+ for (var i = 0; i < oldData.length; i++) {
+ if (oldData[i] && oldData[i].updated)
+ continue;
+
+ for (var j = 0; j < newData.length; j++) {
+ if (newData[j].used)
+ continue;
+
+ oldData[i] = newData[j];
+ oldData[i].updated = true;
+ newData[j].used = true;
+ break;
+ }
+
+ if (oldData[i] && !oldData[i].updated)
+ oldData[i] = null;
+ }
+
+ // Clear 'updated' flags so this function will work next time it's called.
+ for (var i = 0; i < THUMBNAIL_COUNT; i++) {
+ if (oldData[i])
+ oldData[i].updated = false;
+ }
+
+ return oldData;
+ };
+
+ return {
+ MostVisitedPage: MostVisitedPage,
+ refreshData: refreshData,
+ };
+});
+
+document.addEventListener('ntpLoaded', ntp.MostVisitedPage.onLoaded);

Powered by Google App Engine
This is Rietveld 408576698