Commit d1b209dd authored by Gavin Sharp's avatar Gavin Sharp
Browse files

merge fx-team into m-c

parents eabf21ec e13fa83e
Loading
Loading
Loading
Loading
−2.27 KiB
Loading image diff...
−4.44 KiB
Loading image diff...
+0 −384
Original line number Diff line number Diff line
%if 0
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License
 * Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is aboutHome.xhtml.
 *
 * The Initial Developer of the Original Code is the Mozilla Foundation.
 * Portions created by the Initial Developer are Copyright (C) 2010
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *   Marco Bonardo <mak77@bonardo.net> (original author)
 *   Mihai Sucan <mihai.sucan@gmail.com>
 *   Stephen Horlander <shorlander@mozilla.com>
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */
%endif

html {
  font-family: sans-serif;
  background: -moz-Field;
  color: -moz-FieldText;
  height: 100%;
}

body {
  display: inline-block;
  position: relative;
  margin: 0;
  width: 100%;
  height: 100%;
}

a {
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

#brandStart {
  text-align: center;
  height: 19%;
  max-height: 256px;
  min-height: 92px;
}

#brandStartSpacer {
  height: 6.5%;
}

#brandStartLogo {
  height: 100%;
}

#searchContainer {
  height: 15%;
  min-height: 90px;
}

#searchContainer::before {
  content: " ";
  display: block;
  height: 23%;
}

#searchForm {
  display: table;
  width: 100%;
  max-width: 1830px;
  margin: 0 auto;
}

@media all and (max-height: 700px) {
  #searchContainer { height: 20% }
}

@media all and (max-height: 500px) {
  #searchContainer { height: 25% }
}

@media all and (max-height: 370px) {
  #searchContainer { height: 30% }
}

#searchLogoContainer {
  display: table-cell;
  width: 30%;
  text-align: end;
  line-height: 32px;
}

#searchEngineLogo {
  -moz-margin-end: 2.5%;
  vertical-align: middle;
}

#searchInputContainer {
  display: table-cell;
  width: 38%;
  max-width: 700px;
  min-width: 150px;
}

#searchText {
  width: 100%;
  height: 24px;
  padding: 3px 6px;
  border-radius: 2px;
  border: 1px solid rgb(150,150,150);
  border-top-color: rgb(100,100,100);
  box-shadow: 0 1px 0 rgba(255,255,255,0.5);
  font-size: 1.2em;
}

#searchButtons {
  display: table-cell;
  width: 31%;
  -moz-padding-start: 13px;
  vertical-align: top;
}

@media all and (max-width: 470px) {
  #searchLogoContainer { width: 10% }
  #searchButtons { width: 11% }
  #searchInputContainer { width: 40% }
}

@media all and (min-width: 470px) and (max-width: 600px) {
  #searchLogoContainer { width: 15% }
  #searchButtons { width: 16%; white-space: nowrap }
  #searchInputContainer { width: 45% }
}

@media all and (min-width: 600px) and (max-width: 850px) {
  #searchLogoContainer { width: 20% }
  #searchButtons { width: 21%; white-space: nowrap }
  #searchInputContainer { width: 49% }
}

#searchSubmit {
  background: -moz-linear-gradient(#f1f1f1, #dfdfdf);
  padding: 4px 8px;
  height: 32px;
  border: 1px solid #ccc;
  border-top-color: #ccc;
  border-bottom-color: #999;
  -moz-border-start-color: #afafaf;
  -moz-border-end-color: #999;
  box-shadow: 1px 1px 0 #e7e7e7,
              0 1px 0 #fcfcfc inset,
              0 -1px 0 #d7d7d7 inset;
  font-size: 1em;
  color: #000;
  cursor: pointer;
}

body[dir=rtl] #searchSubmit {
  box-shadow: -1px 1px 0 #e7e7e7,
              0 1px 0 #fcfcfc inset,
              0 -1px 0 #d7d7d7 inset;
}

#searchSubmit:active {
  background: -moz-linear-gradient(#c5c5c5, #c5c5c5);
  box-shadow: 1px 1px 0 #e7e7e7;
}

body[dir=rtl] #searchSubmit:active {
  box-shadow: -1px 1px 0 #e7e7e7;
}

