Remove showcase, obliterate landing stuff
This commit is contained in:
parent
8cd968a495
commit
3ff6ba6563
|
@ -40,10 +40,6 @@ func TestHomepage(t *testing.T) {
|
|||
AssertSubdomain(t, hero.BuildHomepage(), "hero")
|
||||
}
|
||||
|
||||
func TestShowcase(t *testing.T) {
|
||||
AssertRegexMatch(t, BuildShowcase(), RegexShowcase, nil)
|
||||
}
|
||||
|
||||
func TestWhenIsIt(t *testing.T) {
|
||||
AssertRegexMatch(t, BuildWhenIsIt(), RegexWhenIsIt, nil)
|
||||
}
|
||||
|
@ -96,8 +92,6 @@ func TestStaticPages(t *testing.T) {
|
|||
AssertRegexMatch(t, BuildManifesto(), RegexManifesto, nil)
|
||||
AssertRegexMatch(t, BuildAbout(), RegexAbout, nil)
|
||||
AssertRegexMatch(t, BuildFoundation(), RegexFoundation, nil)
|
||||
AssertRegexMatch(t, BuildStaffRole("test"), RegexStaffRole, nil)
|
||||
AssertRegexMatch(t, BuildStaffRolesIndex(), RegexStaffRolesIndex, nil)
|
||||
AssertRegexMatch(t, BuildCommunicationGuidelines(), RegexCommunicationGuidelines, nil)
|
||||
AssertRegexMatch(t, BuildContactPage(), RegexContactPage, nil)
|
||||
AssertRegexMatch(t, BuildMonthlyUpdatePolicy(), RegexMonthlyUpdatePolicy, nil)
|
||||
|
@ -459,7 +453,7 @@ func TestTimeMachineFormDone(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNewsletterSignup(t *testing.T) {
|
||||
AssertRegexMatch(t, BuildAPINewsletterSignup(), RegexNewsletterSignup, nil)
|
||||
AssertRegexMatch(t, BuildAPINewsletterSignup(), RegexAPINewsletterSignup, nil)
|
||||
AssertSubdomain(t, BuildAPINewsletterSignup(), "")
|
||||
}
|
||||
|
||||
|
|
|
@ -28,13 +28,6 @@ func (c *UrlContext) BuildHomepage() string {
|
|||
return c.Url("/", nil)
|
||||
}
|
||||
|
||||
var RegexShowcase = regexp.MustCompile("^/showcase$")
|
||||
|
||||
func BuildShowcase() string {
|
||||
defer CatchPanic()
|
||||
return Url("/showcase", nil)
|
||||
}
|
||||
|
||||
var RegexWhenIsIt = regexp.MustCompile("^/whenisit$")
|
||||
|
||||
func BuildWhenIsIt() string {
|
||||
|
|
|
@ -1,48 +0,0 @@
|
|||
<script src="{{ static "js/showcase.js" }}"></script>
|
||||
|
||||
<template id="showcase_item">
|
||||
<div data-tmpl="container" class="showcase-item ba b--theme flex-shrink-0 bg-dark-gray hide-child relative overflow-hidden pointer">
|
||||
<div data-tmpl="thumbnail" class="absolute absolute--fill z-0 flex justify-start items-center bg-left cover"></div>
|
||||
<div class="overlay absolute absolute--fill z-1 child">
|
||||
<div class="gradient relative">
|
||||
<div class="user-info flex pa2 white f7 lh-title items-center">
|
||||
<div data-tmpl="avatar" class="br-100 w2 h2 cover flex-shrink-0"></div>
|
||||
<div class="flex-grow-1 flex flex-column pl1">
|
||||
<div data-tmpl="username">Unknown User</div>
|
||||
<div data-tmpl="when" class="i f8">Unknown Time</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="timeline_modal">
|
||||
<div data-tmpl="overlay" class="timeline-modal fixed absolute--fill bg-black-80 z-999 flex flex-column justify-center items-center">
|
||||
<div data-tmpl="container" class="container timeline-item relative flex-shrink-0 shadow-1 flex flex-column items-stretch w-100 mh0 mh3-ns br2-ns overflow-hidden">
|
||||
<div data-tmpl="asset_container" class="bg-dark-gray flex justify-center"></div>
|
||||
<div class="bg--content pa3 overflow-y-auto">
|
||||
<div class="timeline-user-info mb2 flex items-center">
|
||||
<img class="avatar lite mr2" data-tmpl="avatar"/>
|
||||
<a class="user" data-tmpl="userLink"></a>
|
||||
<a data-tmpl="date" class="datetime tr" style="flex: 1 1 auto;"></a>
|
||||
</div>
|
||||
<div class="overflow-auto" data-tmpl="description">
|
||||
Unknown description
|
||||
</div>
|
||||
<div data-tmpl="projects" class="pt2 flex g2"></div>
|
||||
<div class="i f7 pt2">
|
||||
<a data-tmpl="discord_link" target="_blank">View original message on Discord</a>
|
||||
</div>
|
||||
</div>
|
||||
<div data-tmpl="close" class="absolute right-0 top-0 w2 h2 flex justify-center items-center bg-black-80 white br-100 ma1 pointer svgicon svgicon-nofix">{{ svg "close" }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="project_link">
|
||||
<a data-tmpl="root" class="snippet-project flex flex-row items-center bg-theme-dimmer ph2 pv1 br2">
|
||||
<img data-tmpl="logo" class="db mr1 br1 h1-5" />
|
||||
<div data-tmpl="name"></div>
|
||||
</a>
|
||||
</template>
|
|
@ -1,423 +1,13 @@
|
|||
{{ template "base.html" . }}
|
||||
{{ template "base-2024.html" . }}
|
||||
|
||||
{{ define "extrahead" }}
|
||||
<script src="{{ static "js/templates.js" }}"></script>
|
||||
<style>
|
||||
.landing-layout {
|
||||
display: grid;
|
||||
gap: var(--spacing-medium);
|
||||
}
|
||||
|
||||
.landing-layout > * {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 60em) {
|
||||
.landing-layout {
|
||||
grid-template-columns: 1fr;
|
||||
grid-auto-columns: 1fr;
|
||||
}
|
||||
|
||||
.landing-layout > * {
|
||||
grid-column: 1 / 2;
|
||||
}
|
||||
|
||||
.landing-layout > .landing-right {
|
||||
grid-column: 2 / 3;
|
||||
grid-row: 1 / 20; /* increase this number if somehow you ever add that much garbage to the home page :) */
|
||||
}
|
||||
}
|
||||
</style>
|
||||
{{ end }}
|
||||
|
||||
{{ define "content" }}
|
||||
|
||||
{{/*
|
||||
<div class="mb3 ph3 ph0-ns">
|
||||
<style>
|
||||
#hms-banner {
|
||||
height: 10rem;
|
||||
background-color: #0b0243;
|
||||
color: white !important;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#hms-banner::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-image: url('{{ static "hms/banner.jpg" }}');
|
||||
background-size: auto 100%;
|
||||
z-index: 0;
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
#hms-banner h3 {
|
||||
font-family: 'MohaveHMN', sans-serif;
|
||||
font-weight: normal;
|
||||
font-size: 2.6rem;
|
||||
line-height: 0.8;
|
||||
margin: 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#hms-details {
|
||||
font-family: 'MohaveHMN', sans-serif;
|
||||
font-variant: small-caps;
|
||||
font-size: 1.3rem;
|
||||
line-height: 0.8;
|
||||
margin-top: 0.6rem;
|
||||
letter-spacing: 0.02rem;
|
||||
}
|
||||
|
||||
#hms-learn-more {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 30rem) {
|
||||
#hms-banner {
|
||||
height: 12rem;
|
||||
text-align: left;
|
||||
color: #0b0243 !important;
|
||||
}
|
||||
|
||||
#hms-banner::before {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#hms-title-container {
|
||||
padding-left: 13.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 60em) {
|
||||
#hms-banner {
|
||||
height: 15rem;
|
||||
text-align: left;
|
||||
color: #0b0243 !important;
|
||||
}
|
||||
|
||||
#hms-title-container {
|
||||
padding-left: 16rem;
|
||||
}
|
||||
|
||||
#hms-banner h3 {
|
||||
font-size: 3rem;
|
||||
}
|
||||
|
||||
#hms-details {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<a id="hms-banner" class="pv3 ph3 ph4-l br3 flex flex-column flex-row-ns items-center" href="https://guide.handmade-seattle.com/c/2022/" target="_blank">
|
||||
<div id="hms-title-container" class="flex flex-column pl3-m pl4-l pv3 pv0-ns z-1">
|
||||
<h3 id="hms-title">Handmade Seattle</h3>
|
||||
<div id="hms-details">November 16 - 18. In person and online.</div>
|
||||
</div>
|
||||
<div class="flex-grow-1"></div>
|
||||
<div id="hms-learn-more" class="z-1">
|
||||
{{ if gt .HMSDaysUntilEnd 0 }}
|
||||
{{ if eq .HMSDaysUntilStart 0 }}
|
||||
Watch live
|
||||
{{ else }}
|
||||
Get tickets
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
Catch up
|
||||
{{ end }}
|
||||
<div class="dib svgicon">{{ svg "chevron-right" }}</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
*/}}
|
||||
|
||||
<div class="mb3 ph3 ph0-ns">
|
||||
<style>
|
||||
#cities-banner {
|
||||
background: url("{{ static "cities/banner.png" }}");
|
||||
background-repeat: no-repeat;
|
||||
color: white !important;
|
||||
text-align: center;
|
||||
background-size: contain;
|
||||
background-position: bottom;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
#cities-banner h3 {
|
||||
font-family: 'MohaveHMN', sans-serif;
|
||||
font-weight: normal;
|
||||
font-size: 2.2rem;
|
||||
line-height: 0.8;
|
||||
margin: 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.cities-details {
|
||||
font-family: 'MohaveHMN', sans-serif;
|
||||
font-variant: small-caps;
|
||||
font-size: 1.2rem;
|
||||
line-height: 0.8;
|
||||
margin-top: 0.6rem;
|
||||
letter-spacing: 0.02rem;
|
||||
}
|
||||
|
||||
#cities-learn-more {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
#cities-title-container{
|
||||
padding-left: 8.5rem;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 30rem) {
|
||||
#cities-banner {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#cities-title-container {
|
||||
padding-top: 0.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 960px) {
|
||||
#cities-title-container {
|
||||
padding-left: 7.5rem;
|
||||
}
|
||||
|
||||
#cities-banner{
|
||||
background-size: 200%;
|
||||
background-position: 0 100%;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width: 560px) {
|
||||
#cities-banner {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#cities-title-container {
|
||||
padding-top: 0.2rem;
|
||||
padding-left: 0;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
<a id="cities-banner" class="pv3 ph3 ph4-l br3 flex flex-column flex-row-ns items-center" href="https://handmadecities.com/tickets">
|
||||
<div id="cities-title-container" class="flex flex-column pl3-m pl4-l pv3 pv0-ns">
|
||||
<h3 id="cities-title">Handmade cities</h3>
|
||||
<div class="cities-details">
|
||||
Boston - Aug 9-10 2024.
|
||||
{{ if gt .HMBostonDaysUntilEnd 0 }}
|
||||
{{ if eq .HMBostonDaysUntilStart 0 }}
|
||||
<b>Happening now.</b>
|
||||
{{ else if eq .HMBostonDaysUntilStart 1 }}
|
||||
<b>Starting tomorrow.</b>
|
||||
{{ else if lt .HMBostonDaysUntilStart 31 }}
|
||||
<b>In {{ .HMBostonDaysUntilStart }} days.</b>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
<div class="cities-details">
|
||||
Seattle - Nov 20-22 2024.
|
||||
{{ if gt .HMSDaysUntilEnd 0 }}
|
||||
{{ if eq .HMSDaysUntilStart 0 }}
|
||||
<b>Happening now.</b>
|
||||
{{ else if eq .HMSDaysUntilStart 1 }}
|
||||
<b>Starting tomorrow.</b>
|
||||
{{ else if lt .HMSDaysUntilStart 31 }}
|
||||
<b>In {{ .HMSDaysUntilStart }} days.</b>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="flex-grow-1"></div>
|
||||
<div id="cities-learn-more">
|
||||
Tickets available now
|
||||
<div class="dib svgicon">{{ svg "chevron-right" }}</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="mb3 ph3 ph0-ns">
|
||||
<style>
|
||||
#jam-banner {
|
||||
background: linear-gradient(to bottom right, #003c83, #019AD2);
|
||||
color: white !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#jam-banner .jam-logo {
|
||||
height: 7.25rem;
|
||||
}
|
||||
|
||||
#jam-banner h3 {
|
||||
font-family: 'Inter', sans-serif;
|
||||
font-weight: 700;
|
||||
font-size: 2.31rem;
|
||||
/* line-height: 0.8; */
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#jam-title-container {
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
#jam-details {
|
||||
font-family: 'Inter', sans-serif;
|
||||
font-size: 1.2rem;
|
||||
/* line-height: 0.8; */
|
||||
margin-top: 0.2rem;
|
||||
}
|
||||
|
||||
#jam-learn-more {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 30rem) {
|
||||
#jam-banner {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#jam-banner h3 {
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
|
||||
#jam-banner .jam-logo {
|
||||
height: 5.25rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<a id="jam-banner" class="pv3 ph3 ph4-l br3 flex flex-column flex-row-ns items-center" href="{{ .JamUrl }}">
|
||||
<img class="jam-logo" src="{{ static "learningjam2024/logo.svg" }}">
|
||||
<div id="jam-title-container" class="flex flex-column pl3-m pl4-l pv3 pv0-ns">
|
||||
<h3 id="jam-title">Learning Jam</h3>
|
||||
<div id="jam-details">
|
||||
<div class="db dn-ns">
|
||||
<div>
|
||||
March 15-17. March 22-24.
|
||||
</div>
|
||||
<div>
|
||||
{{ if gt .JamDaysUntilEnd 0 }}
|
||||
{{ if eq .JamDaysUntilStart 0 }}
|
||||
<b>Happening now.</b>
|
||||
{{ else if eq .JamDaysUntilStart 1 }}
|
||||
<b>Starting tomorrow.</b>
|
||||
{{ else }}
|
||||
<b>In {{ .JamDaysUntilStart }} days.</b>
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
<b>See the results.</b>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="dn db-ns">
|
||||
<div>
|
||||
March 15-17.
|
||||
</div>
|
||||
<div>
|
||||
March 22-24.
|
||||
{{ if gt .JamDaysUntilEnd 0 }}
|
||||
{{ if eq .JamDaysUntilStart 0 }}
|
||||
<b>Happening now.</b>
|
||||
{{ else if eq .JamDaysUntilStart 1 }}
|
||||
<b>Starting tomorrow.</b>
|
||||
{{ else }}
|
||||
<b>In {{ .JamDaysUntilStart }} days.</b>
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
<b>See the results.</b>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-grow-1"></div>
|
||||
<div id="jam-learn-more">
|
||||
Learn more
|
||||
<div class="dib svgicon">{{ svg "chevron-right" }}</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{/*
|
||||
<div class="mb3 ph3 ph0-ns">
|
||||
<style>
|
||||
#jam-banner {
|
||||
background: linear-gradient(174deg, #23CE76, #299CE0);
|
||||
color: white !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#jam-banner h3 {
|
||||
font-family: 'MohaveHMN', sans-serif;
|
||||
font-weight: normal;
|
||||
font-size: 2.2rem;
|
||||
line-height: 0.8;
|
||||
margin: 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#jam-details {
|
||||
font-family: 'MohaveHMN', sans-serif;
|
||||
font-variant: small-caps;
|
||||
font-size: 1.2rem;
|
||||
line-height: 0.8;
|
||||
margin-top: 0.6rem;
|
||||
letter-spacing: 0.02rem;
|
||||
}
|
||||
|
||||
#jam-learn-more {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 30rem) {
|
||||
#jam-banner {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#jam-title-container {
|
||||
padding-top: 0.2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<a id="jam-banner" class="pv3 ph3 ph4-l br3 flex flex-column flex-row-ns items-center" href="{{ .JamUrl }}">
|
||||
<img class="h3" src="{{ static "wheeljam2023/logo.svg" }}">
|
||||
<div id="jam-title-container" class="flex flex-column pl3-m pl4-l pv3 pv0-ns">
|
||||
<h3 id="jam-title">Wheel Reinvention Jam</h3>
|
||||
<div id="jam-details">
|
||||
September 25 - October 1.
|
||||
{{ if gt .JamDaysUntilEnd 0 }}
|
||||
{{ if eq .JamDaysUntilStart 0 }}
|
||||
<b>Happening now.</b>
|
||||
{{ else if eq .JamDaysUntilStart 1 }}
|
||||
<b>Starting tomorrow.</b>
|
||||
{{ else }}
|
||||
<b>In {{ .JamDaysUntilStart }} days.</b>
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
<b>See the results.</b>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-grow-1"></div>
|
||||
<div id="jam-learn-more">
|
||||
Learn more
|
||||
<div class="dib svgicon">{{ svg "chevron-right" }}</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
*/}}
|
||||
|
||||
{{ if not .User }}
|
||||
<!--
|
||||
<div class="mb3 ph3 ph0-ns">
|
||||
<style>
|
||||
#welcome {
|
||||
|
@ -488,66 +78,9 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
{{ end }}
|
||||
|
||||
<div class="landing-layout ph3 ph0-ns">
|
||||
{{/*
|
||||
The order of the grid children should be as desired on mobile, then adapted to larger
|
||||
sizes using CSS grid properties.
|
||||
*/}}
|
||||
wowoaohaoh
|
||||
|
||||
{{ with .NewsPost }}
|
||||
<div>
|
||||
<h2>Latest News</h2>
|
||||
{{ template "timeline_item.html" . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="landing-right">
|
||||
<h2>Around the Network</h2>
|
||||
<div class="optionbar mb2">
|
||||
<div class="options">
|
||||
<a class="button" href="{{ .AtomFeedUrl }}"><span class="icon big pr1">4</span> RSS Feed</a>
|
||||
{{ if .User }}
|
||||
<form method="POST" action="{{ .MarkAllReadUrl }}">
|
||||
{{ csrftoken .Session }}
|
||||
<button type="submit"><span class="big pr1">✓</span> Mark all posts on site as read</button>
|
||||
</form>
|
||||
{{ end }}
|
||||
</div>
|
||||
<div class="options">
|
||||
{{ template "pagination.html" .Pagination }}
|
||||
</div>
|
||||
</div>
|
||||
{{ range .TimelineItems }}
|
||||
{{ template "timeline_item.html" . }}
|
||||
{{ end }}
|
||||
<div class="optionbar bottom mt2">
|
||||
<div class="options"></div>
|
||||
<div class="options">
|
||||
{{ template "pagination.html" .Pagination }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ if .ShowcaseTimelineJson }}
|
||||
<div>
|
||||
{{ template "showcase_templates.html" }}
|
||||
<div>
|
||||
<h2>Community Showcase</h2>
|
||||
<div class="bg--card pa3 br3">
|
||||
<div class="mb3">
|
||||
This is a selection of recent work done by community members. Want to participate? <a href="https://discord.gg/hmn" target="_blank">Join us on Discord.</a>
|
||||
</div>
|
||||
<div id="showcase-container"></div>
|
||||
<div>
|
||||
<a class="db w-100 tc pa2" href="{{ .ShowcaseUrl }}">View all »</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
const showcaseItems = JSON.parse("{{ .ShowcaseTimelineJson }}");
|
||||
initShowcaseContainer(document.querySelector('#showcase-container'), showcaseItems, 200);
|
||||
</script>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
|
|
@ -180,30 +180,6 @@ func AtomFeed(c *RequestContext) ResponseData {
|
|||
updated = feedData.Projects[0].DateApproved
|
||||
}
|
||||
feedData.Updated = updated
|
||||
case "showcase":
|
||||
feedData.Title = "Showcase | Site-wide | Handmade Network"
|
||||
feedData.Subtitle = feedData.Title
|
||||
feedData.FeedType = FeedTypeShowcase
|
||||
feedData.FeedID = FeedIDShowcase
|
||||
feedData.AtomFeedUrl = hmnurl.BuildAtomFeedForShowcase()
|
||||
feedData.FeedUrl = hmnurl.BuildShowcase()
|
||||
|
||||
snippets, err := hmndata.FetchSnippets(c, c.Conn, c.CurrentUser, hmndata.SnippetQuery{
|
||||
Limit: itemsPerFeed,
|
||||
})
|
||||
if err != nil {
|
||||
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to fetch snippets"))
|
||||
}
|
||||
for _, s := range snippets {
|
||||
timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
|
||||
feedData.Snippets = append(feedData.Snippets, timelineItem)
|
||||
}
|
||||
c.Perf.EndBlock()
|
||||
updated := time.Now()
|
||||
if len(feedData.Snippets) > 0 {
|
||||
updated = feedData.Snippets[0].Date
|
||||
}
|
||||
feedData.Updated = updated
|
||||
default:
|
||||
return FourOhFour(c)
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package website
|
|||
|
||||
import (
|
||||
"html/template"
|
||||
"math"
|
||||
"net/http"
|
||||
|
||||
"git.handmade.network/hmn/hmn/src/hmndata"
|
||||
|
@ -10,21 +9,19 @@ import (
|
|||
"git.handmade.network/hmn/hmn/src/models"
|
||||
"git.handmade.network/hmn/hmn/src/oops"
|
||||
"git.handmade.network/hmn/hmn/src/templates"
|
||||
"git.handmade.network/hmn/hmn/src/utils"
|
||||
)
|
||||
|
||||
type LandingTemplateData struct {
|
||||
templates.BaseData
|
||||
|
||||
NewsPost *templates.TimelineItem
|
||||
TimelineItems []templates.TimelineItem
|
||||
Pagination templates.Pagination
|
||||
ShowcaseTimelineJson string
|
||||
FollowingItems []templates.TimelineItem
|
||||
FeaturedItems []templates.TimelineItem
|
||||
RecentItems []templates.TimelineItem
|
||||
NewsItems []templates.TimelineItem
|
||||
|
||||
ManifestoUrl string
|
||||
FeedUrl string
|
||||
PodcastUrl string
|
||||
ShowcaseUrl string
|
||||
AtomFeedUrl string
|
||||
MarkAllReadUrl string
|
||||
|
||||
|
@ -43,30 +40,6 @@ func Index(c *RequestContext) ResponseData {
|
|||
|
||||
var timelineItems []templates.TimelineItem
|
||||
|
||||
numPosts, err := hmndata.CountPosts(c, c.Conn, c.CurrentUser, hmndata.PostsQuery{
|
||||
ThreadTypes: feedThreadTypes,
|
||||
})
|
||||
if err != nil {
|
||||
return c.ErrorResponse(http.StatusInternalServerError, err)
|
||||
}
|
||||
|
||||
numPages := int(math.Ceil(float64(numPosts) / feedPostsPerPage))
|
||||
|
||||
page, numPages, ok := getPageInfo("1", numPosts, feedPostsPerPage)
|
||||
if !ok {
|
||||
return c.Redirect(hmnurl.BuildFeed(), http.StatusSeeOther)
|
||||
}
|
||||
|
||||
pagination := templates.Pagination{
|
||||
Current: page,
|
||||
Total: numPages,
|
||||
|
||||
FirstUrl: hmnurl.BuildFeed(),
|
||||
LastUrl: hmnurl.BuildFeedWithPage(numPages),
|
||||
NextUrl: hmnurl.BuildFeedWithPage(utils.IntClamp(1, page+1, numPages)),
|
||||
PreviousUrl: hmnurl.BuildFeedWithPage(utils.IntClamp(1, page-1, numPages)),
|
||||
}
|
||||
|
||||
// This is essentially an alternate for feed page 1.
|
||||
posts, err := hmndata.FetchPosts(c, c.Conn, c.CurrentUser, hmndata.PostsQuery{
|
||||
ThreadTypes: feedThreadTypes,
|
||||
|
@ -112,30 +85,10 @@ func Index(c *RequestContext) ResponseData {
|
|||
}
|
||||
c.Perf.EndBlock()
|
||||
|
||||
snippets, err := hmndata.FetchSnippets(c, c.Conn, c.CurrentUser, hmndata.SnippetQuery{
|
||||
Limit: 40,
|
||||
})
|
||||
if err != nil {
|
||||
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to fetch snippets"))
|
||||
}
|
||||
showcaseItems := make([]templates.TimelineItem, 0, len(snippets))
|
||||
for _, s := range snippets {
|
||||
timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
|
||||
if timelineItem.CanShowcase {
|
||||
showcaseItems = append(showcaseItems, timelineItem)
|
||||
}
|
||||
}
|
||||
c.Perf.EndBlock()
|
||||
|
||||
c.Perf.StartBlock("SHOWCASE", "Convert to json")
|
||||
showcaseJson := templates.TimelineItemsToJSON(showcaseItems)
|
||||
c.Perf.EndBlock()
|
||||
|
||||
baseData := getBaseData(c, "", nil)
|
||||
baseData.BodyClasses = append(baseData.BodyClasses, "hmdev", "landing") // TODO: Is "hmdev" necessary any more?
|
||||
baseData.OpenGraphItems = append(baseData.OpenGraphItems, templates.OpenGraphItem{
|
||||
Property: "og:description",
|
||||
Value: "A community of programmers committed to producing quality software through deeper understanding.",
|
||||
Value: "A community of low-level programmers with high-level goals, working to correct the course of the software industry.",
|
||||
})
|
||||
|
||||
var res ResponseData
|
||||
|
@ -143,14 +96,10 @@ func Index(c *RequestContext) ResponseData {
|
|||
BaseData: baseData,
|
||||
|
||||
NewsPost: newsPostItem,
|
||||
TimelineItems: timelineItems,
|
||||
Pagination: pagination,
|
||||
ShowcaseTimelineJson: showcaseJson,
|
||||
FollowingItems: timelineItems,
|
||||
|
||||
ManifestoUrl: hmnurl.BuildManifesto(),
|
||||
FeedUrl: hmnurl.BuildFeed(),
|
||||
PodcastUrl: hmnurl.BuildPodcast(),
|
||||
ShowcaseUrl: hmnurl.BuildShowcase(),
|
||||
AtomFeedUrl: hmnurl.BuildAtomFeed(),
|
||||
MarkAllReadUrl: hmnurl.HMNProjectContext.BuildForumMarkRead(0),
|
||||
|
||||
|
|
|
@ -160,9 +160,8 @@ func NewWebsiteRoutes(conn *pgxpool.Pool) http.Handler {
|
|||
hmnOnly.POST(hmnurl.RegexAdminSetUserOptions, adminsOnly(csrfMiddleware(UserProfileAdminSetOptions)))
|
||||
hmnOnly.POST(hmnurl.RegexAdminNukeUser, adminsOnly(csrfMiddleware(UserProfileAdminNuke)))
|
||||
|
||||
hmnOnly.GET(hmnurl.RegexFeed, Feed)
|
||||
hmnOnly.GET(hmnurl.RegexFeed, Feed) // TODO: Remove / rework this page
|
||||
hmnOnly.GET(hmnurl.RegexAtomFeed, AtomFeed)
|
||||
hmnOnly.GET(hmnurl.RegexShowcase, Showcase)
|
||||
hmnOnly.GET(hmnurl.RegexSnippet, Snippet)
|
||||
hmnOnly.GET(hmnurl.RegexProjectIndex, ProjectIndex)
|
||||
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
package website
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"git.handmade.network/hmn/hmn/src/hmndata"
|
||||
"git.handmade.network/hmn/hmn/src/hmnurl"
|
||||
"git.handmade.network/hmn/hmn/src/oops"
|
||||
"git.handmade.network/hmn/hmn/src/templates"
|
||||
)
|
||||
|
||||
type ShowcaseData struct {
|
||||
templates.BaseData
|
||||
ShowcaseItems string // NOTE(asaf): JSON string
|
||||
ShowcaseAtomFeedUrl string
|
||||
}
|
||||
|
||||
func Showcase(c *RequestContext) ResponseData {
|
||||
snippets, err := hmndata.FetchSnippets(c, c.Conn, c.CurrentUser, hmndata.SnippetQuery{})
|
||||
if err != nil {
|
||||
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to fetch snippets"))
|
||||
}
|
||||
|
||||
showcaseItems := make([]templates.TimelineItem, 0, len(snippets))
|
||||
for _, s := range snippets {
|
||||
timelineItem := SnippetToTimelineItem(&s.Snippet, s.Asset, s.DiscordMessage, s.Projects, s.Owner, c.Theme, false)
|
||||
if timelineItem.CanShowcase {
|
||||
showcaseItems = append(showcaseItems, timelineItem)
|
||||
}
|
||||
}
|
||||
c.Perf.EndBlock()
|
||||
|
||||
c.Perf.StartBlock("SHOWCASE", "Convert to json")
|
||||
jsonItems := templates.TimelineItemsToJSON(showcaseItems)
|
||||
c.Perf.EndBlock()
|
||||
|
||||
baseData := getBaseDataAutocrumb(c, "Community Showcase")
|
||||
var res ResponseData
|
||||
res.MustWriteTemplate("showcase.html", ShowcaseData{
|
||||
BaseData: baseData,
|
||||
ShowcaseItems: jsonItems,
|
||||
ShowcaseAtomFeedUrl: hmnurl.BuildAtomFeedForShowcase(),
|
||||
}, c.Perf)
|
||||
return res
|
||||
}
|
|
@ -189,7 +189,6 @@ func UserProfile(c *RequestContext) ResponseData {
|
|||
ProfileUserProjects: templateProjects,
|
||||
TimelineItems: timelineItems,
|
||||
OwnProfile: (c.CurrentUser != nil && c.CurrentUser.ID == profileUser.ID),
|
||||
ShowcaseUrl: hmnurl.BuildShowcase(),
|
||||
|
||||
CanAddProject: numPersonalProjects < maxPersonalProjects,
|
||||
NewProjectUrl: hmnurl.BuildProjectNew(),
|
||||
|
|
Loading…
Reference in New Issue