diff --git a/options/locale/locale_en-US.json b/options/locale/locale_en-US.json index 0dbf1915ba..95cce59648 100644 --- a/options/locale/locale_en-US.json +++ b/options/locale/locale_en-US.json @@ -4557,6 +4557,18 @@ "repo.settings.pages.gallery_max_images": "Maximum Images to Show", "repo.settings.pages.gallery_columns": "Grid Columns", "repo.settings.pages.gallery_help_link": "Upload and manage gallery images in Settings > Gallery.", + "repo.settings.pages.comparison": "Comparison", + "repo.settings.pages.comparison_section": "Comparison Section", + "repo.settings.pages.comparison_enabled_desc": "Show a feature comparison table on the landing page", + "repo.settings.pages.comparison_headline": "Headline", + "repo.settings.pages.comparison_subheadline": "Subheadline", + "repo.settings.pages.comparison_columns": "Comparison Columns", + "repo.settings.pages.comparison_columns_help": "Define three columns for your comparison table (e.g., your product vs. two competitors, or three tiers).", + "repo.settings.pages.comparison_highlight": "Highlight", + "repo.settings.pages.comparison_features": "Features & Groups", + "repo.settings.pages.comparison_features_help": "Organize features into optional groups. For each cell, enter \"true\" for a checkmark, \"false\" for an X, or any text.", + "repo.settings.pages.comparison_group_name": "Group Name", + "repo.settings.pages.comparison_help_link": "Configure comparison columns and features in Settings > Landing Pages > Comparison.", "repo.settings.pages.ai_generate": "AI Content Generator", "repo.settings.pages.ai_generate_desc": "Automatically generate landing page content (headline, features, stats, CTAs) from your repository's README and metadata using AI.", "repo.settings.pages.ai_generate_button": "Generate Content with AI", diff --git a/routers/web/repo/setting/pages.go b/routers/web/repo/setting/pages.go index ead87d663c..eebb4337aa 100644 --- a/routers/web/repo/setting/pages.go +++ b/routers/web/repo/setting/pages.go @@ -26,15 +26,16 @@ import ( ) const ( - tplRepoSettingsPages templates.TplName = "repo/settings/pages" - tplRepoSettingsPagesBrand templates.TplName = "repo/settings/pages_brand" - tplRepoSettingsPagesHero templates.TplName = "repo/settings/pages_hero" - tplRepoSettingsPagesContent templates.TplName = "repo/settings/pages_content" - tplRepoSettingsPagesSocial templates.TplName = "repo/settings/pages_social" - tplRepoSettingsPagesPricing templates.TplName = "repo/settings/pages_pricing" - tplRepoSettingsPagesFooter templates.TplName = "repo/settings/pages_footer" - tplRepoSettingsPagesTheme templates.TplName = "repo/settings/pages_theme" - tplRepoSettingsPagesLanguages templates.TplName = "repo/settings/pages_languages" + tplRepoSettingsPages templates.TplName = "repo/settings/pages" + tplRepoSettingsPagesBrand templates.TplName = "repo/settings/pages_brand" + tplRepoSettingsPagesHero templates.TplName = "repo/settings/pages_hero" + tplRepoSettingsPagesContent templates.TplName = "repo/settings/pages_content" + tplRepoSettingsPagesComparison templates.TplName = "repo/settings/pages_comparison" + tplRepoSettingsPagesSocial templates.TplName = "repo/settings/pages_social" + tplRepoSettingsPagesPricing templates.TplName = "repo/settings/pages_pricing" + tplRepoSettingsPagesFooter templates.TplName = "repo/settings/pages_footer" + tplRepoSettingsPagesTheme templates.TplName = "repo/settings/pages_theme" + tplRepoSettingsPagesLanguages templates.TplName = "repo/settings/pages_languages" ) // getPagesLandingConfig loads the landing page configuration @@ -499,8 +500,26 @@ func PagesContentPost(ctx *context.Context) { } config.Features = append(config.Features, pages_module.FeatureConfig{Title: title, Description: desc, Icon: icon, ImageURL: imageURL}) } - // Comparison section + // Comparison enabled toggle (full config is on /settings/pages/comparison) config.Comparison.Enabled = ctx.FormBool("comparison_enabled") + if err := savePagesLandingConfig(ctx, config); err != nil { + ctx.ServerError("SavePagesConfig", err) + return + } + ctx.Flash.Success(ctx.Tr("repo.settings.pages.saved")) + ctx.Redirect(ctx.Repo.Repository.Link() + "/settings/pages/content") +} + +func PagesComparison(ctx *context.Context) { + ctx.Data["Title"] = ctx.Tr("repo.settings.pages.comparison") + ctx.Data["PageIsSettingsPages"] = true + ctx.Data["PageIsSettingsPagesComparison"] = true + setCommonPagesData(ctx) + ctx.HTML(http.StatusOK, tplRepoSettingsPagesComparison) +} + +func PagesComparisonPost(ctx *context.Context) { + config := getPagesLandingConfig(ctx) config.Comparison.Headline = ctx.FormString("comparison_headline") config.Comparison.Subheadline = ctx.FormString("comparison_subheadline") config.Comparison.Columns = make([]pages_module.ComparisonColumnConfig, 3) @@ -535,7 +554,7 @@ func PagesContentPost(ctx *context.Context) { return } ctx.Flash.Success(ctx.Tr("repo.settings.pages.saved")) - ctx.Redirect(ctx.Repo.Repository.Link() + "/settings/pages/content") + ctx.Redirect(ctx.Repo.Repository.Link() + "/settings/pages/comparison") } func PagesSocial(ctx *context.Context) { diff --git a/routers/web/web.go b/routers/web/web.go index 60a4ad5c10..420f47cb4f 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -1341,6 +1341,7 @@ func registerWebRoutes(m *web.Router) { m.Post("/hero/upload_image", repo_setting.PagesHeroUploadImage) m.Post("/hero/delete_image", repo_setting.PagesHeroDeleteImage) m.Combo("/content").Get(repo_setting.PagesContent).Post(repo_setting.PagesContentPost) + m.Combo("/comparison").Get(repo_setting.PagesComparison).Post(repo_setting.PagesComparisonPost) m.Combo("/social").Get(repo_setting.PagesSocial).Post(repo_setting.PagesSocialPost) m.Combo("/pricing").Get(repo_setting.PagesPricing).Post(repo_setting.PagesPricingPost) m.Combo("/footer").Get(repo_setting.PagesFooter).Post(repo_setting.PagesFooterPost) diff --git a/templates/repo/settings/pages_comparison.tmpl b/templates/repo/settings/pages_comparison.tmpl new file mode 100644 index 0000000000..22b20e8363 --- /dev/null +++ b/templates/repo/settings/pages_comparison.tmpl @@ -0,0 +1,125 @@ +{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings pages")}} +
{{ctx.Locale.Tr "repo.settings.pages.comparison_columns_help"}}
-{{ctx.Locale.Tr "repo.settings.pages.comparison_features_help"}}
-{{ctx.Locale.Tr "repo.settings.pages.comparison_help_link"}}