Bug 1036284 - Update styling of newtab tiles to enhanced tiles spec [r=adw a=sylvestre]
authorEd Lee <edilee@mozilla.com>
Tue, 22 Jul 2014 23:42:27 -0700
changeset 217667 6d6b0c029f7171dec6cb8b963041794f4932db03
parent 217666 9f9d2a640709d1578bf72f9d1dd19fd728732449
child 217668 67002d4987d5ee92e3f6369184640400a4c7176c
push id515
push userraliiev@mozilla.com
push dateMon, 06 Oct 2014 12:51:51 +0000
treeherdermozilla-release@267c7a481bef [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersadw, sylvestre
bugs1036284
milestone33.0a2
Bug 1036284 - Update styling of newtab tiles to enhanced tiles spec [r=adw a=sylvestre] Set appropriate sizes, coloring, opacity, etc.
browser/base/content/newtab/newTab.css
browser/base/content/newtab/sites.js
browser/base/content/test/newtab/head.js
browser/themes/linux/jar.mn
browser/themes/osx/jar.mn
browser/themes/shared/newtab/newTab.inc.css
browser/themes/shared/newtab/texture.png
browser/themes/windows/jar.mn
--- a/browser/base/content/newtab/newTab.css
+++ b/browser/base/content/newtab/newTab.css
@@ -78,17 +78,17 @@ input[type=button] {
   -moz-box-flex: 1;
 }
 
 #newtab-margin-bottom {
   -moz-box-flex: 2;
 }
 
 .newtab-side-margin {
-  min-width: 16px;
+  min-width: 10px;
   -moz-box-flex: 1;
 }
 
 /* GRID */
 #newtab-grid {
   -moz-box-flex: 5;
   overflow: hidden;
   text-align: center;
@@ -103,19 +103,19 @@ input[type=button] {
 #newtab-grid[locked],
 #newtab-grid[page-disabled] {
   pointer-events: none;
 }
 
 /* CELLS */
 .newtab-cell {
   display: -moz-box;
-  height: 150px;
-  margin: 16px;
-  width: 243px;
+  height: 180px;
+  margin: 16px 10px;
+  width: 290px;
 }
 
 /* SITES */
 .newtab-site {
   position: relative;
   -moz-box-flex: 1;
   transition: 100ms ease-out;
   transition-property: top, left, opacity;
@@ -136,38 +136,28 @@ input[type=button] {
 .newtab-thumbnail {
   position: absolute;
   left: 0;
   top: 0;
   right: 0;
   bottom: 0;
 }
 
-.newtab-thumbnail {
-  opacity: .8;
-  transition: opacity 100ms ease-out;
-}
-
-.newtab-thumbnail[dragged],
-.newtab-link:-moz-focusring > .newtab-thumbnail,
-.newtab-cell:not([ignorehover]) > .newtab-site:hover > .newtab-link > .newtab-thumbnail {
-  opacity: 1;
-}
-
 /* TITLES */
 .newtab-title {
   bottom: -21px;
-  position: absolute;
+  font-size: 13px;
   left: 0;
-  line-height: 21px;
+  overflow: hidden;
+  padding-top: 14px;
+  position: absolute;
   right: 0;
-  text-align: start;
+  text-align: center;
+  text-overflow: ellipsis;
   white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
 }
 
 /* CONTROLS */
 .newtab-control {
   position: absolute;
   top: 4px;
   opacity: 0;
   transition: opacity 100ms ease-out;
@@ -281,17 +271,17 @@ input[type=button] {
 #newtab-search-logo[active],
 #newtab-search-logo:hover {
   background-color: #e9e9e9;
   border: 1px solid rgb(226, 227, 229);
   border-radius: 2.5px;
 }
 
 #newtab-search-text {
-  height: 32px;
+  height: 38px;
   -moz-box-flex: 1;
 
   padding: 0 8px;
   background: hsla(0,0%,100%,.9) padding-box;
   border: 1px solid;
   border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.17) hsla(210,54%,20%,.2);
   box-shadow: 0 1px 0 hsla(210,65%,9%,.02) inset,
               0 0 2px hsla(210,65%,9%,.1) inset,
@@ -305,17 +295,18 @@ input[type=button] {
 }
 
 #newtab-search-text:focus,
 #newtab-search-text[autofocus] {
   border-color: hsla(206,100%,60%,.6) hsla(206,76%,52%,.6) hsla(204,100%,40%,.6);
 }
 
 #newtab-search-submit {
-  height: 32px;
+  height: 38px;
+  font-size: 13px !important;
 
   -moz-margin-start: -1px;
   background: linear-gradient(hsla(0,0%,100%,.8), hsla(0,0%,100%,.1)) padding-box;
   padding: 0 9px;
   border: 1px solid;
   border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.17) hsla(210,54%,20%,.2);
   -moz-border-start: 1px solid transparent;
   border-radius: 0 2.5px 2.5px 0;
