Skip to main content

max / makenotwork

6.2 KB · 240 lines History Blame Raw
1 //! Askama template definitions for all HTML pages and fragments.
2 //!
3 //! Split by domain:
4 //! - `public`: landing, auth, content, blog, discover, health
5 //! - `dashboard`: creator dashboards, admin, export, account management
6 //! - `partials`: HTMX fragments, tab content, alerts, form status
7
8 mod public;
9 mod dashboard;
10 mod partials;
11
12 pub use public::*;
13 pub use dashboard::*;
14 pub use partials::*;
15
16 use askama::Template;
17 use axum::{
18 http::StatusCode,
19 response::{Html, IntoResponse, Response},
20 };
21
22 /// Base context shared by all templates.
23 /// Note: csrf_token is Option to allow templates to work without CSRF
24 /// but all authenticated pages should include it.
25 pub type CsrfTokenOption = Option<String>;
26
27 /// Helper to convert any Askama template into an Axum response.
28 fn render_template<T: Template>(template: T) -> Response {
29 match template.render() {
30 Ok(html) => Html(html).into_response(),
31 Err(err) => {
32 tracing::error!(error = ?err, "template rendering error");
33 (StatusCode::INTERNAL_SERVER_ERROR, "Template error").into_response()
34 }
35 }
36 }
37
38 /// Implement `IntoResponse` for one or more Askama template structs.
39 macro_rules! impl_into_response {
40 ($($T:ty),+ $(,)?) => {
41 $(
42 impl IntoResponse for $T {
43 fn into_response(self) -> Response {
44 render_template(self)
45 }
46 }
47 )+
48 };
49 }
50
51 impl_into_response!(
52 // Public pages
53 SandboxTemplate,
54 PolicyTemplate,
55 IndexTemplate,
56 LibraryTemplate,
57 CartTemplate,
58 LoginTemplate,
59 TwoFactorTemplate,
60 OAuthAuthorizeTemplate,
61 ForgotPasswordTemplate,
62 ResetPasswordTemplate,
63 UserTemplate,
64 ProjectTemplate,
65 ProjectPaywallTemplate,
66 ItemTemplate,
67 LibraryAudioTemplate,
68 LibraryDownloadsTemplate,
69 LibraryLockedTemplate,
70 LibraryTextTemplate,
71 LibraryVideoTemplate,
72 TextReaderTemplate,
73 AudioPlayerTemplate,
74 VideoPlayerTemplate,
75 DiscoverTemplate,
76 DiscoverResultsTemplate,
77 PurchaseTemplate,
78 ReceiptTemplate,
79 BuyPageTemplate,
80 FeedTemplate,
81 StripeConnectDisclaimerTemplate,
82 // Blog pages
83 ProjectBlogTemplate,
84 BlogPostTemplate,
85 // Documentation pages
86 DocTemplate,
87 DocIndexTemplate,
88 // Pricing calculator
89 PricingTemplate,
90 // Use cases
91 UseCasesTemplate,
92 // Team
93 TeamTemplate,
94 // Changelog
95 ChangelogTemplate,
96 // Fan+
97 FanPlusTemplate,
98 // Creator invite system
99 CreatorsTemplate,
100 // Email & account
101 EmailResultTemplate,
102 ConfirmDeleteTemplate,
103 AccountDeletedTemplate,
104 // Health
105 HealthTemplate,
106 // Dashboard pages
107 DashboardUserTemplate,
108 DashboardProjectTemplate,
109 DashboardItemTemplate,
110 // Admin
111 AdminWaitlistTemplate,
112 AdminUsersTemplate,
113 AdminUploadsTemplate,
114 AdminScanAuditTemplate,
115 AdminAppealsTemplate,
116 AdminReportsTemplate,
117 AdminSignupsTemplate,
118 AdminMetricsTemplate,
119 // Export, import & account management
120 ExportPortalTemplate,
121 ImportPortalTemplate,
122 DeleteAccountTemplate,
123 BlogEditorTemplate,
124 // HTMX partials
125 AlertTemplate,
126 LibraryStatusTemplate,
127 ExportDownloadTemplate,
128 ExportContentReadyTemplate,
129 TransactionsTableTemplate,
130 UserProfileTabTemplate,
131 UserSettingsTabTemplate,
132 UserAccountTabTemplate,
133 UserSshKeysTabTemplate,
134 UserPaymentsTabTemplate,
135 UserProjectsTabTemplate,
136 UserCreatorTabTemplate,
137 ProjectOverviewTabTemplate,
138 ProjectContentTabTemplate,
139 ProjectAnalyticsTabTemplate,
140 UserAnalyticsTabTemplate,
141 BuyerContactsPartialTemplate,
142 ProjectSettingsTabTemplate,
143 ProjectCodeTabTemplate,
144 ProjectBlogTabTemplate,
145 ProjectSubscriptionsTabTemplate,
146 ProjectMembersTabTemplate,
147 ProjectMonetizationTabTemplate,
148 ItemEditRowTemplate,
149 // Admin partials
150 AdminWaitlistEntriesTemplate,
151 AdminUserEntriesTemplate,
152 AdminUploadEntriesTemplate,
153 AdminQueueSummaryTemplate,
154 AdminAppealEntriesTemplate,
155 AdminReportEntriesTemplate,
156 SuspensionBannerTemplate,
157 // License keys
158 ItemLicenseKeysTemplate,
159 // Promo codes
160 PromoCodesListTemplate,
161 ProjectPromotionsTabTemplate,
162 // Sessions
163 UserSessionsPartialTemplate,
164 // SyncKit
165 UserSyncKitTabTemplate,
166 ProjectSyncKitTabTemplate,
167 // Forums (Multithreaded)
168 UserForumsTabTemplate,
169 // Media library
170 UserMediaTabTemplate,
171 // Support
172 UserSupportTabTemplate,
173 // Collections
174 CollectionTemplate,
175 // Library tabs
176 LibraryPurchasesTabTemplate,
177 LibraryFeedTabTemplate,
178 LibraryCollectionsTabTemplate,
179 LibraryContactsTabTemplate,
180 LibraryCommunitiesTabTemplate,
181 // Follow button
182 FollowButtonTemplate,
183 TagFollowToggleTemplate,
184 // Tag suggestions
185 TagSuggestionsTemplate,
186 // Item analytics
187 ItemAnalyticsPartialTemplate,
188 // Item dashboard tabs
189 ItemOverviewTabTemplate,
190 ItemDetailsTabTemplate,
191 ItemPricingTabTemplate,
192 ItemFilesTabTemplate,
193 ItemSalesTabTemplate,
194 ItemEmbedTabTemplate,
195 // Onboarding checklist
196 OnboardingChecklistPartialTemplate,
197 // Tag tree browser
198 TagTreeTemplate,
199 // TOTP 2FA
200 TotpSetupTemplate,
201 TotpStatusTemplate,
202 // Passkeys
203 PasskeyListTemplate,
204 // Git source browser
205 GitRepoTemplate,
206 GitTreeTemplate,
207 GitFileTemplate,
208 GitCommitsTemplate,
209 GitCommitDetailTemplate,
210 GitBlameTemplate,
211 GitUserReposTemplate,
212 GitExploreTemplate,
213 GitFileLogTemplate,
214 // Git issues
215 GitIssueListTemplate,
216 GitIssueDetailTemplate,
217 GitRepoSettingsTemplate,
218 // Join wizard
219 WizardJoinTemplate,
220 WizardJoinAccountTemplate,
221 WizardJoinProfileTemplate,
222 WizardJoinCompleteTemplate,
223 // Creation wizards — full pages
224 WizardProjectTemplate,
225 WizardItemTemplate,
226 // Creation wizards — project step partials
227 WizardProjectBasicsTemplate,
228 WizardProjectAppearanceTemplate,
229 WizardProjectMonetizationTemplate,
230 WizardProjectFirstContentTemplate,
231 WizardProjectPreviewTemplate,
232 // Creation wizards — item step partials
233 WizardItemTypeTemplate,
234 WizardItemBasicsTemplate,
235 WizardItemContentTemplate,
236 WizardItemSectionsTemplate,
237 WizardItemPricingTemplate,
238 WizardItemPreviewTemplate,
239 );
240