ai cooking
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

make about album more programattic (#440)

Co-authored-by: paul miller <paul.miller>

authored by

Paul Miller
paul miller
and committed by
GitHub
4f77455e 2d5fcaa0

+134 -103
+1 -9
cmd/careme/web.go
··· 90 90 91 91 appRoutes.HandleFunc("/about", func(w http.ResponseWriter, r *http.Request) { 92 92 ctx := r.Context() 93 - data := struct { 94 - ClarityScript template.HTML 95 - GoogleTagScript template.HTML 96 - Style seasons.Style 97 - }{ 98 - ClarityScript: templates.ClarityScript(ctx), 99 - GoogleTagScript: templates.GoogleTagScript(), 100 - Style: seasons.GetCurrentStyle(), 101 - } 93 + data := templates.NewAboutPageData(ctx, seasons.GetCurrentStyle()) 102 94 if err := templates.About.Execute(w, data); err != nil { 103 95 slog.ErrorContext(ctx, "about template execute error", "error", err) 104 96 http.Error(w, "template error", http.StatusInternalServerError)
+80
internal/templates/about.go
··· 1 + package templates 2 + 3 + import ( 4 + "context" 5 + "html" 6 + "html/template" 7 + 8 + "careme/internal/seasons" 9 + ) 10 + 11 + const ( 12 + aboutAlbumImageBaseURL = "https://images.northbriton.net/" 13 + aboutAlbumPreviewPrefix = "https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/" 14 + ) 15 + 16 + type AboutAlbumPhoto struct { 17 + Comment string 18 + ImageID string 19 + RecipeHash string 20 + } 21 + 22 + func (p AboutAlbumPhoto) FullURL() string { 23 + return aboutAlbumImageBaseURL + p.ImageID 24 + } 25 + 26 + func (p AboutAlbumPhoto) PreviewURL() string { 27 + return aboutAlbumPreviewPrefix + p.ImageID 28 + } 29 + 30 + func (p AboutAlbumPhoto) CommentHTML() template.HTML { 31 + if p.Comment == "" { 32 + return "" 33 + } 34 + return template.HTML("<!-- " + html.EscapeString(p.Comment) + " -->") 35 + } 36 + 37 + type AboutPageData struct { 38 + ClarityScript template.HTML 39 + GoogleTagScript template.HTML 40 + Style seasons.Style 41 + AlbumPhotos []AboutAlbumPhoto 42 + } 43 + 44 + func NewAboutPageData(ctx context.Context, style seasons.Style) AboutPageData { 45 + return AboutPageData{ 46 + ClarityScript: ClarityScript(ctx), 47 + GoogleTagScript: GoogleTagScript(), 48 + Style: style, 49 + AlbumPhotos: DefaultAboutAlbumPhotos(), 50 + } 51 + } 52 + 53 + func DefaultAboutAlbumPhotos() []AboutAlbumPhoto { 54 + return append([]AboutAlbumPhoto(nil), defaultAboutAlbumPhotos...) 55 + } 56 + 57 + var defaultAboutAlbumPhotos = []AboutAlbumPhoto{ 58 + {Comment: "Dungeness crab pasta", ImageID: "AP1GczMBNFe2Ol-2vq1uZybQcd1y5P1vu4jqNbbtX4U0uvc_GSIlszulZjtIzGIxtgEm6hHPoPLOV8BqzDyMdSzSl4qCGyTlV2fSyyYnq_ipUEREpthJs6Uf", RecipeHash: "SNsa7tJ414rhmrw56fjqiw=="}, 59 + {Comment: "tri-tip and polenta", ImageID: "AP1GczPKKoL9ZZ3nmrcjf0d6tgLazTkNk2Yii2YfVhaRJoTA9Aap264ABsKEm5cqFJwKByELDuiMFas_z0KyjjvBRmEHL_yRHrTTIXbdT-7jKX1mqFKKejAp", RecipeHash: "le76qpHPhb-EK2KB7TqGZA=="}, 60 + {Comment: "Tomato Paprika Chicken thighs", ImageID: "AP1GczO7v4JPGuK09-1TPLFz0SpUL2XghE8lxK_5Sn153pRGc_DlBZhslyqCOd3vfibyqCw6eWLca3-DHj0zFChi4rJBpeQuHOqFOdThjhj81KnngZ-Fs0Fy", RecipeHash: "Z-EeQGRhSw5549Xh5L4Y3w=="}, 61 + {Comment: "tri tip pear balsamic", ImageID: "AP1GczPLfs_p6MyK8mTldz-L0vUUaot9JilVEsj7UFpxLjNDq2DmF1P7O79TJwB9Ov9D1XxKpwnfGevG4Wi8ZgFBqblOz7-O8O0ZvxEcgeaX056_Hlq8dlYr", RecipeHash: "wgWTsu-0-pB_ox3acbolwg=="}, 62 + {Comment: "lent miso salmon and slaw", ImageID: "AP1GczORLaBqbZOpJjmBC4_BeHV05HuNZHarGgRIkSdASAC6vrmezVMy3gxbxi-uxMw5pZevgXsnoVWRiB461qEXi3DS__lajYIjsi9G1v5gx3dGoq2P5_5X", RecipeHash: "fAe4BgOZgMpFyDwwazT9FQ=="}, 63 + {Comment: "sausage kale pasta", ImageID: "AP1GczODcc6U8rXC6v9NcbUhHuYRa3JYqRxZsn6flSVCwfGL6_C1BNrzFpwfzaj29hg7QVFOomYxLoskLWJnHcBZqHe4FhDg83JFSGYPycvvTMCbgdBugu58", RecipeHash: "t3BmgENY9ipTu-OD4RY3XA=="}, 64 + {Comment: "tri-tip steak and chimichurri but don't have hash have to go search", ImageID: "AP1GczPNp90QZFqrjkBSfhDHHDd-32Cabii-NX0CcmFiTnB4pXZXMFGhiDR3kj20DOGYI_uuCXt80fudQB0Zuf9yfiSdOLhULcJxn8UfH9xrm0I8BiCUB_Ej"}, 65 + {Comment: "lamb kofta also don't have hash", ImageID: "AP1GczP5HTwdWhDCTB_lbeVC8fnFJzsGo41qveO3baMUv-kRLBM53QI2nrgJe0ZmvxJsePdjjZN1XJN-EbgjyeAcjO8gDlq2Al6WqXCtK8R7HMzaVEwwSSIM"}, 66 + {Comment: "lamb!", ImageID: "AP1GczPmHb7lMdUyBz3yo_MAqc9kjYGoKKJf3vQYCXujbmU7Tg9_Gjoc-PdtPi0jxdW5_HImLrBZBCqWhgDMFAKM7lMUAJonq4SN4XDal5lIFfZJMFQ4oNY7"}, 67 + {Comment: "salmon with potatoes and broccolini", ImageID: "AP1GczN1MlLNlY09U_gPcbp30FdyaJlkTS53ayx4f-fJL_zjwoJlKg2wWlmcUyCV-GopCebXHCooxXwZfaWgVTRLqKV916OTUm2-Bpy0oMN5uTwyudLsF7sS", RecipeHash: "M_HC2ROGixCf6_KNbWFk9w=="}, 68 + {Comment: "Roasted Maple Dijon Salmon with Potatoes and Green Beans no hash", ImageID: "AP1GczPhyKs35SqVF4GlHF9-XHr_yi7hZys8ePOIXauKghpH6TGNx53RM67_Evx8TAabzq2mYcWJ6W2CfmVRpY99wplUa60MDZvFLlTeY6YS3h8BIJEAipaE"}, 69 + {Comment: "squash stuffed with sausage and kale", ImageID: "AP1GczOJwYRFtwp1dd0qCsPZmOXFfYQOxHCv1vOnQtUAxKVyKoqkNJencWU3tzkSB_HR7046NN-jST5n1FsFHm5nCHkKsFANtXJ8yb8dBq7qGvVWsdWst0Dd", RecipeHash: "mQs4oIYMJoqCmqDMXv74bA=="}, 70 + {Comment: "Salmon carrots and fennel", ImageID: "AP1GczPDySERu2MtYUCR5ltT0XXUpF2482sMjgVN6qd3SyiICx2euO5yIuj0QgwFl9nqy3tGLe_-OUqIpuKjY1J5RVC7RWz10TOrhtaz5meJn6z1hxD1p6wt", RecipeHash: "K5rSNX2zMuxzwLKTZgsSRg=="}, 71 + {Comment: "ribeye and asparagus", ImageID: "AP1GczP33uH4Pxdg2EotHBWZLxnJ7zfJMB6Nz82x4_PlOpl-ruS1s0ylIeiwVxLqHSZhadsdjDOUD32R9QGWfQkVO3kXAf9-OiXp7HFo70Bs1aKpT81LWpik", RecipeHash: "OYX56jveSjqi4XmcInbBwQ=="}, 72 + {Comment: "ginger chicken bok choy", ImageID: "AP1GczPov-6n9v5K6jQzLLcXsJtQJMCqD7o4s3DZd_bRIIf4lsgpme6d8BJY93MswT9aoaNroeqS9HAPRYI1TmOp3pKD_xfSLOF9-Nkba-WdsPIsAQsemYHG"}, 73 + {Comment: "kristen chicken and squash", ImageID: "AP1GczN_NQn7tQXHgD5l0kUHzlb-5KlY8riCtx8VYy5uIZq2w-qoMeuVCgT0DMm_gdeQxP0mgFbuRYNoWYUs6i6gFdZWn2QBoLbBrAdvGDqonE2RmYlSTzlF"}, 74 + {Comment: "chicken slow cooker", ImageID: "AP1GczOimx3VaB16JNvZh_szWEFddQnupyOoEDon4791Wl3D799H13wR8kR3yX0lpDy7DXN-yNCQnFoMB_iBFKLgJF7J2dO9xKvrpTAp40xSJMoshzertOYb", RecipeHash: "IOEiITiU68CSwHDPf5yNCA=="}, 75 + {Comment: "slow cooked chicken in pot", ImageID: "AP1GczMh7l7aY778MCqQBaHVCBaE80T0zI6nx62-Q7U75mAa-Z11rhgAf8woEYYgfbvL6UDLSBMjPDgzh6TRk1C7P1zfosOnjnMjR1su5zkoEQ_Y3px44oEg", RecipeHash: "IOEiITiU68CSwHDPf5yNCA=="}, 76 + {Comment: "LAMB pan", ImageID: "AP1GczMHg8W9L-iaK16Prwc0AB2jpryvQ3V_RB8dKWyC_NM9FaNzn-HravSYsMwfzIKtUFn_dyxR-zXVjOOdFqOREUnjqHXrkFjgEgwiDdb1-MrHA87vNNTm", RecipeHash: "cbycxIAij_RK6vD4BfptFQ=="}, 77 + {Comment: "half eaten lamb chopps", ImageID: "AP1GczOMjRr7tmZ5xxPzXsUHOip34t32QHfZJrQFsj6bo_FeU3P38DoRsHP-iAqxZMgj_WPE3XiJRMpDM6ezi8f8Q1pd1d92EnFacQF-vkgy6qv2ULgct8qh", RecipeHash: "cbycxIAij_RK6vD4BfptFQ=="}, 78 + {Comment: "chicken thights fennel and carrots", ImageID: "AP1GczO4qkM5zaXym17qH8Cy2IpWW_SHdWDmkKMiRx_VcN4ZBG9_dwI3ybDdri2v8n9XFNdCprnv72kD2JCwMnSkz38Mqa95OORDDjppLMGimj0DLbQATOf3", RecipeHash: "7AvK-N9pE6lJY0S40JK23A=="}, 79 + {Comment: "sausage, mushrooms and kale pasta", ImageID: "AP1GczMxEf7tY7cpxOuJnHlzJw48xq-JtP_x5XVjNCzs8m_a6HuizPEVgjWKsuVs84WNwa181arukeILhn32Lx6u_XwjDamwRUMnVylxChG8i7K_-fK56ztG", RecipeHash: "HZsnsGnH739VEKUrE18KGg=="}, 80 + }
+6 -94
internal/templates/about.html
··· 44 44 <p class="mt-2 text-gray-600">Click caption to open recipe.</p> 45 45 <div class="mt-6 overflow-hidden rounded-xl border border-brand-100 bg-white p-4" > 46 46 <div class="fotorama" data-shuffle="true" data-allowfullscreen="true" data-nav="thumbs" data-width="100%"> 47 - <!-- Dungeness crab pasta--> 48 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczMBNFe2Ol-2vq1uZybQcd1y5P1vu4jqNbbtX4U0uvc_GSIlszulZjtIzGIxtgEm6hHPoPLOV8BqzDyMdSzSl4qCGyTlV2fSyyYnq_ipUEREpthJs6Uf" 49 - data-full="https://images.northbriton.net/AP1GczMBNFe2Ol-2vq1uZybQcd1y5P1vu4jqNbbtX4U0uvc_GSIlszulZjtIzGIxtgEm6hHPoPLOV8BqzDyMdSzSl4qCGyTlV2fSyyYnq_ipUEREpthJs6Uf" 50 - data-caption='<a href="/recipe/SNsa7tJ414rhmrw56fjqiw==" class="underline">Open recipe</a>' /> 51 - <!-- tri-tip and polenta --> 52 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczPKKoL9ZZ3nmrcjf0d6tgLazTkNk2Yii2YfVhaRJoTA9Aap264ABsKEm5cqFJwKByELDuiMFas_z0KyjjvBRmEHL_yRHrTTIXbdT-7jKX1mqFKKejAp" 53 - data-full="https://images.northbriton.net/AP1GczPKKoL9ZZ3nmrcjf0d6tgLazTkNk2Yii2YfVhaRJoTA9Aap264ABsKEm5cqFJwKByELDuiMFas_z0KyjjvBRmEHL_yRHrTTIXbdT-7jKX1mqFKKejAp" 54 - data-caption='<a href="/recipe/le76qpHPhb-EK2KB7TqGZA==" class="underline">Open recipe</a>' /> 55 - <!-- Tomato Paprika Chicken thighs--> 56 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczO7v4JPGuK09-1TPLFz0SpUL2XghE8lxK_5Sn153pRGc_DlBZhslyqCOd3vfibyqCw6eWLca3-DHj0zFChi4rJBpeQuHOqFOdThjhj81KnngZ-Fs0Fy" 57 - data-full="https://images.northbriton.net/AP1GczO7v4JPGuK09-1TPLFz0SpUL2XghE8lxK_5Sn153pRGc_DlBZhslyqCOd3vfibyqCw6eWLca3-DHj0zFChi4rJBpeQuHOqFOdThjhj81KnngZ-Fs0Fy" 58 - data-caption='<a href="/recipe/Z-EeQGRhSw5549Xh5L4Y3w==" class="underline">Open recipe</a>' /> 59 - <!-- tri tip pear balsamic --> 60 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczPLfs_p6MyK8mTldz-L0vUUaot9JilVEsj7UFpxLjNDq2DmF1P7O79TJwB9Ov9D1XxKpwnfGevG4Wi8ZgFBqblOz7-O8O0ZvxEcgeaX056_Hlq8dlYr" 61 - data-full="https://images.northbriton.net/AP1GczPLfs_p6MyK8mTldz-L0vUUaot9JilVEsj7UFpxLjNDq2DmF1P7O79TJwB9Ov9D1XxKpwnfGevG4Wi8ZgFBqblOz7-O8O0ZvxEcgeaX056_Hlq8dlYr" 62 - data-caption='<a href="/recipe/wgWTsu-0-pB_ox3acbolwg==" class="underline">Open recipe</a>' /> 63 - 64 - <!-- lent miso salmon and slaw --> 65 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczORLaBqbZOpJjmBC4_BeHV05HuNZHarGgRIkSdASAC6vrmezVMy3gxbxi-uxMw5pZevgXsnoVWRiB461qEXi3DS__lajYIjsi9G1v5gx3dGoq2P5_5X" 66 - data-full="https://images.northbriton.net/AP1GczORLaBqbZOpJjmBC4_BeHV05HuNZHarGgRIkSdASAC6vrmezVMy3gxbxi-uxMw5pZevgXsnoVWRiB461qEXi3DS__lajYIjsi9G1v5gx3dGoq2P5_5X" 67 - data-caption='<a href="/recipe/fAe4BgOZgMpFyDwwazT9FQ==" class="underline">Open recipe</a>' /> 68 - 69 - <!-- sausage kale pasta --> 70 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczODcc6U8rXC6v9NcbUhHuYRa3JYqRxZsn6flSVCwfGL6_C1BNrzFpwfzaj29hg7QVFOomYxLoskLWJnHcBZqHe4FhDg83JFSGYPycvvTMCbgdBugu58" 71 - data-full="https://images.northbriton.net/AP1GczODcc6U8rXC6v9NcbUhHuYRa3JYqRxZsn6flSVCwfGL6_C1BNrzFpwfzaj29hg7QVFOomYxLoskLWJnHcBZqHe4FhDg83JFSGYPycvvTMCbgdBugu58" 72 - data-caption='<a href="/recipe/t3BmgENY9ipTu-OD4RY3XA==" class="underline">Open recipe</a>' /> 73 - <!-- tri-tip steak and chimichurri but don't have hash have to go search --> 74 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczPNp90QZFqrjkBSfhDHHDd-32Cabii-NX0CcmFiTnB4pXZXMFGhiDR3kj20DOGYI_uuCXt80fudQB0Zuf9yfiSdOLhULcJxn8UfH9xrm0I8BiCUB_Ej" 75 - data-full="https://images.northbriton.net/AP1GczPNp90QZFqrjkBSfhDHHDd-32Cabii-NX0CcmFiTnB4pXZXMFGhiDR3kj20DOGYI_uuCXt80fudQB0Zuf9yfiSdOLhULcJxn8UfH9xrm0I8BiCUB_Ej" /> 76 - <!-- lamb kofta also don't have hash--> 77 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczP5HTwdWhDCTB_lbeVC8fnFJzsGo41qveO3baMUv-kRLBM53QI2nrgJe0ZmvxJsePdjjZN1XJN-EbgjyeAcjO8gDlq2Al6WqXCtK8R7HMzaVEwwSSIM" 78 - data-full="https://images.northbriton.net/AP1GczP5HTwdWhDCTB_lbeVC8fnFJzsGo41qveO3baMUv-kRLBM53QI2nrgJe0ZmvxJsePdjjZN1XJN-EbgjyeAcjO8gDlq2Al6WqXCtK8R7HMzaVEwwSSIM" /> 79 - <!-- lamb! --> 80 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczPmHb7lMdUyBz3yo_MAqc9kjYGoKKJf3vQYCXujbmU7Tg9_Gjoc-PdtPi0jxdW5_HImLrBZBCqWhgDMFAKM7lMUAJonq4SN4XDal5lIFfZJMFQ4oNY7" 81 - data-full="https://images.northbriton.net/AP1GczPmHb7lMdUyBz3yo_MAqc9kjYGoKKJf3vQYCXujbmU7Tg9_Gjoc-PdtPi0jxdW5_HImLrBZBCqWhgDMFAKM7lMUAJonq4SN4XDal5lIFfZJMFQ4oNY7" /> 82 - <!-- salmon with potatoes and broccolini --> 83 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczN1MlLNlY09U_gPcbp30FdyaJlkTS53ayx4f-fJL_zjwoJlKg2wWlmcUyCV-GopCebXHCooxXwZfaWgVTRLqKV916OTUm2-Bpy0oMN5uTwyudLsF7sS" 84 - data-full="https://images.northbriton.net/AP1GczN1MlLNlY09U_gPcbp30FdyaJlkTS53ayx4f-fJL_zjwoJlKg2wWlmcUyCV-GopCebXHCooxXwZfaWgVTRLqKV916OTUm2-Bpy0oMN5uTwyudLsF7sS" 85 - data-caption='<a href="/recipe/M_HC2ROGixCf6_KNbWFk9w==" class="underline">Open recipe</a>' /> 86 - <!-- Roasted Maple Dijon Salmon with Potatoes and Green Beans no hash--> 87 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczPhyKs35SqVF4GlHF9-XHr_yi7hZys8ePOIXauKghpH6TGNx53RM67_Evx8TAabzq2mYcWJ6W2CfmVRpY99wplUa60MDZvFLlTeY6YS3h8BIJEAipaE" 88 - data-full="https://images.northbriton.net/AP1GczPhyKs35SqVF4GlHF9-XHr_yi7hZys8ePOIXauKghpH6TGNx53RM67_Evx8TAabzq2mYcWJ6W2CfmVRpY99wplUa60MDZvFLlTeY6YS3h8BIJEAipaE" /> 89 - 90 - <!-- squash stuffed with sausage and kale --> 91 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczOJwYRFtwp1dd0qCsPZmOXFfYQOxHCv1vOnQtUAxKVyKoqkNJencWU3tzkSB_HR7046NN-jST5n1FsFHm5nCHkKsFANtXJ8yb8dBq7qGvVWsdWst0Dd" 92 - data-full="https://images.northbriton.net/AP1GczOJwYRFtwp1dd0qCsPZmOXFfYQOxHCv1vOnQtUAxKVyKoqkNJencWU3tzkSB_HR7046NN-jST5n1FsFHm5nCHkKsFANtXJ8yb8dBq7qGvVWsdWst0Dd" 93 - data-caption='<a href="/recipe/mQs4oIYMJoqCmqDMXv74bA==" class="underline">Open recipe</a>' /> 94 - <!-- Salmon carrots and fennel --> 95 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczPDySERu2MtYUCR5ltT0XXUpF2482sMjgVN6qd3SyiICx2euO5yIuj0QgwFl9nqy3tGLe_-OUqIpuKjY1J5RVC7RWz10TOrhtaz5meJn6z1hxD1p6wt" 96 - data-full="https://images.northbriton.net/AP1GczPDySERu2MtYUCR5ltT0XXUpF2482sMjgVN6qd3SyiICx2euO5yIuj0QgwFl9nqy3tGLe_-OUqIpuKjY1J5RVC7RWz10TOrhtaz5meJn6z1hxD1p6wt" 97 - data-caption='<a href="/recipe/K5rSNX2zMuxzwLKTZgsSRg==" class="underline">Open recipe</a>' /> 98 - 99 - <!-- ribeye and asparagus--> 100 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczP33uH4Pxdg2EotHBWZLxnJ7zfJMB6Nz82x4_PlOpl-ruS1s0ylIeiwVxLqHSZhadsdjDOUD32R9QGWfQkVO3kXAf9-OiXp7HFo70Bs1aKpT81LWpik" 101 - data-full="https://images.northbriton.net/AP1GczP33uH4Pxdg2EotHBWZLxnJ7zfJMB6Nz82x4_PlOpl-ruS1s0ylIeiwVxLqHSZhadsdjDOUD32R9QGWfQkVO3kXAf9-OiXp7HFo70Bs1aKpT81LWpik" 102 - data-caption='<a href="/recipe/OYX56jveSjqi4XmcInbBwQ==" class="underline">Open recipe</a>' /> 103 - 104 - <!-- ribey and asparagus side view 105 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczNILj__cXN_rqUSEl0AKsnswodYtBThe5oQuFjg9mLXo3b65qKDePJRnXfT1sPbNvsa3wz9iDty2HgWRM1LK9q0dVwlD3nIqnChD_eJrFVyaULH8aq9" data-full="https://images.northbriton.net/AP1GczNILj__cXN_rqUSEl0AKsnswodYtBThe5oQuFjg9mLXo3b65qKDePJRnXfT1sPbNvsa3wz9iDty2HgWRM1LK9q0dVwlD3nIqnChD_eJrFVyaULH8aq9"> 106 - --> 107 - <!-- ginger chicken bok choy--> 108 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczPov-6n9v5K6jQzLLcXsJtQJMCqD7o4s3DZd_bRIIf4lsgpme6d8BJY93MswT9aoaNroeqS9HAPRYI1TmOp3pKD_xfSLOF9-Nkba-WdsPIsAQsemYHG" data-full="https://images.northbriton.net/AP1GczPov-6n9v5K6jQzLLcXsJtQJMCqD7o4s3DZd_bRIIf4lsgpme6d8BJY93MswT9aoaNroeqS9HAPRYI1TmOp3pKD_xfSLOF9-Nkba-WdsPIsAQsemYHG"> 109 - <!-- kristen chicken and squash--> 110 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczN_NQn7tQXHgD5l0kUHzlb-5KlY8riCtx8VYy5uIZq2w-qoMeuVCgT0DMm_gdeQxP0mgFbuRYNoWYUs6i6gFdZWn2QBoLbBrAdvGDqonE2RmYlSTzlF" data-full="https://images.northbriton.net/AP1GczN_NQn7tQXHgD5l0kUHzlb-5KlY8riCtx8VYy5uIZq2w-qoMeuVCgT0DMm_gdeQxP0mgFbuRYNoWYUs6i6gFdZWn2QBoLbBrAdvGDqonE2RmYlSTzlF"> 111 - 112 - <!-- chicken slow cooker--> 113 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczOimx3VaB16JNvZh_szWEFddQnupyOoEDon4791Wl3D799H13wR8kR3yX0lpDy7DXN-yNCQnFoMB_iBFKLgJF7J2dO9xKvrpTAp40xSJMoshzertOYb" 114 - data-full="https://images.northbriton.net/AP1GczOimx3VaB16JNvZh_szWEFddQnupyOoEDon4791Wl3D799H13wR8kR3yX0lpDy7DXN-yNCQnFoMB_iBFKLgJF7J2dO9xKvrpTAp40xSJMoshzertOYb" 115 - data-caption='<a href="/recipe/IOEiITiU68CSwHDPf5yNCA==" class="underline">Open recipe</a>' /> 116 - <!-- slow cooked chicken in pot--> 117 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczMh7l7aY778MCqQBaHVCBaE80T0zI6nx62-Q7U75mAa-Z11rhgAf8woEYYgfbvL6UDLSBMjPDgzh6TRk1C7P1zfosOnjnMjR1su5zkoEQ_Y3px44oEg" 118 - data-full="https://images.northbriton.net/AP1GczMh7l7aY778MCqQBaHVCBaE80T0zI6nx62-Q7U75mAa-Z11rhgAf8woEYYgfbvL6UDLSBMjPDgzh6TRk1C7P1zfosOnjnMjR1su5zkoEQ_Y3px44oEg" 119 - data-caption='<a href="/recipe/IOEiITiU68CSwHDPf5yNCA==" class="underline">Open recipe</a>' /> 120 - 121 - <!-- LAMB pan--> 122 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczMHg8W9L-iaK16Prwc0AB2jpryvQ3V_RB8dKWyC_NM9FaNzn-HravSYsMwfzIKtUFn_dyxR-zXVjOOdFqOREUnjqHXrkFjgEgwiDdb1-MrHA87vNNTm" 123 - data-full="https://images.northbriton.net/AP1GczMHg8W9L-iaK16Prwc0AB2jpryvQ3V_RB8dKWyC_NM9FaNzn-HravSYsMwfzIKtUFn_dyxR-zXVjOOdFqOREUnjqHXrkFjgEgwiDdb1-MrHA87vNNTm" 124 - data-caption='<a href="/recipe/cbycxIAij_RK6vD4BfptFQ==" class="underline">Open recipe</a>' /> 125 - 126 - cbycxIAij_RK6vD4BfptFQ== 127 - <!-- half eaten lamb chopps--> 128 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczOMjRr7tmZ5xxPzXsUHOip34t32QHfZJrQFsj6bo_FeU3P38DoRsHP-iAqxZMgj_WPE3XiJRMpDM6ezi8f8Q1pd1d92EnFacQF-vkgy6qv2ULgct8qh" 129 - data-full="https://images.northbriton.net/AP1GczOMjRr7tmZ5xxPzXsUHOip34t32QHfZJrQFsj6bo_FeU3P38DoRsHP-iAqxZMgj_WPE3XiJRMpDM6ezi8f8Q1pd1d92EnFacQF-vkgy6qv2ULgct8qh" 130 - data-caption='<a href="/recipe/cbycxIAij_RK6vD4BfptFQ==" class="underline">Open recipe</a>' /> 131 - <!-- chicken thights fennel and carrots--> 132 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczO4qkM5zaXym17qH8Cy2IpWW_SHdWDmkKMiRx_VcN4ZBG9_dwI3ybDdri2v8n9XFNdCprnv72kD2JCwMnSkz38Mqa95OORDDjppLMGimj0DLbQATOf3" 133 - data-full="https://images.northbriton.net/AP1GczO4qkM5zaXym17qH8Cy2IpWW_SHdWDmkKMiRx_VcN4ZBG9_dwI3ybDdri2v8n9XFNdCprnv72kD2JCwMnSkz38Mqa95OORDDjppLMGimj0DLbQATOf3" 134 - data-caption='<a href="/recipe/7AvK-N9pE6lJY0S40JK23A==" class="underline">Open recipe</a>' /> 135 - <!-- sausage, mushrooms and kale pasta--> 136 - <img src="https://images.northbriton.net/cdn-cgi/image/width=800/https://images.northbriton.net/AP1GczMxEf7tY7cpxOuJnHlzJw48xq-JtP_x5XVjNCzs8m_a6HuizPEVgjWKsuVs84WNwa181arukeILhn32Lx6u_XwjDamwRUMnVylxChG8i7K_-fK56ztG" 137 - data-full="https://images.northbriton.net/AP1GczMxEf7tY7cpxOuJnHlzJw48xq-JtP_x5XVjNCzs8m_a6HuizPEVgjWKsuVs84WNwa181arukeILhn32Lx6u_XwjDamwRUMnVylxChG8i7K_-fK56ztG" 138 - data-caption='<a href="/recipe/HZsnsGnH739VEKUrE18KGg==" class="underline">Open recipe</a>' /> 139 - 140 - 47 + {{range .AlbumPhotos}} 48 + {{.CommentHTML}} 49 + <img src="{{.PreviewURL}}" 50 + data-full="{{.FullURL}}" 51 + {{if .RecipeHash}}data-caption='<a href="/recipe/{{.RecipeHash}}" class="underline">Open recipe</a>'{{end}} /> 52 + {{end}} 141 53 </div> 142 54 </div> 143 55 <p class="mt-3 text-sm text-gray-500">
+47
internal/templates/templates_test.go
··· 1 1 package templates 2 2 3 3 import ( 4 + "bytes" 4 5 "context" 5 6 "strings" 6 7 "testing" 7 8 9 + "careme/internal/config" 8 10 "careme/internal/logsetup" 11 + "careme/internal/seasons" 12 + 13 + "golang.org/x/net/html" 9 14 ) 10 15 11 16 func TestClarityScriptIncludesSessionID(t *testing.T) { ··· 36 41 t.Fatalf("did not expect identify call in script, got %q", script) 37 42 } 38 43 } 44 + 45 + func TestAboutTemplateRendersValidHTML(t *testing.T) { 46 + if err := Init(&config.Config{}, "dummyhash.css"); err != nil { 47 + t.Fatalf("Init() error = %v", err) 48 + } 49 + 50 + data := NewAboutPageData(context.Background(), seasons.GetCurrentStyle()) 51 + 52 + var buf bytes.Buffer 53 + if err := About.Execute(&buf, data); err != nil { 54 + t.Fatalf("About.Execute() error = %v", err) 55 + } 56 + 57 + rendered := buf.String() 58 + if rendered == "" { 59 + t.Fatal("about page rendered empty HTML") 60 + } 61 + if _, err := html.Parse(strings.NewReader(rendered)); err != nil { 62 + t.Fatalf("about page rendered invalid HTML: %v\nHTML:\n%s", err, rendered) 63 + } 64 + if !strings.Contains(rendered, `id="album"`) { 65 + t.Fatalf("about page should include album section, body: %s", rendered) 66 + } 67 + if !strings.Contains(rendered, "Recipe Photo Album") { 68 + t.Fatalf("about page should include album heading, body: %s", rendered) 69 + } 70 + if got := strings.Count(rendered, `data-full="`); got != len(data.AlbumPhotos) { 71 + t.Fatalf("about page should render %d album photos, got %d", len(data.AlbumPhotos), got) 72 + } 73 + wantCaptions := 0 74 + for _, photo := range data.AlbumPhotos { 75 + if photo.RecipeHash != "" { 76 + wantCaptions++ 77 + } 78 + } 79 + if got := strings.Count(rendered, `data-caption='`); got != wantCaptions { 80 + t.Fatalf("about page should render %d recipe captions, got %d", wantCaptions, got) 81 + } 82 + if !strings.Contains(rendered, "Dungeness crab pasta") { 83 + t.Fatalf("about page should render album comments from Go data, body: %s", rendered) 84 + } 85 + }