--- a/browser/base/content/newtab/sites.js
+++ b/browser/base/content/newtab/sites.js
@@ -103,20 +103,20 @@ Site.prototype = {
    * Updates attributes for all nodes which status depends on this site being
    * pinned or unpinned.
    * @param aPinned Whether this site is now pinned or unpinned.
    */
   _updateAttributes: function (aPinned) {
     let control = this._querySelector(".newtab-control-pin");
 
     if (aPinned) {
-      control.setAttribute("pinned", true);
+      this.node.setAttribute("pinned", true);
       control.setAttribute("title", newTabString("unpin"));
     } else {
-      control.removeAttribute("pinned");
+      this.node.removeAttribute("pinned");
       control.setAttribute("title", newTabString("pin"));
     }
   },
 
   /**
    * Renders the site's data (fills the HTML fragment).
    */
   _render: function Site_render() {
--- a/browser/base/content/test/newtab/head.js
+++ b/browser/base/content/test/newtab/head.js
@@ -22,50 +22,68 @@ let principal = Services.scriptSecurityM
 let isMac = ("nsILocalFileMac" in Ci);
 let isLinux = ("@mozilla.org/gnome-gconf-service;1" in Cc);
 let isWindows = ("@mozilla.org/windows-registry-key;1" in Cc);
 let gWindow = window;
 
 // Default to dummy/empty directory links
 let gDirectorySource = 'data:application/json,{"test":1}';
 
-// The tests assume all three rows of sites are shown, but the window may be too
-// short to actually show three rows.  Resize it if necessary.
-let requiredInnerHeight =
+// The tests assume all 3 rows and all 3 columns of sites are shown, but the
+// window may be too small to actually show everything.  Resize it if necessary.
+let requiredSize = {};
+requiredSize.innerHeight =
   40 + 32 + // undo container + bottom margin
   44 + 32 + // search bar + bottom margin
-  (3 * (150 + 32)) + // 3 rows * (tile height + title and bottom margin)
+  (3 * (180 + 32)) + // 3 rows * (tile height + title and bottom margin)
+  100; // breathing room
+requiredSize.innerWidth =
+  (3 * (290 + 20)) + // 3 cols * (tile width + side margins)
   100; // breathing room
 
-let oldInnerHeight = null;
-if (gBrowser.contentWindow.innerHeight < requiredInnerHeight) {
-  oldInnerHeight = gBrowser.contentWindow.innerHeight;
-  info("Changing browser inner height from " + oldInnerHeight + " to " +
-       requiredInnerHeight);
-  gBrowser.contentWindow.innerHeight = requiredInnerHeight;
-  let screenHeight = {};
+let oldSize = {};
+Object.keys(requiredSize).forEach(prop => {
+  info([prop, gBrowser.contentWindow[prop], requiredSize[prop]]);
+  if (gBrowser.contentWindow[prop] < requiredSize[prop]) {
+    oldSize[prop] = gBrowser.contentWindow[prop];
+    info("Changing browser " + prop + " from " + oldSize[prop] + " to " +
+         requiredSize[prop]);
+    gBrowser.contentWindow[prop] = requiredSize[prop];
+  }
+});
+let (screenHeight = {}, screenWidth = {}) {
   Cc["@mozilla.org/gfx/screenmanager;1"].
     getService(Ci.nsIScreenManager).
     primaryScreen.
-    GetAvailRectDisplayPix({}, {}, {}, screenHeight);
+    GetAvailRectDisplayPix({}, {}, screenWidth, screenHeight);
   screenHeight = screenHeight.value;
+  screenWidth = screenWidth.value;
   if (screenHeight < gBrowser.contentWindow.outerHeight) {
     info("Warning: Browser outer height is now " +
          gBrowser.contentWindow.outerHeight + ", which is larger than the " +
          "available screen height, " + screenHeight +
          ". That may cause problems.");
   }
+  if (screenWidth < gBrowser.contentWindow.outerWidth) {
+    info("Warning: Browser outer width is now " +
+         gBrowser.contentWindow.outerWidth + ", which is larger than the " +
+         "available screen width, " + screenWidth +
+         ". That may cause problems.");
+  }
 }
 
 registerCleanupFunction(function () {
   while (gWindow.gBrowser.tabs.length > 1)
     gWindow.gBrowser.removeTab(gWindow.gBrowser.tabs[1]);
 
-  if (oldInnerHeight)
-    gBrowser.contentWindow.innerHeight = oldInnerHeight;
+  Object.keys(oldSize).forEach(prop => {
+    if (oldSize[prop]) {
+      gBrowser.contentWindow[prop] = oldSize[prop];
+    }
+  });
 
   // Stop any update timers to prevent unexpected updates in later tests
   let timer = NewTabUtils.allPages._scheduleUpdateTimeout;
   if (timer) {
     clearTimeout(timer);
     delete NewTabUtils.allPages._scheduleUpdateTimeout;
   }
 
@@ -344,18 +362,17 @@ function addNewTabPageTab() {
 function checkGrid(aSitesPattern, aSites) {
   let length = aSitesPattern.split(",").length;
   let sites = (aSites || getGrid().sites).slice(0, length);
   let current = sites.map(function (aSite) {
     if (!aSite)
       return "";
 
     let pinned = aSite.isPinned();
-    let pinButton = aSite.node.querySelector(".newtab-control-pin");
-    let hasPinnedAttr = pinButton.hasAttribute("pinned");
+    let hasPinnedAttr = aSite.node.hasAttribute("pinned");
 
     if (pinned != hasPinnedAttr)
       ok(false, "invalid state (site.isPinned() != site[pinned])");
 
     return aSite.url.replace(/^http:\/\/example\.com\/#(\d+)$/, "$1") + (pinned ? "p" : "");
   });
 
   is(current, aSitesPattern, "grid status = " + aSitesPattern);
--- a/browser/themes/linux/jar.mn
+++ b/browser/themes/linux/jar.mn
@@ -113,16 +113,17 @@ browser.jar:
   skin/classic/browser/feeds/videoFeedIcon16.png      (feeds/feedIcon16.png)
   skin/classic/browser/feeds/audioFeedIcon.png        (feeds/feedIcon.png)
   skin/classic/browser/feeds/audioFeedIcon16.png      (feeds/feedIcon16.png)
   skin/classic/browser/feeds/subscribe.css            (feeds/subscribe.css)
   skin/classic/browser/feeds/subscribe-ui.css         (feeds/subscribe-ui.css)
 * skin/classic/browser/newtab/newTab.css              (newtab/newTab.css)
   skin/classic/browser/newtab/controls.png            (../shared/newtab/controls.png)
   skin/classic/browser/newtab/controls@2x.png         (../shared/newtab/controls@2x.png)
+  skin/classic/browser/newtab/texture.png             (../shared/newtab/texture.png)
   skin/classic/browser/places/bookmarksMenu.png       (places/bookmarksMenu.png)
   skin/classic/browser/places/bookmarksToolbar.png    (places/bookmarksToolbar.png)
   skin/classic/browser/places/bookmarksToolbar-menuPanel.png (places/bookmarksToolbar-menuPanel.png)
   skin/classic/browser/places/bookmarks-notification-finish.png  (places/bookmarks-notification-finish.png)
   skin/classic/browser/places/bookmarks-menu-arrow.png           (places/bookmarks-menu-arrow.png)
   skin/classic/browser/places/calendar.png            (places/calendar.png)
 * skin/classic/browser/places/editBookmarkOverlay.css (places/editBookmarkOverlay.css)
   skin/classic/browser/places/livemark-item.png       (places/livemark-item.png)
--- a/browser/themes/osx/jar.mn
+++ b/browser/themes/osx/jar.mn
@@ -184,16 +184,17 @@ browser.jar:
   skin/classic/browser/feeds/feedIcon16.png                 (feeds/feedIcon16.png)
   skin/classic/browser/feeds/videoFeedIcon.png              (feeds/feedIcon.png)
   skin/classic/browser/feeds/videoFeedIcon16.png            (feeds/feedIcon16.png)
   skin/classic/browser/feeds/audioFeedIcon.png              (feeds/feedIcon.png)
   skin/classic/browser/feeds/audioFeedIcon16.png            (feeds/feedIcon16.png)
 * skin/classic/browser/newtab/newTab.css                    (newtab/newTab.css)
   skin/classic/browser/newtab/controls.png                  (../shared/newtab/controls.png)
   skin/classic/browser/newtab/controls@2x.png               (../shared/newtab/controls@2x.png)
+  skin/classic/browser/newtab/texture.png                   (../shared/newtab/texture.png)
   skin/classic/browser/setDesktopBackground.css
   skin/classic/browser/monitor.png
   skin/classic/browser/monitor_16-10.png
   skin/classic/browser/places/allBookmarks.png              (places/allBookmarks.png)
 * skin/classic/browser/places/places.css                    (places/places.css)
 * skin/classic/browser/places/organizer.css                 (places/organizer.css)
   skin/classic/browser/places/query.png                     (places/query.png)
   skin/classic/browser/places/query@2x.png                  (places/query@2x.png)
--- a/browser/themes/shared/newtab/newTab.inc.css
+++ b/browser/themes/shared/newtab/newTab.inc.css
@@ -7,17 +7,17 @@
   font-size: 75%;
   background-color: transparent;
 }
 
 /* SCROLLBOX */
 #newtab-scrollbox:not([page-disabled]),
 #newtab-scrollbox:not([page-disabled]) #newtab-margin-bottom {
   color: rgb(0,0,0);
-  background-color: hsl(0,0%,95%);
+  background-image: url(chrome://browser/skin/newtab/texture.png);
 }
 
 /* UNDO */
 #newtab-undo-container {
   padding: 4px 3px;
   border: 1px solid;
   border-color: rgba(8,22,37,.12) rgba(8,22,37,.14) rgba(8,22,37,.16);
   background-color: rgba(255,255,255,.4);
@@ -76,69 +76,97 @@
     background-image: url(chrome://browser/skin/newtab/controls@2x.png);
     background-size: 296px;
   }
 }
 
 /* CELLS */
 .newtab-cell {
   background-color: rgba(255,255,255,.2);
-  border: 1px solid #dee0e1;
-  transition: border-color 100ms ease-out;
+  border-radius: 12px;
 }
 
 .newtab-cell:empty {
-  border: 1px dashed;
-  border-color: rgba(8,22,37,.15) rgba(8,22,37,.17) rgba(8,22,37,.19);
-}
-
-.newtab-cell:hover:not(:empty):not([dragged]):not([ignorehover]) {
-  border-color: rgba(8,22,37,.25) rgba(8,22,37,.27) rgba(8,22,37,.3);
+  outline: 2px dashed #c1c1c1;
+  -moz-outline-radius: 12px;
 }
 
 /* SITES */
 .newtab-site {
+  border-radius: inherit;
+  box-shadow: 0 1px 3px #c1c1c1;
   text-decoration: none;
   transition-property: top, left, opacity, box-shadow, background-color;
 }
 
 .newtab-cell:not([ignorehover]) > .newtab-site:hover,
 .newtab-site[dragged] {
-  box-shadow: 0 0 10px rgba(8,22,37,.3);
+  border: 2px solid #4a90e2;
+  box-shadow: 0 0 10px 3px #4cb1ff;
+  margin: -2px;
 }
 
 .newtab-site[dragged] {
   transition-property: box-shadow, background-color;
   background-color: rgb(242,242,242);
 }
 
+/* LINKS */
+.newtab-link {
+  border-radius: 10px;
+}
+
 /* THUMBNAILS */
 .newtab-thumbnail {
   background-origin: padding-box;
   background-clip: padding-box;
   background-repeat: no-repeat;
   background-size: cover;
+  border-radius: inherit;
+  transition: opacity 100ms ease-out;
 }
 
 .newtab-thumbnail.enhanced-content:hover {
   opacity: 0;
 }
 
 .newtab-site[type=affiliate] .newtab-thumbnail,
 .newtab-site[type=enhanced] .newtab-thumbnail,
 .newtab-site[type=organic] .newtab-thumbnail,
 .newtab-site[type=sponsored] .newtab-thumbnail {
   background-position: center center;
   background-size: auto;
 }
 
+/* Use a pseudo-element to overlay a gradient on the thumbnail */
+.newtab-site[type=history]:not(:hover) .newtab-thumbnail:first-child::after {
+  background-image: linear-gradient(0deg, rgba(251, 251, 251, 0.8), rgba(251, 251, 251, 0) 50%);
+  border-radius: inherit;
+  bottom: 0;
+  content: "";
+  left: 0;
+  pointer-events: none;
+  position: absolute;
+  right: 0;
+  top: 0;
+}
+
 /* TITLES */
 .newtab-title {
-  color: #525c66;
-  font-size: 13px;
+  color: #9b9b9b;
+}
+
+.newtab-site:hover .newtab-title {
+  color: #4a4a4a;
+}
+
+.newtab-site[pinned] .newtab-title {
+  color: #d0021b;
+  font-style: italic;
+  font-weight: bold;
 }
 
 .newtab-site[type=sponsored] .newtab-title {
   -moz-padding-end: 24px;
 }
 
 /* CONTROLS */
 .newtab-control {
@@ -159,25 +187,25 @@
 .newtab-control-pin:hover {
   background-position: -24px 0;
 }
 
 .newtab-control-pin:active {
   background-position: -48px 0;
 }
 
-.newtab-control-pin[pinned] {
+.newtab-site[pinned] .newtab-control-pin {
   background-position: -72px 0;
 }
 
-.newtab-control-pin[pinned]:hover {
+.newtab-site[pinned] .newtab-control-pin:hover {
   background-position: -96px 0;
 }
 
-.newtab-control-pin[pinned]:active {
+.newtab-site[pinned] .newtab-control-pin:active {
   background-position: -120px 0;
 }
 
 .newtab-control-block {
   background-position: -144px 0;
 }
 
 .newtab-control-block:hover {
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..84468be240e021d6242a698f60f0375aab2a1b26
GIT binary patch
literal 14706
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
AfdBvi
--- a/browser/themes/windows/jar.mn
+++ b/browser/themes/windows/jar.mn
@@ -135,16 +135,17 @@ browser.jar:
         skin/classic/browser/feeds/audioFeedIcon16.png               (feeds/feedIcon16.png)
         skin/classic/browser/feeds/videoFeedIcon.png                 (feeds/feedIcon.png)
         skin/classic/browser/feeds/videoFeedIcon16.png               (feeds/feedIcon16.png)
         skin/classic/browser/feeds/subscribe.css                     (feeds/subscribe.css)
         skin/classic/browser/feeds/subscribe-ui.css                  (feeds/subscribe-ui.css)
 *       skin/classic/browser/newtab/newTab.css                       (newtab/newTab.css)
         skin/classic/browser/newtab/controls.png                     (../shared/newtab/controls.png)
         skin/classic/browser/newtab/controls@2x.png                  (../shared/newtab/controls@2x.png)
+        skin/classic/browser/newtab/texture.png                      (../shared/newtab/texture.png)
         skin/classic/browser/places/places.css                       (places/places.css)
 *       skin/classic/browser/places/organizer.css                    (places/organizer.css)
         skin/classic/browser/places/bookmark.png                     (places/bookmark.png)
         skin/classic/browser/places/query.png                        (places/query.png)
         skin/classic/browser/places/bookmarksMenu.png                (places/bookmarksMenu.png)
         skin/classic/browser/places/bookmarksToolbar.png             (places/bookmarksToolbar.png)
         skin/classic/browser/places/bookmarksToolbar-menuPanel.png   (places/bookmarksToolbar-menuPanel.png)
         skin/classic/browser/places/bookmarks-notification-finish.png (places/bookmarks-notification-finish.png)
@@ -553,16 +554,17 @@ browser.jar:
         skin/classic/aero/browser/feeds/audioFeedIcon16.png          (feeds/feedIcon16-aero.png)
         skin/classic/aero/browser/feeds/videoFeedIcon.png            (feeds/feedIcon-aero.png)
         skin/classic/aero/browser/feeds/videoFeedIcon16.png          (feeds/feedIcon16-aero.png)
         skin/classic/aero/browser/feeds/subscribe.css                (feeds/subscribe.css)
         skin/classic/aero/browser/feeds/subscribe-ui.css             (feeds/subscribe-ui.css)
 *       skin/classic/aero/browser/newtab/newTab.css                  (newtab/newTab.css)
         skin/classic/aero/browser/newtab/controls.png                (../shared/newtab/controls.png)
         skin/classic/aero/browser/newtab/controls@2x.png             (../shared/newtab/controls@2x.png)
+        skin/classic/aero/browser/newtab/texture.png                 (../shared/newtab/texture.png)
 *       skin/classic/aero/browser/places/places.css                  (places/places-aero.css)
 *       skin/classic/aero/browser/places/organizer.css               (places/organizer-aero.css)
         skin/classic/aero/browser/places/bookmark.png                (places/bookmark-aero.png)
         skin/classic/aero/browser/places/query.png                   (places/query-aero.png)
         skin/classic/aero/browser/places/bookmarksMenu.png           (places/bookmarksMenu-aero.png)
         skin/classic/aero/browser/places/bookmarksToolbar.png        (places/bookmarksToolbar-aero.png)
         skin/classic/aero/browser/places/bookmarksToolbar-menuPanel.png (places/bookmarksToolbar-menuPanel-aero.png)
         skin/classic/aero/browser/places/bookmarks-notification-finish.png   (places/bookmarks-notification-finish.png)