diff --git a/modules/pages/config.go b/modules/pages/config.go
index f5813879b8..d51ca12a58 100644
--- a/modules/pages/config.go
+++ b/modules/pages/config.go
@@ -393,7 +393,7 @@ func DefaultConfig() *LandingConfig {
// ValidTemplates returns the list of valid template names
func ValidTemplates() []string {
- return []string{"open-source-hero", "minimalist-docs", "saas-conversion", "bold-marketing"}
+ return []string{"open-source-hero", "minimalist-docs", "saas-conversion", "bold-marketing", "documentation-first", "developer-tool", "visual-showcase", "cli-terminal", "architecture-deep-dive"}
}
// IsValidTemplate checks if a template name is valid
@@ -404,9 +404,14 @@ func IsValidTemplate(name string) bool {
// TemplateDisplayNames returns a map of template names to display names
func TemplateDisplayNames() map[string]string {
return map[string]string{
- "open-source-hero": "Open Source Hero",
- "minimalist-docs": "Minimalist Docs",
- "saas-conversion": "SaaS Conversion",
- "bold-marketing": "Bold Marketing",
+ "open-source-hero": "Open Source Product",
+ "minimalist-docs": "Minimalist Product",
+ "saas-conversion": "SaaS Product",
+ "bold-marketing": "Bold Marketing Product",
+ "documentation-first": "Documentation First",
+ "developer-tool": "Developer Tool",
+ "visual-showcase": "Visual Showcase",
+ "cli-terminal": "CLI Terminal",
+ "architecture-deep-dive": "Architecture Deep Dive",
}
}
diff --git a/routers/web/pages/pages.go b/routers/web/pages/pages.go
index 88cfc7461b..a2dac37082 100644
--- a/routers/web/pages/pages.go
+++ b/routers/web/pages/pages.go
@@ -40,10 +40,15 @@ import (
)
const (
- tplPagesOpenSourceHero templates.TplName = "pages/open-source-hero"
- tplPagesMinimalistDocs templates.TplName = "pages/minimalist-docs"
- tplPagesSaasConversion templates.TplName = "pages/saas-conversion"
- tplPagesBoldMarketing templates.TplName = "pages/bold-marketing"
+ tplPagesOpenSourceHero templates.TplName = "pages/open-source-hero"
+ tplPagesMinimalistDocs templates.TplName = "pages/minimalist-docs"
+ tplPagesSaasConversion templates.TplName = "pages/saas-conversion"
+ tplPagesBoldMarketing templates.TplName = "pages/bold-marketing"
+ tplPagesDocumentationFirst templates.TplName = "pages/documentation-first"
+ tplPagesDeveloperTool templates.TplName = "pages/developer-tool"
+ tplPagesVisualShowcase templates.TplName = "pages/visual-showcase"
+ tplPagesCLITerminal templates.TplName = "pages/cli-terminal"
+ tplPagesArchitectureDeepDive templates.TplName = "pages/architecture-deep-dive"
)
// ServeLandingPage serves the landing page for a repository
@@ -539,6 +544,16 @@ func selectTemplate(templateName string) templates.TplName {
return tplPagesSaasConversion
case "bold-marketing":
return tplPagesBoldMarketing
+ case "documentation-first":
+ return tplPagesDocumentationFirst
+ case "developer-tool":
+ return tplPagesDeveloperTool
+ case "visual-showcase":
+ return tplPagesVisualShowcase
+ case "cli-terminal":
+ return tplPagesCLITerminal
+ case "architecture-deep-dive":
+ return tplPagesArchitectureDeepDive
case "open-source-hero":
return tplPagesOpenSourceHero
default:
diff --git a/templates/pages/architecture-deep-dive.tmpl b/templates/pages/architecture-deep-dive.tmpl
new file mode 100644
index 0000000000..59bfd80eb7
--- /dev/null
+++ b/templates/pages/architecture-deep-dive.tmpl
@@ -0,0 +1,1539 @@
+{{template "pages/base_head" .}}
+
+
+
+
+
+
+ {{if .PageIsBlogDetail}}
+
+
+
+ {{if .BlogPost.FeaturedImage}}
+
+

+
+ {{end}}
+
{{.BlogPost.Title}}
+ {{if .BlogPost.Subtitle}}
{{.BlogPost.Subtitle}}
{{end}}
+
+ {{if .BlogPost.Author}}{{.BlogPost.Author.DisplayName}}·{{end}}
+ {{DateUtils.AbsoluteShort .BlogPost.CreatedUnix}}
+ {{if .BlogTags}}·{{range .BlogTags}}{{.}} {{end}}{{end}}
+
+
+ {{.BlogRenderedContent}}
+
+
+
+
+ {{else if .PageIsBlogList}}
+
+
+
+
+
+ {{if gt .BlogListTotal 9}}
+
+ {{template "base/paginate" .}}
+
+ {{end}}
+
+
+ {{else}}
+
+
+
+
+
+ {{if .LatestRelease}}v{{.LatestReleaseTag}} released{{else}}Open Source{{end}}
+
+
+
+
+
{{if .Config.Hero.Headline}}{{.Config.Hero.Headline}}{{else}}{{.Repository.Name}}{{end}}
+
+
+ {{if .Config.Hero.Subheadline}}{{.Config.Hero.Subheadline}}{{else}}{{.Repository.Description}}{{end}}
+
+
+
+
+ {{if .Config.Hero.CodeExample}}
+
+ $
+ {{.Config.Hero.CodeExample}}
+
+
+ {{end}}
+
+
+
+
+ {{if or .Config.Stats (gt .NumStars 0)}}
+
+
+ {{if .Config.Stats}}
+ {{range .Config.Stats}}
+
+
{{.Value}}
+
{{.Label}}
+
+ {{end}}
+ {{else}}
+
+
{{.NumStars}}
+
Stars
+
+
+
{{.NumForks}}
+
Forks
+
+ {{if .LatestRelease}}
+
+
v{{.LatestReleaseTag}}
+
Latest
+
+ {{end}}
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if and .PublicReleases .LatestRelease .LatestRelease.Attachments}}
+
+
+
Download v{{.LatestReleaseTag}}
+
Get the latest release
+ {{$windowsFiles := newSlice}}{{$macosFiles := newSlice}}{{$linuxFiles := newSlice}}{{$androidFiles := newSlice}}{{$iosFiles := newSlice}}{{$otherFiles := newSlice}}
+ {{range $att := .LatestRelease.Attachments}}
+ {{$name := StringUtils.ToLower $att.Name}}
+ {{if or (StringUtils.Contains $name "android") (StringUtils.HasSuffix $name ".apk") (StringUtils.HasSuffix $name ".aab") (StringUtils.HasSuffix $name ".xapk")}}
+ {{$androidFiles = Append $androidFiles $att}}
+ {{else if or (StringUtils.Contains $name "ios") (StringUtils.Contains $name "iphone") (StringUtils.Contains $name "ipad") (StringUtils.HasSuffix $name ".ipa")}}
+ {{$iosFiles = Append $iosFiles $att}}
+ {{else if or (StringUtils.Contains $name "windows") (StringUtils.Contains $name "win64") (StringUtils.Contains $name "win32") (StringUtils.Contains $name "-win.") (StringUtils.Contains $name "_win.") (StringUtils.Contains $name "-win-") (StringUtils.Contains $name "_win_") (StringUtils.HasSuffix $name ".exe") (StringUtils.HasSuffix $name ".msi") (StringUtils.HasSuffix $name ".msix") (StringUtils.HasSuffix $name ".msixbundle") (StringUtils.HasSuffix $name ".appx") (StringUtils.HasSuffix $name ".appxbundle")}}
+ {{$windowsFiles = Append $windowsFiles $att}}
+ {{else if or (StringUtils.Contains $name "darwin") (StringUtils.Contains $name "macos") (StringUtils.Contains $name "-mac.") (StringUtils.Contains $name "_mac.") (StringUtils.Contains $name "-mac-") (StringUtils.Contains $name "_mac_") (StringUtils.Contains $name "osx") (StringUtils.HasSuffix $name ".dmg") (StringUtils.HasSuffix $name ".pkg")}}
+ {{$macosFiles = Append $macosFiles $att}}
+ {{else if or (StringUtils.Contains $name "linux") (StringUtils.Contains $name "-lin.") (StringUtils.Contains $name "_lin.") (StringUtils.Contains $name "-lin-") (StringUtils.Contains $name "_lin_") (StringUtils.HasSuffix $name ".deb") (StringUtils.HasSuffix $name ".rpm") (StringUtils.HasSuffix $name ".appimage") (StringUtils.HasSuffix $name ".flatpak") (StringUtils.HasSuffix $name ".snap")}}
+ {{$linuxFiles = Append $linuxFiles $att}}
+ {{else}}
+ {{$otherFiles = Append $otherFiles $att}}
+ {{end}}
+ {{end}}
+ {{if $windowsFiles}}
+
+
{{svg "octicon-device-desktop" 16}} Windows
+
+
+ {{end}}
+ {{if $macosFiles}}
+
+
{{svg "octicon-device-desktop" 16}} macOS
+
+
+ {{end}}
+ {{if $linuxFiles}}
+
+
{{svg "octicon-terminal" 16}} Linux
+
+
+ {{end}}
+ {{if not $.HideMobileReleases}}
+ {{if $androidFiles}}
+
+
{{svg "octicon-device-mobile" 16}} Android
+
+
+ {{end}}
+ {{if $iosFiles}}
+
+
{{svg "octicon-device-mobile" 16}} iOS
+
+
+ {{end}}
+ {{end}}
+ {{if or $.GooglePlayID $.AppStoreID}}
+
+
{{svg "octicon-device-mobile" 16}} App Stores
+
+
+ {{end}}
+ {{if $otherFiles}}
+
+
{{svg "octicon-file" 16}} Other
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if .Config.ValueProps}}
+
+
+
+
+ {{range .Config.ValueProps}}
+
+
+ {{svg (printf "octicon-%s" (or .Icon "check")) 20}}
+
+
{{.Title}}
+
{{.Description}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if .Config.Features}}
+
+
+
+
+ {{range .Config.Features}}
+
+
+ {{svg (printf "octicon-%s" (or .Icon "zap")) 20}}
+
+
{{.Title}}
+
{{.Description}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if or .Config.SocialProof.Logos .Config.SocialProof.Testimonials}}
+
+
+ {{if .Config.SocialProof.Logos}}
+
+ {{range .Config.SocialProof.Logos}}
+
{{.}}
+ {{end}}
+
+ {{end}}
+ {{if .Config.SocialProof.Testimonials}}
+
+ {{range .Config.SocialProof.Testimonials}}
+
+
"{{.Quote}}"
+
+
{{.Author}}
+
{{.Role}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if .Config.Pricing.Plans}}
+
+
+
+
+ {{range .Config.Pricing.Plans}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if .Config.CTASection.Headline}}
+
+ {{end}}
+
+
+ {{if and .Config.Blog.Enabled .BlogPosts}}
+
+
+
+
+ {{if .Config.Blog.CTAButton.Label}}
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if and .Config.Gallery.Enabled .GalleryImages}}
+
+
+
+
+ {{range .GalleryImages}}
+
+
+
+
+ {{if .Caption}}
+
{{.Caption}}
+ {{end}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+ {{end}}{{/* end PageIsBlogDetail / PageIsBlogList / else */}}
+
+
+
+
+
+
+
+
+{{template "pages/base_footer" .}}
diff --git a/templates/pages/cli-terminal.tmpl b/templates/pages/cli-terminal.tmpl
new file mode 100644
index 0000000000..228ab59fc0
--- /dev/null
+++ b/templates/pages/cli-terminal.tmpl
@@ -0,0 +1,1554 @@
+{{template "pages/base_head" .}}
+
+
+
+
+
+
+ {{if .PageIsBlogDetail}}
+
+
+
+ {{if .BlogPost.FeaturedImage}}
+
+

+
+ {{end}}
+
{{.BlogPost.Title}}
+ {{if .BlogPost.Subtitle}}
{{.BlogPost.Subtitle}}
{{end}}
+
+ {{if .BlogPost.Author}}{{.BlogPost.Author.DisplayName}}|{{end}}
+ {{DateUtils.AbsoluteShort .BlogPost.CreatedUnix}}
+ {{if .BlogTags}}|{{range .BlogTags}}{{.}} {{end}}{{end}}
+
+
+ {{.BlogRenderedContent}}
+
+
+
+
+ {{else if .PageIsBlogList}}
+
+
+
+
+
+ {{if gt .BlogListTotal 9}}
+
+ {{template "base/paginate" .}}
+
+ {{end}}
+
+
+ {{else}}
+
+
+
+
+
+
+
+
+ {{if .LatestRelease}}v{{.LatestReleaseTag}} released{{else}}Open Source{{end}}
+
+
+
{{if .Config.Hero.Headline}}{{.Config.Hero.Headline}}{{else}}{{.Repository.Name}}{{end}}
+
+
+ {{if .Config.Hero.Subheadline}}{{.Config.Hero.Subheadline}}{{else}}{{.Repository.Description}}{{end}}
+
+
+
+
+ {{if .Config.Hero.CodeExample}}
+
+
+
+
+
+ terminal
+
+
+ $
+ {{.Config.Hero.CodeExample}}
+
+
+
+ {{end}}
+
+
+
+
+ {{if or .Config.Stats (gt .NumStars 0)}}
+
+
+ {{if .Config.Stats}}
+ {{range .Config.Stats}}
+
+
{{.Value}}
+
{{.Label}}
+
+ {{end}}
+ {{else}}
+
+
{{.NumStars}}
+
Stars
+
+
+
{{.NumForks}}
+
Forks
+
+ {{if .LatestRelease}}
+
+
v{{.LatestReleaseTag}}
+
Latest
+
+ {{end}}
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if and .PublicReleases .LatestRelease .LatestRelease.Attachments}}
+
+
+
Download v{{.LatestReleaseTag}}
+
Get the latest release
+ {{$windowsFiles := newSlice}}{{$macosFiles := newSlice}}{{$linuxFiles := newSlice}}{{$androidFiles := newSlice}}{{$iosFiles := newSlice}}{{$otherFiles := newSlice}}
+ {{range $att := .LatestRelease.Attachments}}
+ {{$name := StringUtils.ToLower $att.Name}}
+ {{if or (StringUtils.Contains $name "android") (StringUtils.HasSuffix $name ".apk") (StringUtils.HasSuffix $name ".aab") (StringUtils.HasSuffix $name ".xapk")}}
+ {{$androidFiles = Append $androidFiles $att}}
+ {{else if or (StringUtils.Contains $name "ios") (StringUtils.Contains $name "iphone") (StringUtils.Contains $name "ipad") (StringUtils.HasSuffix $name ".ipa")}}
+ {{$iosFiles = Append $iosFiles $att}}
+ {{else if or (StringUtils.Contains $name "windows") (StringUtils.Contains $name "win64") (StringUtils.Contains $name "win32") (StringUtils.Contains $name "-win.") (StringUtils.Contains $name "_win.") (StringUtils.Contains $name "-win-") (StringUtils.Contains $name "_win_") (StringUtils.HasSuffix $name ".exe") (StringUtils.HasSuffix $name ".msi") (StringUtils.HasSuffix $name ".msix") (StringUtils.HasSuffix $name ".msixbundle") (StringUtils.HasSuffix $name ".appx") (StringUtils.HasSuffix $name ".appxbundle")}}
+ {{$windowsFiles = Append $windowsFiles $att}}
+ {{else if or (StringUtils.Contains $name "darwin") (StringUtils.Contains $name "macos") (StringUtils.Contains $name "-mac.") (StringUtils.Contains $name "_mac.") (StringUtils.Contains $name "-mac-") (StringUtils.Contains $name "_mac_") (StringUtils.Contains $name "osx") (StringUtils.HasSuffix $name ".dmg") (StringUtils.HasSuffix $name ".pkg")}}
+ {{$macosFiles = Append $macosFiles $att}}
+ {{else if or (StringUtils.Contains $name "linux") (StringUtils.Contains $name "-lin.") (StringUtils.Contains $name "_lin.") (StringUtils.Contains $name "-lin-") (StringUtils.Contains $name "_lin_") (StringUtils.HasSuffix $name ".deb") (StringUtils.HasSuffix $name ".rpm") (StringUtils.HasSuffix $name ".appimage") (StringUtils.HasSuffix $name ".flatpak") (StringUtils.HasSuffix $name ".snap")}}
+ {{$linuxFiles = Append $linuxFiles $att}}
+ {{else}}
+ {{$otherFiles = Append $otherFiles $att}}
+ {{end}}
+ {{end}}
+ {{if $windowsFiles}}
+
+
{{svg "octicon-device-desktop" 16}} Windows
+
+
+ {{end}}
+ {{if $macosFiles}}
+
+
{{svg "octicon-device-desktop" 16}} macOS
+
+
+ {{end}}
+ {{if $linuxFiles}}
+
+
{{svg "octicon-terminal" 16}} Linux
+
+
+ {{end}}
+ {{if not $.HideMobileReleases}}
+ {{if $androidFiles}}
+
+
{{svg "octicon-device-mobile" 16}} Android
+
+
+ {{end}}
+ {{if $iosFiles}}
+
+
{{svg "octicon-device-mobile" 16}} iOS
+
+
+ {{end}}
+ {{end}}
+ {{if or $.GooglePlayID $.AppStoreID}}
+
+
{{svg "octicon-device-mobile" 16}} App Stores
+
+
+ {{end}}
+ {{if $otherFiles}}
+
+
{{svg "octicon-file" 16}} Other
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if .Config.ValueProps}}
+
+
+
+
+ {{range .Config.ValueProps}}
+
+
+ {{svg (printf "octicon-%s" (or .Icon "check")) 20}}
+
+
{{.Title}}
+
{{.Description}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if .Config.Features}}
+
+
+
+
+ {{range .Config.Features}}
+
+
+ {{svg (printf "octicon-%s" (or .Icon "zap")) 20}}
+
+
{{.Title}}
+
{{.Description}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if or .Config.SocialProof.Logos .Config.SocialProof.Testimonials}}
+
+
+ {{if .Config.SocialProof.Logos}}
+
+ {{range .Config.SocialProof.Logos}}
+
{{.}}
+ {{end}}
+
+ {{end}}
+ {{if .Config.SocialProof.Testimonials}}
+
+ {{range .Config.SocialProof.Testimonials}}
+
+
"{{.Quote}}"
+
+
{{.Author}}
+
{{.Role}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if .Config.Pricing.Plans}}
+
+
+
+
+ {{range .Config.Pricing.Plans}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if .Config.CTASection.Headline}}
+
+ {{end}}
+
+
+ {{if and .Config.Blog.Enabled .BlogPosts}}
+
+
+
+
+ {{if .Config.Blog.CTAButton.Label}}
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if and .Config.Gallery.Enabled .GalleryImages}}
+
+
+
+
+ {{range .GalleryImages}}
+
+
+
+
+ {{if .Caption}}
+
{{.Caption}}
+ {{end}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+ {{end}}{{/* end PageIsBlogDetail / PageIsBlogList / else */}}
+
+
+
+
+
+
+
+
+{{template "pages/base_footer" .}}
diff --git a/templates/pages/developer-tool.tmpl b/templates/pages/developer-tool.tmpl
new file mode 100644
index 0000000000..298ecf5ae9
--- /dev/null
+++ b/templates/pages/developer-tool.tmpl
@@ -0,0 +1,1427 @@
+{{template "pages/base_head" .}}
+
+
+
+
+
+
+ {{if .PageIsBlogDetail}}
+
+
+
+ {{if .BlogPost.FeaturedImage}}
+
+

+
+ {{end}}
+
{{.BlogPost.Title}}
+ {{if .BlogPost.Subtitle}}
{{.BlogPost.Subtitle}}
{{end}}
+
+ {{if .BlogPost.Author}}{{.BlogPost.Author.DisplayName}}·{{end}}
+ {{DateUtils.AbsoluteShort .BlogPost.CreatedUnix}}
+ {{if .BlogTags}}·{{range .BlogTags}}{{.}} {{end}}{{end}}
+
+
+ {{.BlogRenderedContent}}
+
+
+
+
+ {{else if .PageIsBlogList}}
+
+
+
+
+
+ {{if gt .BlogListTotal 9}}
+
+ {{template "base/paginate" .}}
+
+ {{end}}
+
+
+ {{else}}
+
+
+
+
+ status
+
+ {{if .LatestRelease}}v{{.LatestReleaseTag}} passing{{else}}Open Source{{end}}
+
+
+
{{if .Config.Hero.Headline}}{{.Config.Hero.Headline}}{{else}}{{.Repository.Name}}{{end}}
+
+
+ {{if .Config.Hero.Subheadline}}{{.Config.Hero.Subheadline}}{{else}}{{.Repository.Description}}{{end}}
+
+
+
+
+ {{if .Config.Hero.CodeExample}}
+
+ $
+ {{.Config.Hero.CodeExample}}
+
+
+ {{end}}
+
+
+
+
+ {{if or .Config.Stats (gt .NumStars 0)}}
+
+
+ {{if .Config.Stats}}
+ {{range .Config.Stats}}
+
+
{{.Value}}
+
{{.Label}}
+
+ {{end}}
+ {{else}}
+
+
{{.NumStars}}
+
Stars
+
+
+
{{.NumForks}}
+
Forks
+
+ {{if .LatestRelease}}
+
+
v{{.LatestReleaseTag}}
+
Latest
+
+ {{end}}
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if and .PublicReleases .LatestRelease .LatestRelease.Attachments}}
+
+
+
Download v{{.LatestReleaseTag}}
+
Get the latest release
+ {{$windowsFiles := newSlice}}{{$macosFiles := newSlice}}{{$linuxFiles := newSlice}}{{$androidFiles := newSlice}}{{$iosFiles := newSlice}}{{$otherFiles := newSlice}}
+ {{range $att := .LatestRelease.Attachments}}
+ {{$name := StringUtils.ToLower $att.Name}}
+ {{if or (StringUtils.Contains $name "android") (StringUtils.HasSuffix $name ".apk") (StringUtils.HasSuffix $name ".aab") (StringUtils.HasSuffix $name ".xapk")}}
+ {{$androidFiles = Append $androidFiles $att}}
+ {{else if or (StringUtils.Contains $name "ios") (StringUtils.Contains $name "iphone") (StringUtils.Contains $name "ipad") (StringUtils.HasSuffix $name ".ipa")}}
+ {{$iosFiles = Append $iosFiles $att}}
+ {{else if or (StringUtils.Contains $name "windows") (StringUtils.Contains $name "win64") (StringUtils.Contains $name "win32") (StringUtils.Contains $name "-win.") (StringUtils.Contains $name "_win.") (StringUtils.Contains $name "-win-") (StringUtils.Contains $name "_win_") (StringUtils.HasSuffix $name ".exe") (StringUtils.HasSuffix $name ".msi") (StringUtils.HasSuffix $name ".msix") (StringUtils.HasSuffix $name ".msixbundle") (StringUtils.HasSuffix $name ".appx") (StringUtils.HasSuffix $name ".appxbundle")}}
+ {{$windowsFiles = Append $windowsFiles $att}}
+ {{else if or (StringUtils.Contains $name "darwin") (StringUtils.Contains $name "macos") (StringUtils.Contains $name "-mac.") (StringUtils.Contains $name "_mac.") (StringUtils.Contains $name "-mac-") (StringUtils.Contains $name "_mac_") (StringUtils.Contains $name "osx") (StringUtils.HasSuffix $name ".dmg") (StringUtils.HasSuffix $name ".pkg")}}
+ {{$macosFiles = Append $macosFiles $att}}
+ {{else if or (StringUtils.Contains $name "linux") (StringUtils.Contains $name "-lin.") (StringUtils.Contains $name "_lin.") (StringUtils.Contains $name "-lin-") (StringUtils.Contains $name "_lin_") (StringUtils.HasSuffix $name ".deb") (StringUtils.HasSuffix $name ".rpm") (StringUtils.HasSuffix $name ".appimage") (StringUtils.HasSuffix $name ".flatpak") (StringUtils.HasSuffix $name ".snap")}}
+ {{$linuxFiles = Append $linuxFiles $att}}
+ {{else}}
+ {{$otherFiles = Append $otherFiles $att}}
+ {{end}}
+ {{end}}
+ {{if $windowsFiles}}
+
+
{{svg "octicon-device-desktop" 16}} Windows
+
+
+ {{end}}
+ {{if $macosFiles}}
+
+
{{svg "octicon-device-desktop" 16}} macOS
+
+
+ {{end}}
+ {{if $linuxFiles}}
+
+
{{svg "octicon-terminal" 16}} Linux
+
+
+ {{end}}
+ {{if not $.HideMobileReleases}}
+ {{if $androidFiles}}
+
+
{{svg "octicon-device-mobile" 16}} Android
+
+
+ {{end}}
+ {{if $iosFiles}}
+
+
{{svg "octicon-device-mobile" 16}} iOS
+
+
+ {{end}}
+ {{end}}
+ {{if or $.GooglePlayID $.AppStoreID}}
+
+
{{svg "octicon-device-mobile" 16}} App Stores
+
+
+ {{end}}
+ {{if $otherFiles}}
+
+
{{svg "octicon-file" 16}} Other
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if .Config.ValueProps}}
+
+
+
+
+ {{range .Config.ValueProps}}
+
+
+ {{svg (printf "octicon-%s" (or .Icon "check")) 20}}
+
+
{{.Title}}
+
{{.Description}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if .Config.Features}}
+
+
+
+
+ {{range .Config.Features}}
+
+
+ {{svg (printf "octicon-%s" (or .Icon "zap")) 20}}
+
+
{{.Title}}
+
{{.Description}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if or .Config.SocialProof.Logos .Config.SocialProof.Testimonials}}
+
+
+ {{if .Config.SocialProof.Logos}}
+
+ {{range .Config.SocialProof.Logos}}
+
{{.}}
+ {{end}}
+
+ {{end}}
+ {{if .Config.SocialProof.Testimonials}}
+
+ {{range .Config.SocialProof.Testimonials}}
+
+
"{{.Quote}}"
+
+
{{.Author}}
+
{{.Role}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if .Config.Pricing.Plans}}
+
+
+
+
+ {{range .Config.Pricing.Plans}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if .Config.CTASection.Headline}}
+
+ {{end}}
+
+
+ {{if and .Config.Blog.Enabled .BlogPosts}}
+
+
+
+
+ {{if .Config.Blog.CTAButton.Label}}
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if and .Config.Gallery.Enabled .GalleryImages}}
+
+
+
+
+ {{range .GalleryImages}}
+
+
+
+
+ {{if .Caption}}
+
{{.Caption}}
+ {{end}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+ {{end}}{{/* end PageIsBlogDetail / PageIsBlogList / else */}}
+
+
+
+
+
+
+
+
+{{template "pages/base_footer" .}}
\ No newline at end of file
diff --git a/templates/pages/documentation-first.tmpl b/templates/pages/documentation-first.tmpl
new file mode 100644
index 0000000000..e6f0c7caf0
--- /dev/null
+++ b/templates/pages/documentation-first.tmpl
@@ -0,0 +1,1451 @@
+{{template "pages/base_head" .}}
+
+
+
+
+
+
+ {{if .PageIsBlogDetail}}
+
+
+
+ {{if .BlogPost.FeaturedImage}}
+
+

+
+ {{end}}
+
{{.BlogPost.Title}}
+ {{if .BlogPost.Subtitle}}
{{.BlogPost.Subtitle}}
{{end}}
+
+ {{if .BlogPost.Author}}{{.BlogPost.Author.DisplayName}}·{{end}}
+ {{DateUtils.AbsoluteShort .BlogPost.CreatedUnix}}
+ {{if .BlogTags}}·{{range .BlogTags}}{{.}} {{end}}{{end}}
+
+
+ {{.BlogRenderedContent}}
+
+
+
+
+ {{else if .PageIsBlogList}}
+
+
+
+
+
+ {{if gt .BlogListTotal 9}}
+
+ {{template "base/paginate" .}}
+
+ {{end}}
+
+
+ {{else}}
+
+
+
+
+
+ {{if .LatestRelease}}v{{.LatestReleaseTag}} released{{else}}Open Source{{end}}
+
+
+
{{if .Config.Hero.Headline}}{{.Config.Hero.Headline}}{{else}}{{.Repository.Name}}{{end}}
+
+
+ {{if .Config.Hero.Subheadline}}{{.Config.Hero.Subheadline}}{{else}}{{.Repository.Description}}{{end}}
+
+
+
+
+ {{if .Config.Hero.CodeExample}}
+
+ $
+ {{.Config.Hero.CodeExample}}
+
+
+ {{end}}
+
+
+
+
+ {{if or .Config.Stats (gt .NumStars 0)}}
+
+
+ {{if .Config.Stats}}
+ {{range .Config.Stats}}
+
+
{{.Value}}
+
{{.Label}}
+
+ {{end}}
+ {{else}}
+
+
{{.NumStars}}
+
Stars
+
+
+
{{.NumForks}}
+
Forks
+
+ {{if .LatestRelease}}
+
+
v{{.LatestReleaseTag}}
+
Latest
+
+ {{end}}
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if and .PublicReleases .LatestRelease .LatestRelease.Attachments}}
+
+
+
Download v{{.LatestReleaseTag}}
+
Get the latest release
+ {{$windowsFiles := newSlice}}{{$macosFiles := newSlice}}{{$linuxFiles := newSlice}}{{$androidFiles := newSlice}}{{$iosFiles := newSlice}}{{$otherFiles := newSlice}}
+ {{range $att := .LatestRelease.Attachments}}
+ {{$name := StringUtils.ToLower $att.Name}}
+ {{if or (StringUtils.Contains $name "android") (StringUtils.HasSuffix $name ".apk") (StringUtils.HasSuffix $name ".aab") (StringUtils.HasSuffix $name ".xapk")}}
+ {{$androidFiles = Append $androidFiles $att}}
+ {{else if or (StringUtils.Contains $name "ios") (StringUtils.Contains $name "iphone") (StringUtils.Contains $name "ipad") (StringUtils.HasSuffix $name ".ipa")}}
+ {{$iosFiles = Append $iosFiles $att}}
+ {{else if or (StringUtils.Contains $name "windows") (StringUtils.Contains $name "win64") (StringUtils.Contains $name "win32") (StringUtils.Contains $name "-win.") (StringUtils.Contains $name "_win.") (StringUtils.Contains $name "-win-") (StringUtils.Contains $name "_win_") (StringUtils.HasSuffix $name ".exe") (StringUtils.HasSuffix $name ".msi") (StringUtils.HasSuffix $name ".msix") (StringUtils.HasSuffix $name ".msixbundle") (StringUtils.HasSuffix $name ".appx") (StringUtils.HasSuffix $name ".appxbundle")}}
+ {{$windowsFiles = Append $windowsFiles $att}}
+ {{else if or (StringUtils.Contains $name "darwin") (StringUtils.Contains $name "macos") (StringUtils.Contains $name "-mac.") (StringUtils.Contains $name "_mac.") (StringUtils.Contains $name "-mac-") (StringUtils.Contains $name "_mac_") (StringUtils.Contains $name "osx") (StringUtils.HasSuffix $name ".dmg") (StringUtils.HasSuffix $name ".pkg")}}
+ {{$macosFiles = Append $macosFiles $att}}
+ {{else if or (StringUtils.Contains $name "linux") (StringUtils.Contains $name "-lin.") (StringUtils.Contains $name "_lin.") (StringUtils.Contains $name "-lin-") (StringUtils.Contains $name "_lin_") (StringUtils.HasSuffix $name ".deb") (StringUtils.HasSuffix $name ".rpm") (StringUtils.HasSuffix $name ".appimage") (StringUtils.HasSuffix $name ".flatpak") (StringUtils.HasSuffix $name ".snap")}}
+ {{$linuxFiles = Append $linuxFiles $att}}
+ {{else}}
+ {{$otherFiles = Append $otherFiles $att}}
+ {{end}}
+ {{end}}
+ {{if $windowsFiles}}
+
+
{{svg "octicon-device-desktop" 16}} Windows
+
+
+ {{end}}
+ {{if $macosFiles}}
+
+
{{svg "octicon-device-desktop" 16}} macOS
+
+
+ {{end}}
+ {{if $linuxFiles}}
+
+
{{svg "octicon-terminal" 16}} Linux
+
+
+ {{end}}
+ {{if not $.HideMobileReleases}}
+ {{if $androidFiles}}
+
+
{{svg "octicon-device-mobile" 16}} Android
+
+
+ {{end}}
+ {{if $iosFiles}}
+
+
{{svg "octicon-device-mobile" 16}} iOS
+
+
+ {{end}}
+ {{end}}
+ {{if or $.GooglePlayID $.AppStoreID}}
+
+
{{svg "octicon-device-mobile" 16}} App Stores
+
+
+ {{end}}
+ {{if $otherFiles}}
+
+
{{svg "octicon-file" 16}} Other
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if .Config.ValueProps}}
+
+
+
+
+ {{range .Config.ValueProps}}
+
+
+ {{svg (printf "octicon-%s" (or .Icon "check")) 20}}
+
+
{{.Title}}
+
{{.Description}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if .Config.Features}}
+
+
+
+
+ {{range .Config.Features}}
+
+
+ {{svg (printf "octicon-%s" (or .Icon "zap")) 20}}
+
+
{{.Title}}
+
{{.Description}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if or .Config.SocialProof.Logos .Config.SocialProof.Testimonials}}
+
+
+ {{if .Config.SocialProof.Logos}}
+
+ {{range .Config.SocialProof.Logos}}
+
{{.}}
+ {{end}}
+
+ {{end}}
+ {{if .Config.SocialProof.Testimonials}}
+
+ {{range .Config.SocialProof.Testimonials}}
+
+
"{{.Quote}}"
+
+
{{.Author}}
+
{{.Role}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if .Config.Pricing.Plans}}
+
+
+
+
+ {{range .Config.Pricing.Plans}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if .Config.CTASection.Headline}}
+
+ {{end}}
+
+
+ {{if and .Config.Blog.Enabled .BlogPosts}}
+
+
+
+
+ {{if .Config.Blog.CTAButton.Label}}
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if and .Config.Gallery.Enabled .GalleryImages}}
+
+
+
+
+ {{range .GalleryImages}}
+
+
+
+
+ {{if .Caption}}
+
{{.Caption}}
+ {{end}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+ {{end}}{{/* end PageIsBlogDetail / PageIsBlogList / else */}}
+
+
+
+
+
+
+
+
+{{template "pages/base_footer" .}}
diff --git a/templates/pages/visual-showcase.tmpl b/templates/pages/visual-showcase.tmpl
new file mode 100644
index 0000000000..3d230e37b7
--- /dev/null
+++ b/templates/pages/visual-showcase.tmpl
@@ -0,0 +1,1559 @@
+{{template "pages/base_head" .}}
+
+
+
+
+
+
+ {{if .PageIsBlogDetail}}
+
+
+
+ {{if .BlogPost.FeaturedImage}}
+
+

+
+ {{end}}
+
{{.BlogPost.Title}}
+ {{if .BlogPost.Subtitle}}
{{.BlogPost.Subtitle}}
{{end}}
+
+ {{if .BlogPost.Author}}{{.BlogPost.Author.DisplayName}}·{{end}}
+ {{DateUtils.AbsoluteShort .BlogPost.CreatedUnix}}
+ {{if .BlogTags}}·{{range .BlogTags}}{{.}} {{end}}{{end}}
+
+
+ {{.BlogRenderedContent}}
+
+
+
+
+ {{else if .PageIsBlogList}}
+
+
+
+
+
+ {{if gt .BlogListTotal 9}}
+
+ {{template "base/paginate" .}}
+
+ {{end}}
+
+
+ {{else}}
+
+
+
+
+
+
+
+ {{if .LatestRelease}}v{{.LatestReleaseTag}} released{{else}}Open Source{{end}}
+
+
+
{{if .Config.Hero.Headline}}{{.Config.Hero.Headline}}{{else}}{{.Repository.Name}}{{end}}
+
+
+ {{if .Config.Hero.Subheadline}}{{.Config.Hero.Subheadline}}{{else}}{{.Repository.Description}}{{end}}
+
+
+
+
+ {{if .Config.Hero.CodeExample}}
+
+ $
+ {{.Config.Hero.CodeExample}}
+
+
+ {{end}}
+
+
+
+
+ {{if or .Config.Stats (gt .NumStars 0)}}
+
+
+ {{if .Config.Stats}}
+ {{range .Config.Stats}}
+
+
{{.Value}}
+
{{.Label}}
+
+ {{end}}
+ {{else}}
+
+
{{.NumStars}}
+
Stars
+
+
+
{{.NumForks}}
+
Forks
+
+ {{if .LatestRelease}}
+
+
v{{.LatestReleaseTag}}
+
Latest
+
+ {{end}}
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if and .PublicReleases .LatestRelease .LatestRelease.Attachments}}
+
+
+
Download v{{.LatestReleaseTag}}
+
Get the latest release
+ {{$windowsFiles := newSlice}}{{$macosFiles := newSlice}}{{$linuxFiles := newSlice}}{{$androidFiles := newSlice}}{{$iosFiles := newSlice}}{{$otherFiles := newSlice}}
+ {{range $att := .LatestRelease.Attachments}}
+ {{$name := StringUtils.ToLower $att.Name}}
+ {{if or (StringUtils.Contains $name "android") (StringUtils.HasSuffix $name ".apk") (StringUtils.HasSuffix $name ".aab") (StringUtils.HasSuffix $name ".xapk")}}
+ {{$androidFiles = Append $androidFiles $att}}
+ {{else if or (StringUtils.Contains $name "ios") (StringUtils.Contains $name "iphone") (StringUtils.Contains $name "ipad") (StringUtils.HasSuffix $name ".ipa")}}
+ {{$iosFiles = Append $iosFiles $att}}
+ {{else if or (StringUtils.Contains $name "windows") (StringUtils.Contains $name "win64") (StringUtils.Contains $name "win32") (StringUtils.Contains $name "-win.") (StringUtils.Contains $name "_win.") (StringUtils.Contains $name "-win-") (StringUtils.Contains $name "_win_") (StringUtils.HasSuffix $name ".exe") (StringUtils.HasSuffix $name ".msi") (StringUtils.HasSuffix $name ".msix") (StringUtils.HasSuffix $name ".msixbundle") (StringUtils.HasSuffix $name ".appx") (StringUtils.HasSuffix $name ".appxbundle")}}
+ {{$windowsFiles = Append $windowsFiles $att}}
+ {{else if or (StringUtils.Contains $name "darwin") (StringUtils.Contains $name "macos") (StringUtils.Contains $name "-mac.") (StringUtils.Contains $name "_mac.") (StringUtils.Contains $name "-mac-") (StringUtils.Contains $name "_mac_") (StringUtils.Contains $name "osx") (StringUtils.HasSuffix $name ".dmg") (StringUtils.HasSuffix $name ".pkg")}}
+ {{$macosFiles = Append $macosFiles $att}}
+ {{else if or (StringUtils.Contains $name "linux") (StringUtils.Contains $name "-lin.") (StringUtils.Contains $name "_lin.") (StringUtils.Contains $name "-lin-") (StringUtils.Contains $name "_lin_") (StringUtils.HasSuffix $name ".deb") (StringUtils.HasSuffix $name ".rpm") (StringUtils.HasSuffix $name ".appimage") (StringUtils.HasSuffix $name ".flatpak") (StringUtils.HasSuffix $name ".snap")}}
+ {{$linuxFiles = Append $linuxFiles $att}}
+ {{else}}
+ {{$otherFiles = Append $otherFiles $att}}
+ {{end}}
+ {{end}}
+ {{if $windowsFiles}}
+
+
{{svg "octicon-device-desktop" 16}} Windows
+
+
+ {{end}}
+ {{if $macosFiles}}
+
+
{{svg "octicon-device-desktop" 16}} macOS
+
+
+ {{end}}
+ {{if $linuxFiles}}
+
+
{{svg "octicon-terminal" 16}} Linux
+
+
+ {{end}}
+ {{if not $.HideMobileReleases}}
+ {{if $androidFiles}}
+
+
{{svg "octicon-device-mobile" 16}} Android
+
+
+ {{end}}
+ {{if $iosFiles}}
+
+
{{svg "octicon-device-mobile" 16}} iOS
+
+
+ {{end}}
+ {{end}}
+ {{if or $.GooglePlayID $.AppStoreID}}
+
+
{{svg "octicon-device-mobile" 16}} App Stores
+
+
+ {{end}}
+ {{if $otherFiles}}
+
+
{{svg "octicon-file" 16}} Other
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if .Config.ValueProps}}
+
+
+
+
+ {{range .Config.ValueProps}}
+
+
+ {{svg (printf "octicon-%s" (or .Icon "check")) 20}}
+
+
{{.Title}}
+
{{.Description}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if .Config.Features}}
+
+
+
+
+ {{range .Config.Features}}
+
+
+ {{svg (printf "octicon-%s" (or .Icon "zap")) 20}}
+
+
{{.Title}}
+
{{.Description}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if or .Config.SocialProof.Logos .Config.SocialProof.Testimonials}}
+
+
+ {{if .Config.SocialProof.Logos}}
+
+ {{range .Config.SocialProof.Logos}}
+
{{.}}
+ {{end}}
+
+ {{end}}
+ {{if .Config.SocialProof.Testimonials}}
+
+ {{range .Config.SocialProof.Testimonials}}
+
+
"{{.Quote}}"
+
+
{{.Author}}
+
{{.Role}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if .Config.Pricing.Plans}}
+
+
+
+
+ {{range .Config.Pricing.Plans}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{if .Config.CTASection.Headline}}
+
+ {{end}}
+
+
+ {{if and .Config.Blog.Enabled .BlogPosts}}
+
+
+
+
+ {{if .Config.Blog.CTAButton.Label}}
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if and .Config.Gallery.Enabled .GalleryImages}}
+
+
+
+
+ {{range .GalleryImages}}
+
+
+
+
+ {{if .Caption}}
+
{{.Caption}}
+ {{end}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+ {{end}}{{/* end PageIsBlogDetail / PageIsBlogList / else */}}
+
+
+
+
+
+
+
+
+{{template "pages/base_footer" .}}
\ No newline at end of file