| Index: chrome/browser/resources/new_new_tab.js
|
| diff --git a/chrome/browser/resources/new_new_tab.js b/chrome/browser/resources/new_new_tab.js
|
| index f72fadd5eb21daff71ded6f9db16b04ae5c83fbd..877144c78cfd8970ca3bf5484dd37e19e1012a1c 100644
|
| --- a/chrome/browser/resources/new_new_tab.js
|
| +++ b/chrome/browser/resources/new_new_tab.js
|
| @@ -21,29 +21,21 @@ function getSectionMenuButtonTextId(sectionId) {
|
| return sectionId.replace(/-/g, '');
|
| }
|
|
|
| -function setSectionVisible(sectionId, section, visible, hideMask) {
|
| - if (visible && !(shownSections & hideMask) ||
|
| - !visible && (shownSections & hideMask))
|
| - return;
|
| -
|
| - if (visible) {
|
| - // Because sections are collapsed when they are minimized, it is not
|
| +function setSectionMenuMode(sectionId, section, menuModeEnabled, menuModeMask) {
|
| + var el = $(sectionId);
|
| + if (!menuModeEnabled) {
|
| + // Because sections are collapsed when they are in menu mode, it is not
|
| // necessary to restore the maxiview here. It will happen if the section
|
| // header is clicked.
|
| - var el = $(sectionId);
|
| - el.classList.remove('disabled');
|
| - el = getSectionMenuButton(sectionId);
|
| - el.classList.add('disabled');
|
| - shownSections &= ~hideMask;
|
| + // TODO(aa): Sections should maintain their collapse state when minimized.
|
| + el.classList.remove('menu');
|
| + shownSections &= ~menuModeMask;
|
| } else {
|
| if (section) {
|
| hideSection(section); // To hide the maxiview.
|
| }
|
| - var el = $(sectionId);
|
| - el.classList.add('disabled');
|
| - el = getSectionMenuButton(sectionId);
|
| - el.classList.remove('disabled');
|
| - shownSections |= hideMask;
|
| + el.classList.add('menu');
|
| + shownSections |= menuModeMask;
|
| }
|
| layoutSections();
|
| }
|
| @@ -85,7 +77,7 @@ function addClosedMenuFooter(menu, sectionId, mask, opt_section) {
|
| function(e) {
|
| getSectionMenuButton(sectionId).hideMenu();
|
| e.preventDefault();
|
| - setSectionVisible(sectionId, opt_section, true, mask);
|
| + setSectionMenuMode(sectionId, opt_section, false, mask);
|
| shownSections &= ~mask;
|
| saveShownSections();
|
| });
|
| @@ -97,7 +89,7 @@ function initializeSection(sectionId, mask, opt_section) {
|
| button.addEventListener(
|
| 'click',
|
| function() {
|
| - setSectionVisible(sectionId, opt_section, false, mask);
|
| + setSectionMenuMode(sectionId, opt_section, true, mask);
|
| saveShownSections();
|
| });
|
| }
|
| @@ -109,19 +101,19 @@ function updateSimpleSection(id, section) {
|
| if (shownSections & section) {
|
| // The section is expanded, so the maxiview should be opaque (visible) and
|
| // the miniview should be hidden.
|
| - elm.classList.remove('hidden');
|
| + elm.classList.remove('collapsed');
|
| if (maxiview) {
|
| - maxiview.classList.remove('hidden');
|
| + maxiview.classList.remove('collapsed');
|
| maxiview.classList.add('opaque');
|
| }
|
| if (miniview)
|
| miniview.classList.remove('opaque');
|
| } else {
|
| - // The section is minimized, so the maxiview should be hidden and the
|
| + // The section is collapsed, so the maxiview should be hidden and the
|
| // miniview should be opaque.
|
| - elm.classList.add('hidden');
|
| + elm.classList.add('collapsed');
|
| if (maxiview) {
|
| - maxiview.classList.add('hidden');
|
| + maxiview.classList.add('collapsed');
|
| maxiview.classList.remove('opaque');
|
| }
|
| if (miniview)
|
| @@ -243,7 +235,7 @@ function renderRecentlyClosed() {
|
| parentEl.appendChild(createRecentItem(item));
|
| addRecentMenuItem(recentMenu, item);
|
| });
|
| - addClosedMenuFooter(recentMenu, 'recently-closed', MINIMIZED_RECENT);
|
| + addClosedMenuFooter(recentMenu, 'recently-closed', MENU_RECENT);
|
|
|
| layoutRecentlyClosed();
|
| }
|
| @@ -332,7 +324,7 @@ function SectionLayoutInfo(section) {
|
| this.header = section.querySelector('h2');
|
| this.miniview = section.querySelector('.miniview');
|
| this.maxiview = getSectionMaxiview(section);
|
| - this.expanded = this.maxiview && !section.classList.contains('hidden');
|
| + this.expanded = this.maxiview && !section.classList.contains('collapsed');
|
| this.fixedHeight = this.section.offsetHeight;
|
| this.scrollingHeight = 0;
|
|
|
| @@ -342,7 +334,8 @@ function SectionLayoutInfo(section) {
|
|
|
| // Get all sections to be layed out.
|
| SectionLayoutInfo.getAll = function() {
|
| - var sections = document.querySelectorAll('.section:not(.disabled)');
|
| + var sections = document.querySelectorAll(
|
| + '.section:not(.disabled):not(.menu)');
|
| var result = [];
|
| for (var i = 0, section; section = sections[i]; i++) {
|
| result.push(new SectionLayoutInfo(section));
|
| @@ -367,7 +360,7 @@ function updateMiniviewClipping(miniview) {
|
|
|
| // Ensure none of the miniviews have any clipped items.
|
| function updateAllMiniviewClippings() {
|
| - var miniviews = document.querySelectorAll('.section.hidden .miniview');
|
| + var miniviews = document.querySelectorAll('.section.collapsed .miniview');
|
| for (var i = 0, miniview; miniview = miniviews[i]; i++) {
|
| updateMiniviewClipping(miniview);
|
| }
|
| @@ -486,7 +479,7 @@ function layoutSections() {
|
| }
|
| } else {
|
| // We only set the document height when a section is expanded. If
|
| - // all sections are minimized, then get rid of the previous height.
|
| + // all sections are collapsed, then get rid of the previous height.
|
| document.body.style.height = '';
|
| }
|
|
|
| @@ -518,6 +511,7 @@ function layoutSections() {
|
| if (cr.isChromeOS)
|
| $('closed-sections-bar').style.top = y + 'px';
|
|
|
| + updateMenuSections();
|
| updateAttributionDisplay(y);
|
| }
|
|
|
| @@ -557,6 +551,24 @@ function getColorStopString(height, color) {
|
| return color + ' ' + height * 100 + '%';
|
| }
|
|
|
| +// Updates the visibility of the menu buttons for each section, based on
|
| +// whether they are currently enabled and in menu mode.
|
| +function updateMenuSections() {
|
| + var elms = document.getElementsByClassName('section');
|
| + for (var i = 0, elm; elm = elms[i]; i++) {
|
| + var button = getSectionMenuButton(elm.id);
|
| + if (!button)
|
| + continue;
|
| +
|
| + if (!elm.classList.contains('disabled') &&
|
| + elm.classList.contains('menu')) {
|
| + button.style.display = 'inline-block';
|
| + } else {
|
| + button.style.display = 'none';
|
| + }
|
| + }
|
| +}
|
| +
|
| window.addEventListener('resize', handleWindowResize);
|
|
|
| var sectionToElementMap;
|
| @@ -585,16 +597,16 @@ function showSection(section) {
|
| shownSections |= section;
|
| var el = getSectionElement(section);
|
| if (el) {
|
| - el.classList.remove('hidden');
|
| + el.classList.remove('collapsed');
|
|
|
| var maxiview = getSectionMaxiview(el);
|
| if (maxiview) {
|
| - maxiview.classList.remove('hiding');
|
| - maxiview.classList.remove('hidden');
|
| + maxiview.classList.remove('collapsing');
|
| + maxiview.classList.remove('collapsed');
|
| // The opacity won't transition if you toggle the display property
|
| // at the same time. To get a fade effect, we set the opacity
|
| // asynchronously from another function, after the display is toggled.
|
| - // 1) 'hidden' (display: none, opacity: 0)
|
| + // 1) 'collapsed' (display: none, opacity: 0)
|
| // 2) none (display: block, opacity: 0)
|
| // 3) 'opaque' (display: block, opacity: 1)
|
| setTimeout(function () {
|
| @@ -642,11 +654,11 @@ function hideSection(section) {
|
|
|
| var el = getSectionElement(section);
|
| if (el) {
|
| - el.classList.add('hidden');
|
| + el.classList.add('collapsed');
|
|
|
| var maxiview = getSectionMaxiview(el);
|
| if (maxiview) {
|
| - maxiview.classList.add(isDoneLoading() ? 'hiding' : 'hidden');
|
| + maxiview.classList.add(isDoneLoading() ? 'collapsing' : 'collapsed');
|
| maxiview.classList.remove('opaque');
|
| }
|
|
|
| @@ -663,9 +675,9 @@ function hideSection(section) {
|
| }
|
|
|
| window.addEventListener('webkitTransitionEnd', function(e) {
|
| - if (e.target.classList.contains('hiding')) {
|
| - e.target.classList.add('hidden');
|
| - e.target.classList.remove('hiding');
|
| + if (e.target.classList.contains('collapsing')) {
|
| + e.target.classList.add('collapsed');
|
| + e.target.classList.remove('collapsing');
|
| }
|
|
|
| if (e.target.classList.contains('maxiview') ||
|
| @@ -686,15 +698,12 @@ function setShownSections(newShownSections) {
|
| else
|
| hideSection(Section[key]);
|
| }
|
| - setSectionVisible(
|
| - 'apps', Section.APPS,
|
| - !(newShownSections & MINIMIZED_APPS), MINIMIZED_APPS);
|
| - setSectionVisible(
|
| - 'most-visited', Section.THUMB,
|
| - !(newShownSections & MINIMIZED_THUMB), MINIMIZED_THUMB);
|
| - setSectionVisible(
|
| - 'recently-closed', undefined,
|
| - !(newShownSections & MINIMIZED_RECENT), MINIMIZED_RECENT);
|
| + setSectionMenuMode('apps', Section.APPS, newShownSections & MENU_APPS,
|
| + MENU_APPS);
|
| + setSectionMenuMode('most-visited', Section.THUMB,
|
| + newShownSections & MENU_THUMB, MENU_THUMB);
|
| + setSectionMenuMode('recently-closed', undefined,
|
| + newShownSections & MENU_RECENT, MENU_RECENT);
|
| layoutSections();
|
| }
|
|
|
| @@ -707,14 +716,14 @@ function layoutRecentlyClosed() {
|
| updateMiniviewClipping(miniview);
|
|
|
| if (miniview.hasChildNodes()) {
|
| - if (!(shownSections & MINIMIZED_RECENT)) {
|
| - recentElement.classList.remove('disabled');
|
| - miniview.classList.add('opaque');
|
| - }
|
| + recentElement.classList.remove('disabled');
|
| + miniview.classList.add('opaque');
|
| } else {
|
| recentElement.classList.add('disabled');
|
| miniview.classList.remove('opaque');
|
| }
|
| +
|
| + layoutSections();
|
| }
|
|
|
| /**
|
|
|