_content: Learn page redesign
- redesign header
- moved sections into cards and reordered page
- Hooked up jump link layout but they're not matching functionality of pkg site yet
Video: https://drive.google.com/file/d/1OAGq_566FX2ASC68fmQMDfNk17dtp3jr/view?usp=sharing
Change-Id: I7224840e8316909b98a97cf876813f111621d2a7
Reviewed-on: https://go-review.googlesource.com/c/website/+/445579
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Jamal Carvalho <jamal@golang.org>
Run-TryBot: Jamal Carvalho <jamal@golang.org>
diff --git a/_content/css/styles.css b/_content/css/styles.css
index 23f7f8f..b532ec8 100644
--- a/_content/css/styles.css
+++ b/_content/css/styles.css
@@ -2171,14 +2171,6 @@
.Security-hero {
background-color: var(--color-background-accented);
color: var(--color-text);
- background-image: radial-gradient(
- 60.0625rem 60.0625rem,
- #bfeaf4 50%,
- transparent 50%
- );
- background-position: top -50rem left -9rem;
- background-repeat: no-repeat;
- background-size: 75rem 75rem;
padding: 0 2.25rem 0;
}
[data-theme='dark'] .Learn-hero .BreadcrumbNav-li:not(:last-child):after,
@@ -2200,7 +2192,6 @@
background: url('/images/icons/arrow-forward.svg') no-repeat;
}
}
-.Learn-hero .Container,
.Security-hero .Container {
max-width: 68.125rem;
position: relative;
@@ -2212,17 +2203,20 @@
display: flex;
flex-direction: column-reverse;
}
+.Learn-heroInner {
+ padding-bottom: 3.25rem;
+}
.Learn-heroGopher,
.Security-heroGopher {
display: flex;
- justify-content: flex-end;
+ justify-content: flex-start;
padding-top: 1.25rem;
}
.Learn-heroGopher img,
.Security-heroGopher img {
- height: 13.5625rem;
+ height: 8.25rem;
width: auto;
}
@@ -2247,6 +2241,9 @@
color: var(--color-text);
font-size: 0.875rem;
max-width: 27.1875rem;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5rem;
}
.Learn-heroAction,
@@ -2282,37 +2279,104 @@
.LearnGo-gridContainer,
.Security-gridContainer {
display: flex;
- justify-content: center;
padding: 0rem 0rem 1rem;
}
.Learn-cardList,
.Security-cardList {
- column-gap: 3.313rem;
+ column-gap: 2.813rem;
display: grid;
grid-template-columns: repeat(1, 1fr);
justify-content: space-between;
list-style: none;
padding-left: 0;
- row-gap: 2rem;
+ row-gap: 2.813rem;
+}
+
+.Learn-columns {
+ display: flex;
+ max-width: 78.25rem;
+ margin: auto;
+ padding: 0 1.25rem;
+}
+
+.Learn-columns .Learn-sidebar {
+ display: none;
+ margin-top: 3.75rem;
+ width: 25%;
+ height: 100vh;
+ min-height: 12.5rem;
+ overflow: auto;
+ position: sticky;
+ top: 5%;
+}
+
+.Learn-columns .LearnNav {
+ display: flex;
+ flex-direction: column;
+}
+
+.Learn-columns .LearnNav a {
+ display: flex;
+ align-items: center;
+ margin-bottom: 0.875rem;
+ text-decoration: none;
+}
+
+.Learn-columns .LearnNav a span {
+ margin-left: 0.75rem;
+ font-style: normal;
+ font-weight: 400;
+ font-size: 1rem;
+ line-height: 1.5rem;
+ color: var(--color-text-subtle);
+}
+
+.Learn-columns .LearnNav a svg {
+ visibility: hidden;
+}
+
+.Learn-columns .LearnNav a.active svg {
+ visibility: visible;
+}
+
+.Learn-columns .LearnNav a.active span,
+.Learn-columns .LearnNav a span:hover {
+ color: var(--color-text);
+ font-weight: 500;
}
.Learn-card,
.Security-card {
- height: 23.375rem;
- max-width: 40rem;
+ min-height: 13.25rem;
}
@media only screen and (min-width: 48rem) {
.Learn-cardList,
.Security-cardList {
- grid-template-columns: repeat(2, 1fr);
+ grid-template-columns: repeat(3, 1fr);
+ }
+ .Learn-card {
+ max-width: 15.875rem;
+ }
+ .Learn-heroGopher img,
+ .Security-heroGopher img {
+ height: 13.25rem;
}
}
@media only screen and (min-width: 72.75rem) {
+ .Learn-columns .Learn-sidebar {
+ display: block;
+ }
.Learn-cardList,
.Security-cardList {
- grid-template-columns: repeat(4, 1fr);
+ grid-template-columns: repeat(3, 1fr);
+ }
+ .Learn-heroGopher,
+ .Security-heroGopher {
+ display: flex;
+ justify-content: flex-end;
+ padding-top: 3.25rem;
}
}
@@ -2372,30 +2436,35 @@
.Learn-heroGopher,
.Security-heroGopher {
flex: 1;
- justify-content: center;
- padding-top: 2.625rem;
+ justify-content: flex-end;
+ align-items: center;
}
- .Learn-heroGopher img,
.Security-heroGopher img {
height: 21.0625rem;
}
.Learn-heroAction,
.Security-heroAction {
- height: 4rem;
- width: 16.5625rem;
+ height: 2.5rem;
+ width: 10.25rem;
}
- .Learn-heroAction a,
- .Learn-heroAction a:hover,
- .Learn-heroAction a:visited,
.Security-heroAction a,
.Security-heroAction a:hover,
.Security-heroAction a:visited {
font-size: 1.5rem;
}
+ .Learn-heroAction a,
+ .Learn-heroAction a:hover,
+ .Learn-heroAction a:visited {
+ font-size: 1rem;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1rem;
+ }
+
.Learn-heroAction span,
.Security-heroAction span {
font-size: 1rem;
@@ -2414,7 +2483,8 @@
.Learn-selfPaced,
.Learn-books,
.Learn-inPersonTraining,
-.Learn-meetups {
+.Learn-meetups,
+.Learn-tutorials {
margin-top: 3.75rem;
padding: 0 1.5rem;
}
@@ -2443,7 +2513,9 @@
.Security-sectionHeader {
color: var(--color-text);
display: flex;
- justify-content: center;
+ justify-content: flex-start;
+ align-items: flex-start;
+ flex-direction: column;
}
.Learn-subHeader h2 {
@@ -2452,10 +2524,19 @@
.Learn-learningResourcesHeader h3 {
font-size: 1.5rem;
- font-weight: bold;
+ font-style: normal;
+ font-weight: 400;
line-height: 2.25rem;
}
+.Learn-learningResourcesHeader p {
+ color: var(--color-text-subtle);
+ font-size: 0.875rem;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.375rem;
+}
+
.Learn-selfPaced .Learn-card .Card-content {
justify-content: space-between;
}
@@ -2467,16 +2548,7 @@
height: 7.5625rem;
}
-.Learn-selfPaced .Learn-card {
- height: 20.3125rem;
-}
-
@media only screen and (min-width: 48rem) {
- .Learn-learningResourcesHeader {
- display: flex;
- justify-content: flex-start;
- }
-
.Learn-learningResourcesHeader h2,
.Security-sectionHeader h2 {
font-size: 2.25rem;
@@ -2487,63 +2559,39 @@
.Learn-cardList.Learn-bookList {
grid-template-columns: repeat(1, 1fr);
width: 100%;
+ grid-gap: 0;
}
.Learn-card.Learn-book {
height: auto;
+ max-width: 26.5rem;
}
@media only screen and (min-width: 48rem) {
.Learn-cardList.Learn-bookList {
- grid-template-columns: repeat(3, 1fr);
- }
-
- .Learn-card.Learn-book {
- max-width: 13.125rem;
- }
-}
-
-@media only screen and (min-width: 57.7rem) {
- .Learn-cardList.Learn-bookList {
- grid-template-columns: repeat(4, 1fr);
- }
-}
-
-@media only screen and (min-width: 72.75rem) {
- .Learn-cardList.Learn-bookList {
- grid-template-columns: repeat(5, 1fr);
+ grid-template-columns: repeat(2, 1fr);
}
}
.Learn-inPersonList {
- display: flex;
- flex: 1 0 100%;
- flex-direction: row;
- flex-wrap: wrap;
- justify-content: space-between;
+ display: grid;
list-style: none;
- margin: 1.875rem 0 1.875rem -1rem; /* Offset gutters for the leftmost and top cells in the grid. */
padding-left: 0;
+ grid-template-columns: repeat(1, 1fr);
}
.Learn-inPerson {
- border-bottom: var(--border);
flex: 1 1 31.25rem;
- margin: 0 0 0 1rem; /* Gutter between grid cells. */
- max-width: 31rem;
+ max-width: 36.5rem;
padding-bottom: 1.25rem;
}
-.Learn-inPerson:nth-child(1),
-.Learn-inPerson:nth-child(2) {
- border-top: var(--border);
-}
.Learn-inPersonTitle {
font-size: 1.25rem;
}
.Learn-inPersonBlurb {
color: var(--color-text);
- margin: 0;
+ line-height: 1.75rem;
}
.Learn-events {
@@ -2705,6 +2753,9 @@
.Learn-tileList {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
+ .Learn-inPersonBlurb {
+ margin-right: 10rem;
+ }
}
@media only screen and (min-width: 48rem) {
.Learn-tileList {
@@ -2713,6 +2764,9 @@
.Learn-tileList {
column-gap: 3rem;
}
+ .Learn-inPersonList {
+ grid-template-columns: repeat(2, 1fr);
+ }
}
.Learn-tile {
display: flex;
@@ -3874,14 +3928,21 @@
.Card-contentBody {
color: var(--color-text-subtle);
- flex: auto;
font-size: 0.875rem;
margin-top: 1rem;
}
+.Card-lineClamp {
+ overflow: hidden;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 5;
+}
+
.Card-contentCta {
align-items: center;
display: flex;
+ margin-top: auto;
}
.Card-contentCta span {
@@ -3916,9 +3977,8 @@
}
.Book-inner {
- align-items: flex-start;
display: flex;
- justify-content: space-between;
+ align-items: flex-start;
}
.Book-thumbnail {
@@ -3926,18 +3986,31 @@
}
.Book-thumbnail img {
- width: 100%;
+ width: 6.25rem;
+ height: 7.875rem;
+ border-radius: 0.625rem;
+ filter: drop-shadow(0 0.125rem 0.125rem rgba(200, 200, 200, 0.29458));
}
.Book-content {
- flex: 1;
- margin-left: 1.6875rem;
+ margin-left: 2rem;
+}
+
+.Book-eyebrow {
+ font-style: normal;
+ font-weight: 400;
+ font-size: 0.688rem;
+ letter-spacing: 0.063rem;
+ text-transform: uppercase;
+ color: var(--color-text-subtle);
+ margin-top: 0;
}
.Book-title {
color: var(--color-text);
- font-size: 1.125rem;
- font-weight: 500;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5rem;
margin: 0 0 0.5rem;
}
@@ -3954,20 +4027,11 @@
.Book-cta span {
margin-right: 0.6875rem;
-}
-
-@media only screen and (min-width: 48rem) {
- .Book-inner {
- flex-direction: column;
- }
-
- .Book-thumbnail {
- width: 100%;
- }
-
- .Book-content {
- margin: 1rem 0 0;
- }
+ font-style: normal;
+ font-weight: 400;
+ font-size: 0.875rem;
+ line-height: 1rem;
+ letter-spacing: 0.016rem;
}
#blog h1.small {
diff --git a/_content/js/jumplinks.js b/_content/js/jumplinks.js
new file mode 100644
index 0000000..df4c618
--- /dev/null
+++ b/_content/js/jumplinks.js
@@ -0,0 +1,69 @@
+/**
+ * This is a basic version of the jump links.
+ * New version will follow with parity to package site.
+ */
+(function() {
+ 'use-strict'
+ async function resetNav() {
+ return new Promise((resolve, reject) => {
+ const nav = document.querySelector('.LearnNav');
+ if (!nav) {
+ reject(new Error('.LearnNav element not found.'));
+ }
+ for (let a of Array.from(nav?.children ?? [])) {
+ a.classList.remove('active');
+ }
+ resolve();
+ });
+ }
+ async function setNav() {
+ return new Promise((resolve, reject) => {
+ const nav = document.querySelector('.LearnNav');
+ if (!nav) {
+ reject(new Error('.LearnNav element not found.'));
+ }
+ for (let a of Array.from(nav?.children ?? [])) {
+ if (a.href === location.href) {
+ a.classList.add('active');
+ document.getElementById(location.hash.substring(1))?.scrollIntoView();
+ break;
+ }
+ }
+ resolve();
+ });
+ }
+ function observeSections() {
+ const learnContent = document.querySelector('.Learn-body');
+ if (learnContent && learnContent.children) {
+ const callback = async (payload) => {
+ if (payload && payload.length > 0) {
+ for (p of payload) {
+ if (p.isIntersecting) {
+ const {id} = p.target;
+ const link = document.querySelector(`[href='#${id}']`);
+ await resetNav();
+ link.classList.add('active');
+ break;
+ }
+ }
+ }
+ }
+ // rootMargin is important when multiple sections are in the observable area **on page load**.
+ // they will still be highlighted on scroll because of the root margin.
+ const ob = new IntersectionObserver(callback, {
+ threshold: 0,
+ rootMargin: '0px 0px -50% 0px',
+ });
+ for (section of learnContent.children) {
+ ob.observe(section);
+ }
+ }
+ }
+
+ setNav()
+ .then(observeSections)
+ .catch((error) => {
+ console.error(error);
+ });
+
+})();
diff --git a/_content/js/site.js b/_content/js/site.js
index 52d04a2..0b78891 100644
--- a/_content/js/site.js
+++ b/_content/js/site.js
@@ -372,8 +372,19 @@
}
/**
- * toggleTheme switches the preferred color scheme between auto, light, and
- * dark.
+ * setVersionSpan sets the latest version in any span that has this selector.
+ */
+ async function setVersionSpans() {
+ const spans = document.querySelectorAll('.GoVersionSpan');
+ if (!spans) return;
+ const version = await getLatestVersion();
+ Array.from(spans).forEach(span => {
+ span.textContent = `Download (${version.replace('go', '')})`
+ });
+ }
+
+ /**
+ * toggleTheme switches the preferred color scheme between auto, light, and dark.
*/
function toggleTheme() {
let nextTheme = 'dark';
@@ -399,5 +410,6 @@
registerSolutionsTabs();
setDownloadLinks();
setThemeButtons();
+ setVersionSpans();
});
})();
diff --git a/_content/learn/books.yaml b/_content/learn/books.yaml
index c46a374..981a59c 100644
--- a/_content/learn/books.yaml
+++ b/_content/learn/books.yaml
@@ -1,25 +1,25 @@
- title: The Go Programming Language
description: Alan A. A. Donovan, Brian W. Kernighan
- cta: View
+ eyebrow: PDF
url: https://www.gopl.io/
thumbnail: /images/learn/go-programming-language-book.png
- title: Get Programming with Go
description: Nathan Youngman, Roger Peppé
- cta: Manning.com
+ eyebrow: Manning.com
url: https://www.manning.com/books/get-programming-with-go
thumbnail: /images/learn/get-programming-with-go.jpeg
- title: Go Programming Blueprints
description: This is the official source code repository for the book.
- cta: View on GitHub
+ eyebrow: GitHub
url: https://github.com/matryer/goblueprints
thumbnail: /images/learn/go-programming-blueprints.png
- title: Introducing Go
description: Caleb Doxsey
- cta: View on O’Reilly.com
+ eyebrow: O'Reilly.com
url: http://shop.oreilly.com/product/0636920046516.do
thumbnail: /images/learn/introducing-go-book.png
- title: Concurrency in Go
description: Katherine Cox-Buday
- cta: View on O’Reilly.com
+ eyebrow: O'Reilly.com
url: https://www.oreilly.com/library/view/concurrency-in-go/9781491941294/
thumbnail: /images/learn/concurrency-in-go.png
diff --git a/_content/learn/cloud.yaml b/_content/learn/cloud.yaml
index 81491ce..3bbf12b 100644
--- a/_content/learn/cloud.yaml
+++ b/_content/learn/cloud.yaml
@@ -1,25 +1,21 @@
- title: Deploy Go Apps on Google Cloud Serverless Platforms
url: https://google.qwiklabs.com/focuses/10532?parent=catalog
- thumbnail: /images/learn/qwiklabs.png
length: 1h 10m
credits: 5
rating: 4.25
- title: Use Go Code to Work with Google Cloud Data Sources
url: https://google.qwiklabs.com/focuses/10531?parent=catalog
- thumbnail: /images/learn/qwiklabs.png
length: 1h 10m
credits: 5
rating: 4.25
- title: Getting Started with Go on App Engine
url: https://google.qwiklabs.com/focuses/2754?catalog_rank=%7B%22rank%22%3A1%2C%22num_filters%22%3A0%2C%22has_search%22%3Atrue%7D&parent=catalog&search_id=5407947
- thumbnail: /images/learn/qwiklabs.png
length: 20m
credits: 1
rating: 4.15
- title: HTTP Google Cloud Functions in Go
url: https://google.qwiklabs.com/focuses/5171?catalog_rank=%7B%22rank%22%3A1%2C%22num_filters%22%3A0%2C%22has_search%22%3Atrue%7D&parent=catalog&search_id=5407953
- thumbnail: /images/learn/qwiklabs.png
length: 40m
credits: 5
rating: 4.5
diff --git a/_content/learn/guided.yaml b/_content/learn/guided.yaml
index 7af9c2b..b52c9d7 100644
--- a/_content/learn/guided.yaml
+++ b/_content/learn/guided.yaml
@@ -2,24 +2,14 @@
content: Go Web Examples provides easy to understand code snippets on
how to use Go for web development.
url: https://gowebexamples.com
- thumbnail: /images/learn/web-dev.png
cta: Learn more
- title: CLIs
content: This workshop will walk you through building a CLI app with Go,
introducing you to basic Go principles and CLI frameworks along the way.
url: https://spf13.com/presentation/building-an-awesome-cli-app-in-go-oscon/
- thumbnail: /images/learn/clis.png
cta: Learn more
- title: New to coding?
content: Get started with this introductory course covering basic
programming principles and Go fundamentals.
url: https://www.youtube.com/watch?v=Q0sKAMal4WQ
- thumbnail: /images/learn/edureka.png
- cta: Learn more
- - title: Go by example
- content: <i>Go by Example</i> is a hands-on introduction to Go using annotated
- example programs. It’s a great starting point to use when tackling any Go
- project.
- url: https://gobyexample.com/
- thumbnail: /images/learn/gobyexample.png
cta: Learn more
diff --git a/_content/learn/index.md b/_content/learn/index.md
index 8717bcb..b4b1c01 100644
--- a/_content/learn/index.md
+++ b/_content/learn/index.md
@@ -27,143 +27,163 @@
target="_blank"
rel="noopener"
>
- Download
+ <span class="GoVersionSpan">Download</span>
</a>
</div>
</div>
- <p>
- Download packages for
- <a class="js-downloadWin">Windows 64-bit</a>,
- <a class="js-downloadMac">macOS</a>,
- <a class="js-downloadLinux">Linux</a>, and
- <a href="/dl/">more</a>.
- </p>
</div>
<div class="Learn-heroGopher">
<img src="/images/gophers/motorcycle.svg" alt="Go Gopher riding a motorcycle">
</div>
</div>
- <div class="LearnGo-gridContainer">
- <ul class="Learn-quickstarts Learn-cardList">
+ </div>
+</section>
+
+<div class="Learn-columns">
+ <aside class="Learn-sidebar">
+ <nav class="LearnNav">
+ <a class="active" href="#selected-tutorials">
+ <svg width="5" height="5" viewBox="0 0 5 5" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="2.5" cy="2.5" r="2.5" fill="#007F9F"/></svg>
+ <span>Selected tutorials</span>
+ </a>
+ <a href="#guided-learning-journeys">
+ <svg width="5" height="5" viewBox="0 0 5 5" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="2.5" cy="2.5" r="2.5" fill="#007F9F"/></svg>
+ <span>Guided journeys</span>
+ </a>
+ <a href="#self-paced-labs">
+ <svg width="5" height="5" viewBox="0 0 5 5" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="2.5" cy="2.5" r="2.5" fill="#007F9F"/></svg>
+ <span>Qwiklabs</span>
+ </a>
+ <a href="#tutorials">
+ <svg width="5" height="5" viewBox="0 0 5 5" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="2.5" cy="2.5" r="2.5" fill="#007F9F"/></svg>
+ <span>Tutorials</span>
+ </a>
+ <a href="#training">
+ <svg width="5" height="5" viewBox="0 0 5 5" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="2.5" cy="2.5" r="2.5" fill="#007F9F"/></svg>
+ <span>Training</span>
+ </a>
+ <a href="#featured-books">
+ <svg width="5" height="5" viewBox="0 0 5 5" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="2.5" cy="2.5" r="2.5" fill="#007F9F"/></svg>
+ <span>Books</span>
+ </a>
+ </nav>
+ </aside>
+ <div class="Learn-body">
+ <section id="selected-tutorials" class="Learn-tutorials">
+ <div class="Container">
+ <div class="Learn-learningResourcesHeader">
+ <h3>Selected tutorials</h3>
+ <p>New to Go and don't know where to start?</p>
+ </div>
+ <div class="LearnGo-gridContainer">
+ <ul class="Learn-cardList">
{{- range first 3 (data "quickstart.yaml")}}
- <li class="Learn-quickstart Learn-card">
- {{- template "learn-card" .}}
- </li>
+ <li class="Learn-card">
+ {{- template "learn-card" . }}
+ </li>
{{- end}}
- </ul>
+ </ul>
+ </div>
</div>
- </div>
-</section>
+ </section>
-<section class="Learn-learningResources">
- <h2>Learning Resources</h2>
-</section>
-
-<section id="guided-learning-journeys" class="Learn-guided">
- <div class="Container">
- <div class="Learn-learningResourcesHeader">
- <h3>Guided learning journeys</h3>
+ <section id="guided-learning-journeys" class="Learn-guided">
+ <div class="Container">
+ <div class="Learn-learningResourcesHeader">
+ <h3>Guided learning journeys</h3>
+ <p>Got the basics and want to learn more?</p>
+ </div>
+ <div class="LearnGo-gridContainer">
+ <ul class="Learn-cardList">
+ {{- range first 4 (data "guided.yaml")}}
+ <li class="Learn-card">
+ {{- template "learn-card" .}}
+ </li>
+ {{- end}}
+ </ul>
+ </div>
</div>
- <div class="LearnGo-gridContainer">
- <ul class="Learn-cardList">
- {{- range first 4 (data "guided.yaml")}}
+ </section>
+
+ <section id="self-paced-labs" class="Learn-selfPaced">
+ <div class="Container">
+ <div class="Learn-learningResourcesHeader">
+ <h3>Qwiklabs</h3>
+ <p>Guided tours of Go programs</p>
+ </div>
+ <div class="LearnGo-gridContainer">
+ <ul class="Learn-cardList">
+ {{- range first 3 (data "cloud.yaml")}}
<li class="Learn-card">
- {{- template "learn-card" .}}
+ {{- template "learn-self-paced-card" .}}
</li>
- {{- end}}
- </ul>
- </div>
- </div>
-</section>
-
-<section id="online-learning" class="Learn-online">
- <div class="Container">
- <div class="Learn-learningResourcesHeader">
- <h3>Online learning</h3>
- </div>
- <div class="LearnGo-gridContainer">
- <ul class="Learn-cardList">
- {{- range first 4 (data "courses.yaml") }}
- <li class="Learn-card">
- {{- template "learn-card" .}}
</li>
- {{- end}}
- </ul>
+ {{- end}}
+ </ul>
+ </div>
</div>
- </div>
-</section>
+ </section>
-<section id="self-paced-labs" class="Learn-selfPaced">
- <div class="Container">
- <div class="Learn-learningResourcesHeader">
- <h3>Google Cloud Self-Paced Labs</h3>
+ <section id="tutorials" class="Learn-tutorials">
+ <div class="Container">
+ <div class="Learn-learningResourcesHeader">
+ <h3>Tutorials</h3>
+ <p></p>
+ </div>
+ <div class="LearnGo-gridContainer">
+ <ul class="Learn-cardList">
+ {{- range first 3 (data "tutorials.yaml") }}
+ <li class="Learn-card">
+ {{- template "learn-card" .}}
+ </li>
+ {{- end}}
+ </ul>
+ </div>
</div>
- <div class="LearnGo-gridContainer">
- <ul class="Learn-cardList">
- {{- range first 4 (data "cloud.yaml")}}
- <li class="Learn-card">
- {{- template "learn-self-paced-card" .}}
- </li>
- </li>
- {{- end}}
- </ul>
- </div>
- </div>
-</section>
+ </section>
-<section id="tutorials" class="Learn-tutorials">
- <div class="Container">
- <div class="Learn-learningResourcesHeader">
- <h3>Tutorials</h3>
- </div>
- <div class="LearnGo-gridContainer">
- <ul class="Learn-cardList">
- {{- range first 4 (data "tutorials.yaml") }}
- <li class="Learn-card">
- {{- template "learn-card" .}}
+ <section id="training" class="Learn-inPersonTraining">
+ <div class="Container">
+ <div class="Learn-learningResourcesHeader">
+ <h3>Training</h3>
+ <p>Guided tours of Go programs</p>
+ </div>
+ <div class="LearnGo-gridContainer">
+ <ul class="Learn-inPersonList">
+ {{- range first 4 (data "training.yaml")}}
+ <li class="Learn-inPerson">
+ <p class="Learn-inPersonTitle">
+ <a href="{{.url}}">{{.title}} </a>
+ </p>
+ <p class="Learn-inPersonBlurb">{{.blurb}}</p>
</li>
- {{- end}}
- </ul>
+ {{- end}}
+ </ul>
+ </div>
</div>
- </div>
-</section>
+ </section>
-<section id="featured-books" class="Learn-books">
- <div class="Container">
- <div class="Learn-learningResourcesHeader">
- <h3>Featured books</h3>
+ <section id="featured-books" class="Learn-books">
+ <div class="Container">
+ <div class="Learn-learningResourcesHeader">
+ <h3>Books</h3>
+ <p></p>
+ </div>
+ <div class="LearnGo-gridContainer">
+ <ul class="Learn-cardList Learn-bookList">
+ {{- range first 5 (data "books.yaml")}}
+ <li class="Learn-card Learn-book">
+ {{template "learn-book" .}}
+ </li>
+ {{- end}}
+ </ul>
+ </div>
</div>
- <div class="LearnGo-gridContainer">
- <ul class="Learn-cardList Learn-bookList">
- {{- range first 5 (data "books.yaml")}}
- <li class="Learn-card Learn-book">
- {{template "learn-book" .}}
- </li>
- {{- end}}
- </ul>
- </div>
+ </section>
</div>
-</section>
+</div>
-<section class="Learn-inPersonTraining">
- <div class="Container">
- <div class="Learn-learningResourcesHeader">
- <h3>In-person training</h3>
- </div>
- <div class="LearnGo-gridContainer">
- <ul class="Learn-inPersonList">
- {{- range first 4 (data "training.yaml")}}
- <li class="Learn-inPerson">
- <p class="Learn-inPersonTitle">
- <a href="{{.url}}">{{.title}} </a>
- </p>
- <p class="Learn-inPersonBlurb">{{.blurb}}</p>
- </li>
- {{- end}}
- </ul>
- </div>
- </div>
-</section>
+<script async src="/js/jumplinks.js"></script>
{{define "learn-card"}}
<div class="Card">
@@ -187,24 +207,10 @@
{{- end}}
<div class="Card-content">
<div class="Card-contentTitle">{{.title}}</div>
- <p class="Card-contentBody">{{raw .content}}</p>
+ <p class="Card-contentBody Card-lineClamp">{{raw .content}}</p>
<div class="Card-contentCta">
<a href="{{.url}}" target="_blank">
<span>{{.cta}}</span>
- <svg
- xmlns="http://www.w3.org/2000/svg"
- width="16"
- height="16"
- fill="none"
- viewBox="0 0 24 24"
- >
- <path
- fill="#007D9C"
- fill-rule="evenodd"
- d="M5 5v14h14v-7h2v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5c0-1.1.9-2 2-2h7v2H5zm9 0V3h7v7h-2V6.4l-9.8 9.8-1.4-1.4L17.6 5H14z"
- clip-rule="evenodd"
- />
- </svg>
</a>
</div>
</div>
@@ -249,24 +255,11 @@
</div>
{{- end}}
<div class="Book-content">
+ <p class="Book-eyebrow">{{.eyebrow}}</p>
<p class="Book-title">{{.title}}</p>
<p class="Book-description">{{.description}}</p>
<div class="Book-cta">
- <span>{{.cta}}</span>
- <svg
- xmlns="http://www.w3.org/2000/svg"
- width="16"
- height="16"
- fill="none"
- viewBox="0 0 24 24"
- >
- <path
- fill="#007D9C"
- fill-rule="evenodd"
- d="M5 5v14h14v-7h2v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5c0-1.1.9-2 2-2h7v2H5zm9 0V3h7v7h-2V6.4l-9.8 9.8-1.4-1.4L17.6 5H14z"
- clip-rule="evenodd"
- />
- </svg>
+ <span>view book</span>
</div>
</div>
</div>
diff --git a/_content/learn/quickstart.yaml b/_content/learn/quickstart.yaml
index 928be0b..dd5c3f2 100644
--- a/_content/learn/quickstart.yaml
+++ b/_content/learn/quickstart.yaml
@@ -8,8 +8,9 @@
concludes with a few exercises so you can practice what you've learned.
cta: Take a tour
url: /tour/
- - title: Playground
- content: The Playground allows anyone with a web browser to write Go code
- that we immediately compile, link, and run on our servers.
- cta: Go to playground
- url: /play
+ - title: Go by example
+ content: <i>Go by Example</i> is a hands-on introduction to Go using annotated
+ example programs. It’s a great starting point to use when tackling any Go
+ project.
+ url: https://gobyexample.com/
+ cta: View examples