| 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 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 | 101 |
| 102 /** | 102 /** |
| 103 * The 'trash' element. Note that technically this is unnecessary, | 103 * The 'trash' element. Note that technically this is unnecessary, |
| 104 * JavaScript creates the object for us based on the id. But I don't want | 104 * JavaScript creates the object for us based on the id. But I don't want |
| 105 * to rely on the ID being the same, and JSCompiler doesn't know about it. | 105 * to rely on the ID being the same, and JSCompiler doesn't know about it. |
| 106 * @type {!Element|undefined} | 106 * @type {!Element|undefined} |
| 107 */ | 107 */ |
| 108 trash: undefined, | 108 trash: undefined, |
| 109 | 109 |
| 110 /** | 110 /** |
| 111 * The type of page that is currently shown. The value is a numerical ID. | 111 * The index of the page that is currently shown. For example if the third |
| 112 * @type {number} | 112 * page is showing, this will be 2. |
| 113 */ | |
| 114 shownPage: 0, | |
| 115 | |
| 116 /** | |
| 117 * The index of the page that is currently shown, within the page type. | |
| 118 * For example if the third Apps page is showing, this will be 2. | |
| 119 * @type {number} | 113 * @type {number} |
| 120 */ | 114 */ |
| 121 shownPageIndex: 0, | 115 shownPageIndex: 0, |
| 122 | 116 |
| 123 /** | 117 /** |
| 124 * EventTracker for managing event listeners for page events. | 118 * EventTracker for managing event listeners for page events. |
| 125 * @type {!EventTracker} | 119 * @type {!EventTracker} |
| 126 */ | 120 */ |
| 127 eventTracker: new EventTracker, | 121 eventTracker: new EventTracker, |
| 128 | 122 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 159 new ntp.Trash(this.trash); | 153 new ntp.Trash(this.trash); |
| 160 | 154 |
| 161 this.pageSwitcherStart = opt_pageSwitcherStart; | 155 this.pageSwitcherStart = opt_pageSwitcherStart; |
| 162 if (this.pageSwitcherStart) | 156 if (this.pageSwitcherStart) |
| 163 ntp.initializePageSwitcher(this.pageSwitcherStart); | 157 ntp.initializePageSwitcher(this.pageSwitcherStart); |
| 164 | 158 |
| 165 this.pageSwitcherEnd = opt_pageSwitcherEnd; | 159 this.pageSwitcherEnd = opt_pageSwitcherEnd; |
| 166 if (this.pageSwitcherEnd) | 160 if (this.pageSwitcherEnd) |
| 167 ntp.initializePageSwitcher(this.pageSwitcherEnd); | 161 ntp.initializePageSwitcher(this.pageSwitcherEnd); |
| 168 | 162 |
| 169 this.shownPage = loadTimeData.getInteger('shown_page_type'); | |
| 170 this.shownPageIndex = loadTimeData.getInteger('shown_page_index'); | 163 this.shownPageIndex = loadTimeData.getInteger('shown_page_index'); |
| 171 | 164 |
| 172 // TODO(dbeam): remove showApps and everything that says if (apps). | 165 // TODO(dbeam): remove showApps and everything that says if (apps). |
| 173 assert(loadTimeData.getBoolean('showApps')); | 166 assert(loadTimeData.getBoolean('showApps')); |
| 174 | 167 |
| 175 // Request data on the apps so we can fill them in. | 168 // Request data on the apps so we can fill them in. |
| 176 // Note that this is kicked off asynchronously. 'getAppsCallback' will | 169 // Note that this is kicked off asynchronously. 'getAppsCallback' will |
| 177 // be invoked at some point after this function returns. | 170 // be invoked at some point after this function returns. |
| 178 chrome.send('getApps'); | 171 chrome.send('getApps'); |
| 179 | 172 |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 } | 436 } |
| 444 this.updateSliderCards(); | 437 this.updateSliderCards(); |
| 445 } | 438 } |
| 446 | 439 |
| 447 var page = this.appsPages[pageIndex]; | 440 var page = this.appsPages[pageIndex]; |
| 448 var app = $(appData.id); | 441 var app = $(appData.id); |
| 449 if (app) { | 442 if (app) { |
| 450 app.replaceAppData(appData); | 443 app.replaceAppData(appData); |
| 451 } else if (opt_highlight) { | 444 } else if (opt_highlight) { |
| 452 page.insertAndHighlightApp(appData); | 445 page.insertAndHighlightApp(appData); |
| 453 this.setShownPage_(loadTimeData.getInteger('apps_page_id'), | 446 this.setShownPage_(appData.page_index); |
| 454 appData.page_index); | |
| 455 } else { | 447 } else { |
| 456 page.insertApp(appData, false); | 448 page.insertApp(appData, false); |
| 457 } | 449 } |
| 458 }, | 450 }, |
| 459 | 451 |
| 460 /** | 452 /** |
| 461 * Callback invoked by chrome whenever an app preference changes. | 453 * Callback invoked by chrome whenever an app preference changes. |
| 462 * @param {Object} data An object with all the data on available | 454 * @param {Object} data An object with all the data on available |
| 463 * applications. | 455 * applications. |
| 464 */ | 456 */ |
| (...skipping 16 matching lines...) Expand all Loading... |
| 481 * @param {boolean} show Identifies if we should show or hide the promo. | 473 * @param {boolean} show Identifies if we should show or hide the promo. |
| 482 */ | 474 */ |
| 483 appLauncherPromoPrefChangeCallback: function(show) { | 475 appLauncherPromoPrefChangeCallback: function(show) { |
| 484 loadTimeData.overrideValues({showAppLauncherPromo: show}); | 476 loadTimeData.overrideValues({showAppLauncherPromo: show}); |
| 485 this.updateAppLauncherPromoHiddenState_(); | 477 this.updateAppLauncherPromoHiddenState_(); |
| 486 }, | 478 }, |
| 487 | 479 |
| 488 /** | 480 /** |
| 489 * Updates the hidden state of the app launcher promo based on the page | 481 * Updates the hidden state of the app launcher promo based on the page |
| 490 * shown and load data content. | 482 * shown and load data content. |
| 483 * @private |
| 491 */ | 484 */ |
| 492 updateAppLauncherPromoHiddenState_: function() { | 485 updateAppLauncherPromoHiddenState_: function() { |
| 493 $('app-launcher-promo').hidden = | 486 $('app-launcher-promo').hidden = |
| 494 !loadTimeData.getBoolean('showAppLauncherPromo') || | 487 !loadTimeData.getBoolean('showAppLauncherPromo'); |
| 495 this.shownPage != loadTimeData.getInteger('apps_page_id'); | |
| 496 }, | 488 }, |
| 497 | 489 |
| 498 /** | 490 /** |
| 499 * Invoked whenever the pages in apps-page-list have changed so that | 491 * Invoked whenever the pages in apps-page-list have changed so that |
| 500 * the Slider knows about the new elements. | 492 * the Slider knows about the new elements. |
| 501 */ | 493 */ |
| 502 updateSliderCards: function() { | 494 updateSliderCards: function() { |
| 503 var pageNo = Math.max(0, Math.min(this.cardSlider.currentCard, | 495 var pageNo = Math.max(0, Math.min(this.cardSlider.currentCard, |
| 504 this.tilePages.length - 1)); | 496 this.tilePages.length - 1)); |
| 505 this.cardSlider.setCards(Array.prototype.slice.call(this.tilePages), | 497 this.cardSlider.setCards(Array.prototype.slice.call(this.tilePages), |
| 506 pageNo); | 498 pageNo); |
| 507 if (this.shownPage == loadTimeData.getInteger('apps_page_id') && | 499 if (loadTimeData.getBoolean('showApps')) { |
| 508 loadTimeData.getBoolean('showApps')) { | |
| 509 this.cardSlider.selectCardByValue( | 500 this.cardSlider.selectCardByValue( |
| 510 this.appsPages[Math.min(this.shownPageIndex, | 501 this.appsPages[Math.min(this.shownPageIndex, |
| 511 this.appsPages.length - 1)]); | 502 this.appsPages.length - 1)]); |
| 512 } | 503 } |
| 513 }, | 504 }, |
| 514 | 505 |
| 515 /** | 506 /** |
| 516 * Called whenever tiles should be re-arranging themselves out of the way | 507 * Called whenever tiles should be re-arranging themselves out of the way |
| 517 * of a moving or insert tile. | 508 * of a moving or insert tile. |
| 518 */ | 509 */ |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 * Handler for cardSlider:card_changed events from this.cardSlider. | 616 * Handler for cardSlider:card_changed events from this.cardSlider. |
| 626 * @param {Event} e The cardSlider:card_changed event. | 617 * @param {Event} e The cardSlider:card_changed event. |
| 627 * @private | 618 * @private |
| 628 */ | 619 */ |
| 629 onCardChanged_: function(e) { | 620 onCardChanged_: function(e) { |
| 630 var page = e.cardSlider.currentCardValue; | 621 var page = e.cardSlider.currentCardValue; |
| 631 | 622 |
| 632 // Don't change shownPage until startup is done (and page changes actually | 623 // Don't change shownPage until startup is done (and page changes actually |
| 633 // reflect user actions). | 624 // reflect user actions). |
| 634 if (!this.isStartingUp_()) { | 625 if (!this.isStartingUp_()) { |
| 635 if (page.classList.contains('apps-page')) { | 626 // TODO(dbeam): is this ever false? |
| 636 this.setShownPage_(loadTimeData.getInteger('apps_page_id'), | 627 if (page.classList.contains('apps-page')) |
| 637 this.getAppsPageIndex(page)); | 628 this.setShownPage_(this.getAppsPageIndex(page)); |
| 638 } else { | 629 else |
| 639 console.error('unknown page selected'); | 630 console.error('unknown page selected'); |
| 640 } | |
| 641 } | 631 } |
| 642 | 632 |
| 643 // Update the active dot | 633 // Update the active dot |
| 644 var curDot = this.dotList.getElementsByClassName('selected')[0]; | 634 var curDot = this.dotList.getElementsByClassName('selected')[0]; |
| 645 if (curDot) | 635 if (curDot) |
| 646 curDot.classList.remove('selected'); | 636 curDot.classList.remove('selected'); |
| 647 page.navigationDot.classList.add('selected'); | 637 page.navigationDot.classList.add('selected'); |
| 648 this.updatePageSwitchers(); | 638 this.updatePageSwitchers(); |
| 649 }, | 639 }, |
| 650 | 640 |
| 651 /** | 641 /** |
| 652 * Saves/updates the newly selected page to open when first loading the NTP. | 642 * Saves/updates the newly selected page to open when first loading the NTP. |
| 653 * @param {number} shownPage The new shown page type. | |
| 654 * @param {number} shownPageIndex The new shown page index. | 643 * @param {number} shownPageIndex The new shown page index. |
| 655 * @private | 644 * @private |
| 656 */ | 645 */ |
| 657 setShownPage_: function(shownPage, shownPageIndex) { | 646 setShownPage_: function(shownPageIndex) { |
| 658 assert(shownPageIndex >= 0); | 647 assert(shownPageIndex >= 0); |
| 659 this.shownPage = shownPage; | |
| 660 this.shownPageIndex = shownPageIndex; | 648 this.shownPageIndex = shownPageIndex; |
| 661 chrome.send('pageSelected', [this.shownPage, this.shownPageIndex]); | 649 chrome.send('pageSelected', [this.shownPageIndex]); |
| 662 this.updateAppLauncherPromoHiddenState_(); | 650 this.updateAppLauncherPromoHiddenState_(); |
| 663 }, | 651 }, |
| 664 | 652 |
| 665 /** | 653 /** |
| 666 * Listen for card additions to update the page switchers or the current | 654 * Listen for card additions to update the page switchers or the current |
| 667 * card accordingly. | 655 * card accordingly. |
| 668 * @param {Event} e A card removed or added event. | 656 * @param {Event} e A card removed or added event. |
| 669 */ | 657 */ |
| 670 onCardAdded_: function(e) { | 658 onCardAdded_: function(e) { |
| 671 // When the second arg passed to insertBefore is falsey, it acts just like | 659 // When the second arg passed to insertBefore is falsey, it acts just like |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 778 if (page.navigationDot) | 766 if (page.navigationDot) |
| 779 page.navigationDot.remove(opt_animate); | 767 page.navigationDot.remove(opt_animate); |
| 780 this.cardSlider.removeCard(page); | 768 this.cardSlider.removeCard(page); |
| 781 }, | 769 }, |
| 782 }; | 770 }; |
| 783 | 771 |
| 784 return { | 772 return { |
| 785 PageListView: PageListView | 773 PageListView: PageListView |
| 786 }; | 774 }; |
| 787 }); | 775 }); |
| OLD | NEW |