#contentContainer {
  height: 30%;
  background-image: -moz-radial-gradient(center top, ellipse farthest-side, rgba(16,83,130,.5), rgba(16,83,130,0) 75%),
                    -moz-radial-gradient(center top, ellipse farthest-side, rgba(180,218,244,.5), rgba(180,218,244,0)),
                    -moz-radial-gradient(center top, ellipse farthest-side, rgba(180,218,244,.3), rgba(180,218,244,0));
  background-size: 100% 5px,
                   100% 50px,
                   100% 100%;
  background-repeat: no-repeat;
}

@media all and (max-height: 400px) {
  #contentContainer { height: 20% }
}

#snippetContainer {
  position: relative;
  top: -24px;
  text-align: center;
}

#snippets {
  display: inline-block;
  padding: 14px;
  width: 30%;
  max-width: 600px;
  background-image: -moz-linear-gradient(rgba(255,255,255,.8), rgba(255,255,255,.1));
  background-color: rgb(250,250,250);
  border-radius: 4px;
  box-shadow: 0 1px 0 rgba(255,255,255,.8) inset,
              0 -2px 0 rgba(0,0,0,.1) inset,
              0 0 10px rgba(255,255,255,.5) inset,
              0 0 0 1px rgba(0,0,0,.1),
              0 2px 4px rgba(0,0,0,.2);
  color: rgb(60,60,60);
  font-size: .85em;
  cursor: pointer;
}

#snippets:empty {
  visibility: hidden;
}

@media all and (max-width: 470px) {
  #snippets { width: 65% }
}

@media all and (min-width: 470px) and (max-width: 850px) {
  #snippets { width: 45% }
}

#snippets:hover {
  background-color: rgb(255,255,255);
  box-shadow: 0 1px 0 rgba(255,255,255,.8) inset,
              0 -2px 0 rgba(0,0,0,.1) inset,
              0 0 10px rgba(255,255,255,.5) inset,
              0 0 5px rgba(0,0,0,.1),
              0 0 0 1px rgba(0,0,0,.1),
              0 2px 4px rgba(0,0,0,.2);
}

#snippets:hover:active {
  background-color: rgb(210,210,210);
  box-shadow: 0 2px 3px rgba(0,0,0,.3) inset,
              0 1px 0 rgba(255,255,255,.5);
}

#defaultSnippet1,
#defaultSnippet2 {
  display: table-row;
  text-align: start;
}

#defaultSnippet1::before,
#defaultSnippet2::before {
  display: table-cell;
  vertical-align: middle;
  -moz-padding-end: 1em;
}

#defaultSnippet1::before {
  content: url("chrome://browser/content/aboutHome-snippet1.png");
}
#defaultSnippet2::before {
  content: url("chrome://browser/content/aboutHome-snippet2.png");
}

#sessionRestoreContainer {
  padding-top: 1.5%;
  text-align: center;
}

@media all and (max-height: 500px) {
  #sessionRestoreContainer {
    position: relative;
    top: -15px;
    padding-top: 0;
  }
}

#restorePreviousSession {
  padding: 10px;
  border: 0;
  border-radius: 4px;
  box-shadow: 0 0 0 1px rgba(9,37,59,0),
              0 1px 2px rgba(9,37,59,0),
              0 0 10px rgba(255,255,255,0),
              0 -3px 0 rgba(180,194,212,0) inset;
  -moz-transition-property: background-color, box-shadow;
  -moz-transition-duration: 0.25s;
  -moz-transition-timing-function: ease-out;
  background: transparent;
  color: rgb(50,50,50);
  font-weight: bold;
  font-size: 1em;
  cursor: pointer;
}

#restorePreviousSession::before {
  display: inline-block;
  content: url("chrome://browser/content/aboutHome-restore-icon.png");
  -moz-margin-end: 10px;
  vertical-align: middle;
  height: 66px; /* Needed to avoid a blank space under the image */
}

body[dir=rtl] #restorePreviousSession::before {
  -moz-transform: scaleX(-1);
}

@media all and (max-height: 500px) {
  #restorePreviousSession::before {
    content: url("chrome://browser/content/aboutHome-restore-icon-small.png");
    height: 41px;
  }
}

@media all and (max-width: 500px) {
  #restorePreviousSession::before { 
    content: url("chrome://browser/content/aboutHome-restore-icon-small.png");
    height: 41px;
  }
}

#restorePreviousSession:disabled {
  display: none;
}

