Documentation ¶
Overview ¶
SSG is a Static Site Generator.
It uses Go's templates, so you need to be familiar and comfortable with text/templates from Go's stdlib. It can cope with input files of any type, parsing and running them as templates. If the input file happens to be markdown (i.e. has a .md extension) then ssg will run the input file as a template, and then attempt to convert the result from markdown to HTML. It uses https://github.com/gomarkdown/markdown to do this (and https://github.com/alecthomas/chroma for syntax highlighting of code blocks).
Pages can, in their meta data, specify an "outer" template name. If given, the result of running the page as a template (and converting from markdown to HTML if necessary) is then passed to the named outer template. This means you can use a common outer template to add headers, footers, structure etc to pages.
It is trivial to create your own templates and template snippets: just make sure you set `output = false` in the meta data of such files, and there will be no attempt made to convert such files to output; instead they will solely be made available for use by other templates.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Page ¶
type Page struct { // The absolute URL (i.e. prefixed by the Site config's BaseURL) // where this page will be available. AbsoluteURL string // If this page is a Post (i.e. it has a non-zero Date field in its // meta data), then PreviousByDate and NextByDate will link this // Post to the previous and next Posts, if they exist. PreviousByDate *Page NextByDate *Page // The Time at which the input file which defines this page was // last modified. For a Post, this is distinct from the Date field // in a Post's meta data. This field is used to ensure the // corresponding output file (if there is one), has the same // LastModified time (as a file attribute). LastModified time.Time // The meta data for this page. Meta PageMeta // If this page's .Meta.Output is true, then the result of running // the "inner template" will be available here, otherwise this // field will be nil. For input files which are markdown // (i.e. extension is .md), the result of the inner template is // converted to HTML which is then stored in this field. ContentInner []byte // If this page has non-empty .ContentInner, and this page's // .Meta.Template field is non empty (which defines the "outer // template", then the result of running the outer template is // stored in this field. The outer template is provided with this // page as its .Page variable. // // If this page's .Meta.Template is empty, then .ContentOuter will // be the same as its .ContentInner field. // // This content is written to the output file. ContentOuter []byte // contains filtered or unexported fields }
When a page is run as a template, the .Page variable will be set to a value of type Page.
func (*Page) HasContent ¶
Test to see if this Page's .Meta.Output field is true, and if there was some content found within the page.
func (*Page) HasDate ¶
Test to see if the Page's .Meta.Date field is zero. If it is not zero, then this Page is considered a Post.
type PageMeta ¶
type PageMeta struct { Title string Date time.Time Tags []string // If you provide this field, then this page will first be run as // its own template, and then the result of that will be passed to // the named outer template. So you can use the outer template to // create HTML, by adding headers and footers etc. Template string // If this page is just a template to be used by other pages // (either as an outer template, or as some template snipped that // generates a bit of content as part of running the other page's // inner template), then make sure this field is false. Pages which // have a false Output will never generate their own output file. Output bool // A plain-text summary, or blurb, of the Page's content. This is // very handy for building lists of blurbs, index pages etc. Summary string // If true, and if the input Page is markdown, then the // mardown-to-HTML conversion will create a Table Of Contents and // add that at the start of the Page. TableOfContents bool }
These fields are all loaded from the Page's input file's meta data, which is parsed as TOML. For example:
mypost.md:
--- title = "my first post" date = 2021-12-16T11:01:09Z summary = '''a brief plain-text summary of the content of this post''' --- ## Introduction The actual post content goes in here...
type Pages ¶
type Pages []*Page
In several fields available in templates, you'll get values of type Pages. There have a couple of useful methods for ordering their content: YoungestFirst and OldestFirst, which help when creating indices of pages, or linked to related pages. Note the sorting is done by the Page.Meta.Date field, and not the Page.LastModified field.
func (Pages) OldestFirst ¶
Creates and returns a new slice. Original slice is unaltered.
type SSG ¶
type SSG struct { // Internal: you won't want to access this from templates. Use the // TemplateDataObject.Site field instead. SiteConfigFile SiteConfigFile // All the pages that have been found in the input directory. This // will include pages for which Page.Meta.Output is false, and // pages for which it was not possible to parse (e.g. image // files). It will not include any pages that match // SiteMeta.IgnoreRegExp. Pages Pages // Pages that have Page.Meta.Output = true, and have a non-zero Page.Meta.Date Posts Pages // The above Pages field, but grouped by tag. PostsByTag map[string]Pages // Pages, rather than posts. So this allows access to images, for // example, and thus to their expected AbsoluteURL. E.g.: // // In [last week's]({{ (index .Global.PagesByInputPath "posts/foo/bar.md").AbsoluteURL }}) post... PagesByInputPath map[string]*Page // Internal: not for use by templates: at the point at which // templates are run, this field will be empty. PagesByOutputPath map[string]*Page // contains filtered or unexported fields }
type SiteConfigFile ¶
type SiteConfigFile struct { Meta SiteMeta // contains filtered or unexported fields }
type SiteMeta ¶
type SiteMeta struct { Title string Author string Description string BaseURL string // This is very handy to get ssg to ignore backup files, dot files // etc. A useful value for this field might be: // // ignoreRegExp = ”'(^#.+#$)|(~$)|(\.bak$)|((^|/)\.[^\./]+)|(\.nix$)”' IgnoreRegExp string // Used for formatting code blocks in markdown. ssg uses Chroma // (https://github.com/alecthomas/chroma) so you want to have a // look at its style gallery at // https://xyproto.github.io/splash/docs/ CodeStyle string // ssg will run these named templates for each tag that is // encountered in Posts. So these templates can be used to generate // indices of pages grouped by tag. TemplatesForTags []string }
These fields are extracted from config.toml, which must exist at the root of your site.
type TagTemplateDataObject ¶
type TagTemplateDataObject struct { // The Posts that have this tag set. Posts Pages // The normal set of data available to the template. However, there // is no specific input page, so the meta data is faked, to provide // the tag name in .Page.Meta.Title. The .Page.AbsoluteURL field is // correctly set, and the .Page.LastModified field will be the most // recent last modified field of all the Posts in this tag. TemplateDataObject }
For tag templates (i.e. templates named in the site's meta data TemplatesForTags field), a value of this type will be provided to the template as its . variable.
type TemplateDataObject ¶
type TemplateDataObject struct { // The page that is being processed. For a page with an outer // template specified, the outer template will still find the inner // page here. If you accidentally set output=true on the outer // template, then the outer template will *also* be run, only this // time with .Page set to itself. Page *Page // Access to the site's meta data. Site *SiteMeta // Access to all the other pages, and posts and tags and stuff. Global *SSG // Useful constants. *TimeConstants }
For non-tag templates, a value of this type will be provided to the template as its . variable.