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

Side by Side Diff: chrome/browser/resources/ntp4/new_tab.js

Issue 6990063: ntp4: fix brokeness when new apps are added (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 /** 5 /**
6 * @fileoverview New tab page 6 * @fileoverview New tab page
7 * This is the main code for the new tab page used by touch-enabled Chrome 7 * This is the main code for the new tab page used by touch-enabled Chrome
8 * browsers. For now this is still a prototype. 8 * browsers. For now this is still a prototype.
9 */ 9 */
10 10
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 /** 72 /**
73 * The time in milliseconds for most transitions. This should match what's 73 * The time in milliseconds for most transitions. This should match what's
74 * in new_tab.css. Unfortunately there's no better way to try to time 74 * in new_tab.css. Unfortunately there's no better way to try to time
75 * something to occur until after a transition has completed. 75 * something to occur until after a transition has completed.
76 * @type {number} 76 * @type {number}
77 * @const 77 * @const
78 */ 78 */
79 var DEFAULT_TRANSITION_TIME = 500; 79 var DEFAULT_TRANSITION_TIME = 500;
80 80
81 /** 81 /**
82 * All the Grabber objects currently in use on the page
83 * @type {Array.<Grabber>}
84 */
85 var grabbers = [];
86
87 /**
88 * Invoked at startup once the DOM is available to initialize the app. 82 * Invoked at startup once the DOM is available to initialize the app.
89 */ 83 */
90 function initialize() { 84 function initialize() {
91 // Load the current theme colors. 85 // Load the current theme colors.
92 themeChanged(); 86 themeChanged();
93 87
94 dotList = getRequiredElement('dot-list'); 88 dotList = getRequiredElement('dot-list');
95 pageList = getRequiredElement('page-list'); 89 pageList = getRequiredElement('page-list');
96 trash = getRequiredElement('trash'); 90 trash = getRequiredElement('trash');
97 trash.hidden = true; 91 trash.hidden = true;
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 /** 204 /**
211 * Callback invoked by chrome with the apps available. 205 * Callback invoked by chrome with the apps available.
212 * 206 *
213 * Note that calls to this function can occur at any time, not just in 207 * Note that calls to this function can occur at any time, not just in
214 * response to a getApps request. For example, when a user installs/uninstalls 208 * response to a getApps request. For example, when a user installs/uninstalls
215 * an app on another synchronized devices. 209 * an app on another synchronized devices.
216 * @param {Object} data An object with all the data on available 210 * @param {Object} data An object with all the data on available
217 * applications. 211 * applications.
218 */ 212 */
219 function getAppsCallback(data) { 213 function getAppsCallback(data) {
220 // Clean up any existing grabber objects - cancelling any outstanding drag.
221 // Ideally an async app update wouldn't disrupt an active drag but
222 // that would require us to re-use existing elements and detect how the apps
223 // have changed, which would be a lot of work.
224 // Note that we have to explicitly clean up the grabber objects so they stop
225 // listening to events and break the DOM<->JS cycles necessary to enable
226 // collection of all these objects.
227 grabbers.forEach(function(g) {
228 // Note that this may raise DRAG_END/RELEASE events to clean up an
229 // oustanding drag.
230 g.dispose();
231 });
232 assert(!draggingAppContainer && !draggingAppOriginalPosition &&
233 !draggingAppOriginalPage);
234 grabbers = [];
235
236 // Clear any existing apps pages and dots. 214 // Clear any existing apps pages and dots.
237 // TODO(rbyers): It might be nice to preserve animation of dots after an 215 // TODO(rbyers): It might be nice to preserve animation of dots after an
238 // uninstall. Could we re-use the existing page and dot elements? It seems 216 // uninstall. Could we re-use the existing page and dot elements? It seems
239 // unfortunate to have Chrome send us the entire apps list after an 217 // unfortunate to have Chrome send us the entire apps list after an
240 // uninstall. 218 // uninstall.
241 for (var i = 0; i < appsPages.length; i++) { 219 while (appsPages.length > 0) {
242 var page = appsPages[i]; 220 var page = appsPages[0];
243 var dot = page.navigationDot; 221 var dot = page.navigationDot;
244 222
245 page.tearDown(); 223 page.tearDown();
246 page.parentNode.removeChild(page); 224 page.parentNode.removeChild(page);
247 dot.parentNode.removeChild(dot); 225 dot.parentNode.removeChild(dot);
248 } 226 }
249 227
250 // Get the array of apps and add any special synthesized entries 228 // Get the array of apps and add any special synthesized entries
251 var apps = data.apps; 229 var apps = data.apps;
252 230
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 * Appends a tile page (for apps or most visited). 315 * Appends a tile page (for apps or most visited).
338 * 316 *
339 * @param {TilePage} page The page element. 317 * @param {TilePage} page The page element.
340 * @param {boolean=} opt_animate If true, add the class 'new' to the created 318 * @param {boolean=} opt_animate If true, add the class 'new' to the created
341 * dot. 319 * dot.
342 */ 320 */
343 function appendTilePage(page, opt_animate) { 321 function appendTilePage(page, opt_animate) {
344 pageList.appendChild(page); 322 pageList.appendChild(page);
345 323
346 // Make a deep copy of the dot template to add a new one. 324 // Make a deep copy of the dot template to add a new one.
347 var dotCount = dots.length;
348 var newDot = dotTemplate.cloneNode(true); 325 var newDot = dotTemplate.cloneNode(true);
349 newDot.querySelector('span').textContent = page.pageName; 326 newDot.querySelector('span').textContent = page.pageName;
350 if (opt_animate) 327 if (opt_animate)
351 newDot.classList.add('new'); 328 newDot.classList.add('new');
352 dotList.appendChild(newDot); 329 dotList.appendChild(newDot);
353 page.navigationDot = newDot; 330 page.navigationDot = newDot;
354 331
355 newDot.showPage = function() { 332 newDot.showPage = function() {
356 cardSlider.selectCard(dotCount, true); 333 cardSlider.selectCardByValue(page, true);
357 }; 334 };
358 function switchPage(e) { 335 function switchPage(e) {
359 newDot.showPage(); 336 newDot.showPage();
360 e.stopPropagation(); 337 e.stopPropagation();
361 } 338 }
362 // Add click handler to the dot to change the page. 339 // Add click handler to the dot to change the page.
363 // TODO(rbyers): Perhaps this should be TouchHandler.START_EVENT_ (so we 340 // TODO(rbyers): Perhaps this should be TouchHandler.START_EVENT_ (so we
364 // don't rely on synthesized click events, and the change takes effect 341 // don't rely on synthesized click events, and the change takes effect
365 // before releasing). However, click events seems to be synthesized for a 342 // before releasing). However, click events seems to be synthesized for a
366 // region outside the border, and a 10px box is too small to require touch 343 // region outside the border, and a 10px box is too small to require touch
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 // TODO(estade): update the content handlers to use ntp namespace instead of 711 // TODO(estade): update the content handlers to use ntp namespace instead of
735 // making these global. 712 // making these global.
736 var assert = ntp4.assert; 713 var assert = ntp4.assert;
737 var getAppsCallback = ntp4.getAppsCallback; 714 var getAppsCallback = ntp4.getAppsCallback;
738 var appsPrefChangeCallback = ntp4.appsPrefChangeCallback; 715 var appsPrefChangeCallback = ntp4.appsPrefChangeCallback;
739 var themeChanged = ntp4.themeChanged; 716 var themeChanged = ntp4.themeChanged;
740 var recentlyClosedTabs = ntp4.setRecentlyClosedTabs; 717 var recentlyClosedTabs = ntp4.setRecentlyClosedTabs;
741 var setMostVisitedPages = ntp4.setMostVisitedPages; 718 var setMostVisitedPages = ntp4.setMostVisitedPages;
742 719
743 document.addEventListener('DOMContentLoaded', ntp4.initialize); 720 document.addEventListener('DOMContentLoaded', ntp4.initialize);
OLDNEW
« chrome/browser/resources/ntp4/card_slider.js ('K') | « chrome/browser/resources/ntp4/card_slider.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698