#restorePreviousSession:hover {
  background-image: -moz-linear-gradient(rgba(255,255,255,.7), rgba(255,255,255,.2));
  border-radius: 4px;
  box-shadow: 0 0 0 1px rgba(9,37,59,.2),
              0 1px 2px rgba(9,37,59,.2),
              0 0 10px rgba(255,255,255,.4),
              0 -3px 0 rgba(180,194,212,.3) inset;
}

#restorePreviousSession:hover:active {
  background-image: -moz-linear-gradient(rgba(255,255,255,.0), rgba(255,255,255,.2));
  background-color: rgba(23,75,115,.1);
  box-shadow: 0 0 0 1px rgba(9,37,59,.2),
              0 1px 2px rgba(9,37,59,.4) inset,
              0 1px 5px rgba(9,37,59,.15) inset;
}

#bottomSection {
  position: absolute;
  color: rgb(150,150,150);
  font-size: .8em;
  width: 100%;
  text-align: center;
  bottom: 2%;
}

#syncLinksContainer {
  padding-top: 1em;
}

.sync-link {
  padding: 1em;
}

@media all and (max-height: 370px) {
  #bottomSection {
    visibility: hidden;
  }
}
+362 −0
Original line number Diff line number Diff line
%if 0
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License
 * Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is aboutHome.xhtml.
 *
 * The Initial Developer of the Original Code is the Mozilla Foundation.
 * Portions created by the Initial Developer are Copyright (C) 2010
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *   Marco Bonardo <mak77@bonardo.net> (original author)
 *   Mihai Sucan <mihai.sucan@gmail.com>
 *   Stephen Horlander <shorlander@mozilla.com>
 *   Frank Yan <fyan@mozilla.com>
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */
%endif

html {
  font: message-box;
  font-size: 100%;
  background-color: hsl(0,0%,90%);
  background-image: url(chrome://browser/content/abouthome/noise.png),
                    -moz-linear-gradient(hsla(0,0%,100%,.7), hsla(0,0%,100%,.4));
  background-attachment: fixed;
  color: #000;
  height: 100%;
}

body {
  margin: 0;
  height: 100%;
}

#container {
  display: -moz-box;
  -moz-box-orient: vertical;
  width: 100%;
  height: 100%;
}

input,
button {
  font-size: inherit;
  font-family: inherit;
}

a {
  color: -moz-nativehyperlinktext;
  text-decoration: none;
}

.spacer {
  -moz-box-flex: 1;
}

#topSection {
  text-align: center;
}

#brandLogo {
  height: 154px;
  margin: 22px 0 31px;
}

#searchForm,
#snippets {
  width: 470px;
}

#searchForm {
  display: -moz-box;
}

#searchLogoContainer {
  display: -moz-box;
  -moz-box-align: center;
  padding-top: 2px;
  -moz-padding-end: 8px;
}

#searchEngineLogo {
  display: inline-block;
}

#searchText {
  -moz-box-flex: 1;
  padding: 6px 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,
              0 1px 0 hsla(0,0%,100%,.2);
  border-radius: 2.5px 0 0 2.5px;
}

body[dir=rtl] #searchText {
  border-radius: 0 2.5px 2.5px 0;
}

#searchText:focus {
  border-color: hsla(206,100%,60%,.6) hsla(206,76%,52%,.6) hsla(204,100%,40%,.6);
}

#searchSubmit {
  -moz-margin-start: -1px;
  background: -moz-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;
  box-shadow: 0 0 2px hsla(0,0%,100%,.5) inset,
              0 1px 0 hsla(0,0%,100%,.2);
  cursor: pointer;
  -moz-transition-property: background-color, border-color, box-shadow;
  -moz-transition-duration: 150ms;
}

body[dir=rtl] #searchSubmit {
  border-radius: 2.5px 0 0 2.5px;
}

#searchText:focus + #searchSubmit,
#searchText + #searchSubmit:hover {
  border-color: #59b5fc #45a3e7 #3294d5;
  color: white;
}

#searchText:focus + #searchSubmit {
  background-image: -moz-linear-gradient(#4cb1ff, #1793e5);
  box-shadow: 0 1px 0 hsla(0,0%,100%,.2) inset,
              0 0 0 1px hsla(0,0%,100%,.1) inset,
              0 1px 0 hsla(210,54%,20%,.03);
}

