OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 PageListView implementation. | 6 * @fileoverview PageListView implementation. |
7 * PageListView manages page list, dot list, switcher buttons and handles apps | 7 * PageListView manages page list, dot list, switcher buttons and handles apps |
8 * pages callbacks from backend. | 8 * pages callbacks from backend. |
9 * | 9 * |
10 * Note that you need to have AppLauncherHandler in your WebUI to use this code. | 10 * Note that you need to have AppLauncherHandler in your WebUI to use this code. |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 this.updateOfflineEnabledApps_.bind(this)); | 211 this.updateOfflineEnabledApps_.bind(this)); |
212 window.addEventListener('offline', | 212 window.addEventListener('offline', |
213 this.updateOfflineEnabledApps_.bind(this)); | 213 this.updateOfflineEnabledApps_.bind(this)); |
214 }, | 214 }, |
215 | 215 |
216 /** | 216 /** |
217 * Appends a tile page. | 217 * Appends a tile page. |
218 * | 218 * |
219 * @param {TilePage} page The page element. | 219 * @param {TilePage} page The page element. |
220 * @param {string} title The title of the tile page. | 220 * @param {string} title The title of the tile page. |
221 * @param {bool} titleIsEditable If true, the title can be changed. | 221 * @param {boolean} titleIsEditable If true, the title can be changed. |
222 * @param {TilePage} opt_refNode Optional reference node to insert in front | 222 * @param {TilePage} opt_refNode Optional reference node to insert in front |
223 * of. | 223 * of. |
224 * When opt_refNode is falsey, |page| will just be appended to the end of | 224 * When opt_refNode is falsey, |page| will just be appended to the end of |
225 * the page list. | 225 * the page list. |
226 */ | 226 */ |
227 appendTilePage: function(page, title, titleIsEditable, opt_refNode) { | 227 appendTilePage: function(page, title, titleIsEditable, opt_refNode) { |
228 if (opt_refNode) { | 228 if (opt_refNode) { |
229 var refIndex = this.getTilePageIndex(opt_refNode); | 229 var refIndex = this.getTilePageIndex(opt_refNode); |
230 this.cardSlider.addCardAtIndex(page, refIndex); | 230 this.cardSlider.addCardAtIndex(page, refIndex); |
231 } else { | 231 } else { |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 logEvent('apps.layout: ' + (Date.now() - startTime)); | 405 logEvent('apps.layout: ' + (Date.now() - startTime)); |
406 | 406 |
407 // Tell the slider about the pages and mark the current page. | 407 // Tell the slider about the pages and mark the current page. |
408 this.updateSliderCards(); | 408 this.updateSliderCards(); |
409 this.cardSlider.currentCardValue.navigationDot.classList.add('selected'); | 409 this.cardSlider.currentCardValue.navigationDot.classList.add('selected'); |
410 | 410 |
411 if (!this.appsLoaded_) { | 411 if (!this.appsLoaded_) { |
412 this.appsLoaded_ = true; | 412 this.appsLoaded_ = true; |
413 cr.dispatchSimpleEvent(document, 'sectionready', true, true); | 413 cr.dispatchSimpleEvent(document, 'sectionready', true, true); |
414 } | 414 } |
| 415 this.updateAppLauncherPromoHiddenState_(); |
415 }, | 416 }, |
416 | 417 |
417 /** | 418 /** |
418 * Called by chrome when a new app has been added to chrome or has been | 419 * Called by chrome when a new app has been added to chrome or has been |
419 * enabled if previously disabled. | 420 * enabled if previously disabled. |
420 * @param {Object} appData A data structure full of relevant information for | 421 * @param {Object} appData A data structure full of relevant information for |
421 * the app. | 422 * the app. |
422 * @param {boolean=} opt_highlight Whether the app about to be added should | 423 * @param {boolean=} opt_highlight Whether the app about to be added should |
423 * be highlighted. | 424 * be highlighted. |
424 */ | 425 */ |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
468 | 469 |
469 // Set the App dot names. Skip the first dot (Most Visited). | 470 // Set the App dot names. Skip the first dot (Most Visited). |
470 var dots = this.dotList.getElementsByClassName('dot'); | 471 var dots = this.dotList.getElementsByClassName('dot'); |
471 var start = this.mostVisitedPage ? 1 : 0; | 472 var start = this.mostVisitedPage ? 1 : 0; |
472 for (var i = start; i < dots.length; ++i) { | 473 for (var i = start; i < dots.length; ++i) { |
473 dots[i].displayTitle = data.appPageNames[i - start] || ''; | 474 dots[i].displayTitle = data.appPageNames[i - start] || ''; |
474 } | 475 } |
475 }, | 476 }, |
476 | 477 |
477 /** | 478 /** |
| 479 * Callback invoked by chrome whenever the app launcher promo pref changes. |
| 480 * @param {boolean} show Identifies if we should show or hide the promo. |
| 481 */ |
| 482 appLauncherPromoPrefChangeCallback: function(show) { |
| 483 loadTimeData.overrideValues({showAppLauncherPromo: show}); |
| 484 this.updateAppLauncherPromoHiddenState_(); |
| 485 }, |
| 486 |
| 487 /** |
| 488 * Updates the hidden state of the app launcher promo based on the page |
| 489 * shown and load data content. |
| 490 */ |
| 491 updateAppLauncherPromoHiddenState_: function() { |
| 492 $('app-launcher-promo').hidden = |
| 493 !loadTimeData.getBoolean('showAppLauncherPromo') || |
| 494 this.shownPage != loadTimeData.getInteger('apps_page_id'); |
| 495 }, |
| 496 |
| 497 /** |
478 * Invoked whenever the pages in apps-page-list have changed so that | 498 * Invoked whenever the pages in apps-page-list have changed so that |
479 * the Slider knows about the new elements. | 499 * the Slider knows about the new elements. |
480 */ | 500 */ |
481 updateSliderCards: function() { | 501 updateSliderCards: function() { |
482 var pageNo = Math.max(0, Math.min(this.cardSlider.currentCard, | 502 var pageNo = Math.max(0, Math.min(this.cardSlider.currentCard, |
483 this.tilePages.length - 1)); | 503 this.tilePages.length - 1)); |
484 this.cardSlider.setCards(Array.prototype.slice.call(this.tilePages), | 504 this.cardSlider.setCards(Array.prototype.slice.call(this.tilePages), |
485 pageNo); | 505 pageNo); |
486 switch (this.shownPage) { | 506 // The shownPage property was potentially saved from a previous webui that |
487 case loadTimeData.getInteger('apps_page_id'): | 507 // didn't have the same set of pages as the current one. So we cascade |
488 this.cardSlider.selectCardByValue( | 508 // from suggestions, to most visited and then to apps because we can have |
489 this.appsPages[Math.min(this.shownPageIndex, | 509 // an page with apps only (e.g., chrome://apps) or one with only the most |
490 this.appsPages.length - 1)]); | 510 // visited, but not one with only suggestions. And we alwayd default to |
491 break; | 511 // most visited first when previously shown page is not availabel anymore. |
492 case loadTimeData.getInteger('most_visited_page_id'): | 512 // If most visited isn't there either, we go to apps. |
493 if (this.mostVisitedPage) | 513 if (this.shownPage == loadTimeData.getInteger('suggestions_page_id')) { |
494 this.cardSlider.selectCardByValue(this.mostVisitedPage); | 514 if (this.suggestionsPage) |
495 break; | 515 this.cardSlider.selectCardByValue(this.suggestionsPage); |
496 case loadTimeData.getInteger('suggestions_page_id'): | 516 else |
497 if (this.suggestionsPage) | 517 this.shownPage = loadTimeData.getInteger('most_visited_page_id'); |
498 this.cardSlider.selectCardByValue(this.suggestionsPage); | 518 } |
499 break; | 519 if (this.shownPage == loadTimeData.getInteger('most_visited_page_id')) { |
| 520 if (this.mostVisitedPage) |
| 521 this.cardSlider.selectCardByValue(this.mostVisitedPage); |
| 522 else |
| 523 this.shownPage = loadTimeData.getInteger('apps_page_id'); |
| 524 } |
| 525 if (this.shownPage == loadTimeData.getInteger('apps_page_id') && |
| 526 loadTimeData.getBoolean('showApps')) { |
| 527 this.cardSlider.selectCardByValue( |
| 528 this.appsPages[Math.min(this.shownPageIndex, |
| 529 this.appsPages.length - 1)]); |
| 530 } else if (this.mostVisitedPage) { |
| 531 this.shownPage = loadTimeData.getInteger('most_visited_page_id'); |
| 532 this.cardSlider.selectCardByValue(this.mostVisitedPage); |
500 } | 533 } |
501 }, | 534 }, |
502 | 535 |
503 /** | 536 /** |
504 * Called whenever tiles should be re-arranging themselves out of the way | 537 * Called whenever tiles should be re-arranging themselves out of the way |
505 * of a moving or insert tile. | 538 * of a moving or insert tile. |
506 */ | 539 */ |
507 enterRearrangeMode: function() { | 540 enterRearrangeMode: function() { |
508 if (loadTimeData.getBoolean('showApps')) { | 541 if (loadTimeData.getBoolean('showApps')) { |
509 var tempPage = new ntp.AppsPage(); | 542 var tempPage = new ntp.AppsPage(); |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
644 * Saves/updates the newly selected page to open when first loading the NTP. | 677 * Saves/updates the newly selected page to open when first loading the NTP. |
645 * @type {number} shownPage The new shown page type. | 678 * @type {number} shownPage The new shown page type. |
646 * @type {number} shownPageIndex The new shown page index. | 679 * @type {number} shownPageIndex The new shown page index. |
647 * @private | 680 * @private |
648 */ | 681 */ |
649 setShownPage_: function(shownPage, shownPageIndex) { | 682 setShownPage_: function(shownPage, shownPageIndex) { |
650 assert(shownPageIndex >= 0); | 683 assert(shownPageIndex >= 0); |
651 this.shownPage = shownPage; | 684 this.shownPage = shownPage; |
652 this.shownPageIndex = shownPageIndex; | 685 this.shownPageIndex = shownPageIndex; |
653 chrome.send('pageSelected', [this.shownPage, this.shownPageIndex]); | 686 chrome.send('pageSelected', [this.shownPage, this.shownPageIndex]); |
| 687 this.updateAppLauncherPromoHiddenState_(); |
654 }, | 688 }, |
655 | 689 |
656 /** | 690 /** |
657 * Listen for card additions to update the page switchers or the current | 691 * Listen for card additions to update the page switchers or the current |
658 * card accordingly. | 692 * card accordingly. |
659 * @param {Event} e A card removed or added event. | 693 * @param {Event} e A card removed or added event. |
660 */ | 694 */ |
661 onCardAdded_: function(e) { | 695 onCardAdded_: function(e) { |
662 // When the second arg passed to insertBefore is falsey, it acts just like | 696 // When the second arg passed to insertBefore is falsey, it acts just like |
663 // appendChild. | 697 // appendChild. |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
769 if (page.navigationDot) | 803 if (page.navigationDot) |
770 page.navigationDot.remove(opt_animate); | 804 page.navigationDot.remove(opt_animate); |
771 this.cardSlider.removeCard(page); | 805 this.cardSlider.removeCard(page); |
772 }, | 806 }, |
773 }; | 807 }; |
774 | 808 |
775 return { | 809 return { |
776 PageListView: PageListView | 810 PageListView: PageListView |
777 }; | 811 }; |
778 }); | 812 }); |
OLD | NEW |