mirror of
https://github.com/gohugoio/hugo.git
synced 2026-08-24 15:28:54 +00:00
Update shortcode and shortcode templates, both of which need much more work
This commit is contained in:
+2
-1
@@ -1,2 +1,3 @@
|
||||
themes/hugodocs/pipeline/node_modules
|
||||
my-notes.md
|
||||
my-notes.md
|
||||
notes-for-reviewers.md
|
||||
+5
-3
@@ -50,6 +50,8 @@ verboseLog = false
|
||||
# Setting this to false will keep hugo from watching for changes during local development
|
||||
watch = true
|
||||
|
||||
[permalinks]
|
||||
temp = "/:title"
|
||||
|
||||
#CUSTOM PARAMS
|
||||
[params]
|
||||
@@ -89,8 +91,8 @@ watch = true
|
||||
## Discuss Forum URL
|
||||
forum = "https://discuss.hugo.io"
|
||||
gtmid = ""
|
||||
# Set to true to include a CDN call to FontAwesome
|
||||
usefontawesome = true
|
||||
# Set to true to include a CDN call to FontAwesome (not that Hugo docs currently hosts its own FA (see pipeline/scss/_variables.scss))
|
||||
usefontawesome = false
|
||||
# MARKDOWN
|
||||
## Configuration for BlackFriday markdown parser: https://github.com/russross/blackfriday
|
||||
[blackfriday]
|
||||
@@ -101,4 +103,4 @@ watch = true
|
||||
|
||||
[taxonomies]
|
||||
tag = "tags"
|
||||
category = ""
|
||||
category = "categories"
|
||||
+1
-1
@@ -10,5 +10,5 @@ draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
@@ -1,58 +1,15 @@
|
||||
---
|
||||
title: About Hugo
|
||||
linktitle: About Hugo
|
||||
title: Overview
|
||||
linktitle: Overview
|
||||
description: Hugo's features, roadmap, and license, as well as the motivation behind creating Hugo.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
layout: single
|
||||
tags: []
|
||||
categories: []
|
||||
weight: 01
|
||||
draft: false
|
||||
slug:
|
||||
aliases: [/overview/introduction/]
|
||||
toc: true
|
||||
notes:
|
||||
---
|
||||
|
||||
## What is Hugo?
|
||||
|
||||
Hugo is a general-purpose website framework. Technically speaking, Hugo is a [static site generator][]. Unlike systems that dynamically build a page with each visitor request, Hugo builds pages when you create or update your content. Since websites are viewed far more often than they are edited, Hugo is designed to provide an optimal viewing experience for your website's end users and an ideal writing experience for website authors.
|
||||
|
||||
Websites built with Hugo are extremely fast and secure. Hugo sites can be hosted anywhere, including [Heroku][], [GoDaddy][], [DreamHost][], [GitHub Pages][], [Surge][], [Aerobatic][], [Firebase][], [Google Cloud Storage][], [Amazon S3][], [rackspace][], [Azure][], and [CloudFront][] and work well with CDNs. Hugo sites run without the need for a database or dependencies on expensive runtimes like Ruby, Python, or PHP.
|
||||
|
||||
We think of Hugo as the ideal website creation tool. Hugo provides nearly instant build times and the ability to rebuild whenever a change is made, which is invaluable when you are designing websites and creating content.
|
||||
|
||||
## How Fast is Hugo?
|
||||
|
||||
{{< youtube "CdiDYZ51a2o" >}}
|
||||
|
||||
|
||||
## What Does Hugo Do?
|
||||
|
||||
In technical terms, Hugo takes a source directory of files and templates and uses these as input to create a complete website.
|
||||
|
||||
## Who Should Use Hugo?
|
||||
|
||||
Hugo is for people that prefer writing in a text editor over a browser.
|
||||
|
||||
Hugo is for people who want to hand code their own website without worrying about setting up complicated runtimes, dependencies and databases.
|
||||
|
||||
Hugo is for people building a blog, a company site, a portfolio site, documentation, a single landing page, or a website with thousands of pages.
|
||||
|
||||
[Aerobatic]: https://www.aerobatic.com/
|
||||
[Amazon S3]: http://aws.amazon.com/s3/
|
||||
[Azure]: https://blogs.msdn.microsoft.com/acoat/2016/01/28/publish-a-static-web-site-using-azure-web-apps/
|
||||
[CloudFront]: http://aws.amazon.com/cloudfront/ "Amazon CloudFront"
|
||||
[DreamHost]: http://www.dreamhost.com/
|
||||
[Firebase]: https://firebase.google.com/docs/hosting/ "Firebase static hosting"
|
||||
[GitHub Pages]: https://pages.github.com/
|
||||
[GitLab]: https://about.gitlab.com
|
||||
[GoDaddy]: https://www.godaddy.com/ "Godaddy.com Hosting"
|
||||
[Google Cloud Storage]: http://cloud.google.com/storage/
|
||||
[Heroku]: https://www.heroku.com/
|
||||
[Jekyll]: http://jekyllrb.com/
|
||||
[Middleman]: https://middlemanapp.com/
|
||||
[Nanoc]: http://nanoc.ws/
|
||||
[rackspace]: https://www.rackspace.com/cloud/files
|
||||
[static site generator]: /about-hugo/benefits-of-static/
|
||||
[Surge]: https://surge.sh
|
||||
aliases: []
|
||||
toc: false
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
title: The Benefits of Static
|
||||
linktitle: The Benefits of Static
|
||||
description: Learn why static site generators have become so popular. Benefits include performance, security, ease of use, and exportability of content.
|
||||
description: Learn why static site generators have become such a popular option for developers. Benefits include performance, security, ease of use, and exportability of content.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
@@ -11,7 +11,7 @@ draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
Website generators render content into HTML files. Most are "dynamic site generators." That means the HTTP server (i.e., the program that communicates with your end user's browser) runs the generator to create a new HTML file every time an end user requests a page.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Hugo Features
|
||||
linktitle:
|
||||
description: Hugo is the world's fastest static site generator, includes a powerful templating language, and works for websites of all sizes and types.
|
||||
description: In addition to blistering speed, Hugo also includes a powerful templating language that makes it appropriate for websites of all sizes and types.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
@@ -10,7 +10,7 @@ draft: false
|
||||
slug:
|
||||
aliases: [/about-hugo/features]
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## General
|
||||
@@ -82,7 +82,7 @@ See what's coming next in the [Hugo roadmap][].
|
||||
[RSS]: /templates/rss-templates/
|
||||
[Shortcodes]: /templates/shortcodes/
|
||||
[sort content]: /templates/
|
||||
[supported formats]: /content-management/markdown-and-supported-formats/
|
||||
[supported formats]: /content-management/supported-content-formats/
|
||||
[Syntax highlighting]: /developer-tools/syntax-highlighting/
|
||||
[table of contents]: /content-management/table-of-contents/
|
||||
[taxonomies]: /content-management/taxonomies/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Apache License
|
||||
linktitle:
|
||||
description: Hugo v0.15 and later are released under the Apache 2.0 license. Earlier version of Hugo were released under the Simple Public License.
|
||||
description: Hugo v0.15 and later are released under the Apache 2.0 license. Earlier versions of Hugo were released under the Simple Public License.
|
||||
date: 2016-02-01
|
||||
publishdate: 2016-02-01
|
||||
lastmod: 2016-02-01
|
||||
@@ -10,7 +10,7 @@ draft: false
|
||||
slug:
|
||||
aliases: [/meta/license]
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
{{% note %}}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Roadmap
|
||||
linktitle:
|
||||
linktitle: Roadmap
|
||||
description: Take a look at what's in the pipeline for future versions of the Hugo project, as well related GitHub issues and Hugo Forum discussions for new features.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
@@ -11,7 +11,7 @@ draft: false
|
||||
slug:
|
||||
aliases: [/meta/roadmap]
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
In no particular order, here is what is currently being worked on for the Hugo project:
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
---
|
||||
title: What is Hugo
|
||||
linktitle: What is Hugo
|
||||
description: Hugo is the world's fastest static site generator. The purpose of Hugo is to make making websites fun again.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
layout: single
|
||||
weight: 05
|
||||
draft: false
|
||||
aliases: [/overview/introduction/]
|
||||
toc: true
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## What is Hugo?
|
||||
|
||||
Hugo is a general-purpose website framework. Technically speaking, Hugo is a [static site generator][]. Unlike systems that dynamically build a page with each visitor request, Hugo builds pages when you create or update your content. Since websites are viewed far more often than they are edited, Hugo is designed to provide an optimal viewing experience for your website's end users and an ideal writing experience for website authors.
|
||||
|
||||
Websites built with Hugo are extremely fast and secure. Hugo sites can be hosted anywhere, including [Heroku][], [GoDaddy][], [DreamHost][], [GitHub Pages][], [Surge][], [Aerobatic][], [Firebase][], [Google Cloud Storage][], [Amazon S3][], [rackspace][], [Azure][], and [CloudFront][] and work well with CDNs. Hugo sites run without the need for a database or dependencies on expensive runtimes like Ruby, Python, or PHP.
|
||||
|
||||
We think of Hugo as the ideal website creation tool. Hugo provides nearly instant build times and the ability to rebuild whenever a change is made, which is invaluable when you are designing websites and creating content.
|
||||
|
||||
## How Fast is Hugo?
|
||||
|
||||
{{< youtube "CdiDYZ51a2o" >}}
|
||||
|
||||
## What Does Hugo Do?
|
||||
|
||||
In technical terms, Hugo takes a source directory of files and templates and uses these as input to create a complete website.
|
||||
|
||||
## Who Should Use Hugo?
|
||||
|
||||
Hugo is for people that prefer writing in a text editor over a browser.
|
||||
|
||||
Hugo is for people who want to hand code their own website without worrying about setting up complicated runtimes, dependencies and databases.
|
||||
|
||||
Hugo is for people building a blog, a company site, a portfolio site, documentation, a single landing page, or a website with thousands of pages.
|
||||
|
||||
[Aerobatic]: https://www.aerobatic.com/
|
||||
[Amazon S3]: http://aws.amazon.com/s3/
|
||||
[Azure]: https://blogs.msdn.microsoft.com/acoat/2016/01/28/publish-a-static-web-site-using-azure-web-apps/
|
||||
[CloudFront]: http://aws.amazon.com/cloudfront/ "Amazon CloudFront"
|
||||
[DreamHost]: http://www.dreamhost.com/
|
||||
[Firebase]: https://firebase.google.com/docs/hosting/ "Firebase static hosting"
|
||||
[GitHub Pages]: https://pages.github.com/
|
||||
[GitLab]: https://about.gitlab.com
|
||||
[GoDaddy]: https://www.godaddy.com/ "Godaddy.com Hosting"
|
||||
[Google Cloud Storage]: http://cloud.google.com/storage/
|
||||
[Heroku]: https://www.heroku.com/
|
||||
[Jekyll]: http://jekyllrb.com/
|
||||
[Middleman]: https://middlemanapp.com/
|
||||
[Nanoc]: http://nanoc.ws/
|
||||
[rackspace]: https://www.rackspace.com/cloud/files
|
||||
[static site generator]: /about-hugo/benefits-of-static/
|
||||
[Surge]: https://surge.sh
|
||||
@@ -10,7 +10,7 @@ draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
I wrote Hugo ultimately for a few reasons. First, I was disappointed with WordPress, my then website solution. With it, I couldn't create content as efficiently as I wanted to.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Content Management"
|
||||
linktitle: "Content Management"
|
||||
title: Overview
|
||||
linktitle: Overview
|
||||
description: Hugo makes managing large static sites easy with support for archetypes, content types, menus, cross references, summaries, and more.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
@@ -11,5 +11,5 @@ weight: 01
|
||||
draft: false
|
||||
aliases: [/content/]
|
||||
toc: false
|
||||
notes:
|
||||
---
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
@@ -9,9 +9,9 @@ tags: [archetypes,generators,metadata,front matter]
|
||||
categories: ["content management"]
|
||||
weight: 50
|
||||
draft: false
|
||||
aliases: [/content/archetypes/]
|
||||
aliases: [/content/archetypes/,/content-management/content-archetypes/]
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## What are Archetypes?
|
||||
|
||||
@@ -0,0 +1,177 @@
|
||||
---
|
||||
title: Content Organization
|
||||
linktitle: Content Organization
|
||||
description: Hugo assumes that the same structure that works to organize your source content is used to organize the rendered site, but
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
tags: [sections,content,organization, fundamentals]
|
||||
categories: [project organization]
|
||||
weight: 05
|
||||
draft: false
|
||||
slug:
|
||||
aliases: [/content-management/sections,/content/sections/]
|
||||
toc: true
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
Hugo uses files (see [supported content formats][]) with headers called [front matter][]. By default, Hugo assumes the same structure that works to organize your content is used to organize the rendered site. This is done in an effort to reduce configuration. However, this convention can be overridden through additional configuration in the front matter, as well as through Hugo's extensive features related to [URL management][].
|
||||
|
||||
## Organizing Source Content
|
||||
|
||||
In Hugo, the content should be organized in a manner that reflects the rendered website. Without any additional configuration, the following will just work. Hugo supports content nested at any level, but the top level is special in Hugo and is used as the [section](/content-management/content-sections/).
|
||||
|
||||
```bash
|
||||
.
|
||||
└── content
|
||||
└── about
|
||||
| └── _index.md // <- http://1.com/about/
|
||||
├── post
|
||||
| ├── firstpost.md // <- http://1.com/post/firstpost/
|
||||
| ├── happy
|
||||
| | └── ness.md // <- http://1.com/post/happy/ness/
|
||||
| └── secondpost.md // <- http://1.com/post/secondpost/
|
||||
└── quote
|
||||
├── first.md // <- http://1.com/quote/first/
|
||||
└── second.md // <- http://1.com/quote/second/
|
||||
```
|
||||
|
||||
Here's the same organization run with `hugo --uglyURLs`:
|
||||
|
||||
```bash
|
||||
.
|
||||
└── content
|
||||
└── about
|
||||
| └── _index.md // <- http://1.com/about/
|
||||
├── post
|
||||
| ├── firstpost.md // <- http://1.com/post/firstpost.html
|
||||
| ├── happy
|
||||
| | └── ness.md // <- http://1.com/post/happy/ness.html
|
||||
| └── secondpost.md // <- http://1.com/post/secondpost.html
|
||||
└── quote
|
||||
├── first.md // <- http://1.com/quote/first.html
|
||||
└── second.md // <- http://1.com/quote/second.html
|
||||
```
|
||||
|
||||
## Destinations
|
||||
|
||||
Hugo believes that you organize your content with a purpose. The same structure that works to organize your source content is used to organize the rendered site. As displayed above, the organization of the source content will be mirrored in the destination.
|
||||
|
||||
Notice that the first level `about/` page URL was created using a directory named "about" with a single `_index.md` file inside. Find out more about `_index.md` specifically in [content for the homepage and other list pages](https://gohugo.io/overview/source-directory#content-for-home-page-and-other-list-pages).
|
||||
|
||||
There are times when one would need more control over their content. In these cases, there are a variety of things that can be specified in the front matter to determine the destination of a specific piece of content.
|
||||
|
||||
The following items are defined in order; latter items in the list will override earlier settings.
|
||||
|
||||
### `filename`
|
||||
|
||||
This isn't in the front matter, but is the actual name of the file minus the extension. This will be the name of the file in the destination.
|
||||
|
||||
### `slug`
|
||||
|
||||
Defined in the front matter, the `slug` can take the place of the filename for the destination.
|
||||
|
||||
### `filepath`
|
||||
|
||||
The actual path to the file on disk. Destination will create the destination with the same path. Includes [section](/content/sections/).
|
||||
|
||||
### `section`
|
||||
|
||||
`section` is determined by its location on disk and *cannot* be specified in the front matter. See [section](/content/sections/).
|
||||
|
||||
### `type`
|
||||
|
||||
`type` is also determined by its location on disk but, unlike `section`, it *can* be specified in the front matter. See [type](/content/types/).
|
||||
|
||||
### `path`
|
||||
|
||||
`path` can be provided in the front matter. This will replace the actual path to the file on disk. Destination will create the destination with the same path. Includes [section](/content/sections/).
|
||||
|
||||
### `url`
|
||||
|
||||
A complete URL can be provided. This will override all the above as it pertains to the end destination. This must be the path from the baseURL (starting with a "/"). When a `url` is provided, it will be used exactly. Using `url` will ignore the `--uglyURLs` setting.
|
||||
|
||||
|
||||
## Path breakdown in Hugo
|
||||
|
||||
### Content
|
||||
|
||||
```bash
|
||||
. path slug
|
||||
. ⊢-------^----⊣ ⊢------^-------⊣
|
||||
content/extras/indexes/category-example/index.html
|
||||
```
|
||||
|
||||
```bash
|
||||
. section slug
|
||||
. ⊢--^--⊣ ⊢------^-------⊣
|
||||
content/extras/indexes/category-example/index.html
|
||||
```
|
||||
|
||||
```bash
|
||||
. section slug
|
||||
. ⊢--^--⊣⊢--^--⊣
|
||||
content/extras/indexes/index.html
|
||||
```
|
||||
|
||||
### Destination
|
||||
|
||||
```bash
|
||||
permalink
|
||||
⊢--------------^-------------⊣
|
||||
http://spf13.com/projects/hugo
|
||||
```
|
||||
|
||||
```bash
|
||||
baseURL section slug
|
||||
⊢-----^--------⊣ ⊢--^---⊣ ⊢-^⊣
|
||||
http://spf13.com/projects/hugo
|
||||
```
|
||||
|
||||
```bash
|
||||
baseURL section slug
|
||||
⊢-----^--------⊣ ⊢--^--⊣ ⊢--^--⊣
|
||||
http://spf13.com/extras/indexes/example
|
||||
```
|
||||
|
||||
```bash
|
||||
baseURL path slug
|
||||
⊢-----^--------⊣ ⊢------^-----⊣ ⊢--^--⊣
|
||||
http://spf13.com/extras/indexes/example
|
||||
```
|
||||
|
||||
```bash
|
||||
baseURL url
|
||||
⊢-----^--------⊣ ⊢-----^-----⊣
|
||||
http://spf13.com/projects/hugo
|
||||
```
|
||||
|
||||
```bash
|
||||
baseURL url
|
||||
⊢-----^--------⊣ ⊢--------^-----------⊣
|
||||
http://spf13.com/extras/indexes/example
|
||||
```
|
||||
|
||||
**section** = which type the content is by default
|
||||
|
||||
* based on content location
|
||||
* front matter overrides
|
||||
|
||||
**slug** = name.ext or name/
|
||||
|
||||
* based on `content-name.md`
|
||||
* front matter overrides
|
||||
|
||||
**path** = section + path to file, excluding slug
|
||||
|
||||
* based on path to content location
|
||||
|
||||
|
||||
**url** = relative URL
|
||||
|
||||
* defined in front matter
|
||||
* overrides all the above
|
||||
|
||||
[front matter]: /content-management/front-matter/
|
||||
[supported formats]: /content-management/supported-content-formats/
|
||||
[URL management]: /content-management/url-management/
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Content Sections
|
||||
linktitle: Content Sections
|
||||
description: Hugo assumes that the same structure that works to organize your source content is used to organize the rendered site.
|
||||
title: Sections
|
||||
linktitle: Sections
|
||||
description: Hugo provides full support for content sections, which according to Hugo's default behavior, should reflect the architecture of the output website sections as well.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
@@ -10,12 +10,12 @@ categories: [content management]
|
||||
weight: 30
|
||||
draft: false
|
||||
slug:
|
||||
aliases: [/content-management/sections,/content/sections/]
|
||||
aliases: [/content-management/sections/,/content/sections/]
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## Content Organization
|
||||
## What are Sections in Hugo
|
||||
|
||||
Hugo believes that you organize your content with a purpose. The same structure that works to organize your source content is used to organize the rendered site (see [directory structure][]).
|
||||
|
||||
@@ -46,22 +46,22 @@ The [example site][] used throughout the Hugo docs includes three sections: "aut
|
||||
|
||||
## Content Section Lists
|
||||
|
||||
Hugo will automatically create pages for each section root that list all of the content in that section. See [List and Section Page Templates][] for details on customizing the way these pages are rendered.
|
||||
Hugo will automatically create pages for each section root that list all of the content in that section. See the documentation on [list and section templates][listsandsectiontemplatespage] for details on customizing the way these pages are rendered.
|
||||
|
||||
As of Hugo v0.18, section pages can also have a content file and front matter. These section content files must be placed in their corresponding section folder and named `_index.md` in order for Hugo to correctly render the front matter and content.
|
||||
|
||||
{{% warning "`index.md` vs `_index.md`" %}}
|
||||
Hugo themes developed before v0.18 often used an `index.md` in a content section as a hack to emulate the behavior of `_index.md`. The hack may work...*sometimes*; however, the order of page rendering can be unpredictable in Hugo. What works now may fail to render appropriately as your site grows. It is *strongly advised* to use `_index.md` as the *preferred* content section index page. **Note:** `_index.md`'s layout, as representative of a section, is a [list template](/templates/list-and-section-templates/) and *not* a single template.
|
||||
Hugo themes developed before v0.18 often used an `index.md` in a content section as a hack to emulate the behavior of `_index.md`. The hack may work...*sometimes*; however, the order of page rendering can be unpredictable in Hugo. What works now may fail to render appropriately as your site grows. It is **strongly advised** to use `_index.md` as the *preferred* content section index page. **Note:** `_index.md`'s layout, as representative of a section, is a [list template](/templates/list-and-section-templates/) and *not* a single template.
|
||||
{{% /warning %}}
|
||||
|
||||
## Content Section vs Content Types
|
||||
## Content *Section* vs Content *Type*
|
||||
|
||||
By default, everything created within a section will use the [content type][] that matches the section name. For example, Hugo will assume that `posts/post-1.md` has a `posts` content type and if using an [archetype][] will generate front matter according to `archetypes/posts.md`.
|
||||
By default, everything created within a section will use the [content type][] that matches the section name. For example, Hugo will assume that `posts/post-1.md` has a `posts` content type. If you are using an [archetype][] for your posts section, Hugo will generate front matter according to what is finds in `archetypes/posts.md`.
|
||||
|
||||
[archetype]: /content-management/archetypes/
|
||||
[content type]: /content-management/content-types/
|
||||
[example site]: /getting-started/
|
||||
[directory structure]: /project-organization/directory-structure/
|
||||
[List and Section Page Templates]: /templates/list-and-section-page-templates/
|
||||
[example site]: /getting-started/using-the-hugo-docs/
|
||||
[directory structure]: /getting-started/directory-structure/
|
||||
[listsandsectiontemplatespage]: /templates/list-and-section-page-templates/
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,66 @@ weight: 70
|
||||
draft: false
|
||||
slug:
|
||||
aliases: [/content/summaries/]
|
||||
toc:
|
||||
notes:
|
||||
---
|
||||
toc: true
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
With the use of the `.Summary` [page variable][pagevariables], Hugo can generate summaries of content to show snippets in summary views. The summary view snippets are automatically generated by Hugo.
|
||||
|
||||
## Summary Splitting Options
|
||||
|
||||
You have two options for where the content is split:
|
||||
|
||||
* Hugo-defined Summary Split
|
||||
* User-defined Summary Split
|
||||
|
||||
Content summaries may also provide links to the original content. A common design pattern is to see this link in the form of a "Read More..." button. To make this easier, you can leverage the `.RelPermalink`, `.Permalink`, and `.Truncated` [page variables][pagevariables].
|
||||
|
||||
### Hugo-defined: Automatic Splitting
|
||||
|
||||
By default, Hugo automatically takes the first 70 words of your content as its summary and stores it into the `.Summary` page variable for use in your templates. Taking the Hugo-defined approach to summaries may save time, but it has pros and cons:
|
||||
|
||||
* **Pros:** Automatic, no additional work on your part.
|
||||
* **Cons:** All HTML tags are stripped from the summary, and the first 70 words, whether they belong to a heading or to different paragraphs, are all lumped into one paragraph.
|
||||
|
||||
### User-defined: Manual Splitting
|
||||
|
||||
Alternatively, you may add the <code><!--more--></code> summary divider where you want to split the article. Content that comes before the summary divider will be used as that content's summary and stored in the `.Summary` page variable with all HTML formatting intact.
|
||||
|
||||
{{% note "Summary Divider"%}}
|
||||
The concept of a *summary divider* is not unique to Hugo. It is also called the "more tag" or "excerpt separator" in other literature.
|
||||
{{% /note %}}
|
||||
|
||||
* Pros: Freedom, precision, and improved rendering. All HTML tags and formatting are preserved.
|
||||
* Cons: Extra work for content authors, since they need to remember to type <code><!--more--></code> in each content file.
|
||||
|
||||
{{% warning "Be Precise with the Summary Divider" %}}
|
||||
Be careful to enter <code><!--more--></code> exactly; i.e., all lowercase and with no whitespace. Any mistakes in the divider will tell Hugo to treat the divider as a regular comment and will fail to store your desired content in the `.Summary` variable.
|
||||
{{% /warning %}}
|
||||
|
||||
## Example: First 10 Articles with Summaries
|
||||
|
||||
You can show content summaries with the following code. You could use the following snipper, for example, in a [section's list page template][].
|
||||
|
||||
{{% input "page-list-with-summaries.html" %}}
|
||||
```html
|
||||
{{ range first 10 .Data.Pages }}
|
||||
<article>
|
||||
<div class="summary">
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
|
||||
{{ .Summary }}
|
||||
</div>
|
||||
{{ if .Truncated }}
|
||||
<div class="read-more-link">
|
||||
<a href="{{ .RelPermalink }}">Read More…</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
</article>
|
||||
{{ end }}
|
||||
```
|
||||
{{% /input %}}
|
||||
|
||||
Note how the `.Truncated` boolean valuable may be used to hide the "Read More..." link when the content is not truncated; i.e., when the summary contains the entire article.
|
||||
|
||||
[pagevariables]: /variables-and-params/page-variables/
|
||||
[section's list page template]: /templates/list-and-section-templates/
|
||||
@@ -12,7 +12,7 @@ draft: false
|
||||
slug:
|
||||
aliases: [/content/types]
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
Hugo provides full support for sites with multiple content types. A **content type** can have a unique set of metadata (i.e., [front matter][]) or customized [template][] and can be created by the `hugo new` command via content [archetypes][].
|
||||
|
||||
@@ -12,5 +12,148 @@ draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc:
|
||||
notes:
|
||||
---
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
Hugo makes it easy to link documents together with `ref` and `relref`, both of which are [built-in Hugo shortcodes][]. These shortcodes are also used to safely provide links to headings inside of your content, whether across documents or within a document. The only difference between `ref` and `relref` is whether the resulting URL is absolute (`http://1.com/about/`) or relative (`/about/`).
|
||||
|
||||
## Using `ref` and `relref`
|
||||
|
||||
```django
|
||||
{{</* ref "document" */>}}
|
||||
{{</* ref "#anchor" */>}}
|
||||
{{</* ref "document#anchor" */>}}
|
||||
{{</* relref "document" */>}}
|
||||
{{</* relref "#anchor" */>}}
|
||||
{{</* relref "document#anchor" */>}}
|
||||
```
|
||||
|
||||
The single parameter to `ref` is a string with a content _document name_ (`about.md`), an in-document _anchor_ (`#who`), or both (`about.md#who`).
|
||||
|
||||
### Document Names
|
||||
|
||||
The _document name_ is the name of a document including the format extension; this may be just the filename, or the relative path from the `content/` directory. With a document `content/blog/post.md`, either format will produce the same result.
|
||||
|
||||
{{</* relref "blog/post.md" */>}} ⇒ `/blog/post/`
|
||||
{{</* relref "post.md" */>}} ⇒ `/blog/post/`
|
||||
|
||||
If you have multiple sections with the same filename, you should only use the relative path format, because the behaviour is _undefined_. So, if I also have a document `link/post.md`, the output of `ref` is unknown for `post.md`.
|
||||
|
||||
{{</* relref "blog/post.md" */>}} ⇒ `/blog/post/`
|
||||
{{</* relref "post.md" */>}} ⇒ `/blog/post/` (maybe)
|
||||
{{</* relref "post.md" */>}} ⇒ `/link/post/` (maybe)
|
||||
{{</* relref "link/post.md" */>}} ⇒ `/link/post/`
|
||||
|
||||
A relative document name must *not* begin with a slash (`/`).
|
||||
|
||||
{{</* relref "/blog/post.md" */>}} ⇒ `""`
|
||||
|
||||
### Anchors
|
||||
|
||||
When an _anchor_ is provided by itself, the current page’s unique identifier will be appended; when an _anchor_ is provided with a document name, the found page's unique identifier will be appended.
|
||||
|
||||
{{</* relref "#who" */>}} ⇒ `#who:9decaf7`
|
||||
{{</* relref "blog/post.md#who" */>}} ⇒ `/blog/post/#who:badcafe`
|
||||
|
||||
More information about document unique identifiers and headings can be found [below]({{< ref "#hugo-heading-anchors" >}}).
|
||||
|
||||
### Examples
|
||||
|
||||
* `{{</* ref "blog/post.md" */>}}` ⇒ `http://1.com/blog/post/`
|
||||
* `{{</* ref "post.md#tldr" */>}}` ⇒ `http://1.com/blog/post/#tldr:caffebad`
|
||||
* `{{</* relref "post.md" */>}}` ⇒ `/blog/post/`
|
||||
* `{{</* relref "blog/post.md#tldr" */>}}` ⇒ `/blog/post/#tldr:caffebad`
|
||||
* `{{</* ref "#tldr" */>}}` ⇒ `#tldr:badcaffe`
|
||||
* `{{</* relref "#tldr" */>}}` ⇒ `#tldr:badcaffe`
|
||||
|
||||
## Hugo Heading Anchors
|
||||
|
||||
When using Markdown document types, Hugo generates heading anchors automatically. The generated anchor for this section is `hugo-heading-anchors`. Because the heading anchors are generated automatically, Hugo takes some effort to ensure that heading anchors are unique both inside a document and across the entire site.
|
||||
|
||||
Ensuring heading uniqueness across the site is accomplished with a unique identifier for each document based on its path. Unless a document is renamed or moved between sections *in the filesystem*, the unique identifier for the document will not change: `blog/post.md` will always have a unique identifier of `81df004c333b392d34a49fd3a91ba720`.
|
||||
|
||||
`ref` and `relref` were added so you can make these reference links without having to know the document’s unique identifier. (The links in document tables of contents are automatically up-to-date with this value.)
|
||||
|
||||
{{</* relref "extras/crossreferences.md#hugo-heading-anchors" */>}}
|
||||
/extras/crossreferences/#hugo-heading-anchors:77cd9ea530577debf4ce0f28c8dca242
|
||||
|
||||
> What follows is a deeper discussion of *why* and *how* Hugo generates heading anchors. It is not necessary to know this to use `ref` and `relref`, but it may be useful in understanding how some anchors may not match your expectations.
|
||||
|
||||
### How to Generate a Heading Anchor
|
||||
|
||||
Convert the text of the heading to lowercase.
|
||||
|
||||
Hugo: A Fast & Modern Static Web Engine
|
||||
hugo: a fast & modern static web engine
|
||||
|
||||
Replace anything that isn't an ASCII letter (`a-z`) or number (`0-9`) with a dash (`-`).
|
||||
|
||||
hugo: a fast & modern static web engine
|
||||
hugo--a-fast---modern-static-web-engine
|
||||
|
||||
Get rid of extra dashes.
|
||||
|
||||
hugo--a-fast---modern-static-web-engine
|
||||
hugo-a-fast-modern-static-web-engine
|
||||
|
||||
You have just converting the text of a heading to a suitable anchor. If your document has unique heading text, all of the anchors will be unique, too.
|
||||
|
||||
#### Specifying Heading Anchors
|
||||
|
||||
You can also tell Hugo to use a particular heading anchor.
|
||||
|
||||
# Hugo: A Fast & Modern Static Web Engine {#hugo-main}
|
||||
|
||||
Hugo will use `hugo-main` as the heading anchor.
|
||||
|
||||
### What About Duplicate Heading Anchors?
|
||||
|
||||
The technique outlined above works well enough, but some documents have headings with identical text, like the [shortcodes](/extras/shortcodes/) page—there are three headings with the text "Example". You can specify heading anchors manually:
|
||||
|
||||
### Example {#example-1}
|
||||
### Example {#example-2}
|
||||
### Example {#example-3}
|
||||
|
||||
It’s easy to forget to do that all the time, and Hugo is smart enough to do it for you. It just adds `-x` to the end of each heading it has already seen.
|
||||
|
||||
* `### Example` ⇒ `example`
|
||||
* `### Example` ⇒ `example-1`
|
||||
* `### Example` ⇒ `example-2`
|
||||
|
||||
Sometimes it's a little harder, but Hugo can recover from those, too, by adding more suffixes:
|
||||
|
||||
* `# Heading` ⇒ `heading`
|
||||
* `# Heading 1` ⇒ `heading-1`
|
||||
* `# Heading` ⇒ `heading-1-1`
|
||||
* `# Heading` ⇒ `heading-1-2`
|
||||
* `# Heading 1` ⇒ `heading-2`
|
||||
|
||||
This can even affect specified heading anchors that come after a generated heading anchor.
|
||||
|
||||
* `# My Heading` ⇒ `my-heading`
|
||||
* `# My Heading {#my-heading}` ⇒ `my-heading-1`
|
||||
|
||||
> This particular collision and override is unfortunate, but unavoidable because Hugo processes each heading for collision detection as it sees it during conversion.
|
||||
|
||||
This technique works well for documents rendered on individual pages, like blog posts. What about on Hugo list pages?
|
||||
|
||||
### Unique Heading Anchors in Lists
|
||||
|
||||
Hugo converts each document from Markdown independently. It doesn’t know that `blog/post.md` has an "Example" heading that will collide with the "Example" heading in `blog/post2.md`. Even if it did know this, the addition of `blog/post3.md` should not cause the anchors for the headings in the other blog posts to change.
|
||||
|
||||
Enter the document’s unique identifier. To prevent this sort of collision on
|
||||
list pages, Hugo always appends the document's to a generated heading anchor.
|
||||
So, the "Example" heading in `blog/post.md` actually turns into
|
||||
`#example:81df004…`, and the "Example" heading in `blog/post2.md` actually
|
||||
turns into `#example:8cf1599…`. All you have to know is the heading anchor that
|
||||
was generated, not the document identifier; `ref` and `relref` take care of the
|
||||
rest for you.
|
||||
|
||||
<a href='{{</* relref "blog/post.md#example" */>}}'>Post Example</a>
|
||||
<a href='/blog/post.md#81df004…'>Post Example</a>
|
||||
|
||||
[Post Two Example]({{</* relref "blog/post2.md#example" */>}})
|
||||
<a href='/blog/post2.md#8cf1599…'>Post Two Example</a>
|
||||
|
||||
|
||||
[built-in Hugo shortcodes]: /content-management/shortcodes/#using-the-built-in-shortcodes
|
||||
@@ -12,9 +12,120 @@ draft: false
|
||||
slug:
|
||||
aliases: [/content/front-matter/]
|
||||
toc:
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
**Front matter** allows you to keep metadata attached to an instance of a [content type][]---i.e., embedded inside a content file---and is one of the many features that gives Hugo its strength. Hugo supports a few different formats for front matter, each with their own identifying tokens.
|
||||
|
||||
## Supported Front Matter Formats
|
||||
|
||||
* **TOML**, identified by '`+++`'.
|
||||
* **YAML**, identified by '`---`'.
|
||||
* **JSON**, a single JSON object which is surrounded by '`{`' and '`}`', each on their own line.
|
||||
|
||||
### TOML Front Matter Example
|
||||
|
||||
```toml
|
||||
+++
|
||||
title = "spf13-vim 3.0 release and new website"
|
||||
description = "spf13-vim is a cross platform distribution of vim plugins and resources for Vim."
|
||||
tags = [ ".vimrc", "plugins", "spf13-vim", "vim" ]
|
||||
date = "2012-04-06"
|
||||
categories = [
|
||||
"Development",
|
||||
"VIM"
|
||||
]
|
||||
slug = "spf13-vim-3-0-release-and-new-website"
|
||||
+++
|
||||
```
|
||||
|
||||
### YAML Front Matter Example
|
||||
|
||||
```yaml
|
||||
---
|
||||
title: "spf13-vim 3.0 release and new website"
|
||||
description: "spf13-vim is a cross platform distribution of vim plugins and resources for Vim."
|
||||
tags: [ ".vimrc", "plugins", "spf13-vim", "vim" ]
|
||||
lastmod: 2015-12-23
|
||||
date: "2012-04-06"
|
||||
categories:
|
||||
- "Development"
|
||||
- "VIM"
|
||||
slug: "spf13-vim-3-0-release-and-new-website"
|
||||
---
|
||||
```
|
||||
|
||||
### JSON Front Matter Example
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "spf13-vim 3.0 release and new website",
|
||||
"description": "spf13-vim is a cross platform distribution of vim plugins and resources for Vim.",
|
||||
"tags": [ ".vimrc", "plugins", "spf13-vim", "vim" ],
|
||||
"date": "2012-04-06",
|
||||
"categories": [
|
||||
"Development",
|
||||
"VIM"
|
||||
],
|
||||
"slug": "spf13-vim-3-0-release-and-new-website"
|
||||
}
|
||||
```
|
||||
|
||||
## Variables
|
||||
|
||||
There are a few predefined variables that Hugo is aware of and utilizes. The user can also create any variable they want. These will be placed into the `.Params` variable available to the templates. Field names are always normalized to lowercase (e.g. `camelCase: true` is available as `.Params.camelcase`).
|
||||
|
||||
### Required variables
|
||||
|
||||
* `title`. The title for the content
|
||||
* `description`. The description for the content
|
||||
* `date`. The date the content will be sorted by
|
||||
* `taxonomies`. These will use the field name of the plural form of the index (see tags and categories above)
|
||||
|
||||
### Optional variables
|
||||
|
||||
* **aliases** An array of one or more aliases
|
||||
(e.g. old published path of a renamed content)
|
||||
that would be created to redirect to this content.
|
||||
See [Aliases][] for details.
|
||||
* **draft** If true, the content will not be rendered unless `hugo` is called with `--buildDrafts`
|
||||
* **publishdate** If in the future, content will not be rendered unless `hugo` is called with `--buildFuture`
|
||||
* **expirydate** Content already expired will not be rendered unless `hugo` is called with `--buildExpired`
|
||||
* **type** The type of the content (will be derived from the directory automatically if unset)
|
||||
* **isCJKLanguage** If true, explicitly treat the content as CJKLanguage (`.Summary` and `.WordCount` can work properly in CJKLanguage)
|
||||
* **weight** Used for sorting
|
||||
* **markup** *(Experimental)* Specify `"rst"` for reStructuredText (requires
|
||||
`rst2html`) or `"md"` (default) for Markdown
|
||||
* **slug** appears as tail of the url. It can be used to change the part of the url that is based on the filename.
|
||||
* **url** The full path to the content from the web root. It makes no assumptions about the path of the content file. It also ignores any language prefixes of the multilingual feature.
|
||||
|
||||
{{% note "Hugo's Default URLs" %}}
|
||||
If neither `slug` nor `url` is present, and [permalinks are not configured otherwise](/content-management/url-management/#permalinks), the filename will be used to create the URL for a page.
|
||||
{{% /note %}}
|
||||
|
||||
## Configure Blackfriday Rendering
|
||||
|
||||
It's possible to set some options for Markdown rendering in the page's front matter as an override to the site-wide configuration.
|
||||
|
||||
See [site configuration][] for more information.
|
||||
|
||||
## Parameters
|
||||
|
||||
(Previously referred to as "variables").
|
||||
## Ordering Content
|
||||
|
||||
### Assigning `weight` to Content
|
||||
|
||||
### Assigning `weight` to Taxonomies
|
||||
|
||||
## Front Matter Format Specs
|
||||
|
||||
* [TOML Spec][]
|
||||
* [YAML Spec][]
|
||||
* [JSON Spec][]
|
||||
|
||||
[aliases]: /content-management/url-management/#aliases/
|
||||
[content type]: /content-management/content-types/
|
||||
[site configuration]: /project-organization/configuration/ "Hugo documentation for site configuration"
|
||||
[JSON Spec]: /documents/ecma-404-json-spec.pdf "Specification for JSON, JavaScript Object Notation"
|
||||
[TOML Spec]: https://github.com/toml-lang/toml "Specification for TOML, Tom's Obvious Minimal Language"
|
||||
[YAML Spec]: http://yaml.org/spec/ "Specification for YAML, YAML Ain't Markup Language"
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
---
|
||||
title: Markdown and Supported Formats
|
||||
linktitle:
|
||||
description: Hugo uses the BlackFriday markdown parser for content files but also provides support for additional syntaxes (eg, Asciidoc) via external helpers.
|
||||
date: 2017-01-10
|
||||
publishdate: 2017-01-10
|
||||
lastmod: 2017-01-10
|
||||
categories: [content management]
|
||||
tags: [markdown,asciidoc,mmark,content format]
|
||||
weight: 10
|
||||
draft: false
|
||||
slug:
|
||||
aliases: [/content/markdown-extras/,/content/supported-formats/,/content/markdown/]
|
||||
toc: true
|
||||
notes:
|
||||
---
|
||||
|
||||
## Markdown
|
||||
|
||||
Markdown is the natively supported content format for Hugo and is rendered using the excellent [BlackFriday project][], a markdown parser written in Golang.
|
||||
|
||||
{{% note "Deeply Nested Lists" %}}
|
||||
Hugo uses [BlackFriday](https://github.com/russross/blackfriday), a markdown processor written in Golang. BlackFriday has a known issue [(#329)](https://github.com/russross/blackfriday/issues/329) with handling deeply nested lists, but there is a workaround. If you write lists in markdown, be sure to include 4 spaces (i.e., <kbd>tab</kbd>) rather than 2 to delimit nesting of lists.
|
||||
{{% /note %}}
|
||||
|
||||
## Additional Resources
|
||||
|
||||
<!-- Mention shortcodes as markdown extension -->
|
||||
|
||||
* [Markdown Tutorial][]
|
||||
|
||||
[BlackFriday project]: https://github.com/russross/blackfriday
|
||||
[Markdown Tutorial]: http://www.markdowntutorial.com/
|
||||
@@ -12,5 +12,5 @@ draft: false
|
||||
slug:
|
||||
aliases: [/extras/menus/]
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -12,5 +12,5 @@ draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -6,28 +6,25 @@ date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
weight: 25
|
||||
tags: [markdown,content]
|
||||
categories: [content management]
|
||||
tags: [markdown,content,shortcodes]
|
||||
draft: false
|
||||
slug:
|
||||
aliases: [/extras/shortcodes/]
|
||||
toc: true
|
||||
notes:
|
||||
---
|
||||
|
||||
Hugo uses Markdown for its simple content format. However, there are a lot of things that Markdown doesn’t support well.
|
||||
Hugo loves Markdown because of its simple content format, but there are times when markdown falls short. Often, content authors fall back on adding raw HTML (e.g., video `<iframes>`) to markdown content. We think blocks of raw HTML contradict the beautiful simplicity of markdown's syntax.
|
||||
|
||||
We are unwilling to accept being constrained by our simple format. Also unacceptable is writing raw HTML in our Markdown every time we want to include unsupported content such as a video. To do so is in complete opposition to the intent of using a bare-bones format for our content and utilizing templates to apply styling for display.
|
||||
Hugo created **shortcodes** to circumvent these limitations.
|
||||
|
||||
To avoid both of these limitations, Hugo created **shortcodes**.
|
||||
A shortcode is a simple snippet inside a content file that Hugo will render using a predefined template. Note that shortcodes will not work in template files---if you need the type of drop-in functionality that shortcodes provide but in a template, you most likely want a [partial template][partialtemplatespage] instead.
|
||||
|
||||
A shortcode is a simple snippet inside a content file that Hugo will render using a predefined template. Note that shortcodes will not work in template files---if you need a functionality like that in a template, you most likely want a [partial template][] instead.
|
||||
|
||||
Another benefit is, you can update your shortcode with any related new classes or techniques, and upon generation, Hugo will easily merge in your changes. You avoid a possibly complicated search and replace operation.
|
||||
In addition to cleaner markdown, shortcodes can be updated any time to reflect new classes, techniques, or standards. At the point of site generation, Hugo shortcodes will easily merge in your changes. You avoid a possibly complicated search and replace operation.
|
||||
|
||||
## Using Shortcodes
|
||||
|
||||
In your content files, a shortcode can be called by using the `{{%/* name parameters*/%}}` form. Shortcode parameters are space delimited. Parameters with spaces can be quoted.
|
||||
In your content files, a shortcode can be called by using the `{{%/* shortcodename parameters*/%}}` form. Shortcode parameters are space delimited. Parameters with internal spaces can be quoted.
|
||||
|
||||
The first word is always the name of the shortcode. Parameters follow the name.
|
||||
Depending upon how the shortcode is defined, the parameters may be named,
|
||||
@@ -35,7 +32,7 @@ positional or both (although you can't mixed parameter types in a single call).
|
||||
The format for named parameters models that of HTML with the format
|
||||
`name="value"`.
|
||||
|
||||
Some shortcodes use or require closing shortcodes. Like HTML, the opening and closing shortcodes match (name only), the closing being prepended with a slash.
|
||||
Some shortcodes use or require closing shortcodes. Like HTML, the opening and closing shortcodes match (name only) with the closing declaration prepended with a slash.
|
||||
|
||||
Example of a paired shortcode:
|
||||
|
||||
@@ -61,24 +58,24 @@ The `<` character indicates that the shortcode's inner content doesn't need any
|
||||
{{</* myshortcode */>}}<p>Hello <strong>World!</strong></p>{{</* /myshortcode */>}}
|
||||
```
|
||||
|
||||
## Built-in Shortcodes
|
||||
## Using the Built-in Shortcodes
|
||||
|
||||
Hugo ships with a set of predefined shortcodes.
|
||||
Hugo ships with a set of predefined shortcodes the represent very common usage that would otherwise muddy your content with unnecessary markup.
|
||||
|
||||
### `figure`
|
||||
|
||||
`figure` is simply an extension of the image capabilities present with Markdown.`figure` provides the ability to add captions, CSS classes, alt text, links etc.
|
||||
`figure` is an extension of the image syntax in Markdown, which does not provide a shorthand for the more semantic [HTML5 `<figure>` element][figurelement].
|
||||
|
||||
`figure` can use the following named parameters:
|
||||
|
||||
* src
|
||||
* link
|
||||
* title
|
||||
* caption
|
||||
* class
|
||||
* attr (attribution)
|
||||
* attrlink
|
||||
* alt
|
||||
* `src`
|
||||
* `link`
|
||||
* `title`
|
||||
* `caption`
|
||||
* `class`
|
||||
* `attr` (i.e., attribution)
|
||||
* `attrlink`
|
||||
* `alt`
|
||||
|
||||
#### Example `figure` Input
|
||||
|
||||
@@ -103,13 +100,15 @@ Hugo ships with a set of predefined shortcodes.
|
||||
|
||||
### `gist`
|
||||
|
||||
Including code snippets with GitHub gists while writing a tutorial is common situation bloggers face. With a given URL of the gist; e.g.:
|
||||
|
||||
* https://gist.github.com/spf13/7896402
|
||||
|
||||
pass the owner and the ID of the gist to the shortcode:
|
||||
Bloggers often want to include GitHub gists when writing posts. Let's supposed we want to use the following [gist][examplegist]:
|
||||
|
||||
```html
|
||||
https://gist.github.com/spf13/7896402
|
||||
```
|
||||
|
||||
We can embed the gist in our content via username and gist ID pulled from the URL:
|
||||
|
||||
```golang
|
||||
{{</* gist spf13 7896402 */>}}
|
||||
```
|
||||
|
||||
@@ -183,7 +182,7 @@ These shortcodes will look up the pages by their relative path (e.g., `blog/post
|
||||
`ref` and `relref` also make it possible to make fragmentary links that work for the header links generated by Hugo.
|
||||
|
||||
{{% note "More on Cross References" %}}
|
||||
Read a more extensive description of `ref` and `relref` in the [cross-references]() documentation.
|
||||
Read a more extensive description of `ref` and `relref` in the [cross references](/content-management/cross-references/) documentation.
|
||||
{{% /note %}}
|
||||
|
||||
`ref` and `relref` take exactly one required parameter of _reference_, quoted and in position `0`.
|
||||
@@ -260,228 +259,21 @@ Furthermore, you can autostart the embedded video by setting the `autostart` par
|
||||
{{</* youtube id="w7Ft2ymGmfc" autoplay="true" */>}}
|
||||
```
|
||||
|
||||
## Creating your own shortcodes
|
||||
## Creating Custom Shortcodes
|
||||
|
||||
To create a shortcode, place a template in the `layouts/shortcodes` directory of your [source organization][]. The template name will be the name of the shortcode. In creating a shortcode, you can choose if the shortcode will use _positional parameters_, or _named parameters_, or _both_. A good rule of thumb is that if a shortcode has a single required value in the case of the `youtube` example below, then positional works very well. For more complex layouts with optional parameters, named parameters work best. Allowing both types of parameters is useful for complex layouts where you want to set default values that can be overridden.
|
||||
To learn more about creating your own shortcode templates, see the [shortcode template documentation][].
|
||||
|
||||
### Accessing Parameters
|
||||
|
||||
To access a parameter in any shortcode, use the `.Get` method. Whether you pass a key (string) or a number to the `.Get` method depends on whether you are accessing a named or positional parameter, respectively.
|
||||
|
||||
To access a parameter by name, the `.Get` method followed by the named parameter as a quoted string. Named parameters are less terse but do not require that a content author be mindful of the order of parameters.
|
||||
|
||||
```golang
|
||||
{{ .Get "class" }}
|
||||
```
|
||||
|
||||
To access a parameter by position, the `.Get` method can be used, keeping in mind that the first positional parameter within the shortcode declaration starts at `0`:
|
||||
|
||||
```golang
|
||||
{{ .Get 0 }}
|
||||
```
|
||||
|
||||
`with` is great when the output depends on a parameter being set:
|
||||
|
||||
```golang
|
||||
{{ with .Get "class"}} class="{{.}}"{{ end }}
|
||||
```
|
||||
|
||||
`.Get` can also be used to check if a parameter has been provided. This is
|
||||
most helpful when the condition depends on either of the values, or both:
|
||||
|
||||
```golang
|
||||
{{ or .Get "title" | .Get "alt" | if }} alt="{{ with .Get "alt"}}{{.}}{{else}}{{.Get "title"}}{{end}}"{{ end }}
|
||||
```
|
||||
|
||||
If a closing shortcode is used, the variable `.Inner` will be populated with all
|
||||
of the content between the opening and closing shortcodes. If a closing
|
||||
shortcode is required, you can check the length of `.Inner` and provide a warning
|
||||
to the user.
|
||||
|
||||
A shortcode with `.Inner` content can be used without the inline content, and without the closing shortcode, by using the self-closing syntax:
|
||||
|
||||
```golang
|
||||
{{</* innershortcode /*/>}}
|
||||
```
|
||||
|
||||
The variable `.Params` contains the list of parameters in case you need to do more complicated things than `.Get`. It is sometimes useful to provide a flexible shortcode that can take named or positional parameters. To meet this need, Hugo shortcodes have `.IsNamedParams`, a boolean available that can be used such as `{{ if .IsNamedParams }}...{{ else }}...{{ end }}`. See the `Single Flexible Example` below for an example.
|
||||
|
||||
You can also use the variable `.Page` to access all the normal [page variables][].
|
||||
|
||||
A shortcodes can be nested. In a nested shortcode you can access the parent shortcode context with `.Parent`. This can be very useful for inheritance of common shortcode parameters from the root.
|
||||
|
||||
### Single Positional Example: `youtube`
|
||||
|
||||
```golang
|
||||
{{</* youtube 09jf3ow9jfw */>}}
|
||||
```
|
||||
|
||||
Would load the template at `/layouts/shortcodes/youtube.html`:
|
||||
|
||||
{{% input "/layouts/shortcodes/youtube.html" %}}
|
||||
```html
|
||||
<div class="embed video-player">
|
||||
<iframe class="youtube-player" type="text/html" width="640" height="385" src="http://www.youtube.com/embed/{{ index .Params 0 }}" allowfullscreen frameborder="0">
|
||||
</iframe>
|
||||
</div>
|
||||
```
|
||||
{{% /input %}}
|
||||
|
||||
This would be rendered as:
|
||||
|
||||
{{% output "youtube-embed.html" %}}
|
||||
```html
|
||||
<div class="embed video-player">
|
||||
<iframe class="youtube-player" type="text/html"
|
||||
width="640" height="385"
|
||||
src="http://www.youtube.com/embed/09jf3ow9jfw"
|
||||
allowfullscreen frameborder="0">
|
||||
</iframe>
|
||||
</div>
|
||||
```
|
||||
{{% /output %}}
|
||||
|
||||
### Single Named Example: `image`
|
||||
|
||||
{{% input "content-image.md" %}}
|
||||
```golang
|
||||
{{</* img src="/media/spf13.jpg" title="Steve Francia" */>}}
|
||||
```
|
||||
{{% /input %}}
|
||||
|
||||
Would load the template at `/layouts/shortcodes/img.html`:
|
||||
|
||||
{{% input "/layouts/shortcodes/img.html" %}}
|
||||
```html
|
||||
<!-- image -->
|
||||
<figure {{ with .Get "class" }}class="{{.}}"{{ end }}>
|
||||
{{ with .Get "link"}}<a href="{{.}}">{{ end }}
|
||||
<img src="{{ .Get "src" }}" {{ if or (.Get "alt") (.Get "caption") }}alt="{{ with .Get "alt"}}{{.}}{{else}}{{ .Get "caption" }}{{ end }}"{{ end }} />
|
||||
{{ if .Get "link"}}</a>{{ end }}
|
||||
{{ if or (or (.Get "title") (.Get "caption")) (.Get "attr")}}
|
||||
<figcaption>{{ if isset .Params "title" }}
|
||||
<h4>{{ .Get "title" }}</h4>{{ end }}
|
||||
{{ if or (.Get "caption") (.Get "attr")}}<p>
|
||||
{{ .Get "caption" }}
|
||||
{{ with .Get "attrlink"}}<a href="{{.}}"> {{ end }}
|
||||
{{ .Get "attr" }}
|
||||
{{ if .Get "attrlink"}}</a> {{ end }}
|
||||
</p> {{ end }}
|
||||
</figcaption>
|
||||
{{ end }}
|
||||
</figure>
|
||||
<!-- image -->
|
||||
```
|
||||
{{% /input %}}
|
||||
|
||||
Would be rendered as:
|
||||
|
||||
{{% output "figure.html" %}}
|
||||
```html
|
||||
<figure >
|
||||
<img src="/media/spf13.jpg" />
|
||||
<figcaption>
|
||||
<h4>Steve Francia</h4>
|
||||
</figcaption>
|
||||
</figure>
|
||||
```
|
||||
{{% /output %}}
|
||||
|
||||
### Single Flexible Example: `vimeo`
|
||||
|
||||
```golang
|
||||
{{</* vimeo 49718712 */>}}
|
||||
{{</* vimeo id="49718712" class="flex-video" */>}}
|
||||
```
|
||||
|
||||
Would load the template found at `/layouts/shortcodes/vimeo.html`:
|
||||
|
||||
{{% input "/layouts/shortcodes/vimeo.html" %}}
|
||||
```html
|
||||
{{ if .IsNamedParams }}
|
||||
<div class="{{ if .Get "class" }}{{ .Get "class" }}{{ else }}vimeo-container{{ end }}">
|
||||
<iframe src="//player.vimeo.com/video/{{ .Get "id" }}" allowfullscreen></iframe>
|
||||
</div>
|
||||
{{ else }}
|
||||
<div class="{{ if len .Params | eq 2 }}{{ .Get 1 }}{{ else }}vimeo-container{{ end }}">
|
||||
<iframe src="//player.vimeo.com/video/{{ .Get 0 }}" allowfullscreen></iframe>
|
||||
</div>
|
||||
{{ end }}
|
||||
```
|
||||
{{% /input %}}
|
||||
|
||||
Would be rendered as:
|
||||
|
||||
{{% output "vimeo-iframes.html" %}}
|
||||
```html
|
||||
<div class="vimeo-container">
|
||||
<iframe src="//player.vimeo.com/video/49718712" allowfullscreen></iframe>
|
||||
</div>
|
||||
<div class="flex-video">
|
||||
<iframe src="//player.vimeo.com/video/49718712" allowfullscreen></iframe>
|
||||
</div>
|
||||
```
|
||||
{{% /output %}}
|
||||
|
||||
### Paired Example: `highlight`
|
||||
|
||||
*Hugo already ships with the `highlight` shortcode*
|
||||
|
||||
{{% input "highlight-example.md" %}}
|
||||
```markdown
|
||||
{{</* highlight html */>}}
|
||||
<html>
|
||||
<body> This HTML </body>
|
||||
</html>
|
||||
{{</* /highlight */>}}
|
||||
```
|
||||
{{% /input %}}
|
||||
|
||||
The template for this uses the following code, which is already included in Hugo:
|
||||
|
||||
```golang
|
||||
{{ .Get 0 | highlight .Inner }}
|
||||
```
|
||||
|
||||
And will be rendered as:
|
||||
|
||||
{{% output "syntax-highlighted.html" %}}
|
||||
```html
|
||||
<div class="highlight" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672"><html></span>
|
||||
<span style="color: #f92672"><body></span> This HTML <span style="color: #f92672"></body></span>
|
||||
<span style="color: #f92672"></html></span>
|
||||
</pre></div>
|
||||
```
|
||||
{{% /output %}}
|
||||
|
||||
{{% note %}}
|
||||
The preceding template makes use of a Hugo-specific template function called `highlight`, which uses [Pygments][] to add the highlighting code.
|
||||
{{% /note %}}
|
||||
|
||||
### Simple Single-word Example: `year`
|
||||
|
||||
Let's assume you would like to have a shortcode to be replaced by the current year in your Markdown content files, for a license or copyright statement. Your goal is to be able to call the following shortcode in a content file:
|
||||
|
||||
```markdown
|
||||
{{</* year */>}}
|
||||
```
|
||||
|
||||
{{% input "/layouts/shortcodes/year.html" %}}
|
||||
```golang
|
||||
{{ .Page.Now.Year }}
|
||||
```
|
||||
{{% /input %}}
|
||||
|
||||
More shortcode examples can be found in the [shortcodes directory for spf13.com][] and the [shortcodes directory for the Hugo docs][].
|
||||
|
||||
[cross-references]: /content-management/cross-references/
|
||||
[contentmanagementsection]: /content-management/supported-content-formats/
|
||||
[examplegist]: https://gist.github.com/spf13/7896402
|
||||
[figureelement]: http://html5doctor.com/the-figure-figcaption-elements/ "An article from HTML5 doctor discussing the fig and figcaption elements."
|
||||
[`figure` shortcode]: #figure
|
||||
[Instagram]: https://www.instagram.com/
|
||||
[page variables]: /variables-and-params/page-variables/
|
||||
[partial template]: /templates/partials-templates/
|
||||
[pagevariables]: /variables-and-params/page-variables/
|
||||
[partialtemplatespage]: /templates/partials-templates/
|
||||
[Pygments]: http://pygments.org/
|
||||
[shortcodes directory for spf13.com]: https://github.com/spf13/spf13.com/tree/master/layouts/shortcodes
|
||||
[shortcodes directory for the Hugo docs]: https://github.com/spf13/hugo/tree/master/docs/layouts/shortcodes
|
||||
[source organization]: /project-organization/directory-structure/
|
||||
[projectorganizationsection]: /project-organization/directory-structure/
|
||||
[shortcode template documentation]: /templates/shortcode-templates/
|
||||
[Speaker Deck]: https://speakerdeck.com/
|
||||
[templatessection]: /templates/
|
||||
[Vimeo]: https://vimeo.com/
|
||||
[YouTube Videos]: https://www.youtube.com/
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
title: Supported Content Formats
|
||||
linktitle:
|
||||
description: Hugo uses the Blackfriday markdown parser for content files but also provides support for additional syntaxes (eg, Asciidoc) via external helpers.
|
||||
date: 2017-01-10
|
||||
publishdate: 2017-01-10
|
||||
lastmod: 2017-01-10
|
||||
categories: [content management]
|
||||
tags: [markdown,asciidoc,mmark,content format]
|
||||
weight: 10
|
||||
draft: false
|
||||
slug:
|
||||
aliases: [/content/markdown-extras/,/content/supported-formats/,/content/markdown/]
|
||||
toc: true
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## Markdown
|
||||
|
||||
Markdown is the natively supported content format for Hugo and is rendered using the excellent [Blackfriday project][], a markdown parser written in Golang.
|
||||
|
||||
{{% note "Deeply Nested Lists" %}}
|
||||
Blackfriday has a known issue [(#329)](https://github.com/russross/blackfriday/issues/329) with handling deeply nested lists, but there is a workaround. If you write lists in markdown, use 4 spaces (i.e., <kbd>tab</kbd>) rather than 2 to delimit nesting of lists.
|
||||
{{% /note %}}
|
||||
|
||||
## Additional Content Formats
|
||||
|
||||
Since 0.14, Hugo has defined a new concept called _external helpers_. This means you can write your content using [Asciidoc][] or [reStructuredText][]. If you have files with associated extensions, Hugo will call external commands to generate the content ([see Hugo source code][]).
|
||||
|
||||
For example, for Asciidoc files, Hugo will try to call the **asciidoctor** or **asciidoc** command. This means that you will have to install the associated tool on your machine to be able to use these formats.
|
||||
|
||||
To use these formats, just use the standard extension and the front matter exactly as you would do with natively supported `.md` files.
|
||||
|
||||
{{% note "Performance of External Helpers" %}}
|
||||
Because these are external commands, generation performance for your preferred content format will heavily depend on the performance of the external tool used. As this feature is still in its infancy, feedback is especially welcome.
|
||||
{{% /note %}}
|
||||
|
||||
## Extending Markdown
|
||||
|
||||
Hugo provides some convenient methods for extending markdown.
|
||||
|
||||
### Task Lists
|
||||
|
||||
Hugo supports GitHub styled task lists (TODO lists) for the Blackfriday markdown renderer. If you do not want to use this feature, you can disable it in the See [Blackfriday config](/overview/configuration/#configure-blackfriday-rendering) for how to turn it off.
|
||||
|
||||
#### Task List
|
||||
|
||||
```markdown
|
||||
- [ ] a task list item
|
||||
- [ ] list syntax required
|
||||
- [ ] incomplete
|
||||
- [x] completed
|
||||
```
|
||||
|
||||
Renders as:
|
||||
|
||||
- [ ] a task list item
|
||||
- [ ] list syntax required
|
||||
- [ ] incomplete
|
||||
- [x] completed
|
||||
|
||||
And produces this HTML:
|
||||
|
||||
```html
|
||||
<ul class="task-list">
|
||||
<li><input type="checkbox" disabled="" class="task-list-item"> a task list item</li>
|
||||
<li><input type="checkbox" disabled="" class="task-list-item"> list syntax required</li>
|
||||
<li><input type="checkbox" disabled="" class="task-list-item"> incomplete</li>
|
||||
<li><input type="checkbox" checked="" disabled="" class="task-list-item"> completed</li>
|
||||
</ul>
|
||||
```
|
||||
|
||||
### Shortcodes
|
||||
|
||||
If you write in markdown and find yourself frequently embedding your content with raw HTML, Hugo provides built-in [shortcodes][] functionality to act as the intermediary between your content and templating.
|
||||
|
||||
### Code Blocks
|
||||
|
||||
Hugo supports GitHub-flavored markdown's use of triple back ticks, as well as provides a special [`highlight` nested shortcode][] to render syntax highlighting via [Pygments][]. For usage examples and a complete explanation, see the [syntax highlighting documentation][] in [developer tools][].
|
||||
|
||||
## Markdown Learning Resources
|
||||
|
||||
* [Markdown Tutorial][]
|
||||
* [Daring Fireball: Markdown, John Gruber][]
|
||||
|
||||
[`highlight` nested shortcode]: /content-management/shortcodes/#highlight
|
||||
[AsciiDoc]: http://asciidoc.org/
|
||||
[Blackfriday project]: https://github.com/russross/blackfriday
|
||||
[Daring Fireball: Markdown, John Gruber]: https://daringfireball.net/projects/markdown/
|
||||
[developer tools]: /developer-tools/
|
||||
[Markdown Tutorial]: http://www.markdowntutorial.com/
|
||||
[Pygments]: http://pygments.org/
|
||||
[reStructuredText]: http://docutils.sourceforge.net/rst.html
|
||||
[see Hugo source code]: https://github.com/spf13/hugo/blob/77c60a3440806067109347d04eb5368b65ea0fe8/helpers/general.go#L65
|
||||
[shortcodes]: /content-management/shortcodes/
|
||||
[syntax highlighting documentation]: /developer-tools/syntax-highlighting/
|
||||
@@ -11,5 +11,5 @@ weight: 100
|
||||
draft: false
|
||||
aliases: [/extras/toc/]
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -12,7 +12,7 @@ draft: false
|
||||
slug:
|
||||
aliases: [/taxonomies/overview/,/taxonomies/usage/,/indexes/overview/,/doc/indexes/,/extras/indexes]
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## What is a Taxonomy?
|
||||
@@ -25,26 +25,74 @@ Taxonomies were previously known as *indexes* in Hugo before v0.11.
|
||||
|
||||
### Taxonomy Definitions
|
||||
|
||||
In order to effectively work with taxonomies in Hugo, it's important to first understand the language used to described different facets of usage.
|
||||
In order to effectively work with taxonomies in Hugo, it's important to first understand the language used to described the concept.
|
||||
|
||||
* **Taxonomy:** A categorization that can be used to classify content
|
||||
* **Term:** A key within that taxonomy
|
||||
* **Value:** A piece of content assigned to that Term
|
||||
|
||||
## Default Values and URLs
|
||||
### Example Taxonomy: Movie Website
|
||||
|
||||
Hugo natively supports taxonomies, which means there are architectural patterns and default values baked into Hugo's core. Luckily, Hugo limits these default behaviors to those that save you time as you develop your site.
|
||||
Let's assume you are making a website about movies. You may want to include the following taxonomies:
|
||||
|
||||
* Actors
|
||||
* Directors
|
||||
* Studios
|
||||
* Genre
|
||||
* Year
|
||||
* Awards
|
||||
|
||||
Then, in each of the movies, you would specify terms for each of these taxonomies (i.e., in the [front matter][] of each of your movie content files). From these terms, Hugo would automatically create pages for each Actor, Director, Studio, Genre, Year, and Award, with each listing all of the Movies that matched that specific Actor, Director, Studio, Genre, Year, and Award.
|
||||
|
||||
### Movie Taxonomy Organization
|
||||
|
||||
To continue with the example of a movie site, the following demonstrates content relationships from the perspective of the taxonomy:
|
||||
|
||||
```
|
||||
Actor <- Taxonomy
|
||||
Bruce Willis <- Term
|
||||
The Six Sense <- Content
|
||||
Unbreakable <- Content
|
||||
Moonrise Kingdom <- Content
|
||||
Samuel L. Jackson <- Term
|
||||
Unbreakable <- Content
|
||||
The Avengers <- Content
|
||||
xXx <- Content
|
||||
```
|
||||
|
||||
From the perspective of the content, the relationships would appear differently, although the data and labels used are the same:
|
||||
|
||||
```
|
||||
Unbreakable <- Content
|
||||
Actors <- Taxonomy
|
||||
Bruce Willis <- Term
|
||||
Samuel L. Jackson <- Term
|
||||
Director <- Taxonomy
|
||||
M. Night Shyamalan <- Term
|
||||
...
|
||||
Moonrise Kingdom <- Content
|
||||
Actors <- Taxonomy
|
||||
Bruce Willis <- Term
|
||||
Bill Murray <- Term
|
||||
Director <- Taxonomy
|
||||
Wes Anderson <- Term
|
||||
...
|
||||
```
|
||||
|
||||
## Hugo Taxonomy Defaults
|
||||
|
||||
Hugo natively supports taxonomies, which means there are architectural patterns and default values baked into Hugo's core. Luckily, Hugo limits these default behaviors to those that fit the most common use cases in an effort to save you time.
|
||||
|
||||
### Default Taxonomies
|
||||
|
||||
Hugo ships with *tags* and *categories* as default taxonomies. These taxonomies are common to many website systems (e.g., WordPress, Drupal, Jekyll). Unlike these systems, Hugo makes it trivial to customize the taxonomies you will be using for your website. In addition to *tags* and *categories*, a *series* of posts for a blog is another common example of taxonomies.
|
||||
Hugo ships with *tags* and *categories* as default taxonomies. These taxonomies are common to many website systems (e.g., WordPress, Drupal, Jekyll). Unlike these systems, Hugo makes it trivial to customize the taxonomies you will be using for your website.
|
||||
|
||||
### Pages Generated
|
||||
### Default Taxonomy Pages and URLs
|
||||
|
||||
When taxonomies are used---and [taxonomy templates][] are provided---Hugo will automatically create a taxonomy page listing all of the taxonomy's terms and individual pages for all content associated with the term. For example, a `categories` taxonomy will create the following pages:
|
||||
When taxonomies are used---and [taxonomy templates][] are provided---Hugo will automatically create both a page listing all the taxonomy's terms and individual pages with lists of content associated with each term. For example, a `categories` taxonomy will create the following pages:
|
||||
|
||||
* A single page at `yoursite.com/categories/` that lists all the [terms within the taxonomy][]
|
||||
* [Individual taxonomy list pages][] (e.g., `/categories/development/`) for each of the terms that shows a listing of all pages marked as part of that taxonomy within any content file's [front matter][]
|
||||
* A single page at `yoursite.com/categories/` that lists all the [terms within the taxonomy][taxonomy terms templates]
|
||||
* [Individual taxonomy list pages][taxonomy templates] (e.g., `/categories/development/`) for each of the terms that shows a listing of all pages marked as part of that taxonomy within any content file's [front matter][]
|
||||
|
||||
## Configuring Taxonomies
|
||||
|
||||
@@ -57,7 +105,7 @@ that specifies three taxonomies (the default two, plus `series`).
|
||||
|
||||
Notice the format is `singular key = "plural value"` for TOML and `singular key: "plural value"` for YAML:
|
||||
|
||||
### TOML Configuration
|
||||
### TOML Taxonomy Configuration
|
||||
|
||||
```toml
|
||||
[taxonomies]
|
||||
@@ -66,7 +114,7 @@ Notice the format is `singular key = "plural value"` for TOML and `singular key:
|
||||
series = "series"
|
||||
```
|
||||
|
||||
### YAML Configuration
|
||||
### YAML Taxonomy Configuration
|
||||
|
||||
```yaml
|
||||
taxonomies:
|
||||
@@ -75,11 +123,21 @@ taxonomies:
|
||||
series: "series"
|
||||
```
|
||||
|
||||
### Overriding Hugo's Default Taxonomies
|
||||
|
||||
If you do not specify any taxonomies in your [site configuration][] file ***and*** your content already includes front matter with `tags:` or `categories`, Hugo will automatically create taxonomy pages. To override this behavior, set the key-value pairs for both of the default taxonomies to empty strings in your `config` file.
|
||||
|
||||
```toml
|
||||
[taxonomies]
|
||||
tag = ""
|
||||
category = ""
|
||||
```
|
||||
|
||||
### Preserving Taxonomy Values
|
||||
|
||||
By default, taxonomy names are hyphenated, lower-cased, normalized, and then fixed and title-ized on the archive page.
|
||||
By default, taxonomy names are hyphenated, lower-cased, normalized, and then fixed and title-ized within.
|
||||
|
||||
However, if you want to have a taxonomy value with special characters such as `Gérard Depardieu` instead of `Gerard Depardieu`, you need to set the value for `preserveTaxonomyNames` in your [site configuration](/overview/configuration/) to `true`. Hugo will then preserve special characters in taxonomy values but will still titleize the values for titles and normalize them in URLs.
|
||||
However, if you want to have a taxonomy value with special characters such as `Gérard Depardieu` instead of `Gerard Depardieu`, you need to set the value for `preserveTaxonomyNames` in your [site configuration][] to `true`. Hugo will then preserve special characters in taxonomy values but will still titleize the values for titles and normalize them in URLs.
|
||||
|
||||
Note that if you use `preserveTaxonomyNames` and intend to manually construct URLs to the archive pages, you will need to pass the taxonomy values through the [`urlize` template function][].
|
||||
|
||||
@@ -93,7 +151,7 @@ Assigning content to a taxonomy is done in the [front matter][]. Simply create a
|
||||
If you would like the ability to quickly generate content files with preconfigured taxonomies or terms, read the docs on [Hugo archetypes](/content-management/archetypes/).
|
||||
{{% /note %}}
|
||||
|
||||
### TOML Front Matter Example
|
||||
### TOML Front Matter with Taxonomies Example
|
||||
|
||||
```toml
|
||||
+++
|
||||
@@ -106,7 +164,7 @@ project_url = "https://github.com/spf13/hugo"
|
||||
+++
|
||||
```
|
||||
|
||||
### YAML Front Matter Example
|
||||
### YAML Front Matter with Taxonomies Example
|
||||
|
||||
```yaml
|
||||
+++
|
||||
@@ -119,7 +177,7 @@ project_url: "https://github.com/spf13/hugo"
|
||||
+++
|
||||
```
|
||||
|
||||
### JSON Front Matter Example
|
||||
### JSON Front Matter with Taxonomies Example
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -141,66 +199,51 @@ project_url: "https://github.com/spf13/hugo"
|
||||
}
|
||||
```
|
||||
|
||||
## Add Content File with Front Matter
|
||||
## Adding Taxonomic `weight` to Content
|
||||
|
||||
See [project organization][].
|
||||
A content file can assign weight for each of its associate taxonomies. Taxonomic weight can be used for sorting or ordering content in [taxonomy list templates][] and is declared in the content file's [front matter][]. The convention for declaring taxonomic weight is `taxonomyname_weight`.
|
||||
|
||||
## Example Taxonomy
|
||||
The following TOML and YAML examples show a piece of content that has a weight of 22, which can be used for ordering purposes when rendering the pages assigned to the "a", "b" and "c" values of the `tags` taxonomy. It has also been assigned the weight of 44 when rendering the "d" category page.
|
||||
|
||||
For example, if I was writing about movies, I may want the following
|
||||
taxonomies:
|
||||
### TOML Taxonomic `weight` Example
|
||||
|
||||
* Actors
|
||||
* Directors
|
||||
* Studios
|
||||
* Genre
|
||||
* Year
|
||||
* Awards
|
||||
|
||||
I would then specify in each movie’s front matter the specific terms for each of those taxonomies. Hugo would then automatically create pages for each Actor, Director, Studio, Genre, Year and Award listing all of the Movies that matched that specific Actor, Director, etc.
|
||||
|
||||
### Taxonomy Organization
|
||||
|
||||
Let’s use an example to demonstrate the different labels in action.
|
||||
From the perspective of the taxonomy, it could be visualized as:
|
||||
|
||||
```
|
||||
Actor <- Taxonomy
|
||||
Bruce Willis <- Term
|
||||
The Six Sense <- Content
|
||||
Unbreakable <- Content
|
||||
Moonrise Kingdom <- Content
|
||||
Samuel L. Jackson <- Term
|
||||
Unbreakable <- Content
|
||||
The Avengers <- Content
|
||||
xXx <- Content
|
||||
```toml
|
||||
+++
|
||||
title = "foo"
|
||||
tags = [ "a", "b", "c" ]
|
||||
tags_weight = 22
|
||||
categories = ["d"]
|
||||
categories_weight = 44
|
||||
+++
|
||||
```
|
||||
|
||||
From the perspective of the content, it would appear differently, although the data and labels used are the same:
|
||||
### YAML Taxonomic `weight` Example
|
||||
|
||||
```yaml
|
||||
+++
|
||||
title: foo
|
||||
tags: [ "a", "b", "c" ]
|
||||
tags_weight: 22
|
||||
categories: ["d"]
|
||||
categories_weight: 44
|
||||
+++
|
||||
```
|
||||
Unbreakable <- Content
|
||||
Actors <- Taxonomy
|
||||
Bruce Willis <- Term
|
||||
Samuel L. Jackson <- Term
|
||||
Director <- Taxonomy
|
||||
M. Night Shyamalan <- Term
|
||||
...
|
||||
Moonrise Kingdom <- Content
|
||||
Actors <- Taxonomy
|
||||
Bruce Willis <- Term
|
||||
Bill Murray <- Term
|
||||
Director <- Taxonomy
|
||||
Wes Anderson <- Term
|
||||
...
|
||||
```
|
||||
|
||||
By using taxonomic weight, the same piece of content can appear in different positions in different taxonomies.
|
||||
|
||||
{{% note "Limits to Ordering Taxonomies" %}}
|
||||
Currently taxonomies only support the default ordering of content which is weight -> date. For more information, see the documentation on [taxonomy templates](/templates/taxonomy-templates/).
|
||||
{{% /note %}}
|
||||
|
||||
|
||||
[`urlize` template function]: /functions/urlize/
|
||||
[content section]: /content-section/
|
||||
[content type]: /content-type/
|
||||
[documentation on archetypes]: /content-management/archetypes/
|
||||
[front matter]: /content-management/front-matter/
|
||||
[Individual taxonomy list pages]: /templates/taxonomy-templates/#taxonomy-templates
|
||||
[project organization]: /project-organization/
|
||||
[site configuration]: /project-organization/configuration/
|
||||
[taxonomy list templates]: /templates/taxonomy-templates/#taxonomy-page-templates
|
||||
[taxonomy templates]: /templates/taxonomy-templates/
|
||||
[terms within the taxonomy]: /templates/taxonomy-templates/#terms-templates
|
||||
[taxonomy terms templates]: /templates/taxonomy-templates/#taxonomy-terms-templates "See how to order terms associated with taxonomy via taxonomy templates"
|
||||
[website configuration]: /project-organization/configuration/
|
||||
@@ -5,21 +5,108 @@ description:
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
tags: [aliases,redirects,permalinks,url management,urls]
|
||||
tags: [aliases,redirects,permalinks,urls]
|
||||
categories: [content management]
|
||||
weight: 90
|
||||
draft: false
|
||||
aliases: [/extras/permalinks/,/extras/aliases/,/content-management/permalinks-and-redirects/,/extras/urls/]
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## Base URL
|
||||
|
||||
## URLs
|
||||
|
||||
## Permalinks
|
||||
|
||||
## Redirects/Aliases
|
||||
By default, content is laid out into the target `publishdir` (public)
|
||||
namespace matching its layout within the `contentdir` hierarchy. The `permalinks` [site configuration][] option allows you to adjust this on a per-section basis. This will change where the files are written to and will change the page's internal "canonical" location, such that template references to `.RelPermalink` will honor the adjustments made as a result of the mappings in this option.
|
||||
|
||||
For example, if one of your [sections][] is called `post` and you want to adjust the canonical path to be hierarchical based on the year and month, you could set up the following configurations in YAML and TOML, respectively.
|
||||
|
||||
### YAML Permalinks Configuration Example
|
||||
|
||||
```yaml
|
||||
permalinks:
|
||||
post: /:year/:month/:title/
|
||||
```
|
||||
|
||||
### TOML Permalinks Configuration Example
|
||||
|
||||
```toml
|
||||
[permalinks]
|
||||
post = "/:year/:month/:title/"
|
||||
```
|
||||
|
||||
Only the content under `post/` will have the new URL structure. For example, the file `content/post/sample-entry` with `date: 2013-11-18T19:20:00-05:00` in its front matter will render to `public/2013/11/sample-entry/index.html` at build time and therefore be reachable at `http://yoursite.example.com/2013/11/sample-entry/`.
|
||||
|
||||
### Permalink Configuration Values
|
||||
|
||||
The following is a list of values that can be used in a `permalink` definition in your site `config` file. All references to time are dependent on the content's date.
|
||||
|
||||
* `:year` = the 4-digit year
|
||||
* `:month` = the 2-digit month
|
||||
* `:monthname` = the name of the month
|
||||
* `:day` = the 2-digit day
|
||||
* `:weekday` = the 1-digit day of the week (Sunday = 0)
|
||||
* `:weekdayname` = the name of the day of the week
|
||||
* `:yearday` = the 1- to 3-digit day of the year
|
||||
* `:section` = the content's section
|
||||
* `:title` = the content's title
|
||||
* `:slug` = the content's slug (or title if no slug)
|
||||
* `:filename` = the content's filename (without extension)
|
||||
|
||||
## Aliases
|
||||
|
||||
## Pretty URLs
|
||||
|
||||
By default, Hugo renders your content with "pretty" URLs. For example,
|
||||
content created at `/content/extras/urls.md` will be rendered at
|
||||
`/public/extras/urls/index.html` according to Hugo's default behavior after running the `hugo` CLI build command. No non-standard server-side
|
||||
configuration is required for these pretty URLs to work.
|
||||
|
||||
## Ugly URLs
|
||||
|
||||
If you would like to have what we call "ugly URLs" (e.g., http://example.com/extras/urls.html), set `uglyurls = true` or `uglyurls: true` to your site-wide `config.toml` or `config.yaml`, respectively. You can also use the `--uglyURLs=true` [flag from the command line][].
|
||||
|
||||
If you want a specific piece of content to have an exact URL, you can specify this in the front matter under the `url` key. See [Content Organization][] for more details.
|
||||
|
||||
## Canonicalization
|
||||
|
||||
## Relative URLs
|
||||
By default, all relative URLs encountered in the input are left unmodified, e.g. `/css/foo.css` would stay as `/css/foo.css`, i.e. `canonifyURLs` defaults to `false`.
|
||||
|
||||
By setting `canonifyURLs` to `true`, all relative URLs would instead be *canonicalized* using `baseURL`. For example, assuming you have `baseURL = http://yoursite.example.com/` defined in the site-wide `config.toml`, the relative URL `/css/foo.css` would be turned into the absolute URL `http://yoursite.example.com/css/foo.css`.
|
||||
|
||||
Benefits of canonicalization include fixing all URLs to be absolute, which may aid with some parsing tasks. Note though that all real browsers handle this client-side without issues.
|
||||
|
||||
Benefits of non-canonicalization include being able to have resource inclusion be scheme-relative, so that http vs https can be decided based on how this page was retrieved.
|
||||
|
||||
{{% note "`canonifyURLs` default change" %}}
|
||||
In the May 2014 release of Hugo v0.11, the default value of `canonifyURLs` was switched from `true` to `false`, which we think is the better default and should continue to be the case going forward. So, please verify and adjust your website accordingly if you are upgrading from v0.10 or older versions.
|
||||
{{% /note %}}
|
||||
|
||||
To find out the current value of `canonifyURLs` for your website, you may use the handy `hugo config` command added in v0.13.
|
||||
|
||||
```bash
|
||||
hugo config | grep -i canon
|
||||
```
|
||||
|
||||
Or, if you are on Windows and do not have `grep` installed:
|
||||
|
||||
```
|
||||
hugo config | FINDSTR /I canon
|
||||
```
|
||||
|
||||
## Relative URLs
|
||||
|
||||
By default, all relative URLs are left unchanged by Hugo, which can be problematic when you want to make your site browsable from a local file system.
|
||||
|
||||
Setting `relativeURLs` to `true` in the site configuration will cause Hugo to rewrite all relative URLs to be relative to the current content.
|
||||
|
||||
For example, if the `/post/first/` page contained a link with a relative URL of `/about/`, Hugo would rewrite that URL to `../../about/`.
|
||||
|
||||
[Content Organization]: /content-management/content-organization/
|
||||
[flag from the command line]: /developer-tools/hugo-command-line-reference/#flags
|
||||
[sections]: /content-management/content-sections/
|
||||
[site configuration]: /project-organization/configuration/
|
||||
@@ -1,17 +1,22 @@
|
||||
---
|
||||
title: Contribute to Hugo
|
||||
linktitle: Contribute to Hugo
|
||||
title: Overview
|
||||
linktitle: Overview
|
||||
description: Contribute to Hugo development and documentation.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
tags: [contribute,tutorials]
|
||||
author:
|
||||
authorprofileurl:
|
||||
categories: [contribute to hugo]
|
||||
tags: []
|
||||
weight: 01
|
||||
draft: false
|
||||
slug:
|
||||
aliases: [/tutorials/how-to-contribute-to-hugo/]
|
||||
toc: false
|
||||
notes:
|
||||
---
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
Hugo is and always will be open source. In addition to contributing to Hugo development and documentation, Hugo also has a Gitter channel ***devoted solely to discussions around development***.
|
||||
|
||||
The formal contribution guidelines for Hugo are [detailed in a `CONTRIBUTING.md`][contributionguidelines] in the Hugo source repository on GitHub.
|
||||
|
||||
[contributionguidelines]: https://github.com/spf13/hugo/blob/master/CONTRIBUTING.md
|
||||
@@ -7,57 +7,73 @@ publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
categories: [contribute to hugo]
|
||||
tags: [dev,showcase]
|
||||
weight:
|
||||
weight: 30
|
||||
draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
toc: true
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## Showcase Additions
|
||||
|
||||
You got your new website running and it's powered by Hugo? Great. You can add your website with a few steps to the [showcase](/showcase/).
|
||||
If you've built a site with Hugo and would like to have it featured on the official Hugo site, you can add your website with a few steps to the [Site Showcase][].
|
||||
|
||||
First, make sure that you created a [fork](https://help.github.com/articles/fork-a-repo/) of Hugo on Github and cloned your fork on your local computer. Next, create a separate branch for your additions:
|
||||
## 1. Create Your Fork
|
||||
|
||||
```
|
||||
# You can choose a different descriptive branch name if you like
|
||||
First, make sure that you created a [fork](https://help.github.com/articles/fork-a-repo/) of Hugo on Github and cloned your fork on your local computer. Next, create a separate branch for your additions. Note that you can choose a different descriptive branch name if you like:
|
||||
|
||||
```git
|
||||
git checkout -b showcase-addition
|
||||
```
|
||||
|
||||
## 2. Add Your Showcase File via the `showcase` Archetype
|
||||
|
||||
Let's create a new document that contains some metadata of your homepage. Replace `example` in the following examples with something unique like the name of your website. Inside the terminal enter the following commands:
|
||||
|
||||
```
|
||||
```bash
|
||||
cd docs
|
||||
hugo new showcase/example.md
|
||||
hugo new showcase/my-hugo-site-name.md
|
||||
```
|
||||
|
||||
You should find the new file at `content/showcase/example.md`. Open it in an editor. The file should contain a frontmatter with predefined variables like below:
|
||||
You should find the new file at `content/showcase/your-site-name.md`. Open the file in your preferred text editor. The file should contain front matter with predefined variables like below:
|
||||
|
||||
```
|
||||
```yaml
|
||||
---
|
||||
date: 2016-02-12T21:01:18+01:00
|
||||
description: ""
|
||||
lastmod: ""
|
||||
license: ""
|
||||
licenseLink: ""
|
||||
sitelink: http://spf13.com/
|
||||
sourceLink: https://github.com/spf13/spf13.com
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/spf13-tn.jpg
|
||||
title: example
|
||||
sitelink: ""
|
||||
sourcelink: ""
|
||||
categories: [showcase]
|
||||
tags: []
|
||||
image: "yourimage.jpg"
|
||||
toc: false
|
||||
title: my hugo site name
|
||||
notesforauthors: "For the image, only include the file name *without* a directory/path, which is taken care of in the templating. See the showcase contribution page at gohugo.io/contribute-to-hugo/add-your-site-to-the-showcase/ for more details. As always, feel free to delete `notesforauthors` or modify for anyone in the future who may edit the content in this file."
|
||||
---
|
||||
```
|
||||
|
||||
Add at least values for `sitelink`, `title`, `description` and a path for `thumbnail`.
|
||||
Add at least values for `sitelink`, `title`, `description`, and a path for `thumbnail`.
|
||||
|
||||
Furthermore, we need to create the thumbnail of your website. **It's important that the thumbnail has the required dimensions of 600px by 400px.** Give your thumbnail a name like `example-tn.png`. Save it under `docs/static/img/`.
|
||||
{{% note "Notes for Authors" %}}
|
||||
You may notice a `notesforauthors` key-value in your new content file for the showcase. These notes are not required, but rather have been added to make it easier to fill out the required metadata without needing to refer to the Hugo docs website. You can delete this metadata before submitting a pull request.
|
||||
{{% /note %}}
|
||||
|
||||
Check a last time that everything works as expected. Start Hugo's built-in server in order to inspect your local copy of the showcase in the browser:
|
||||
## 3. Add an Image
|
||||
|
||||
We need to create the thumbnail of your website. Give your thumbnail a name like `my-hugo-site-name.png`. Save it under [`docs/static/images/showcase/`][].
|
||||
|
||||
{{% warning "Thumbnail Size" %}}
|
||||
It's important that the thumbnail has the required dimensions of 600px by 400px or the site will not render appropriately. Be sure to optimize your image as a matter of best practice.
|
||||
{{% /warning %}}
|
||||
|
||||
Check one last time that everything looks complete. Start Hugo's built-in server in order to inspect your local copy of the showcase in the browser.
|
||||
|
||||
```bash
|
||||
hugo server
|
||||
```
|
||||
|
||||
## 4. Commit and Submit a Pull Request
|
||||
|
||||
If everything looks fine, we are ready to commit your additions. For the sake of best practices, please make sure that your commit follows our [code contribution guideline][].
|
||||
|
||||
@@ -67,8 +83,13 @@ git commit -m "docs: Add example.com to the showcase"
|
||||
```
|
||||
{{% /input %}}
|
||||
|
||||
Last but not least, we're ready to create a [pull request](https://github.com/spf13/hugo/compare).
|
||||
Last but not least, we're ready to create a [pull request].
|
||||
|
||||
Don't forget to accept the contributor license agreement. Click on the yellow badge in the automatically added comment in the pull request.
|
||||
### Contributor License Agreement
|
||||
|
||||
[code contribution guideline]: https://github.com/spf13/hugo#code-contribution-guideline
|
||||
Don't forget to accept the contributor license agreement. Click on the yellow badge in the automatically added comment in the pull request to accept.
|
||||
|
||||
[code contribution guideline]: https://github.com/spf13/hugo#code-contribution-guideline
|
||||
[pull request]: https://github.com/spf13/hugo/compare
|
||||
[Site Showcase]: /showcase/
|
||||
[`docs/static/images/showcase/`]: https://github.com/spf13/hugo/tree/master/docs/static/images/showcase/
|
||||
@@ -1,19 +1,347 @@
|
||||
---
|
||||
title: Contribute to Hugo Development
|
||||
linktitle: Contribute to Hugo Development
|
||||
description: Hugo relies heavily on the contributions of the open source community. You don't need to be a Golang guru to contribute to the project's development.
|
||||
description: Hugo relies heavily on contributions from the open source community. You don't need to be a Golang guru to contribute to the project's development.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
categories: [contribute to hugo]
|
||||
tags: [dev,open source]
|
||||
weight:
|
||||
weight: 10
|
||||
draft: false
|
||||
slug:
|
||||
aliases:
|
||||
notes:
|
||||
aliases: []
|
||||
toc: true
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## Submitting a Pull Request
|
||||
## Introduction
|
||||
|
||||
## Gitter Channel
|
||||
Hugo is an open source project and lives by the work of its [contributors](https://github.com/spf13/hugo/graphs/contributors). Help to make Hugo even more awesome. There are plenty of [open issues](https://github.com/spf13/hugo/issues) on GitHub and we need your help.
|
||||
|
||||
This tutorial is intended for people who are new to Git, GitHub or open source projects in general. It should help to overcome most of the barriers that newcomers encounter. It describes step by step what you need to do.
|
||||
|
||||
For any kind of questions please take a look at our [forum](https://discuss.gohugo.io/).
|
||||
|
||||
## Install Go
|
||||
|
||||
The installation of Go should take only a few minutes. [Download](https://golang.org/dl/) the latest stable version of Go and follow the official [installation guide](https://golang.org/doc/install).
|
||||
|
||||
Let's confirm the correct installation of Go. Open a terminal (or command line under Windows). Execute `go version` and you should see the version number of your Go installation. Next, make sure that you setup the `GOPATH` as described in the installation guide.
|
||||
|
||||
You can print the `GOPATH` with `echo $GOPATH`. You should see a non-empty string containing a valid path to your Go workspace.
|
||||
|
||||
### GVM as alternative
|
||||
|
||||
More experienced users can use the [Go Version Manager](https://github.com/moovweb/gvm), or GVM for short. It allows you to switch between different Go versions *on the same machine*. Probably you don't need this feature. But you can easily upgrade to a new released Go version with a few commands.
|
||||
|
||||
This is handy if you follow the developement of Hugo over a longer period of time. Future versions of Hugo will usually be compiled with the latest version of Go. Sooner or later you have to upgrade if you want to keep up.
|
||||
|
||||
|
||||
## Create an account on GitHub
|
||||
|
||||
If you're going to contribute code, you'll need to have an account on GitHub. Go to [www.github.com/join](https://github.com/join) and set up a personal account.
|
||||
|
||||
|
||||
## Install Git on your system
|
||||
|
||||
You will need to install Git. This tutorial assumes basic knowledge about Git. Refer to this excellent [Git book](https://git-scm.com/) if you are not sure where to begin. The used terminology will be explained with annotations.
|
||||
|
||||
Git is a [version control system](https://en.wikipedia.org/wiki/Version_control) to track the changes of source code. Hugo depends on smaller third-party packages that are used to extend the functionality. We use them because we don't want to reinvent the wheel.
|
||||
|
||||
Go ships with a sub-command called `get` that will download these packages for us when we setup our working environment. The source code of the packages is tracked with Git. `get` will interact with the Git servers of the package hosters in order to fetch all dependencies.
|
||||
|
||||
Move back to the terminal and check if Git is already installed. Type in `git version` and press enter. You can skip the rest of this section if the command returned a version number. Otherwise [download](https://git-scm.com/downloads) the lastest version of Git and follow this [installation guide](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git).
|
||||
|
||||
Finally, check again with `git version` if Git was installed successfully.
|
||||
|
||||
### Git Graphical Front Ends
|
||||
|
||||
There are several [GUI clients](https://git-scm.com/downloads/guis) that help you to operate Git. Not all are available for all operating systems and maybe differ in their usage. Thus, so we will use the command line since the commands are everywhere the same.
|
||||
|
||||
### Install Hub on your system (optional)
|
||||
|
||||
Hub is a great tool for working with GitHub. The main site for it is [www.hub.github.com](https://hub.github.com/). Feel free to install this little Git wrapper.
|
||||
|
||||
On a Mac, install Hub using brew:
|
||||
|
||||
```sh
|
||||
brew install hub
|
||||
```
|
||||
|
||||
Create an alias (in Bash) so that typing git actually runs Hub:
|
||||
|
||||
```sh
|
||||
echo "alias git='hub'" >> ~/.bash_profile
|
||||
```
|
||||
|
||||
Confirm the installation:
|
||||
|
||||
```sh
|
||||
git version 2.6.3
|
||||
hub version 2.2.2
|
||||
```
|
||||
|
||||
|
||||
## Set up your working copy
|
||||
|
||||
The working copy is set up locally on your computer. It's what you'll edit, compile, and end up pushing back to GitHub. The main steps are cloning the repository and creating your fork as a remote.
|
||||
|
||||
### Clone the repository
|
||||
|
||||
We assume that you've set up your `GOPATH` (see the section above if you're unsure about this). You should now copy the Hugo repository down to your computer. You'll hear this called "clone the repo". GitHub's [help pages](https://help.github.com/articles/cloning-a-repository/) give us a short explanation:
|
||||
|
||||
> When you create a repository on GitHub, it exists as a remote repository. You can create a local clone of your repository on your computer and sync between the two locations.
|
||||
|
||||
We're going to clone the [master Hugo repository](https://github.com/spf13/hugo). That seems counter-intuitive, since you won't have commit rights on it. But it's required for the Go workflow. You'll work on a copy of the master and push your changes to your own repository on GitHub.
|
||||
|
||||
So, let's clone that master repository:
|
||||
|
||||
```sh
|
||||
go get -v -u github.com/spf13/hugo
|
||||
```
|
||||
|
||||
### Fork the repository
|
||||
|
||||
If you're not fimiliar with this term, GitHub's [help pages](https://help.github.com/articles/fork-a-repo/) provide again a simple explanation:
|
||||
|
||||
> A fork is a copy of a repository. Forking a repository allows you to freely experiment with changes without affecting the original project.
|
||||
|
||||
#### Fork by hand
|
||||
|
||||
Open the [Hugo repository](https://github.com/spf13/hugo) on Github and click on the "Fork" button in the top right.
|
||||
|
||||

|
||||
|
||||
Now open your fork repository on GitHub and copy the remote url of your fork. You can choose between HTTPS and SSH as protocol that Git should use for the following operations. HTTPS works always [if you're not sure](https://help.github.com/articles/which-remote-url-should-i-use/).
|
||||
|
||||

|
||||
|
||||
Switch back to the terminal and move into the directory of the cloned master repository from the last step.
|
||||
|
||||
```sh
|
||||
cd $GOPATH/src/github.com/spf13/hugo
|
||||
```
|
||||
|
||||
Now Git needs to know that our fork exists by adding the copied remote url:
|
||||
|
||||
```sh
|
||||
git remote add <YOUR-GITHUB-USERNAME> <COPIED REMOTE-URL>
|
||||
```
|
||||
|
||||
#### Fork with Hub
|
||||
|
||||
Alternatively, you can use the Git wrapper Hub. Hub makes forking a repository easy:
|
||||
|
||||
```sh
|
||||
git fork
|
||||
```
|
||||
|
||||
That command will log in to GitHub using your account, create a fork of the repository that you're currently working in, and add it as a remote to your working copy.
|
||||
|
||||
#### Trust, but verify
|
||||
|
||||
Let's check if everything went right by listing all known remotes:
|
||||
|
||||
```sh
|
||||
git remote -v
|
||||
```
|
||||
|
||||
The output should look similar:
|
||||
|
||||
```sh
|
||||
digitalcraftsman git@github.com:digitalcraftsman/hugo.git (fetch)
|
||||
digitalcraftsman git@github.com:digitalcraftsman/hugo.git (push)
|
||||
origin https://github.com/spf13/hugo (fetch)
|
||||
origin https://github.com/spf13/hugo (push)
|
||||
```
|
||||
|
||||
|
||||
## The contribution workflow
|
||||
|
||||
### Create a new branch
|
||||
|
||||
You should never develop against the "master" branch. The development team will not accept a pull request against that branch. Instead, create a descriptive named branch and work on it.
|
||||
|
||||
First, you should always pull the latest changes from the master repository:
|
||||
|
||||
```sh
|
||||
git checkout master
|
||||
git pull
|
||||
```
|
||||
|
||||
Now we can create a new branch for your additions:
|
||||
|
||||
```sh
|
||||
git checkout -b <BRANCH-NAME>
|
||||
```
|
||||
|
||||
You can check on which branch your are with `git branch`. You should see a list of all local branches. The current branch is indicated with a little asterisk.
|
||||
|
||||
### Contributing to the documentation
|
||||
|
||||
Perhaps you want to start contributing to the docs. Then you can ignore most of the following steps. You can find the documentation within the cloned repository in the subfolder `docs`. Change the directory with `cd docs`. [Install the latest release][]. Or read on and build Hugo from source.
|
||||
|
||||
You can start Hugo's built-in server via `hugo server`. Browse the documentation by entering [http://localhost:1313](http://localhost:1313) in the address bar of your browser. The server automatically updates the page if you change its content.
|
||||
|
||||
### Building Hugo
|
||||
|
||||
While making changes in the codebase it's a good idea to build the binary to test them:
|
||||
|
||||
```sh
|
||||
go build -o hugo main.go
|
||||
```
|
||||
|
||||
### Testing
|
||||
|
||||
Sometimes changes on the codebase can cause unintended side effects. Or they don't work as expected. Most functions have their own test cases. You can find them in files ending with `_test.go`.
|
||||
|
||||
Make sure the commands `go test ./...` passes, and `go build` completes.
|
||||
|
||||
### Formatting
|
||||
|
||||
The Go code styleguide maybe is opiniated but it ensures that the codebase looks the same, regardless who wrote the code. Go comes with its own formatting tool. Let's apply the styleguide to our addtions:
|
||||
|
||||
```sh
|
||||
go fmt ./...
|
||||
```
|
||||
|
||||
Once you made your additions commit your changes. Make sure that you follow our [code contribution guidelines](https://github.com/spf13/hugo/blob/master/CONTRIBUTING.md):
|
||||
|
||||
```sh
|
||||
# Add all changed files
|
||||
git add --all
|
||||
git commit --message "YOUR COMMIT MESSAGE"
|
||||
```
|
||||
|
||||
The commit message should describe what the commit does (e.g. add feature XYZ), not how it is done.
|
||||
|
||||
### Modify commits
|
||||
|
||||
You noticed some commit messages don't fulfill the code contribution guidelines or you just forget something to add some files? No problem. Git provides the necessary tools to fix such problems. The next two methods cover all common cases.
|
||||
|
||||
If you are unsure what a command does leave the commit as it is. We can fix your commits later in the pull request.
|
||||
|
||||
#### Modifying the last commit
|
||||
|
||||
Let's say you want to modify the last commit message. Run the following command and replace the current message:
|
||||
|
||||
```sh
|
||||
git commit --amend -m"YOUR NEW COMMIT MESSAGE"
|
||||
```
|
||||
|
||||
Take a look at the commit log to see the change:
|
||||
|
||||
```sh
|
||||
git log
|
||||
# Exit with q
|
||||
```
|
||||
|
||||
After making the last commit you may forgot something. There is no need to create a new commit. Just add the latest changes and merge them into the intended commit:
|
||||
|
||||
```sh
|
||||
git add --all
|
||||
git commit --amend
|
||||
```
|
||||
|
||||
#### Modifying multiple commits
|
||||
|
||||
{{% warning "Be Careful Modifying Multiple Commits"%}}
|
||||
Modifications such as those described in this section can have serious unintended consequences. Skip this section if you're not sure!
|
||||
{{% /warning %}}
|
||||
|
||||
This is a bit more advanced. Git allows you to [rebase](https://git-scm.com/docs/git-rebase) commits interactively. In other words: it allows you to rewrite the commit history.
|
||||
|
||||
```sh
|
||||
git rebase --interactive @~6
|
||||
```
|
||||
|
||||
The `6` at the end of the command represents the number of commits that should be modified. An editor should open and present a list of last six commit messages:
|
||||
|
||||
```sh
|
||||
pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
|
||||
pick aaee038 tpl: Sort the smoke tests
|
||||
pick f0dbf2c tpl: Add the other test case for hasPrefix
|
||||
pick 911c35b Add "How to contribute to Hugo" tutorial
|
||||
pick 33c8973 Begin workflow
|
||||
pick 3502f2e Refactoring and typo fixes
|
||||
```
|
||||
|
||||
In the case above we should merge the last to commits in the commit of this tutorial (`Add "How to contribute to Hugo" tutorial`). You can "squash" commits, i.e. merge two or more commits into a single one.
|
||||
|
||||
All operations are written before the commit message. Replace "pick" with an operation. In this case `squash` or `s` for short:
|
||||
|
||||
```sh
|
||||
pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
|
||||
pick aaee038 tpl: Sort the smoke tests
|
||||
pick f0dbf2c tpl: Add the other test case for hasPrefix
|
||||
pick 911c35b Add "How to contribute to Hugo" tutorial
|
||||
squash 33c8973 Begin workflow
|
||||
squash 3502f2e Refactoring and typo fixes
|
||||
```
|
||||
|
||||
We also want to rewrite the commits message of the third last commit. We forgot "docs:" as prefix according to the code contribution guidelines. The operation to rewrite a commit is called `reword` (or `r` as shortcut).
|
||||
|
||||
You should end up with a similar setup:
|
||||
|
||||
```sh
|
||||
pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
|
||||
pick aaee038 tpl: Sort the smoke tests
|
||||
pick f0dbf2c tpl: Add the other test case for hasPrefix
|
||||
reword 911c35b Add "How to contribute to Hugo" tutorial
|
||||
squash 33c8973 Begin workflow
|
||||
squash 3502f2e Refactoring and typo fixes
|
||||
```
|
||||
|
||||
Close the editor. It should open again with a new tab. A text is instructing you to define a new commit message for the last two commits that should be merged (aka "squashed"). Save the file (<kbd>CTRL</kbd>+<kbd>S</kbd>) and close the editor again.
|
||||
|
||||
A last time a new tab opens. Enter a new commit message and save again. Your terminal should contain a status message. Hopefully this one:
|
||||
|
||||
```sh
|
||||
Successfully rebased and updated refs/heads/<BRANCHNAME>.
|
||||
```
|
||||
|
||||
Check the commit log if everything looks as expected. Should an error occur you can abort this rebase with `git rebase --abort`.
|
||||
|
||||
### Push commits
|
||||
|
||||
To push our commits to the fork on GitHub we need to speficy a destination. A destination is defined by the remote and a branch name. Earlier, the defined that the remote url of our fork is the same as our GitHub handle, in my case `digitalcraftsman`. The branch should have the same as our local one. This makes it easy to identify corresponding branches.
|
||||
|
||||
```sh
|
||||
git push --set-upstream <YOUR-GITHUB-USERNAME> <BRANCHNAME>
|
||||
```
|
||||
|
||||
Now Git knows the destination. Next time when you to push commits you just need to enter `git push`.
|
||||
|
||||
If you modified your commit history in the last step GitHub will reject your try to push. This is a safety-feature because the commit history isn't the same and new commits can't be appended as usual. You can enforce this push explicitly with `git push --force`.
|
||||
|
||||
## Open a pull request
|
||||
|
||||
We made a lot of progress. Good work. In this step we finally open a pull request to submit our additions. Open the [Hugo master repository](https://github.com/spf13/hugo/) on GitHub in your browser.
|
||||
|
||||
You should find a green button labeld with "New pull request". But GitHub is clever and probably suggests you a pull request like in the beige box below:
|
||||
|
||||
<img src="/img/tutorials/how-to-contribute-to-hugo/open-pull-request.png" alt="Open a pull request">
|
||||
|
||||
The new page summaries the most important information of your pull request. Scroll down and you find the additions of all your commits. Make sure everything looks as expected and click on "Create pull request".
|
||||
|
||||
### Accept the contributor license agreement
|
||||
|
||||
Last but not least you should accept the contributor license agreement (CLA). A new comment should be added automatically to your pull request. Click on the yellow badge, accept the agreement and authenticate yourself with your GitHub account. It just takes a few clicks and only needs to be done once.
|
||||
|
||||
<img src="/img/tutorials/how-to-contribute-to-hugo/accept-cla.png" alt="Accept the CLA">
|
||||
|
||||
### Automatic builds
|
||||
|
||||
We use the [Travis CI loop](https://travis-ci.org/spf13/hugo) (Linux and OS X) and [AppVeyor](https://ci.appveyor.com/project/spf13/hugo/branch/master) (Windows) to compile Hugo with your additions. This should ensure that everything works as expected before merging your pull request. This in most cases only relevant if you made changes to the codebase of Hugo.
|
||||
|
||||
<img src="/img/tutorials/how-to-contribute-to-hugo/ci-errors.png" alt="Automic builds and their status">
|
||||
|
||||
Above you can see that Travis wasn't able to compile the changes in this pull request. Click on "Details" and try to investigate why the build failed. But it doesn't have to be your fault. Mostly, the `master` branch that we used as foundation for your pull request should build without problems.
|
||||
|
||||
If you have questions leave a comment in the pull request. We are willing to assist you.
|
||||
|
||||
## Where to start?
|
||||
|
||||
Thank you for reading this tutorial. Hopefully, we see you again on GitHub. There are plenty of [open issues](https://github.com/spf13/hugo/issues) on GitHub. Feel free to open an issue if you think you found a bug or you have a new idea to improve Hugo. We are happy to hear from you.
|
||||
|
||||
[Install the latest release]: /getting-started/
|
||||
|
||||
@@ -7,19 +7,19 @@ publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
categories: [contribute to hugo]
|
||||
tags: [docs,documentation,community]
|
||||
weight:
|
||||
weight: 20
|
||||
draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
Documentation is an integral part of any open source project. The Hugo docs were completely reworked in anticipation of the release of v0.19, but there is always room for improvement.
|
||||
|
||||
## Edit Locally and Submit a Pull Request
|
||||
|
||||
## How Content is Ordered in Hugo
|
||||
## How Content is Ordered in the Hugo Docs
|
||||
|
||||
## Creating New Files from Archetypes
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Developer Tools
|
||||
linktitle: Developer Tools
|
||||
title: Overview
|
||||
linktitle: Overview
|
||||
description: Description for the developer tools section.
|
||||
date: 2016-11-01
|
||||
publishdate: 2016-11-01
|
||||
@@ -12,5 +12,5 @@ draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc:
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -12,7 +12,7 @@ draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## Generators
|
||||
|
||||
@@ -11,7 +11,7 @@ draft: false
|
||||
slug:
|
||||
aliases: [/developer-tools/migrations/,/developer-tools/migrated/]
|
||||
toc:
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
If you are using a different static site generator or CMS (e.g, Jeklly or Wordpress, respectively), the following tools were developed by the Hugo community to facilitate automated exports from your current system to a Hugo-friendly format.
|
||||
|
||||
@@ -12,7 +12,7 @@ draft: false
|
||||
slug:
|
||||
aliases: [/extras/highlighting/]
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## Code Blocks in Markdown
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Getting Started"
|
||||
linktitle: "Getting Started"
|
||||
title: Overview
|
||||
linktitle: Overview
|
||||
description: Quick start and guides for installing Hugo on your preferred operating system.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
@@ -12,7 +12,11 @@ draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
The Hugo docs have been completely reformatted to include
|
||||
The Hugo docs were completely reworked from the ground up in anticipation of v0.19. Included in the reboot was the concept of using a [single example site][] for code blocks and demo content in the documentation. Once you finish the [quick start][], be sure to read up on how [the Hugo docs have been optimized for rapid learning][].
|
||||
|
||||
[quick start]: /getting-started/quick-start/
|
||||
[single example site]: /getting-started/using-the-hugo-docs/
|
||||
[the Hugo docs have been optimized for rapid learning]: /getting-started/using-the-hugo-docs/
|
||||
@@ -1,18 +1,18 @@
|
||||
---
|
||||
title: Using Hugo
|
||||
linktitle: Using Hugo
|
||||
title: Basic Usage
|
||||
linktitle: Basic Usage
|
||||
description:
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
categories: [getting started]
|
||||
tags: [usage,livereload]
|
||||
weight:
|
||||
tags: [usage,livereload,command line]
|
||||
weight: 70
|
||||
draft: false
|
||||
slug:
|
||||
aliases: [/overview/usage/,/extras/livereload/]
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## LiveReload
|
||||
+5
-6
@@ -1,18 +1,17 @@
|
||||
---
|
||||
title: Configuration
|
||||
linktitle:
|
||||
description: Your configuration can include precise directions to Hugo regarding how it should render your website.
|
||||
description: Hugo is designed to make enough assumptions that often configuration is unnecessary. However, a site config file can include precise directions to Hugo on how you want to render your website.
|
||||
date: 2017-01-02
|
||||
publishdate: 2017-01-02
|
||||
lastmod: 2017-01-02
|
||||
tags: [configuration,fundamentals,toml,yaml,json]
|
||||
categories: [project organization]
|
||||
weight: 10
|
||||
tags: [configuration,fundamentals,toml,yaml,json]
|
||||
weight: 90
|
||||
draft: false
|
||||
slug:
|
||||
aliases: [/overview/source-directory/]
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
The [directory structure][] of a Hugo website—or more precisely, the source organization of files containing the website's content and templates—provides most of the configuration information that Hugo needs in order to statically generate a finished website.
|
||||
@@ -331,6 +330,6 @@ The above is a list of regular expressions. Note that the backslash (`\`) charac
|
||||
[`.Site.Params`]: /variables-and-params/
|
||||
[directory structure]: /project-organization/directory-structure
|
||||
[JSON Spec]: /documents/ecma-404-json-spec.pdf
|
||||
[templates]: /templates
|
||||
[templates]: /templates/
|
||||
[TOML Spec]: https://github.com/toml-lang/toml
|
||||
[YAML Spec]: http://yaml.org/spec/
|
||||
+4
-5
@@ -1,15 +1,14 @@
|
||||
---
|
||||
title: Directory Structure
|
||||
linktitle:
|
||||
linktitle: Directory Structure
|
||||
description: Explanation of the directory structure in a typical Hugo project and how Hugo traverses the file system therein.
|
||||
date: 2017-01-02
|
||||
publishdate: 2017-01-02
|
||||
lastmod: 2017-01-02
|
||||
categories: [project organization]
|
||||
tags: [source, organization, directories,fundamentals]
|
||||
weight: 10
|
||||
weight: 80
|
||||
draft: false
|
||||
slug:
|
||||
aliases:
|
||||
notes:
|
||||
aliases: [/overview/source-directory/]
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: Download Hugo
|
||||
linktitle: Download Hugo
|
||||
description:
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
categories: [getting started]
|
||||
tags: []
|
||||
weight:
|
||||
draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
---
|
||||
|
||||
@@ -6,11 +6,11 @@ date: 2016-11-01
|
||||
publishdate: 2016-11-01
|
||||
lastmod: 2016-11-01
|
||||
categories: [getting started]
|
||||
tags: []
|
||||
weight:
|
||||
tags: [install]
|
||||
weight: 30
|
||||
draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -5,11 +5,11 @@ description:
|
||||
date: 2016-11-01
|
||||
publishdate: 2016-11-01
|
||||
lastmod: 2016-11-01
|
||||
weight:
|
||||
weight: 40
|
||||
categories: [getting started]
|
||||
tags: []
|
||||
tags: [install,linux]
|
||||
draft: false
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -6,10 +6,10 @@ date: 2016-11-01
|
||||
publishdate: 2016-11-01
|
||||
lastmod: 2016-11-01
|
||||
categories: [getting started]
|
||||
tags: []
|
||||
weight:
|
||||
tags: [install,mac,osx]
|
||||
weight: 50
|
||||
draft: false
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -6,10 +6,9 @@ date: 2016-11-01
|
||||
publishdate: 2016-11-01
|
||||
lastmod: 2016-11-01
|
||||
categories: [getting started]
|
||||
tags: []
|
||||
weight:
|
||||
tags: [install,pc]
|
||||
weight: 60
|
||||
draft: false
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
---
|
||||
@@ -7,11 +7,10 @@ publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
categories: [getting started]
|
||||
tags: [quick start,usage]
|
||||
weight: 20
|
||||
weight: 10
|
||||
draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
|
||||
@@ -6,13 +6,13 @@ date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
categories: [getting started]
|
||||
tags: []
|
||||
weight: 10
|
||||
tags: [usage,docs]
|
||||
weight: 20
|
||||
draft: false
|
||||
slug:
|
||||
aliases: [/getting-started/using-the-docs/]
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## Example Site
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
---
|
||||
title: Hosting and Deployment
|
||||
linktitle: Hosting and Deployment
|
||||
title: Overview
|
||||
linktitle: Overview
|
||||
description: Site builds, automated deployments, and popular hosting solutions.
|
||||
date: 2016-11-01
|
||||
publishdate: 2016-11-01
|
||||
lastmod: 2016-11-01
|
||||
tags: [hosting]
|
||||
tags: []
|
||||
categories: [hosting and deployment]
|
||||
weight: 01
|
||||
draft: false
|
||||
aliases:
|
||||
toc: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -5,11 +5,11 @@ description:
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
tags: [rysnc]
|
||||
categories: [hosting and deployment]
|
||||
tags: [rysnc,deployment]
|
||||
toc: false
|
||||
weight:
|
||||
draft: false
|
||||
aliases: []
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -5,11 +5,11 @@ description:
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
tags: [wercker]
|
||||
categories: [hosting and deployment]
|
||||
tags: [wercker,deployment]
|
||||
toc: false
|
||||
draft: false
|
||||
slug:
|
||||
aliases: []
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -5,11 +5,11 @@ description:
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
categories: [hosting and deployment]
|
||||
tags: [hosting,bitbucket]
|
||||
weight:
|
||||
draft: false
|
||||
tags: [bitbucket]
|
||||
categories: [hosting and deployment]
|
||||
toc: false
|
||||
aliases: []
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -5,11 +5,11 @@ description:
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
categories: [hosting and deployment]
|
||||
tags: [github,git,deployment,hosting]
|
||||
weight:
|
||||
draft: false
|
||||
tags: [github,git]
|
||||
categories: [hosting and deployment]
|
||||
toc: false
|
||||
aliases: []
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -5,11 +5,11 @@ description:
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
categories: [hosting and deployment]
|
||||
tags: [hosting,deployment]
|
||||
weight:
|
||||
draft: false
|
||||
tags: []
|
||||
categories: []
|
||||
toc: false
|
||||
aliases: []
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: Mailing List
|
||||
linktitle: Mailing List
|
||||
description: Join the Hugo mailing list for updates on the project. The mailing list has very low traffic and only sends release-related email.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
weight: 01
|
||||
categories: []
|
||||
tags: [mailing list, community]
|
||||
draft: true
|
||||
aliases: [/community/mailing-list/]
|
||||
toc: false
|
||||
---
|
||||
|
||||
## Discussion Forum
|
||||
|
||||
Hugo has its own [discussion forum](http://discuss.gohugo.io/) powered by [Discourse](http://www.discourse.org/).
|
||||
|
||||
Please use this for all discussions, questions, etc.
|
||||
|
||||
## Mailing List
|
||||
|
||||
Hugo has two mailing lists:
|
||||
|
||||
### Announcements
|
||||
|
||||
Very low traffic. Only releases will be emailed here.
|
||||
|
||||
<https://groups.google.com/forum/#!forum/hugo-announce>
|
||||
|
||||
### Discussion Forum (Archived)
|
||||
|
||||
{{% note %}}
|
||||
This has been replaced with the [Hugo discussion forum](http://discuss.gohugo.io/) and is available for archival purposes only.
|
||||
{{% /note %}}
|
||||
|
||||
You can find the old Hugo discussion forum at <https://groups.google.com/forum/#!forum/hugo-discuss>.
|
||||
|
||||
## Other Resources
|
||||
|
||||
### GoNuts
|
||||
|
||||
For general Go questions or discussion please refer to the Go mailing list.
|
||||
|
||||
https://groups.google.com/forum/#!forum/golang-nuts
|
||||
|
||||
### GitHub Issues
|
||||
|
||||
https://github.com/spf13/hugo/issues
|
||||
|
||||
### Twitter
|
||||
|
||||
Hugo doesn't have its own Twitter handle, but feel free to tweet [@spf13](http://twitter.com/spf13).
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: News and Articles
|
||||
linktitle:
|
||||
title: Overview
|
||||
linktitle: Overview
|
||||
description: Articles where Hugo is featured, as well as news and updates on the project itself.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
@@ -12,7 +12,7 @@ draft: false
|
||||
aliases: []
|
||||
toc: false
|
||||
hidesectioncontents: false
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
---
|
||||
title: Articles
|
||||
linktitle: Articles
|
||||
description: A list of articles, blog posts, or tutorials where Hugo is featured.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
tags: [articles, tutorials, press]
|
||||
categories: [news and articles]
|
||||
weight: 30
|
||||
draft: false
|
||||
aliases: [/community/press/]
|
||||
toc: false
|
||||
notesforauthors: "If adding an item to the articles list, be sure to follow the format of '| [Linked Title]() | Author Name | YYYY-MM-DD |'."
|
||||
---
|
||||
|
||||
{{% note "Help Keep This List Up to Date" %}}
|
||||
Know of a post, article, or tutorial on Hugo? [Please add it to this list](https://github.com/spf13/hugo/edit/master/docs/content/community/press.md).
|
||||
{{% /note %}}
|
||||
|
||||
## Press and Articles
|
||||
|
||||
Hugo has been featured in the following Blog Posts, Press, and Media.
|
||||
|
||||
| Title | Author | Date |
|
||||
| ----- | ------ | -----: |
|
||||
| [Build a Hugo site using Cloud9 IDE and host on App Engine](https://loyall.ch/lab/2017/01/build-a-static-website-with-cloud9-hugo-and-app-engine/)| Pascal Aubort | 2017-02-05 |
|
||||
| [How to use Firebase to host a Hugo site](https://www.m0d3rnc0ad.com/post/static-site-firebase/) | Andrew Cuga | 2017-02-04 |
|
||||
| [A publishing workflow for teams using static site generators](https://www.keybits.net/post/publishing-workflow-for-teams-using-static-site-generators/) | Tom Atkins | 2017-01-02 |
|
||||
| [How To Dynamically Use Google Fonts In A Hugo Website](https://stoned.io/web-development/hugo/How-To-Dynamically-Use-Google-Fonts-In-A-Hugo-Website/) | Hash Borgir | 2016-10-27 |
|
||||
| [Embedding Facebook In A Hugo Template](https://stoned.io/web-development/hugo/Embedding-Facebook-In-A-Hugo-Template/) | Hash Borgir | 2016-10-22 |
|
||||
| [通过 Gitlab-cl 将 Hugo blog 自动部署至 GitHub](https://zetaoyang.github.io/post/2016/10/17/gitlab-cl.html) <small>(Chinese, Continious integration)</small> | Zetao Yang | 2016-10-17 |
|
||||
| [A Step-by-Step Guide: Hugo on Netlify](https://www.netlify.com/blog/2016/09/21/a-step-by-step-guide-hugo-on-netlify/) | Eli Williamson | 2016-09-21 |
|
||||
| [Building our site: From Django & Wordpress to a static generator (Part I)](https://tryolabs.com/blog/2016/09/20/building-our-site-django-wordpress-to-static-part-i/) | Alan Descoins | 20 Sep 2016 |
|
||||
| [Webseitenmaschine - Statische Websites mit Hugo erzeugen](http://www.heise.de/ct/ausgabe/2016-12-Statische-Websites-mit-Hugo-erzeugen-3211704.html) <small>(German, $)</small> | Christian Helmbold | 2016-05-27 |
|
||||
| [Cómo hacer sitios web estáticos con Hugo y Go - Platzi](https://www.youtube.com/watch?v=qaXXpdiCHXE) <small>(Video tutorial)</small> | Verónica López | 2016-04-06 |
|
||||
| [CDNOverview: A CDN comparison site made with Hugo](https://www.cloakfusion.com/cdnoverview-cdn-comparison-site-made-hugo/) | Thijs de Zoete | 2016-02-23 |
|
||||
| [Hugo: A Modern WebSite Engine That Just Works](https://github.com/shekhargulati/52-technologies-in-2016/blob/master/07-hugo/README.md) | Shekhar Gulati | 2016-02-14 |
|
||||
| [Minify Hugo Generated HTML](http://ratson.name/blog/minify-hugo-generated-html/) | Ratson | 2016-02-02 |
|
||||
| [Static site generators: el futuro de las webs estáticas<br>(Hugo, Jekyll, Flask y otros)](http://sitelabs.es/static-site-generators-futuro-las-webs-estaticas/) | Eneko Sarasola | 2016-01-09 |
|
||||
| [Writing a Lambda Function for Hugo](https://blog.jolexa.net/post/writing-a-lambda-function-for-hugo/) | Jeremy Olexa | 2016-01-01 |
|
||||
| [Ein Blog mit Hugo erstellen - Tutorial](http://privat.albicker.org/tags/hugo.html) <small>(Deutsch/German)</small> | Bernhard Albicker | 30 Dec 2015 |
|
||||
| [How to host Hugo static website generator on AWS Lambda](http://bezdelev.com/post/hugo-aws-lambda-static-website/) | Ilya Bezdelev | 2015-12-15 |
|
||||
| [Migrating from Pelican to Hugo](http://www.softinio.com/post/migrating-from-pelican-to-hugo/) | Salar Rahmanian | 2015-11-29 |
|
||||
| [Hugo + Uberspace + Git = Hubergit — eine Anleitung (German)](https://harms-ensink.name/post/hubergit/) | Christoph Harms-Ensink | 2015-11-24 |
|
||||
| [Static Website Generators Reviewed: Jekyll, Middleman, Roots, Hugo](http://www.smashingmagazine.com/2015/11/static-website-generators-jekyll-middleman-roots-hugo-review/) | Mathias Biilmann Christensen | 2015-11-16 |
|
||||
| [How To Deploy a Hugo Site to Production with Git Hooks on Ubuntu 14.04](https://www.digitalocean.com/community/tutorials/how-to-deploy-a-hugo-site-to-production-with-git-hooks-on-ubuntu-14-04) | Justin Ellingwood | 2015-11-12 |
|
||||
| [How To Install and Use Hugo, a Static Site Generator, on Ubuntu 14.04](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-hugo-a-static-site-generator-on-ubuntu-14-04) | Justin Ellingwood | 2015-11-09 |
|
||||
| [Switching from Wordpress to Hugo](http://justinfx.com/2015/11/08/switching-from-wordpress-to-hugo/) | Justin Israel | 2015-11-08 |
|
||||
| [Hands-on Experience with Hugo as a Static Site Generator](http://usersnap.com/blog/hands-on-experience-with-hugo-static-site-generator/) | Thomas Peham | 2015 -10-15 |
|
||||
| [Statische Webseites mit Hugo erstellen/Vortrag mit Foliensatz (deutsch)](http://sfd.koelnerlinuxtreffen.de/2015/HaraldWeidner/) | Harald Weidner | 2015-09-19 |
|
||||
| [Moving from WordPress to Hugo](http://abhipandey.com/2015/09/moving-to-hugo/) | Abhishek Pandey | 2015-09-15 |
|
||||
| [<span lang="zh-CN">通过webhook将Hugo自动部署至GitHub Pages和GitCafe Pages</span> <small>(Automated deployment)</small>](http://blog.coderzh.com/2015/09/13/use-webhook-automated-deploy-hugo/) | CoderZh | 2015-09-13 |
|
||||
| [<span lang="zh-CN">使用hugo搭建个人博客站点</span> <small>(Using Hugo to build a personal blog site)</small>](http://blog.coderzh.com/2015/08/29/hugo/) | CoderZh | 2015-08-29 |
|
||||
| [Good-Bye Wordpress, Hello Hugo!](http://blog.arminhanisch.de/2015/08/blog-migration-zu-hugo/) <small>(German)</small> | Armin Hanisch | 2015-08-18 |
|
||||
| [Static Site E-Commerce: Integrating Snipcart with Hugo](https://snipcart.com/blog/snipcart-hugo-integration) | Francis Tremblay | 2015-08-13 |
|
||||
| [Générer votre site web statique avec Hugo <small>(Generate your static site with Hugo)<small>](http://www.linux-pratique.com/?p=191) | Benoît Benedetti | 2015-06-26 |
|
||||
| [<span lang="ja">Hugo向けの新しいテーマを作った</span> <small>(I created a new theme for Hugo)<small>](http://yet.unresolved.xyz/blog/2015/06/20/making-new-theme-robust-for-hugo/) | Daisuke Tsuji | 2015-06-20 |
|
||||
| [Hugo - Gerando um site com conteúdo estático. (Portuguese Brazil)](http://blog.ffrizzo.com/posts/hugo/) | Fabiano Frizzo | 2015-06-02 |
|
||||
| [An Introduction to Static Site Generators](http://davidwalsh.name/introduction-static-site-generators) | Eduardo Bouças | 2015-05-20 |
|
||||
| [Hugo Still Rules](http://cheekycoder.com/2015/05/hugo-still-rules/) | Cheeky Coder | 2015-05-18 |
|
||||
| [hugo - Static Site Generator](http://gscacco.github.io/post/hugo/) | G Scaccoio | 2015-05-04 |
|
||||
| [<span lang="ja">WindowsでHugoを使う</span>](http://ureta.net/2015/05/hugo-on-windows/) | <span lang="ja">うれ太郎</span> | 2015-05-01 |
|
||||
| [<span lang="ja">Hugoのshortcodesを用いてサイトにスライドなどを埋め込む</span>](http://blog.yucchiy.com/2015/04/29/hugo-shortcode/) | Yucchiy | 2015-04-29 |
|
||||
| [<span lang="ja">HugoとCircleCIでGitHub PagesにBlogを公開してみたら超簡単だった</span>](http://hori-ryota.github.io/blog/create-blog-with-hugo-and-circleci/) | Hori Ryota | 2015-04-17 |
|
||||
| [How to build a mobile friendly website Part 2 - Ok to Go](http://jbrodriguez.io/mobile-friendly-website-2/) | Juan B. Rodriguez | 2015-04-13 |
|
||||
| [10 Best Static Site Generators](http://beebom.com/2015/04/best-static-site-generators) | Aniruddha Mysore | 2015-04-06 |
|
||||
| [Goodbye WordPress; Hello Hugo](http://willwarren.com/2015/04/05/goodbye-wordpress-hello-hugo/) | Will Warren | 2015-04-05 |
|
||||
| [Static Websites with Hugo on Google Cloud Storage](http://www.moxie.io/post/static-websites-with-hugo-on-google-cloud-storage/) | Moxie Input/Output | 2015-04-02 |
|
||||
| [De nuevo iniciando un blog](http://alvarolizama.net/blog/denuevo-iniciando-un-blog/) | Alvaro Lizama | 2015-03-29 |
|
||||
| [We moved our blog from Posthaven to Hugo after only three posts. Why?](http://blog.hypriot.com/post/moved-from-posthaven-to-hugo/) | Hypriot | 2015-03-27 |
|
||||
| [Hugo is cool](http://tnt.wicast.tk/2015/03/23/hugo-is-cool/) <small>(<span lang="zh-CN">中文</span> Chinese)</small> | wicast | 2015-03-23 |
|
||||
| [Top Static Site Generators in 2015](http://superdevresources.com/static-site-generators-2015/) | Kanishk Kunal | 2015-03-12 |
|
||||
| [Moving to Hugo](http://abiosoft.com/moving-to-hugo/) | Abiola Ibrahim | 2015-03-08 |
|
||||
| [<span lang="ja">Hugoで試行錯誤する</span> - log](http://deprode.net/log/logs/first/) | Deprode | 2015-02-28 |
|
||||
| [Migrating a blog (yes, this one!) from Wordpress to Hugo](http://justindunham.net/migrating-from-wordpress-to-hugo/) | Justin Dunham | 2015-02-13 |
|
||||
| [<span lang="ja">blogをoctopressからHugoに乗り換えたメモ</span>](http://blog.jigyakkuma.org/2015/02/11/hugo/) | jigyakkuma | 2015-02-11 |
|
||||
| [<span lang="ja">Hugoでブログをつくった</span>](http://porgy13.github.io/post/new-hugo-blog/) | porgy13 | 2015-02-07 |
|
||||
| [<span lang="ja">Hugoにブログを移行した</span>](http://keichi.net/post/first/) | Keichi Takahashi | 2015-02-04 |
|
||||
| [<span lang="zh-CN">Hugo静态网站生成器中文教程</span>](http://nanshu.wang/post/2015-01-31/) | Nanshu Wang | 2015-01-31 |
|
||||
| [<span lang="ja">Hugo + Github Pages + Wercker CI = ¥0(無料)<br>でコマンド 1 発(自動化)でサイト<br>・ブログを公開・運営・分析・収益化</span>](http://qiita.com/yoheimuta/items/8a619cac356bed89a4c9) | Yohei Yoshimuta | 2015-01-31 |
|
||||
| [Running Hugo websites on anynines](http://blog.anynines.com/running-hugo-websites-on-anynines/) | Julian Weber | 2015-01-30 |
|
||||
| [MiddlemanからHugoへ移行した](http://re-dzine.net/2015/01/hugo/) | Haruki Konishi | 2015-01-21 |
|
||||
| [WordPress から Hugo に乗り換えました](http://rakuishi.com/archives/wordpress-to-hugo/) | rakuishi | 2015-01-20 |
|
||||
| [HUGOを使ってサイトを立ち上げる方法](http://qiita.com/syui/items/869538099551f24acbbf) | Syui | 2015-01-17 |
|
||||
| [<span lang="ja">Jekyllが許されるのは小学生までだよね</span>](http://t32k.me/mol/log/hugo/) | Ishimoto Koji | 2015-01-16 |
|
||||
| [Getting started with Hugo](http://anthonyfok.org/post/getting-started-with-hugo/) | Anthony Fok | 2015-01-12 |
|
||||
| [<span lang="zh-CN">把这个博客静态化了</span> <small>(Migrate to Hugo)</small>](http://lich-eng.com/2015/01/03/migrate-to-hugo/)| Li Cheng | 2015-01-03 |
|
||||
| [My Hugo Experiment](http://tilde.club/~jbaty/2014/12/2014-12-31-my-hugo-experiment/) | Jack Baty | 2014-12-31 |
|
||||
| [Porting my blog with Hugo](http://blog.srackham.com/posts/porting-my-blog-with-hugo/) | Stuart Rackham | 2014-12-30 |
|
||||
| [Hugoを使ってみたときのメモ](http://machortz.github.io/posts/usinghugo/) | Machortz | 2014-12-29 |
|
||||
| [OctopressからHugoへ移行した](http://deeeet.com/writing/2014/12/25/hugo/) | Taichi Nakashima | 2014-12-25 |
|
||||
| [Hugo로 Github에 블로그 호스팅하기](http://cdpython.github.io/post/go/hugo/hugo-github/) | CD Python | 2014-12-25 |
|
||||
| [Migrating to Hugo From Octopress](http://nathanleclaire.com/blog/2014/12/22/migrating-to-hugo-from-octopress/) | Nathan LeClaire | 2014-12-22 |
|
||||
| [Dynamic Pages with GoHugo.io](http://cyrillschumacher.com/2014/12/21/dynamic-pages-with-gohugo.io/) | Cyrill Schumacher | 2014-12-21 |
|
||||
| [6 Static Blog Generators That Aren’t Jekyll](http://www.sitepoint.com/6-static-blog-generators-arent-jekyll/) | David Turnbull | 2014-12-08 |
|
||||
| [Travel Blogging Setup](http://www.stou.dk/2014/11/travel-blogging-setup/) | Rasmus Stougaard | 2014-11-23 |
|
||||
| [Hosting A Hugo Website Behind Nginx](http://www.bigbeeconsultants.co.uk/blog/hosting-hugo-website-behind-nginx) | Rick Beton | 2014-11-20 |
|
||||
| [<span lang="zh-CN">使用Hugo搭建免费个人Blog</span> <small>(How to use Hugo)</small>](http://ulricqin.com/post/how-to-use-hugo/) | Ulric Qin <span lang="zh-CN">秦晓辉</span> | 2014-11-11 |
|
||||
| [Built in Speed and Built for Speed by Hugo](http://cheekycoder.com/2014/10/built-for-speed-by-hugo/) | Cheeky Coder | 2014-10-30 |
|
||||
| [hugo, syncthing](http://fredix.ovh/2014/10/hugo-syncthing/) | Frédéric Logier | 13 Oct 2014 |
|
||||
| [Hugo para crear sitios web estáticos](http://www.webbizarro.com/noticias/1076/hugo-para-crear-sitios-web-estaticos/) | Web Bizarro | 19 Aug 2014 |
|
||||
| [Going with hugo](http://www.markuseliasson.se/article/going-with-hugo/) | Markus Eliasson | 2014-08-18 |
|
||||
| [Benchmarking Jekyll, Hugo and Wintersmith](http://fredrikloch.me/post/2014-08-12-Jekyll-and-its-alternatives-from-a-site-generation-point-of-view/) | Fredrik Loch | 2014-08-12 |
|
||||
| [Goodbye Octopress, Hello Hugo!](http://andreimihu.com/blog/2014/08/11/goodbye-octopress-hello-hugo/) | Andrei Mihu | 2014-08-11 |
|
||||
| [Beautiful sites for Open Source projects](http://beautifulopen.com/2014/08/09/hugo/) | Beautiful Open | 2014-08-09 |
|
||||
| [Hugo: Beyond the Defaults](http://npf.io/2014/08/hugo-beyond-the-defaults/) | Nate Finch | 2014-08-08 |
|
||||
| [First Impressions of Hugo](https://peteraba.com/blog/first-impressions-of-hugo/) | Peter Aba | 2014-06-06 |
|
||||
| [New Site Workflow](http://vurt.co.uk/post/new_website/) | Giles Paterson | 2014-08-05 |
|
||||
| [How I Learned to Stop Worrying and Love the (Static) Web](http://cognition.ca/post/about-hugo/) | Joshua McKenty | 2014-08-4 |
|
||||
| [Hugo - Static Site Generator](http://kenwoo.io/blog/hugo---static-site-generator/) | Kenny Woo | 2014-08-03 |
|
||||
| [Hugo Is Friggin' Awesome](http://npf.io/2014/08/hugo-is-awesome/) | Nate Finch | 2014-08-01 |
|
||||
| [<span lang="zh-CN">再次搬家</span> <small>(Move from WordPress to Hugo)</small>](http://www.chingli.com/misc/move-from-wordpress-to-hugo/) | <span lang="zh-CN">青砾</span> (chingli) | 2014-07-12 |
|
||||
| [Embedding Gists in Hugo](http://danmux.com/posts/embedded_gists/) | Dan Mull | 2014-07-5 |
|
||||
| [An Introduction To Hugo](http://www.cirrushosting.com/web-hosting-blog/an-introduction-to-hugo/) | Dan Silber | 2014-07-01 |
|
||||
| [Moving to Hugo](http://danmux.com/posts/hugo_based_blog/) | Dan Mull | 2014-05-29 |
|
||||
| [<span lang="zh-CN">开源之静态站点生成器排行榜</span><br><small>(Leaderboard of open-source static website generators)</small>](http://code.csdn.net/news/2819909) | CSDN.net | 2014-05-23 |
|
||||
| [How I deploy this site using Fabric](http://carlorat.me/quote/fabric/) | Carlo Ratam | 2014-05-21 |
|
||||
| [Finally, a satisfying and effective blog setup](http://michaelwhatcott.com/now-powered-by-hugo/) | Michael Whatcott | 2014-05-20 |
|
||||
| [Hugo from scratch](http://zackofalltrades.com/notes/2014/05/hugo-from-scratch/) | Zack Williams | 2014-05-18 |
|
||||
| [Why I switched away from Jekyll](http://www.jakejanuzelli.com/why-I-switched-away-from-jekyll/) | Jake Januzelli | 2014-05-10 |
|
||||
| [Welcome our new blog](http://blog.ninya.io/posts/welcome-our-new-blog/) | Ninya.io | 2014-04-11 |
|
||||
| [Mission Not Accomplished](http://johnsto.co.uk/blog/mission-not-accomplished/) | Dave Johnston | 2014-04-03 |
|
||||
| [Hugo - A Static Site Builder in Go](http://deepfriedcode.com/post/hugo/) | Deep Fried Code | 2014-03-30 |
|
||||
| [Adventures in Angular Podcast](http://devchat.tv/adventures-in-angular/003-aia-gdes) | Matias Niemela | 2014-03-28 |
|
||||
| [Hugo](http://bra.am/post/hugo/) | bra.am | 2014-03-23 |
|
||||
| [Converting Blogger To Markdown](http://trishagee.github.io/project/atom-to-hugo/) | Trisha Gee | 2014-03-20 |
|
||||
| [Moving to Hugo Static Web Pages](http://tepid.org/tech/hugo-web/) | Tobias Weingartner | 2014-03-16 |
|
||||
| [Hugo and GitHub Pages](http://spencerlyon.com/blog/2014/creating-the-site/) | Spencer Lyon | 2014-03-15 |
|
||||
| [New Blog Engine: Hugo](https://blog.afoolishmanifesto.com/posts/hugo/) | fREW Schmidt | 2014-03-15 |
|
||||
| [Hugo + gulp.js = Huggle](http://ktmud.github.io/huggle/en/intro/) ([English](http://ktmud.github.io/huggle/en/intro/), [<span lang="zh-CN">中文</span>](http://ktmud.github.io/huggle/zh/intro/)) | Jesse Yang <span lang="zh-CN">杨建超</span> | 2014-03-08 |
|
||||
| [Powered by Hugo](http://kieranhealy.org/blog/archives/2014/02/24/powered-by-hugo/) | Kieran Healy | 2014-02-24 |
|
||||
| [<span lang="ja">静的サイトを素早く構築するために<br>GoLangで作られたジェネレータHugo</span>](http://hamasyou.com/blog/2014/02/21/hugo/)| <div lang="ja" style="line-height: 1.1;">Shogo Hamada<br>濱田章吾</div> | 2014-02-21 |
|
||||
| [Latest Roundup of Useful Tools For Developers](http://codegeekz.com/latest-roundup-of-useful-tools-for-developers/) | CodeGeekz | 2014-02-13 |
|
||||
| [Hugo: Static Site Generator written in Go](http://www.braveterry.com/2014/02/06/hugo-static-site-generator-written-in-go/) | Brave Terry | 2014-02-06 |
|
||||
| [10 Useful HTML5 Tools for Web Designers and Developers](http://designdizzy.com/10-useful-html5-tools-for-web-designers-and-developers/) | Design Dizzy | 2014-02-04 |
|
||||
| [Hugo – Fast, Flexible Static Site Generator](http://cube3x.com/hugo-fast-flexible-static-site-generator/) | Joby Joseph | 2014-01-18 |
|
||||
| [Hugo: A new way to build static website](http://www.w3update.com/opensource/hugo-a-new-way-to-build-static-website.html) | w3update | 2014-01-17 |
|
||||
| [Xaprb now uses Hugo](http://xaprb.com/blog/2014/01/15/using-hugo/) | Baron Schwartz | 2014-01-15 |
|
||||
| [New jQuery Plugins And Resources That Web Designers Need](http://www.designyourway.net/blog/resources/new-jquery-plugins-and-resources-that-web-designers-need/) | Design Your Way | 2014-01-01 |
|
||||
| [On Blog Construction](http://alexla.sh/post/on-blog-construction/) | Alexander Lash | 2013-12-27 |
|
||||
| [Hugo](http://onethingwell.org/post/69070926608/hugo) | One Thing Well | 2013-12-05 |
|
||||
| [In Praise Of Hugo](http://sound-guru.com/blog/post/hello-world/) | sound-guru.com | 2013-10-19 |
|
||||
| [Hosting a blog on S3 and Cloudfront](http://www.danesparza.net/2013/07/hosting-a-blog-on-s3-and-cloudfront/) | Dan Esparza | 2013-07-24 |
|
||||
@@ -11,7 +11,7 @@ weight: 30
|
||||
draft: false
|
||||
aliases: [/meta/release-notes/]
|
||||
toc: true
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
|
||||
## **0.18.1** December 30th 2016
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
---
|
||||
title: "Project Organization"
|
||||
linktitle: "Project Organization"
|
||||
description: Scaffolding new projects, configuration, and source organization.
|
||||
date: 2016-11-01
|
||||
publishdate: 2016-11-01
|
||||
lastmod: 2016-11-01
|
||||
weight: 01
|
||||
tags: []
|
||||
categories: []
|
||||
draft: false
|
||||
hidesectioncontents: false
|
||||
slug:
|
||||
aliases: []
|
||||
toc: false
|
||||
notes:
|
||||
---
|
||||
|
||||
## New Projects
|
||||
|
||||
|
||||
|
||||
## Hugo Directory Structure
|
||||
|
||||
@@ -7,7 +7,7 @@ sitelink: http://2626.info/
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/2626info-tn.png
|
||||
image: 2626info-tn.png
|
||||
title: 2626.info
|
||||
---
|
||||
|
||||
|
||||
@@ -5,12 +5,13 @@ description: A collection of sites built using Hugo.
|
||||
date: 2017-02-01
|
||||
publishdate: 2017-02-01
|
||||
lastmod: 2017-02-01
|
||||
tags: []
|
||||
categories: []
|
||||
tags: [introduction,overview]
|
||||
weight: 01
|
||||
draft: false
|
||||
hidesectioncontents: false
|
||||
slug:
|
||||
type: showcase
|
||||
layout: showcaselist.html
|
||||
aliases: [/site-showcase/]
|
||||
notes:
|
||||
notesforauthors:
|
||||
---
|
||||
@@ -5,12 +5,12 @@ description: Ant Zucaro's Blog
|
||||
license: GPL
|
||||
licenseLink: ""
|
||||
sitelink: http://antzucaro.com/
|
||||
sourceLink: https://github.com/antzucaro/az.com
|
||||
sourcelink: https://github.com/antzucaro/az.com
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
- foundation
|
||||
thumbnail: /images/antzucaro-tn.jpg
|
||||
image: antzucaro-tn.jpg
|
||||
title: Ant Zucaro
|
||||
---
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@ description: Appernetic.io blog
|
||||
license: MIT
|
||||
licenseLink: https://github.com/appernetic/hugo-bootstrap-premium/blob/master/LICENSE.md
|
||||
sitelink: https://blog.appernetic.io/
|
||||
sourceLink: https://github.com/appernetic/hugo-bootstrap-premium
|
||||
sourcelink: https://github.com/appernetic/hugo-bootstrap-premium
|
||||
tags:
|
||||
- company
|
||||
- blog
|
||||
- bootstrap
|
||||
thumbnail: /images/apperneticioblog.png
|
||||
image: apperneticioblog.png
|
||||
title: Appernetic
|
||||
---
|
||||
|
||||
@@ -5,10 +5,10 @@ description: "Arrested DevOps is a podcast focusing on trends in the DevOps spac
|
||||
license: "apache2"
|
||||
licenseLink: "https://github.com/arresteddevops/ado-hugo/blob/master/LICENSE.md"
|
||||
sitelink: https://www.arresteddevops.com/
|
||||
sourceLink: https://github.com/arresteddevops/ado-hugo
|
||||
sourcelink: https://github.com/arresteddevops/ado-hugo
|
||||
tags:
|
||||
- podcast
|
||||
- bootstrap
|
||||
thumbnail: /images/arresteddevops-tn.png
|
||||
image: arresteddevops-tn.png
|
||||
title: arresteddevops
|
||||
---
|
||||
|
||||
@@ -5,11 +5,11 @@ description: ""
|
||||
license: CC-BY-SA
|
||||
licenseLink: ""
|
||||
sitelink: http://andrewcodispoti.com/
|
||||
sourceLink: https://gitlab.com/acodispo/andrewcodispoti-com
|
||||
sourcelink: https://gitlab.com/acodispo/andrewcodispoti-com
|
||||
tags:
|
||||
- personal
|
||||
- bootstrap
|
||||
thumbnail: /images/asc-tn.jpg
|
||||
image: asc-tn.jpg
|
||||
title: Andrew S Codispoti
|
||||
---
|
||||
|
||||
|
||||
@@ -4,11 +4,11 @@ description: "Personal website"
|
||||
license: ""
|
||||
licenseLink: ""
|
||||
sitelink: http://romansilin.com/
|
||||
sourceLink: https://github.com/astrochili/astrochili.github.io
|
||||
sourcelink: https://github.com/astrochili/astrochili.github.io
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/astrochili-tn.png
|
||||
image: astrochili-tn.png
|
||||
title: Roman Silin
|
||||
---
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ licenseLink: ""
|
||||
sitelink: https://aydos.com/
|
||||
tags:
|
||||
- web applications
|
||||
thumbnail: /images/aydoscom.png
|
||||
image: aydoscom.png
|
||||
title: aydos.com
|
||||
---
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ sitelink: https://barricade.io
|
||||
tags:
|
||||
- company
|
||||
- security
|
||||
thumbnail: /images/barricade-tn.png
|
||||
image: barricade-tn.png
|
||||
title: Barricade
|
||||
---
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@ description: "bep's blog"
|
||||
license: ""
|
||||
licenseLink: ""
|
||||
sitelink: http://bepsays.com/
|
||||
sourceLink: "https://github.com/bep/bepsays.com"
|
||||
sourcelink: "https://github.com/bep/bepsays.com"
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/bepsays-tn.png
|
||||
image: bepsays-tn.png
|
||||
title: bepsays.com
|
||||
---
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ tags:
|
||||
- blog
|
||||
- community
|
||||
- interviews
|
||||
thumbnail: /images/bugtrackersio-tn.jpg
|
||||
image: bugtrackersio-tn.jpg
|
||||
title: bugtrackers.io
|
||||
---
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@ description: "Camunda BPM Team Blog"
|
||||
license: "Apache 2.0"
|
||||
licenseLink: "https://github.com/camunda/blog.camunda.org#license"
|
||||
sitelink: http://blog.camunda.org/
|
||||
sourceLink: https://github.com/camunda/blog.camunda.org
|
||||
sourcelink: https://github.com/camunda/blog.camunda.org
|
||||
tags:
|
||||
- company
|
||||
- blog
|
||||
thumbnail: /images/camunda-blog.png
|
||||
image: camunda-blog.png
|
||||
title: Camunda Blog
|
||||
---
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@ description: "Camunda BPM Documentation"
|
||||
license: MIT
|
||||
licenseLink: "https://github.com/camunda/camunda-docs-theme#licence"
|
||||
sitelink: http://docs.camunda.org/
|
||||
sourceLink: https://github.com/camunda/camunda-docs-theme
|
||||
sourcelink: https://github.com/camunda/camunda-docs-theme
|
||||
tags:
|
||||
- company
|
||||
- documentation
|
||||
thumbnail: /images/camunda-docs.png
|
||||
image: camunda-docs.png
|
||||
title: Camunda Docs
|
||||
---
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ tags:
|
||||
- bootstrap
|
||||
- portfolio
|
||||
- tech
|
||||
thumbnail: /images/cdnoverview-tn.png
|
||||
image: cdnoverview-tn.png
|
||||
title: cdnoverview.com
|
||||
---
|
||||
|
||||
|
||||
@@ -3,10 +3,10 @@ lastmod: 2015-08-21
|
||||
date: 2015-08-23
|
||||
description: Chinese grammar lessons
|
||||
sitelink: https://www.chineseboost.com/grammar/
|
||||
sourceLink: https://github.com/hughgrigg/chineseboost-articles
|
||||
sourcelink: https://github.com/hughgrigg/chineseboost-articles
|
||||
tags:
|
||||
- learning
|
||||
- education
|
||||
thumbnail: /images/chinese-grammar-tn.png
|
||||
image: chinese-grammar-tn.png
|
||||
title: Chinese Grammar
|
||||
---
|
||||
|
||||
@@ -6,7 +6,7 @@ sitelink: http://www.chingli.com/
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/chingli-tn.jpg
|
||||
image: chingli-tn.jpg
|
||||
title: <span lang="zh-CN">青砾</span> (chingli)
|
||||
---
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@ description: "personal blog and portfolio of Samuel Debruyn"
|
||||
license: ""
|
||||
licenseLink: ""
|
||||
sitelink: https://chipsncookies.com
|
||||
sourceLink: https://github.com/SamuelDebruyn/chipsncookies-site
|
||||
sourcelink: https://github.com/SamuelDebruyn/chipsncookies-site
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/chipsncookies-tn.png
|
||||
image: chipsncookies-tn.png
|
||||
title: Chips 'n' Cookies
|
||||
---
|
||||
|
||||
|
||||
@@ -7,6 +7,6 @@ sitelink: https://christianmendoza.me/
|
||||
tags:
|
||||
- personal
|
||||
- profile
|
||||
thumbnail: /images/christianmendoza-tn.png
|
||||
image: christianmendoza-tn.png
|
||||
title: christianmendoza.me
|
||||
---
|
||||
|
||||
@@ -4,9 +4,9 @@ description: "Cinegy Open documentation project"
|
||||
license: ""
|
||||
licenseLink: ""
|
||||
sitelink: https://open.cinegy.com/
|
||||
sourceLink:
|
||||
sourcelink:
|
||||
tags:
|
||||
- documentation
|
||||
thumbnail: /images/cinegyopen-tn.png
|
||||
image: cinegyopen-tn.png
|
||||
title: Cinegy Open
|
||||
---
|
||||
@@ -9,6 +9,6 @@ tags:
|
||||
- fintech
|
||||
- payments
|
||||
- acquirer
|
||||
thumbnail: /images/clearhaus-tn.png
|
||||
image: clearhaus-tn.png
|
||||
title: Clearhaus
|
||||
---
|
||||
|
||||
@@ -9,7 +9,7 @@ tags:
|
||||
- company
|
||||
- documentation
|
||||
- foundation
|
||||
thumbnail: /images/cloudshark-tn.jpg
|
||||
image: cloudshark-tn.jpg
|
||||
title: CloudShark
|
||||
---
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@ description: blog, portfolio
|
||||
license: ""
|
||||
licenseLink: ""
|
||||
sitelink: http://blog.kulman.sk/
|
||||
sourceLink: https://github.com/igorkulman/coding-journal
|
||||
sourcelink: https://github.com/igorkulman/coding-journal
|
||||
tags:
|
||||
- blog
|
||||
- portfolio
|
||||
thumbnail: /images/codingjournal-tn.png
|
||||
image: codingjournal-tn.png
|
||||
title: Coding Journal
|
||||
---
|
||||
|
||||
@@ -5,12 +5,12 @@ description: "consequently.org, Greg Restall's personal website"
|
||||
license: ""
|
||||
licenseLink: ""
|
||||
sitelink: http://consequently.org
|
||||
sourceLink: "https://github.com/consequently/consequently-hugo"
|
||||
sourcelink: "https://github.com/consequently/consequently-hugo"
|
||||
tags:
|
||||
- academic
|
||||
- blog
|
||||
- kube
|
||||
thumbnail: /images/consequently.jpg
|
||||
image: consequently.jpg
|
||||
title: consequently.org
|
||||
---
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ tags:
|
||||
- edtech
|
||||
- technology
|
||||
- blog
|
||||
thumbnail: /images/ctlcompiled-tn.png
|
||||
image: ctlcompiled-tn.png
|
||||
title: CompilED at CTL
|
||||
---
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@ description: ""
|
||||
license: MIT
|
||||
licenseLink: ""
|
||||
sitelink: http://danmux.com/
|
||||
sourceLink: https://github.com/danmux/danmux-hugo
|
||||
sourcelink: https://github.com/danmux/danmux-hugo
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/danmux-tn.jpg
|
||||
image: danmux-tn.jpg
|
||||
title: Danmux
|
||||
---
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ tags:
|
||||
- tech
|
||||
- blog
|
||||
- website
|
||||
thumbnail: /images/datapipelinearchitect-tn.jpg
|
||||
image: datapipelinearchitect-tn.jpg
|
||||
title: Data Pipeline Architect
|
||||
---
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ tags:
|
||||
- photography
|
||||
- portfolio
|
||||
- blog
|
||||
thumbnail: /images/davidepetilli-tn.jpg
|
||||
image: davidepetilli-tn.jpg
|
||||
title: Davide Petilli
|
||||
---
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@ description: "Personal website for David Allen"
|
||||
license: "MIT"
|
||||
licenseLink: "https://opensource.org/licenses/MIT"
|
||||
sitelink: http://davidrallen.com/
|
||||
sourceLink: https://github.com/doctorallen/davidrallen.com
|
||||
sourcelink: https://github.com/doctorallen/davidrallen.com
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
- tech
|
||||
thumbnail: /images/davidrallen-tn.png
|
||||
image: davidrallen-tn.png
|
||||
title: David Allen
|
||||
---
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ sitelink: https://davidyat.es/
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/davidyates-tn.png
|
||||
image: davidyates-tn.png
|
||||
title: David Yates
|
||||
---
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@ description: ""
|
||||
license: ""
|
||||
licenseLink: ""
|
||||
sitelink: https://devmonk.com/
|
||||
sourceLink: https://github.com/peteraba/devmonk.com
|
||||
sourcelink: https://github.com/peteraba/devmonk.com
|
||||
tags:
|
||||
- educational
|
||||
- video
|
||||
thumbnail: /images/devmonk-tn.jpg
|
||||
image: devmonk-tn.jpg
|
||||
title: devmonk
|
||||
---
|
||||
|
||||
|
||||
@@ -4,11 +4,11 @@ description: "Personal blog"
|
||||
license: "CC BY-NC 4.0"
|
||||
licenseLink: ""
|
||||
sitelink: http://dmitriid.com/
|
||||
sourceLink: https://github.com/dmitriid/dmitriid.com
|
||||
sourcelink: https://github.com/dmitriid/dmitriid.com
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/dmitriid.com.png
|
||||
image: dmitriid.com.png
|
||||
title: dmitriid.com
|
||||
---
|
||||
|
||||
|
||||
@@ -3,11 +3,11 @@ lastmod: 2016-01-09
|
||||
date: 2016-01-09T01:00:10Z
|
||||
description: Personal homepage
|
||||
sitelink: https://emilyhorsman.com/
|
||||
sourceLink: https://github.com/emilyhorsman/buttercup
|
||||
sourcelink: https://github.com/emilyhorsman/buttercup
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/emilyhorsman.com-tn.jpg
|
||||
image: emilyhorsman.com-tn.jpg
|
||||
title: emilyhorsman.com
|
||||
---
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@ description: Tokyo IT service provider eSolia Inc's Hugo-powered website.
|
||||
license: MIT
|
||||
licenseLink: ""
|
||||
sitelink: http://esolia.com/
|
||||
sourceLink: https://github.com/eSolia/eSolia
|
||||
sourcelink: https://github.com/eSolia/eSolia
|
||||
tags:
|
||||
- company
|
||||
- esolia
|
||||
- rickcogley
|
||||
- japan
|
||||
thumbnail: /images/esolia_com-tn.png
|
||||
image: esolia_com-tn.png
|
||||
title: eSolia.com
|
||||
---
|
||||
|
||||
@@ -5,12 +5,12 @@ description: Tokyo IT service provider eSolia Inc's eSolia.pro blog site, powere
|
||||
license: MIT
|
||||
licenseLink: ""
|
||||
sitelink: http://esolia.pro/
|
||||
sourceLink: https://github.com/eSolia/eSolia.pro
|
||||
sourcelink: https://github.com/eSolia/eSolia.pro
|
||||
tags:
|
||||
- company
|
||||
- esolia
|
||||
- rickcogley
|
||||
- japan
|
||||
thumbnail: /images/esolia_pro-tn.png
|
||||
image: esolia_pro-tn.png
|
||||
title: eSolia.pro
|
||||
---
|
||||
|
||||
@@ -6,6 +6,6 @@ licenseLink: ""
|
||||
sitelink: https://docs.eurie.io
|
||||
tags:
|
||||
- documentation
|
||||
thumbnail: /images/docs.eurie.io-tn.png
|
||||
image: docs.eurie.io-tn.png
|
||||
title: eurie Desk docs
|
||||
---
|
||||
|
||||
@@ -5,11 +5,11 @@ description: Fabio Alessandro Locati personal blog.
|
||||
license: AGPLv3
|
||||
licenseLink: ""
|
||||
sitelink: http://fale.io/
|
||||
sourceLink: https://github.com/fale/fale.io
|
||||
sourcelink: https://github.com/fale/fale.io
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/fale-tn.png
|
||||
image: fale-tn.png
|
||||
title: fale.io
|
||||
---
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ sitelink: https://fixatom.com/
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/fixatom-tn.png
|
||||
image: fixatom-tn.png
|
||||
title: Atom
|
||||
---
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@ description: Multilingual, community documentation and blog site
|
||||
license: ""
|
||||
licenseLink: ""
|
||||
sitelink: https://www.fxsitecompat.com/
|
||||
sourceLink: https://github.com/fxsitecompat/www.fxsitecompat.com
|
||||
sourcelink: https://github.com/fxsitecompat/www.fxsitecompat.com
|
||||
tags:
|
||||
- community
|
||||
- documentation
|
||||
- translation
|
||||
thumbnail: /images/fxsitecompat-tn.png
|
||||
image: fxsitecompat-tn.png
|
||||
title: Firefox Site Compatibility
|
||||
---
|
||||
|
||||
|
||||
@@ -10,6 +10,6 @@ tags:
|
||||
- projects
|
||||
- music
|
||||
- drawings
|
||||
thumbnail: /images/gntech-tn.png
|
||||
image: gntech-tn.png
|
||||
title: gntech.se
|
||||
---
|
||||
|
||||
@@ -7,7 +7,7 @@ licenseLink: ""
|
||||
sitelink: http://getgb.io
|
||||
tags:
|
||||
- project
|
||||
thumbnail: /images/gogb-tn.jpg
|
||||
image: gogb-tn.jpg
|
||||
title: GoGB
|
||||
---
|
||||
|
||||
|
||||
@@ -5,9 +5,9 @@ description: "Code for Go in 5 Minutes Screencasts"
|
||||
license: "Apache License 2.0"
|
||||
licenseLink: "https://github.com/arschles/go-in-5-minutes/blob/master/LICENSE"
|
||||
sitelink: http://www.goin5minutes.com/
|
||||
sourceLink: https://github.com/arschles/go-in-5-minutes/tree/master/www
|
||||
sourcelink: https://github.com/arschles/go-in-5-minutes/tree/master/www
|
||||
tags:
|
||||
- screencasts
|
||||
thumbnail: /images/goin5minutes-tn.png
|
||||
image: goin5minutes-tn.png
|
||||
title: Go in 5 minutes
|
||||
---
|
||||
@@ -2,10 +2,10 @@
|
||||
date: 2016-03-05T14:30:21+01:00
|
||||
description: "Personal profile page of Horst Gutmann"
|
||||
sitelink: http://h10n.me/
|
||||
sourceLink: https://github.com/zerok/h10n.me
|
||||
sourcelink: https://github.com/zerok/h10n.me
|
||||
tags:
|
||||
- personal
|
||||
- profile
|
||||
thumbnail: /images/h10n.me-tn.png
|
||||
image: h10n.me-tn.png
|
||||
title: h10n.me
|
||||
---
|
||||
|
||||
@@ -5,11 +5,11 @@ description: This site
|
||||
license: Simpl
|
||||
licenseLink: ""
|
||||
sitelink: http://gohugo.io/
|
||||
sourceLink: https://github.com/spf13/hugo/tree/master/docs
|
||||
sourcelink: https://github.com/spf13/hugo/tree/master/docs
|
||||
tags:
|
||||
- documentation
|
||||
- bootstrap
|
||||
thumbnail: /images/hugo-tn.jpg
|
||||
image: hugo-tn.jpg
|
||||
title: Hugo
|
||||
---
|
||||
|
||||
|
||||
@@ -4,11 +4,11 @@ description: ""
|
||||
license: ""
|
||||
licenseLink: ""
|
||||
sitelink: https://jamescampbell.us/
|
||||
sourceLink: https://github.com/jamesacampbell/causes-and-effects-hugo
|
||||
sourcelink: https://github.com/jamesacampbell/causes-and-effects-hugo
|
||||
tags:
|
||||
- personal
|
||||
- blog
|
||||
thumbnail: /images/jamescampbell-tn.png
|
||||
image: jamescampbell-tn.png
|
||||
title: jamescampbell.us
|
||||
---
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user