#searchText + #searchSubmit:hover {
  background-image: -moz-linear-gradient(#66bdff, #0d9eff);
  box-shadow: 0 1px 0 hsla(0,0%,100%,.2) inset,
              0 0 0 1px hsla(0,0%,100%,.1) inset,
              0 1px 0 hsla(210,54%,20%,.03),
              0 0 4px hsla(206,100%,20%,.2);
}

#searchText + #searchSubmit:hover:active {
  box-shadow: 0 1px 1px hsla(211,79%,6%,.1) inset,
              0 0 1px hsla(211,79%,6%,.2) inset;
  -moz-transition-duration: 0ms;
}

#defaultSnippet1,
#defaultSnippet2 {
  display: block;
  min-height: 38px;
  background: 30px center no-repeat;
  padding: 6px 0;
  -moz-padding-start: 79px;
}

body[dir=rtl] #defaultSnippet1,
body[dir=rtl] #defaultSnippet2 {
  background-position: right 30px center;
}

#defaultSnippet1 {
  background-image: url("chrome://browser/content/abouthome/snippet1.png");
}

#defaultSnippet2 {
  background-image: url("chrome://browser/content/abouthome/snippet2.png");
}

#snippets {
  display: inline-block;
  text-align: start;
  margin: 12px 0;
  color: #3c3c3c;
  font-size: 75%;
}

#launcher {
  display: -moz-box;
  -moz-box-align: center;
  -moz-box-pack: center;
  width: 100%;
  background-color: hsla(0,0%,0%,.03);
  border-top: 1px solid hsla(0,0%,0%,.03);
  box-shadow: 0 1px 2px hsla(0,0%,0%,.02) inset,
              0 -1px 0 hsla(0,0%,100%,.25);
}

#launcher:not([session]),
body[narrow] #launcher[session] {
  display: block; /* display separator and restore button on separate lines */
  text-align: center;
  white-space: nowrap; /* prevent navigational buttons from wrapping */
}

.launchButton {
  display: -moz-box;
  -moz-box-orient: vertical;
  margin: 16px 1px;
  padding: 14px 6px;
  min-width: 88px;
  max-width: 176px;
  background: transparent padding-box;
  border: 1px solid transparent;
  border-radius: 2.5px;
  color: #525c66;
  font-size: 75%;
  cursor: pointer;
  -moz-transition-property: background-color, border-color, box-shadow;
  -moz-transition-duration: 150ms;
}

body[narrow] #launcher[session] > .launchButton {
  margin: 4px 1px;
  max-height: 85px;
  vertical-align: top;
  white-space: normal;
}

.launchButton:hover {
  background-color: hsla(211,79%,6%,.03);
  border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.17) hsla(210,54%,20%,.2);
}

.launchButton:hover:active {
  background-image: -moz-linear-gradient(hsla(211,79%,6%,.02), hsla(211,79%,6%,.05));
  border-color: hsla(210,54%,20%,.2) hsla(210,54%,20%,.23) hsla(210,54%,20%,.25);
  box-shadow: 0 1px 1px hsla(211,79%,6%,.05) inset,
              0 0 1px hsla(211,79%,6%,.1) inset;
  -moz-transition-duration: 0ms;
}

#launcher:not([session]) > #restorePreviousSessionSeparator,
#launcher:not([session]) > #restorePreviousSession {
  display: none;
}

#restorePreviousSessionSeparator {
  width: 3px;
  height: 116px;
  margin: 0 10px;
  background-image: -moz-linear-gradient(hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0)),
                    -moz-linear-gradient(hsla(211,79%,6%,0), hsla(211,79%,6%,.2), hsla(211,79%,6%,0)),
                    -moz-linear-gradient(hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0));
  background-position: left top, center, right bottom;
  background-size: 1px auto;
  background-repeat: no-repeat;
}

body[narrow] #restorePreviousSessionSeparator {
  margin: 0 auto;
  width: 512px;
  height: 3px;
  background-image: -moz-linear-gradient(0, hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0)),
                    -moz-linear-gradient(0, hsla(211,79%,6%,0), hsla(211,79%,6%,.2), hsla(211,79%,6%,0)),
                    -moz-linear-gradient(0, hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0));
  background-size: auto 1px;
}

#restorePreviousSession {
  max-width: none;
  font-size: 90%;
}

body[narrow] #restorePreviousSession {
  font-size: 80%;
}

