2017-04-05 14:18:53 +00:00
package output
import (
"strings"
2018-01-18 09:16:21 +00:00
// "fmt"
2017-04-05 14:18:53 +00:00
2017-06-13 16:42:45 +00:00
"github.com/gohugoio/hugo/docshelper"
2017-04-05 14:18:53 +00:00
)
// This is is just some helpers used to create some JSON used in the Hugo docs.
func init ( ) {
docsProvider := func ( ) map [ string ] interface { } {
docs := make ( map [ string ] interface { } )
docs [ "formats" ] = DefaultFormats
docs [ "layouts" ] = createLayoutExamples ( )
return docs
}
docshelper . AddDocProvider ( "output" , docsProvider )
}
func createLayoutExamples ( ) interface { } {
type Example struct {
Example string
2018-01-18 09:16:21 +00:00
Kind string
2017-04-05 14:18:53 +00:00
OutputFormat string
Suffix string
Layouts [ ] string ` json:"Template Lookup Order" `
}
var (
basicExamples [ ] Example
demoLayout = "demolayout"
demoType = "demotype"
)
for _ , example := range [ ] struct {
2018-01-13 16:21:42 +00:00
name string
d LayoutDescriptor
hasTheme bool
f Format
2017-04-05 14:18:53 +00:00
} {
2018-01-18 09:16:21 +00:00
// Taxonomy output.LayoutDescriptor={categories category taxonomy en false Type Section
{ "Single page in \"posts\" section" , LayoutDescriptor { Kind : "page" , Type : "posts" } , false , HTMLFormat } ,
{ "Single page in \"posts\" section with layout set" , LayoutDescriptor { Kind : "page" , Type : "posts" , Layout : demoLayout } , false , HTMLFormat } ,
2018-01-19 10:39:34 +00:00
{ "Single page in \"posts\" section with theme" , LayoutDescriptor { Kind : "page" , Type : "posts" } , true , HTMLFormat } ,
2018-01-18 09:16:21 +00:00
{ "AMP single page" , LayoutDescriptor { Kind : "page" , Type : "posts" } , false , AMPFormat } ,
2018-01-19 10:39:34 +00:00
{ "AMP single page, French language" , LayoutDescriptor { Kind : "page" , Type : "posts" , Lang : "fr" } , false , AMPFormat } ,
2018-01-18 09:16:21 +00:00
// All section or typeless pages gets "page" as type
{ "Home page" , LayoutDescriptor { Kind : "home" , Type : "page" } , false , HTMLFormat } ,
{ "Home page with type set" , LayoutDescriptor { Kind : "home" , Type : demoType } , false , HTMLFormat } ,
{ "Home page with layout set" , LayoutDescriptor { Kind : "home" , Type : "page" , Layout : demoLayout } , false , HTMLFormat } ,
{ ` Home page with theme ` , LayoutDescriptor { Kind : "home" , Type : "page" } , true , HTMLFormat } ,
{ ` AMP home, French language" ` , LayoutDescriptor { Kind : "home" , Type : "page" , Lang : "fr" } , false , AMPFormat } ,
{ "JSON home" , LayoutDescriptor { Kind : "home" , Type : "page" } , false , JSONFormat } ,
2018-03-09 12:26:28 +00:00
{ "RSS home with theme" , LayoutDescriptor { Kind : "home" , Type : "page" } , true , RSSFormat } ,
{ "RSS section posts" , LayoutDescriptor { Kind : "section" , Type : "posts" } , false , RSSFormat } ,
{ "Taxonomy list in categories" , LayoutDescriptor { Kind : "taxonomy" , Type : "categories" , Section : "category" } , false , RSSFormat } ,
{ "Taxonomy terms in categories" , LayoutDescriptor { Kind : "taxonomyTerm" , Type : "categories" , Section : "category" } , false , RSSFormat } ,
2018-01-18 09:16:21 +00:00
{ "Section list for \"posts\" section" , LayoutDescriptor { Kind : "section" , Type : "posts" , Section : "posts" } , false , HTMLFormat } ,
{ "Section list for \"posts\" section with type set to \"blog\"" , LayoutDescriptor { Kind : "section" , Type : "blog" , Section : "posts" } , false , HTMLFormat } ,
{ "Section list for \"posts\" section with layout set to \"demoLayout\"" , LayoutDescriptor { Kind : "section" , Layout : demoLayout , Section : "posts" } , false , HTMLFormat } ,
{ "Taxonomy list in categories" , LayoutDescriptor { Kind : "taxonomy" , Type : "categories" , Section : "category" } , false , HTMLFormat } ,
{ "Taxonomy term in categories" , LayoutDescriptor { Kind : "taxonomyTerm" , Type : "categories" , Section : "category" } , false , HTMLFormat } ,
2017-04-05 14:18:53 +00:00
} {
l := NewLayoutHandler ( example . hasTheme )
2018-01-13 16:21:42 +00:00
layouts , _ := l . For ( example . d , example . f )
2017-04-05 14:18:53 +00:00
basicExamples = append ( basicExamples , Example {
Example : example . name ,
2018-01-18 09:16:21 +00:00
Kind : example . d . Kind ,
2017-04-05 14:18:53 +00:00
OutputFormat : example . f . Name ,
Suffix : example . f . MediaType . Suffix ,
Layouts : makeLayoutsPresentable ( layouts ) } )
}
return basicExamples
}
func makeLayoutsPresentable ( l [ ] string ) [ ] string {
var filtered [ ] string
for _ , ll := range l {
2018-03-09 12:26:28 +00:00
if strings . Contains ( ll , "page/" ) {
// This is a valid lookup, but it's more confusing than useful.
continue
}
2017-04-05 14:18:53 +00:00
ll = strings . TrimPrefix ( ll , "_text/" )
if strings . Contains ( ll , "theme/" ) {
ll = strings . Replace ( ll , "theme/" , "demoTheme/layouts/" , - 1 )
} else {
ll = "layouts/" + ll
}
if ! strings . Contains ( ll , "indexes" ) {
filtered = append ( filtered , ll )
}
}
return filtered
}