OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 /** | 6 /** |
7 * @fileoverview The local InstantExtended NTP. | 7 * @fileoverview The local InstantExtended NTP. |
8 */ | 8 */ |
9 | 9 |
10 | 10 |
(...skipping 21 matching lines...) Expand all Loading... | |
32 // Applies drag focus style to the fakebox | 32 // Applies drag focus style to the fakebox |
33 FAKEBOX_DRAG_FOCUS: 'fakebox-drag-focused', | 33 FAKEBOX_DRAG_FOCUS: 'fakebox-drag-focused', |
34 FAVICON: 'mv-favicon', | 34 FAVICON: 'mv-favicon', |
35 HIDE_BLACKLIST_BUTTON: 'mv-x-hide', // hides blacklist button during animation | 35 HIDE_BLACKLIST_BUTTON: 'mv-x-hide', // hides blacklist button during animation |
36 HIDE_FAKEBOX_AND_LOGO: 'hide-fakebox-logo', | 36 HIDE_FAKEBOX_AND_LOGO: 'hide-fakebox-logo', |
37 HIDE_NOTIFICATION: 'mv-notice-hide', | 37 HIDE_NOTIFICATION: 'mv-notice-hide', |
38 // Vertically centers the most visited section for a non-Google provided page. | 38 // Vertically centers the most visited section for a non-Google provided page. |
39 NON_GOOGLE_PAGE: 'non-google-page', | 39 NON_GOOGLE_PAGE: 'non-google-page', |
40 PAGE: 'mv-page', // page tiles | 40 PAGE: 'mv-page', // page tiles |
41 PAGE_READY: 'mv-page-ready', // page tile when ready | 41 PAGE_READY: 'mv-page-ready', // page tile when ready |
42 ROW: 'mv-row', // tile row | |
43 RTL: 'rtl', // Right-to-left language text. | 42 RTL: 'rtl', // Right-to-left language text. |
44 THUMBNAIL: 'mv-thumb', | 43 THUMBNAIL: 'mv-thumb', |
45 THUMBNAIL_MASK: 'mv-mask', | 44 THUMBNAIL_MASK: 'mv-mask', |
46 TILE: 'mv-tile', | 45 TILE: 'mv-tile', |
47 TITLE: 'mv-title' | 46 TITLE: 'mv-title' |
48 }; | 47 }; |
49 | 48 |
50 | 49 |
51 /** | 50 /** |
52 * Enum for HTML element ids. | 51 * Enum for HTML element ids. |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
198 | 197 |
199 | 198 |
200 /** | 199 /** |
201 * The state of the NTP when a query is entered into the Fakebox. | 200 * The state of the NTP when a query is entered into the Fakebox. |
202 * @type {NTP_DISPOSE_STATE} | 201 * @type {NTP_DISPOSE_STATE} |
203 */ | 202 */ |
204 var fakeboxInputBehavior = NTP_DISPOSE_STATE.HIDE_FAKEBOX_AND_LOGO; | 203 var fakeboxInputBehavior = NTP_DISPOSE_STATE.HIDE_FAKEBOX_AND_LOGO; |
205 | 204 |
206 | 205 |
207 /** | 206 /** |
207 * A counter to control the visibility of tile elements. | |
208 * @type {number} | |
209 */ | |
210 var tileVisibilityCounter = 0; | |
beaudoin
2014/07/24 15:24:36
I'd prefer numHiddenTiles with a matching comment.
huangs
2014/07/24 19:33:11
Per discussion, numHiddenTiles will be off by one
| |
211 | |
212 | |
213 /** | |
208 * Total tile width. Should be equal to mv-tile's width + 2 * border-width. | 214 * Total tile width. Should be equal to mv-tile's width + 2 * border-width. |
209 * @private {number} | 215 * @private {number} |
210 * @const | 216 * @const |
211 */ | 217 */ |
212 var TILE_WIDTH = 140; | 218 var TILE_WIDTH = 140; |
213 | 219 |
214 | 220 |
215 /** | 221 /** |
216 * Margin between tiles. Should be equal to mv-tile's -webkit-margin-start. | 222 * Margin between tiles. Should be equal to mv-tile's -webkit-margin-start. |
217 * @private {number} | 223 * @private {number} |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
322 | 328 |
323 var background = [convertToRGBAColor(info.backgroundColorRgba), | 329 var background = [convertToRGBAColor(info.backgroundColorRgba), |
324 info.imageUrl, | 330 info.imageUrl, |
325 info.imageTiling, | 331 info.imageTiling, |
326 info.imageHorizontalAlignment, | 332 info.imageHorizontalAlignment, |
327 info.imageVerticalAlignment].join(' ').trim(); | 333 info.imageVerticalAlignment].join(' ').trim(); |
328 document.body.style.background = background; | 334 document.body.style.background = background; |
329 document.body.classList.toggle(CLASSES.ALTERNATE_LOGO, info.alternateLogo); | 335 document.body.classList.toggle(CLASSES.ALTERNATE_LOGO, info.alternateLogo); |
330 updateThemeAttribution(info.attributionUrl); | 336 updateThemeAttribution(info.attributionUrl); |
331 setCustomThemeStyle(info); | 337 setCustomThemeStyle(info); |
338 | |
332 renderTiles(); | 339 renderTiles(); |
333 } | 340 } |
334 | 341 |
335 | 342 |
336 /** | 343 /** |
337 * Updates the NTP style according to theme. | 344 * Updates the NTP style according to theme. |
338 * @param {Object=} opt_themeInfo The information about the theme. If it is | 345 * @param {Object=} opt_themeInfo The information about the theme. If it is |
339 * omitted the style will be reverted to the default. | 346 * omitted the style will be reverted to the default. |
340 * @private | 347 * @private |
341 */ | 348 */ |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
425 function convertToRGBAColor(color) { | 432 function convertToRGBAColor(color) { |
426 return 'rgba(' + color[0] + ',' + color[1] + ',' + color[2] + ',' + | 433 return 'rgba(' + color[0] + ',' + color[1] + ',' + color[2] + ',' + |
427 color[3] / 255 + ')'; | 434 color[3] / 255 + ')'; |
428 } | 435 } |
429 | 436 |
430 | 437 |
431 /** | 438 /** |
432 * Handles a new set of Most Visited page data. | 439 * Handles a new set of Most Visited page data. |
433 */ | 440 */ |
434 function onMostVisitedChange() { | 441 function onMostVisitedChange() { |
435 var pages = ntpApiHandle.mostVisited; | |
436 | |
437 if (isBlacklisting) { | 442 if (isBlacklisting) { |
438 // Trigger the blacklist animation and re-render the tiles when it | 443 // Trigger the blacklist animation. On completion, the handler will call |
439 // completes. | 444 // reloadAllTiles(). |
440 var lastBlacklistedTileElement = lastBlacklistedTile.elem; | 445 var lastBlacklistedTileElement = lastBlacklistedTile.elem; |
441 lastBlacklistedTileElement.addEventListener( | 446 lastBlacklistedTileElement.addEventListener( |
442 'webkitTransitionEnd', blacklistAnimationDone); | 447 'webkitTransitionEnd', blacklistAnimationDone); |
443 lastBlacklistedTileElement.classList.add(CLASSES.BLACKLIST); | 448 lastBlacklistedTileElement.classList.add(CLASSES.BLACKLIST); |
444 | 449 |
Mathieu
2014/07/24 15:11:25
remove extra new line
huangs
2014/07/24 19:33:11
Done.
| |
445 } else { | 450 } else { |
446 // Otherwise render the tiles using the new data without animation. | |
447 tiles = []; | |
448 for (var i = 0; i < MAX_NUM_TILES_TO_SHOW; ++i) { | |
449 tiles.push(createTile(pages[i], i)); | |
450 } | |
451 if (!userInitiatedMostVisitedChange) { | 451 if (!userInitiatedMostVisitedChange) { |
452 tilesContainer.hidden = true; | 452 tilesContainer.hidden = true; |
453 window.setTimeout(function() { | 453 window.setTimeout(function() { |
454 if (tilesContainer) { | 454 if (tilesContainer) { |
455 tilesContainer.hidden = false; | 455 tilesContainer.hidden = false; |
456 } | 456 } |
457 }, MOST_VISITED_PAINT_TIMEOUT_MSEC); | 457 }, MOST_VISITED_PAINT_TIMEOUT_MSEC); |
458 } | 458 } |
459 renderTiles(); | 459 reloadAllTiles(); |
460 } | 460 } |
461 } | 461 } |
462 | 462 |
463 | 463 |
464 /** | 464 /** |
465 * Renders the current set of tiles. | 465 * Fetches new data, creates, and renders tiles. |
466 */ | |
467 function reloadAllTiles() { | |
468 var pages = ntpApiHandle.mostVisited; | |
469 | |
470 tiles = []; | |
471 deltaMostVisitedVisibility(1); | |
beaudoin
2014/07/24 15:24:36
I'd use just a ++ here and call the other
decre
huangs
2014/07/24 19:33:12
Changed to Barrier.
| |
472 for (var i = 0; i < MAX_NUM_TILES_TO_SHOW; ++i) { | |
473 tiles.push(createTile(pages[i], i)); | |
474 } | |
475 renderTiles(); | |
476 deltaMostVisitedVisibility(-1); | |
477 } | |
478 | |
479 | |
480 /** | |
481 * Adds the current list of tiles to DOM. | |
466 */ | 482 */ |
467 function renderTiles() { | 483 function renderTiles() { |
468 var rows = tilesContainer.children; | 484 removeChildren(tilesContainer); |
469 for (var i = 0; i < rows.length; ++i) { | 485 var renderedList = tilesContainer.querySelectorAll('.mv-tile'); |
470 removeChildren(rows[i]); | 486 var size = Math.min(tiles.length, numColumnsShown * NUM_ROWS); |
471 } | 487 for (var i = 0; i < size; ++i) { |
472 | 488 tilesContainer.appendChild(tiles[i].elem); |
473 for (var i = 0, length = tiles.length; | |
474 i < Math.min(length, numColumnsShown * NUM_ROWS); ++i) { | |
475 rows[Math.floor(i / numColumnsShown)].appendChild(tiles[i].elem); | |
476 } | 489 } |
477 } | 490 } |
478 | 491 |
479 | 492 |
480 /** | 493 /** |
481 * Shows most visited tiles if all child iframes are loaded, and hides them | 494 * Shows or hides rendered tiles, depending on the number of columns shown. |
495 */ | |
496 function showTiles() { | |
497 var renderedList = tilesContainer.querySelectorAll('.mv-tile'); | |
498 var numVisible = Math.min(tiles.length, numColumnsShown * NUM_ROWS); | |
499 for (var i = 0; i < renderedList.length; ++i) { | |
500 renderedList[i].style.display = i < numVisible ? 'inline-block' : 'none'; | |
501 } | |
502 } | |
503 | |
504 | |
505 /** | |
506 * Changes the visibility counter for most visited tiles by |delta|, and | |
Mathieu
2014/07/24 15:11:25
*Most Visited
huangs
2014/07/24 19:33:11
Done.
| |
507 * makes the tiles visible once the count decreases to 0. | |
482 * otherwise. | 508 * otherwise. |
Mathieu
2014/07/24 15:11:25
fix comment
huangs
2014/07/24 19:33:11
Done.
| |
509 * @param {number} delta The amount to change counter by, usually 1 or -1. | |
483 */ | 510 */ |
484 function updateMostVisitedVisibility() { | 511 function deltaMostVisitedVisibility(delta) { |
Mathieu
2014/07/24 15:11:25
As discussed offline, reconsider if this function
huangs
2014/07/24 19:33:11
This function is needed: in onMostVisitedChange(),
| |
485 var iframes = tilesContainer.querySelectorAll('iframe'); | 512 tileVisibilityCounter += delta; |
486 var ready = true; | 513 if (tileVisibilityCounter === 0) { |
487 for (var i = 0, numIframes = iframes.length; i < numIframes; i++) { | |
488 if (iframes[i].hidden) { | |
489 ready = false; | |
490 break; | |
491 } | |
492 } | |
493 if (ready) { | |
494 tilesContainer.hidden = false; | 514 tilesContainer.hidden = false; |
495 userInitiatedMostVisitedChange = false; | 515 userInitiatedMostVisitedChange = false; |
496 } | 516 } |
497 } | 517 } |
498 | 518 |
499 | 519 |
500 /** | 520 /** |
501 * Builds a URL to display a most visited tile component in an iframe. | 521 * Builds a URL to display a most visited tile component in an iframe. |
502 * @param {string} filename The desired most visited component filename. | 522 * @param {string} filename The desired most visited component filename. |
503 * @param {number} rid The restricted ID. | 523 * @param {number} rid The restricted ID. |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
556 // begins loading RIDs n, n+1, ..., n+k-1; after the second event, these get | 576 // begins loading RIDs n, n+1, ..., n+k-1; after the second event, these get |
557 // destroyed and a new set begins loading RIDs n+k, n+k+1, ..., n+2k-1. | 577 // destroyed and a new set begins loading RIDs n+k, n+k+1, ..., n+2k-1. |
558 // Now due to crbug.com/68841, Chrome incorrectly loads the content for the | 578 // Now due to crbug.com/68841, Chrome incorrectly loads the content for the |
559 // first set of iframes into the most recent set of iframes. | 579 // first set of iframes into the most recent set of iframes. |
560 // | 580 // |
561 // Giving iframes distinct ids seems to cause some invalidation and prevent | 581 // Giving iframes distinct ids seems to cause some invalidation and prevent |
562 // associating the incorrect data. | 582 // associating the incorrect data. |
563 // | 583 // |
564 // TODO(jered): Find and fix the root (probably Blink) bug. | 584 // TODO(jered): Find and fix the root (probably Blink) bug. |
565 | 585 |
586 // Keep this id here. See comment above. | |
587 titleElement.id = 'title-' + rid; | |
588 titleElement.className = CLASSES.TITLE; | |
589 titleElement.hidden = true; | |
590 deltaMostVisitedVisibility(1); | |
beaudoin
2014/07/24 15:24:36
++
huangs
2014/07/24 19:33:11
Acknowledged.
| |
591 titleElement.onload = function() { | |
592 titleElement.hidden = false; | |
593 deltaMostVisitedVisibility(-1); | |
beaudoin
2014/07/24 15:24:36
decrementNumberOfVisibleTiles();
huangs
2014/07/24 19:33:11
Acknowledged.
| |
594 }; | |
566 titleElement.src = getMostVisitedIframeUrl( | 595 titleElement.src = getMostVisitedIframeUrl( |
567 MOST_VISITED_TITLE_IFRAME, rid, MOST_VISITED_COLOR, | 596 MOST_VISITED_TITLE_IFRAME, rid, MOST_VISITED_COLOR, |
568 MOST_VISITED_FONT_FAMILY, MOST_VISITED_FONT_SIZE, position); | 597 MOST_VISITED_FONT_FAMILY, MOST_VISITED_FONT_SIZE, position); |
569 | |
570 // Keep this id here. See comment above. | |
571 titleElement.id = 'title-' + rid; | |
572 titleElement.hidden = true; | |
573 titleElement.onload = function() { | |
574 titleElement.hidden = false; | |
575 updateMostVisitedVisibility(); | |
576 }; | |
577 titleElement.className = CLASSES.TITLE; | |
578 tileElement.appendChild(titleElement); | 598 tileElement.appendChild(titleElement); |
579 | 599 |
580 // The iframe which renders either a thumbnail or domain element. | 600 // The iframe which renders either a thumbnail or domain element. |
581 var thumbnailElement = document.createElement('iframe'); | 601 var thumbnailElement = document.createElement('iframe'); |
582 thumbnailElement.tabIndex = '-1'; | 602 thumbnailElement.tabIndex = '-1'; |
603 // Keep this id here. See comment above. | |
604 thumbnailElement.id = 'thumb-' + rid; | |
605 thumbnailElement.className = CLASSES.THUMBNAIL; | |
606 thumbnailElement.hidden = true; | |
607 deltaMostVisitedVisibility(1); | |
beaudoin
2014/07/24 15:24:37
Same.
huangs
2014/07/24 19:33:12
Acknowledged.
| |
608 thumbnailElement.onload = function() { | |
609 thumbnailElement.hidden = false; | |
610 tileElement.classList.add(CLASSES.PAGE_READY); | |
611 deltaMostVisitedVisibility(-1); | |
612 }; | |
583 thumbnailElement.src = getMostVisitedIframeUrl( | 613 thumbnailElement.src = getMostVisitedIframeUrl( |
584 MOST_VISITED_THUMBNAIL_IFRAME, rid, MOST_VISITED_COLOR, | 614 MOST_VISITED_THUMBNAIL_IFRAME, rid, MOST_VISITED_COLOR, |
585 MOST_VISITED_FONT_FAMILY, MOST_VISITED_FONT_SIZE, position); | 615 MOST_VISITED_FONT_FAMILY, MOST_VISITED_FONT_SIZE, position); |
586 | |
587 // Keep this id here. See comment above. | |
588 thumbnailElement.id = 'thumb-' + rid; | |
589 thumbnailElement.hidden = true; | |
590 thumbnailElement.onload = function() { | |
591 thumbnailElement.hidden = false; | |
592 tileElement.classList.add(CLASSES.PAGE_READY); | |
593 updateMostVisitedVisibility(); | |
594 }; | |
595 thumbnailElement.className = CLASSES.THUMBNAIL; | |
596 tileElement.appendChild(thumbnailElement); | 616 tileElement.appendChild(thumbnailElement); |
597 | 617 |
598 // A mask to darken the thumbnail on focus. | 618 // A mask to darken the thumbnail on focus. |
599 var maskElement = createAndAppendElement( | 619 var maskElement = createAndAppendElement( |
600 tileElement, 'div', CLASSES.THUMBNAIL_MASK); | 620 tileElement, 'div', CLASSES.THUMBNAIL_MASK); |
601 | 621 |
602 // The button used to blacklist this page. | 622 // The button used to blacklist this page. |
603 var blacklistButton = createAndAppendElement( | 623 var blacklistButton = createAndAppendElement( |
604 tileElement, 'div', CLASSES.BLACKLIST_BUTTON); | 624 tileElement, 'div', CLASSES.BLACKLIST_BUTTON); |
605 var blacklistFunction = generateBlacklistFunction(rid); | 625 var blacklistFunction = generateBlacklistFunction(rid); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
669 */ | 689 */ |
670 function blacklistAnimationDone() { | 690 function blacklistAnimationDone() { |
671 showNotification(); | 691 showNotification(); |
672 isBlacklisting = false; | 692 isBlacklisting = false; |
673 tilesContainer.classList.remove(CLASSES.HIDE_BLACKLIST_BUTTON); | 693 tilesContainer.classList.remove(CLASSES.HIDE_BLACKLIST_BUTTON); |
674 lastBlacklistedTile.elem.removeEventListener( | 694 lastBlacklistedTile.elem.removeEventListener( |
675 'webkitTransitionEnd', blacklistAnimationDone); | 695 'webkitTransitionEnd', blacklistAnimationDone); |
676 // Need to call explicitly to re-render the tiles, since the initial | 696 // Need to call explicitly to re-render the tiles, since the initial |
677 // onmostvisitedchange issued by the blacklist function only triggered | 697 // onmostvisitedchange issued by the blacklist function only triggered |
678 // the animation. | 698 // the animation. |
679 onMostVisitedChange(); | 699 reloadAllTiles(); |
680 } | 700 } |
681 | 701 |
682 | 702 |
683 /** | 703 /** |
684 * Handles a click on the notification undo link by hiding the notification and | 704 * Handles a click on the notification undo link by hiding the notification and |
685 * informing Chrome. | 705 * informing Chrome. |
686 */ | 706 */ |
687 function onUndo() { | 707 function onUndo() { |
688 userInitiatedMostVisitedChange = true; | 708 userInitiatedMostVisitedChange = true; |
689 hideNotification(); | 709 hideNotification(); |
(...skipping 17 matching lines...) Expand all Loading... | |
707 /** | 727 /** |
708 * Re-renders the tiles if the number of columns has changed. As a temporary | 728 * Re-renders the tiles if the number of columns has changed. As a temporary |
709 * fix for crbug/240510, updates the width of the fakebox and most visited tiles | 729 * fix for crbug/240510, updates the width of the fakebox and most visited tiles |
710 * container. | 730 * container. |
711 */ | 731 */ |
712 function onResize() { | 732 function onResize() { |
713 // If innerWidth is zero, then use the maximum snap size. | 733 // If innerWidth is zero, then use the maximum snap size. |
714 var innerWidth = window.innerWidth || 820; | 734 var innerWidth = window.innerWidth || 820; |
715 | 735 |
716 // These values should remain in sync with local_ntp.css. | 736 // These values should remain in sync with local_ntp.css. |
717 // TODO(jeremycho): Delete once the root cause of crbug/240510 is resolved. | 737 // TODO(jeremycho): Delete once the root cause of crbug/240510 is resolved. |
Mathieu
2014/07/24 15:11:25
this bug as been marked as fixed, I wonder if this
huangs
2014/07/24 19:33:11
Updated the routine and added comments.
| |
718 var setWidths = function(tilesContainerWidth) { | 738 var setWidths = function(tilesContainerWidth) { |
719 tilesContainer.style.width = tilesContainerWidth + 'px'; | 739 tilesContainer.style.width = tilesContainerWidth + 'px'; |
720 if (fakebox) | 740 if (fakebox) |
721 fakebox.style.width = (tilesContainerWidth - 2) + 'px'; | 741 fakebox.style.width = (tilesContainerWidth - 22) + 'px'; |
722 }; | 742 }; |
723 if (innerWidth >= 820) | 743 if (innerWidth >= 820) |
724 setWidths(620); | 744 setWidths(640); |
725 else if (innerWidth >= 660) | 745 else if (innerWidth >= 660) |
726 setWidths(460); | 746 setWidths(480); |
727 else | 747 else |
728 setWidths(300); | 748 setWidths(320); |
729 | 749 |
730 var tileRequiredWidth = TILE_WIDTH + TILE_MARGIN_START; | 750 var tileRequiredWidth = TILE_WIDTH + TILE_MARGIN_START; |
731 // Adds margin-start to the available width to compensate the extra margin | 751 // Adds margin-start to the available width to compensate the extra margin |
732 // counted above for the first tile (which does not have a margin-start). | 752 // counted above for the first tile (which does not have a margin-start). |
733 var availableWidth = innerWidth + TILE_MARGIN_START - | 753 var availableWidth = innerWidth + TILE_MARGIN_START - |
734 MIN_TOTAL_HORIZONTAL_PADDING; | 754 MIN_TOTAL_HORIZONTAL_PADDING; |
735 var numColumnsToShow = Math.floor(availableWidth / tileRequiredWidth); | 755 var numColumnsToShow = Math.floor(availableWidth / tileRequiredWidth); |
736 numColumnsToShow = Math.max(MIN_NUM_COLUMNS, | 756 numColumnsToShow = Math.max(MIN_NUM_COLUMNS, |
737 Math.min(MAX_NUM_COLUMNS, numColumnsToShow)); | 757 Math.min(MAX_NUM_COLUMNS, numColumnsToShow)); |
738 if (numColumnsToShow != numColumnsShown) { | 758 if (numColumnsToShow != numColumnsShown) { |
739 numColumnsShown = numColumnsToShow; | 759 numColumnsShown = numColumnsToShow; |
740 renderTiles(); | 760 showTiles(); |
741 } | 761 } |
742 } | 762 } |
743 | 763 |
744 | 764 |
745 /** | 765 /** |
746 * Returns the tile corresponding to the specified page RID. | 766 * Returns the tile corresponding to the specified page RID. |
747 * @param {number} rid The page RID being looked up. | 767 * @param {number} rid The page RID being looked up. |
748 * @return {Tile} The corresponding tile. | 768 * @return {Tile} The corresponding tile. |
749 */ | 769 */ |
750 function getTileByRid(rid) { | 770 function getTileByRid(rid) { |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
917 * Prepares the New Tab Page by adding listeners, rendering the current | 937 * Prepares the New Tab Page by adding listeners, rendering the current |
918 * theme, the most visited pages section, and Google-specific elements for a | 938 * theme, the most visited pages section, and Google-specific elements for a |
919 * Google-provided page. | 939 * Google-provided page. |
920 */ | 940 */ |
921 function init() { | 941 function init() { |
922 tilesContainer = $(IDS.TILES); | 942 tilesContainer = $(IDS.TILES); |
923 notification = $(IDS.NOTIFICATION); | 943 notification = $(IDS.NOTIFICATION); |
924 attribution = $(IDS.ATTRIBUTION); | 944 attribution = $(IDS.ATTRIBUTION); |
925 ntpContents = $(IDS.NTP_CONTENTS); | 945 ntpContents = $(IDS.NTP_CONTENTS); |
926 | 946 |
927 for (var i = 0; i < NUM_ROWS; i++) { | |
928 var row = document.createElement('div'); | |
929 row.classList.add(CLASSES.ROW); | |
930 tilesContainer.appendChild(row); | |
931 } | |
932 | |
933 if (configData.isGooglePage) { | 947 if (configData.isGooglePage) { |
934 var logo = document.createElement('div'); | 948 var logo = document.createElement('div'); |
935 logo.id = IDS.LOGO; | 949 logo.id = IDS.LOGO; |
936 | 950 |
937 fakebox = document.createElement('div'); | 951 fakebox = document.createElement('div'); |
938 fakebox.id = IDS.FAKEBOX; | 952 fakebox.id = IDS.FAKEBOX; |
939 fakebox.innerHTML = | 953 fakebox.innerHTML = |
940 '<input id="' + IDS.FAKEBOX_INPUT + | 954 '<input id="' + IDS.FAKEBOX_INPUT + |
941 '" autocomplete="off" tabindex="-1" aria-hidden="true">' + | 955 '" autocomplete="off" tabindex="-1" aria-hidden="true">' + |
942 '<div id=cursor></div>'; | 956 '<div id="cursor"></div>'; |
943 | 957 |
944 ntpContents.insertBefore(fakebox, ntpContents.firstChild); | 958 ntpContents.insertBefore(fakebox, ntpContents.firstChild); |
945 ntpContents.insertBefore(logo, ntpContents.firstChild); | 959 ntpContents.insertBefore(logo, ntpContents.firstChild); |
946 } else { | 960 } else { |
947 document.body.classList.add(CLASSES.NON_GOOGLE_PAGE); | 961 document.body.classList.add(CLASSES.NON_GOOGLE_PAGE); |
948 } | 962 } |
949 | 963 |
950 var notificationMessage = $(IDS.NOTIFICATION_MESSAGE); | 964 var notificationMessage = $(IDS.NOTIFICATION_MESSAGE); |
951 notificationMessage.textContent = | 965 notificationMessage.textContent = |
952 configData.translatedStrings.thumbnailRemovedNotification; | 966 configData.translatedStrings.thumbnailRemovedNotification; |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1040 | 1054 |
1041 return { | 1055 return { |
1042 init: init, | 1056 init: init, |
1043 listen: listen | 1057 listen: listen |
1044 }; | 1058 }; |
1045 } | 1059 } |
1046 | 1060 |
1047 if (!window.localNTPUnitTest) { | 1061 if (!window.localNTPUnitTest) { |
1048 LocalNTP().listen(); | 1062 LocalNTP().listen(); |
1049 } | 1063 } |
OLD | NEW |