Updating Feed for VJ 2023

This commit is contained in:
Jake Mason 2023-04-06 14:54:14 -04:00
parent f9f0e1b119
commit 45b5c7f4d4
4 changed files with 119 additions and 0 deletions

View File

@ -77,6 +77,13 @@ func BuildJamIndex2023_Visibility() string {
return Url("/jam/visibility-2023", nil)
}
var RegexJamFeed2023_Visibility = regexp.MustCompile("^/jam/visibility-2023/feed$")
func BuildJamFeed2023_Visibility() string {
defer CatchPanic()
return Url("/jam/visibility-2023/feed", nil)
}
var RegexJamFeed2022 = regexp.MustCompile("^/jam/2022/feed$")
func BuildJamFeed2022() string {

View File

@ -0,0 +1,41 @@
{{ template "jam_2023_visibility_base.html" . }} {{ define "content" }}
<style>
:root {
--theme-color: white;
--theme-color-dimmer: rgba(255, 255, 255, 0.1);
}
#title {
margin-top: 0;
}
</style>
<div id="top-container" class="flex flex-column items-center ph3">
<h1 id="title">Visibility Jam</h1>
<h2 id="dates">April 14 - 16, 2023</h2>
<div id="tagline" class="center">See things in a new way.</div>
</div>
<div class="section bg-black-20 pt4 pb3 pb4-ns">
<div class="mw8 margin-center ph3 ph4-l flex flex-column flex-row-ns g3">
<div class="flex-grow-1 overflow-hidden">
{{ if eq .DaysUntilEnd 0 }}
<h3 class="mt0 mb3">Project updates</h3>
{{ else }}
<h3 class="mt0 mb3">Recent updates</h3>
{{ end }}
<div class="timeline">
{{ range .TimelineItems }} {{ template "timeline_item.html" . }} {{ end
}}
</div>
</div>
<div class="w-40-ns flex-shrink-0">
<h3 class="mt0 mb3">Projects</h3>
<div class="projects flex flex-column g3 back-to-normal">
{{ range .JamProjects }} {{ template "project_card.html" projectcarddata
. "" }} {{ end }}
</div>
</div>
</div>
</div>
{{ end }}

View File

@ -111,6 +111,76 @@ func JamIndex2023_Visibility(c *RequestContext) ResponseData {
return res
}
func JamFeed2023_Visibility(c *RequestContext) ResponseData {
jamProjects, err := hmndata.FetchProjects(c, c.Conn, c.CurrentUser, hmndata.ProjectsQuery{
JamSlugs: []string{hmndata.VJ2023.Slug},
})
if err != nil {
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to fetch jam projects for current user"))
}
projectIds := make([]int, 0, len(jamProjects))
for _, jp := range jamProjects {
projectIds = append(projectIds, jp.Project.ID)
}
var timelineItems []templates.TimelineItem
if len(projectIds) > 0 {
snippets, err := hmndata.FetchSnippets(c, c.Conn, c.CurrentUser, hmndata.SnippetQuery{
ProjectIDs: projectIds,
})
if err != nil {
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to fetch snippets for jam showcase"))
}
timelineItems = 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)
timelineItem.SmallInfo = true
timelineItems = append(timelineItems, timelineItem)
}
}
pageProjects := make([]templates.Project, 0, len(jamProjects))
for _, p := range jamProjects {
pageProjects = append(pageProjects, templates.ProjectAndStuffToTemplate(&p, hmndata.UrlContextForProject(&p.Project).BuildHomepage(), c.Theme))
}
type JamFeedData struct {
templates.BaseData
DaysUntilStart, DaysUntilEnd int
JamProjects []templates.Project
TimelineItems []templates.TimelineItem
}
daysUntilStart := daysUntil(hmndata.VJ2023.StartTime)
daysUntilEnd := daysUntil(hmndata.VJ2023.EndTime)
baseData := getBaseDataAutocrumb(c, hmndata.VJ2023.Name)
baseData.OpenGraphItems = []templates.OpenGraphItem{
{Property: "og:title", Value: "Visibility Jam"},
{Property: "og:site_name", Value: "Handmade Network"},
{Property: "og:type", Value: "website"},
{Property: "og:image", Value: hmnurl.BuildPublic("visjam2023/opengraph.png", true)},
{Property: "og:description", Value: "See things in a new way. April 14 - 16."},
{Property: "og:url", Value: hmnurl.BuildJamIndex()},
{Name: "twitter:card", Value: "summary_large_image"},
{Name: "twitter:image", Value: hmnurl.BuildPublic("visjam2023/TwitterCard.png", true)},
}
var res ResponseData
res.MustWriteTemplate("jam_2023_vj_feed.html", JamFeedData{
BaseData: baseData,
DaysUntilStart: daysUntilStart,
DaysUntilEnd: daysUntilEnd,
JamProjects: pageProjects,
TimelineItems: timelineItems,
}, c.Perf)
return res
}
func JamIndex2022(c *RequestContext) ResponseData {
var res ResponseData

View File

@ -60,6 +60,7 @@ func NewWebsiteRoutes(conn *pgxpool.Pool) http.Handler {
hmnOnly.GET(hmnurl.RegexJamIndex2022, JamIndex2022)
hmnOnly.GET(hmnurl.RegexJamFeed2022, JamFeed2022)
hmnOnly.GET(hmnurl.RegexJamIndex2023_Visibility, JamIndex2023_Visibility)
hmnOnly.GET(hmnurl.RegexJamFeed2023_Visibility, JamFeed2023_Visibility)
hmnOnly.GET(hmnurl.RegexStaffRolesIndex, StaffRolesIndex)
hmnOnly.GET(hmnurl.RegexStaffRole, StaffRole)