.launchButton::before {
  display: block;
  margin-bottom: 6px;
  line-height: 0; /* remove extra vertical space due to non-zero font-size */
}

#bookmarks::before {
  content: url("chrome://browser/content/abouthome/bookmarks.png");
}

#history::before {
  content: url("chrome://browser/content/abouthome/history.png");
}

#settings::before {
  content: url("chrome://browser/content/abouthome/settings.png");
}

#addons::before {
  content: url("chrome://browser/content/abouthome/addons.png");
}

#downloads::before {
  content: url("chrome://browser/content/abouthome/downloads.png");
}

#sync::before {
  content: url("chrome://browser/content/abouthome/sync.png");
}

#restorePreviousSession::before {
  content: url("chrome://browser/content/abouthome/restore-large.png");
  display: inline-block; /* display on same line as text label */
  vertical-align: middle;
  margin-bottom: 0;
  -moz-margin-end: 8px;
}

body[dir=rtl] #restorePreviousSession::before {
  -moz-transform: scaleX(-1);
}

body[narrow] #restorePreviousSession::before {
  content: url("chrome://browser/content/abouthome/restore.png");
}

#aboutMozilla {
  display: block;
  position: relative; /* pin wordmark to edge of document, not of viewport */
  -moz-box-ordinal-group: 0;
  opacity: .5;
  -moz-transition: opacity 150ms;
}

#aboutMozilla:hover {
  opacity: 1;
}

#aboutMozilla::before {
  content: url("chrome://browser/content/abouthome/mozilla.png");
  display: block;
  position: absolute;
  top: 12px;
  right: 12px;
}
+19 −21
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
 * Contributor(s):
 *   Marco Bonardo <mak77@bonardo.net> (original author)
 *   Mihai Sucan <mihai.sucan@gmail.com>
 *   Frank Yan <fyan@mozilla.com>
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -155,6 +156,9 @@ function onLoad(event)
  document.getElementById("searchText").focus();

  loadSnippets();

  fitToWidth();
  window.addEventListener("resize", fitToWidth);
}


@@ -210,13 +214,17 @@ function loadSnippets()
  let updateURL = localStorage["snippets-update-url"];
  if (updateURL && (!lastUpdate ||
                    Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS)) {
    // Try to update from network.
    let xhr = new XMLHttpRequest();
    try {
      xhr.open("GET", updateURL, true);
    } catch (ex) {
      showSnippets();
      return;
    }
    // Even if fetching should fail we don't want to spam the server, thus
    // set the last update time regardless its results.  Will retry tomorrow.
    localStorage["snippets-last-update"] = Date.now();

    // Try to update from network.
    let xhr = new XMLHttpRequest();
    xhr.open('GET', updateURL, true);
    xhr.onerror = function (event) {
      showSnippets();
    };
@@ -260,7 +268,7 @@ function showSnippets()
  let defaultSnippetsElt = document.getElementById("defaultSnippets");
  let entries = defaultSnippetsElt.querySelectorAll("span");
  // Choose a random snippet.  Assume there is always at least one.
  let randIndex = Math.round(Math.random() * (entries.length - 1));
  let randIndex = Math.floor(Math.random() * entries.length);
  let entry = entries[randIndex];
  // Inject url in the eventual link.
  if (DEFAULT_SNIPPETS_URLS[randIndex]) {
@@ -269,27 +277,17 @@ function showSnippets()
    // up in the translation.
    if (links.length == 1) {
      links[0].href = DEFAULT_SNIPPETS_URLS[randIndex];
      activateSnippetsButtonClick(entry);
    }
  }
  // Move the default snippet to the snippets element.
  snippetsElt.appendChild(entry);
}

/**
 * Searches a single link element in aElt and binds its href to the click
 * action of the snippets button.
 *
 * @param aElt
 *        Element to search the link into.
 */
function activateSnippetsButtonClick(aElt) {
  let links = aElt.getElementsByTagName("a");
  if (links.length == 1) {
    document.getElementById("snippets")
            .addEventListener("click", function(aEvent) {
      if (aEvent.target.nodeName != "a")
        window.location = links[0].href;
    }, false);
function fitToWidth() {
  if (window.scrollMaxX) {
    document.body.setAttribute("narrow", "true");
  } else if (document.body.hasAttribute("narrow")) {
    document.body.removeAttribute("narrow");
    fitToWidth();
  }
}
Loading