shithub: hugo

Download patch

ref: e81208265bb3cdb7606d051a23d83aeebcb7d34d
parent: 50ec65fbe1a48475d3320775dab2c47389c02114
author: Bjørn Erik Pedersen <[email protected]>
date: Sun Aug 6 13:24:51 EDT 2017

Squashed 'docs/' changes from ef02e34e..35abbc86

35abbc86 Add example with taxonomy for title template func
85e28c10 Remove comment from variable in front matter example
eee8543b Remove comment from variable in front matter example
13a8e0b7 Add missing closing and opening comment tags
83531772 Replace http://example.{com,org}/ with https://example.{com,org}/
6727d820 Update gh repo for issues in config
3a58818e Add note to install Testify
19f13e61 Fix YAML examples in taxonomies.md
dc4b90db Replace old RSS template with new embedded version (#116)
00f39bd7 camelCase output format options
902a14a1 Add missing word to pretty URLs explanation

git-subtree-dir: docs
git-subtree-split: 35abbc869199b852922c024a29e2370272a7c1c8

--- a/config.toml
+++ b/config.toml
@@ -57,6 +57,8 @@
   removefromexternalsearch = false
   ## Gh repo for site footer (include trailing slash)
   ghrepo = "https://github.com/gohugoio/hugoDocs/"
+  ## GH Repo for filing a new issue
+  github_repo = "https://github.com/gohugoio/hugo/issues/new"
   ### Edit content repo (set to automatically enter "edit" mode; this is good for "improve this page" links)
   ghdocsrepo = "https://github.com/gohugoio/hugoDocs/tree/master/docs"
   ## Gitter URL
--- a/content/content-management/cross-references.md
+++ b/content/content-management/cross-references.md
@@ -96,8 +96,8 @@
 
 ### Examples
 
-* `{{</* ref "blog/post.md" */>}}` => `http://example.com/blog/post/`
-* `{{</* ref "post.md#tldr" */>}}` => `http://example.com/blog/post/#tldr:caffebad`
+* `{{</* ref "blog/post.md" */>}}` => `https://example.com/blog/post/`
+* `{{</* ref "post.md#tldr" */>}}` => `https://example.com/blog/post/#tldr:caffebad`
 * `{{</* relref "post.md" */>}}` => `/blog/post/`
 * `{{</* relref "blog/post.md#tldr" */>}}` => `/blog/post/#tldr:caffebad`
 * `{{</* ref "#tldr" */>}}` => `#tldr:badcaffe`
--- a/content/content-management/front-matter.md
+++ b/content/content-management/front-matter.md
@@ -54,7 +54,7 @@
 ---
 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" ]
+tags: [ ".vimrc", "plugins", "spf13-vim", "vim" ]
 lastmod: 2015-12-23
 date: "2012-04-06"
 categories:
--- a/content/content-management/menus.md
+++ b/content/content-management/menus.md
@@ -153,7 +153,7 @@
 {{< /code >}}
 
 {{% note %}}
-The URLs must be relative to the context root. If the `baseURL` is `http://example.com/mysite/`, then the URLs in the menu must not include the context root `mysite`. Using an absolute URL will overide the baseURL. If the value used for `URL` in the above example is `http://subdomain.example.com/`, the output will be `http://subdomain.example.com`.
+The URLs must be relative to the context root. If the `baseURL` is `https://example.com/mysite/`, then the URLs in the menu must not include the context root `mysite`. Using an absolute URL will overide the baseURL. If the value used for `URL` in the above example is `https://subdomain.example.com/`, the output will be `https://subdomain.example.com`.
 {{% /note %}}
 
 ## Nesting
--- a/content/content-management/organization.md
+++ b/content/content-management/organization.md
@@ -34,20 +34,20 @@
 .
 └── content
     └── about
-    |   └── _index.md  // <- http://example.com/about/
+    |   └── _index.md  // <- https://example.com/about/
     ├── post
-    |   ├── firstpost.md   // <- http://example.com/post/firstpost/
+    |   ├── firstpost.md   // <- https://example.com/post/firstpost/
     |   ├── happy
-    |   |   └── ness.md  // <- http://example.com/post/happy/ness/
-    |   └── secondpost.md  // <- http://example.com/post/secondpost/
+    |   |   └── ness.md  // <- https://example.com/post/happy/ness/
+    |   └── secondpost.md  // <- https://example.com/post/secondpost/
     └── quote
-        ├── first.md       // <- http://example.com/quote/first/
-        └── second.md      // <- http://example.com/quote/second/
+        ├── first.md       // <- https://example.com/quote/first/
+        └── second.md      // <- https://example.com/quote/second/
 ```
 
 ## Path Breakdown in Hugo
 
-The following demonstrates the relationships between your content organization and the output URL structure for your Hugo website when it renders. These examples assume you are [using pretty URLs][pretty], which is the default behavior for Hugo. The examples also assume a key-value of `baseurl = "http://example.com"` in your [site's configuration file][config].
+The following demonstrates the relationships between your content organization and the output URL structure for your Hugo website when it renders. These examples assume you are [using pretty URLs][pretty], which is the default behavior for Hugo. The examples also assume a key-value of `baseurl = "https://example.com"` in your [site's configuration file][config].
 
 ### Index Pages: `_index.md`
 
@@ -76,7 +76,7 @@
 ⊢--------^---------⊣⊢-^-⊣
         permalink
 ⊢----------^-------------⊣
-http://example.com/posts/index.html
+https://example.com/posts/index.html
 ```
 
 ### Single Pages in Sections
@@ -102,7 +102,7 @@
 ⊢--------^--------⊣⊢-^--⊣⊢-------^---------⊣
                  permalink
 ⊢--------------------^---------------------⊣
-http://example.com/posts/my-first-hugo-post/index.html
+https://example.com/posts/my-first-hugo-post/index.html
 ```
 
 ### Section with Nested Directories
@@ -120,7 +120,7 @@
 ⊢--------^--------⊣ ⊢------^-----⊣⊢----^------⊣
                   permalink
 ⊢----------------------^-----------------------⊣
-http://example.com/events/chicago/lollapalooza/
+https://example.com/events/chicago/lollapalooza/
 ```
 
 {{% note %}}
@@ -201,9 +201,9 @@
 ---
 {{< /code >}}
 <!-- See https://discourse.gohugo.io/t/path-not-works/6387 -->
-<!-- ### `path`
+<!-- ### `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, including the section. -->
+<!--`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, including the section. -->
 
 ### `url`
 
--- a/content/content-management/taxonomies.md
+++ b/content/content-management/taxonomies.md
@@ -163,7 +163,7 @@
 ```
 ---
 title: "Hugo: A fast and flexible static site generator"
-#tags: ["Development", "Go", "fast", "Blogging"]
+tags: ["Development", "Go", "fast", "Blogging"]
 categories: ["Development"]
 series: ["Go Web Dev"]
 slug: "hugo"
@@ -216,7 +216,7 @@
 ```
 ---
 title: foo
-#tags: [ "a", "b", "c" ]
+tags: [ "a", "b", "c" ]
 tags_weight: 22
 categories: ["d"]
 categories_weight: 44
--- a/content/content-management/urls.md
+++ b/content/content-management/urls.md
@@ -43,7 +43,7 @@
   post = "/:year/:month/:title/"
 {{< /code >}}
 
-Only the content under `post/` will have the new URL structure. For example, the file `content/post/sample-entry.md` with `date: 2017-02-27T19:20:00-05:00` in its front matter will render to `public/2017/02/sample-entry/index.html` at build time and therefore be reachable at `http://example.com/2013/11/sample-entry/`.
+Only the content under `post/` will have the new URL structure. For example, the file `content/post/sample-entry.md` with `date: 2017-02-27T19:20:00-05:00` in its front matter will render to `public/2017/02/sample-entry/index.html` at build time and therefore be reachable at `https://example.com/2013/11/sample-entry/`.
 
 ### Permalink Configuration Values
 
@@ -147,11 +147,11 @@
 <!DOCTYPE html>
 <html>
   <head>
-    <title>http://example.com/posts/my-intended-url</title>
-    <link rel="canonical" href="http://example.com/posts/my-intended-url"/>
+    <title>https://example.com/posts/my-intended-url</title>
+    <link rel="canonical" href="https://example.com/posts/my-intended-url"/>
     <meta name=\"robots\" content=\"noindex\">
     <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
-    <meta http-equiv="refresh" content="0; url=http://example.com/posts/my-intended-url"/>
+    <meta http-equiv="refresh" content="0; url=https://example.com/posts/my-intended-url"/>
   </head>
 </html>
 ```
@@ -190,7 +190,7 @@
 
 ## Ugly URLs
 
-If you would like to have are often referred to as "ugly URLs" (e.g., example.com/urls.html), set `uglyurls = true` or `uglyurls: true` in your site's `config.toml` or `config.yaml`, respectively. You can also use the `--uglyURLs=true` [flag from the command line][usage] with `hugo` or `hugo server`..
+If you would like to have what are often referred to as "ugly URLs" (e.g., example.com/urls.html), set `uglyurls = true` or `uglyurls: true` in your site's `config.toml` or `config.yaml`, respectively. You can also use the `--uglyURLs=true` [flag from the command line][usage] with `hugo` or `hugo server`..
 
 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. The following are examples of the same content directory and what the eventual URL structure will be when Hugo runs with its default behavior.
 
@@ -200,15 +200,15 @@
 .
 └── content
     └── about
-    |   └── _index.md  // <- http://example.com/about/
+    |   └── _index.md  // <- https://example.com/about/
     ├── post
-    |   ├── firstpost.md   // <- http://example.com/post/firstpost/
+    |   ├── firstpost.md   // <- https://example.com/post/firstpost/
     |   ├── happy
-    |   |   └── ness.md  // <- http://example.com/post/happy/ness/
-    |   └── secondpost.md  // <- http://example.com/post/secondpost/
+    |   |   └── ness.md  // <- https://example.com/post/happy/ness/
+    |   └── secondpost.md  // <- https://example.com/post/secondpost/
     └── quote
-        ├── first.md       // <- http://example.com/quote/first/
-        └── second.md      // <- http://example.com/quote/second/
+        ├── first.md       // <- https://example.com/quote/first/
+        └── second.md      // <- https://example.com/quote/second/
 ```
 
 Here's the same organization run with `hugo --uglyURLs`:
@@ -217,15 +217,15 @@
 .
 └── content
     └── about
-    |   └── _index.md  // <- http://example.com/about/index.html
+    |   └── _index.md  // <- https://example.com/about/index.html
     ├── post
-    |   ├── firstpost.md   // <- http://example.com/post/firstpost.html
+    |   ├── firstpost.md   // <- https://example.com/post/firstpost.html
     |   ├── happy
-    |   |   └── ness.md    // <- http://example.com/post/happy/ness.html
-    |   └── secondpost.md  // <- http://example.com/post/secondpost.html
+    |   |   └── ness.md    // <- https://example.com/post/happy/ness.html
+    |   └── secondpost.md  // <- https://example.com/post/secondpost.html
     └── quote
-        ├── first.md       // <- http://example.com/quote/first.html
-        └── second.md      // <- http://example.com/quote/second.html
+        ├── first.md       // <- https://example.com/quote/first.html
+        └── second.md      // <- https://example.com/quote/second.html
 ```
 
 
@@ -233,7 +233,7 @@
 
 By default, all relative URLs encountered in the input are left unmodified, e.g. `/css/foo.css` would stay as `/css/foo.css`. The `canonifyURLs` field in your site `config` has a default value of `false`.
 
-By setting `canonifyURLs` to `true`, all relative URLs would instead be *canonicalized* using `baseURL`.  For example, assuming you have `baseURL = https://example.com/`, the relative URL `/css/foo.css` would be turned into the absolute URL `http://example.com/css/foo.css`.
+By setting `canonifyURLs` to `true`, all relative URLs would instead be *canonicalized* using `baseURL`.  For example, assuming you have `baseURL = https://example.com/`, the relative URL `/css/foo.css` would be turned into the absolute URL `https://example.com/css/foo.css`.
 
 Benefits of canonicalization include fixing all URLs to be absolute, which may aid with some parsing tasks. Note, however, that all modern browsers handle this on the client without issue.
 
--- a/content/contribute/development.md
+++ b/content/contribute/development.md
@@ -139,6 +139,12 @@
 go get -v -u github.com/gohugoio/hugo
 ```
 
+Hugo relies on [Testify](https://github.com/stretchr/testify) for testing Go code. If you don't already have it, get the Testify testing tools:
+
+```
+go get github.com/stretchr/testify
+```
+
 ### 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/content/contribute/themes.md
+++ b/content/contribute/themes.md
@@ -64,7 +64,7 @@
 license = "MIT"
 licenselink = "https://github.com/<YOURNAME>/<YOURTHEME>/blob/master/LICENSE.md"
 description = ""
-homepage = "http://example.com/"
+homepage = "https://example.com/"
 tags = []
 features = []
 min_version = 0.19
--- a/content/functions/abslangurl.md
+++ b/content/functions/abslangurl.md
@@ -20,9 +20,9 @@
 
 Both `absLangURL` and [`relLangURL`](/functions/rellangurl/) are similar to their [`absURL`](/functions/absurl/) and [`relURL`](/functions/relurl) relatives but will add the correct language prefix when the site is configured with more than one language.
 
-So for a site  `baseURL` set to `http://example.com/hugo/` and the current language is `en`:
+So for a site  `baseURL` set to `https://example.com/hugo/` and the current language is `en`:
 
 ```
-{{ "blog/" | absLangURL }} → "http://example.com/hugo/en/blog/"
+{{ "blog/" | absLangURL }} → "https://example.com/hugo/en/blog/"
 {{ "blog/" | relLangURL }} → "/hugo/en/blog/"
 ```
--- a/content/functions/absurl.md
+++ b/content/functions/absurl.md
@@ -18,10 +18,10 @@
 aliases: []
 ---
 
-Both `absURL` and `relURL` consider the configured value of `baseURL` in your site's [`config` file][configuration]. Given a `baseURL` set to `http://example.com/hugo/`:
+Both `absURL` and `relURL` consider the configured value of `baseURL` in your site's [`config` file][configuration]. Given a `baseURL` set to `https://example.com/hugo/`:
 
 ```
-{{ "mystyle.css" | absURL }} → "http://example.com/hugo/mystyle.css"
+{{ "mystyle.css" | absURL }} → "https://example.com/hugo/mystyle.css"
 {{ "mystyle.css" | relURL }} → "/hugo/mystyle.css"
 {{ "http://gohugo.io/" | relURL }} →  "http://gohugo.io/"
 {{ "http://gohugo.io/" | absURL }} →  "http://gohugo.io/"
--- a/content/functions/math.md
+++ b/content/functions/math.md
@@ -38,7 +38,7 @@
 For example, social media sharing with [Twitter Cards][cards] requires the following `meta` link in your site's `<head>` to display Twitter's ["Summary Card with Large Image"][twtsummary]:
 
 ```
-<meta name="twitter:image" content="http://example.com/images/my-twitter-image.jpg">
+<meta name="twitter:image" content="https://example.com/images/my-twitter-image.jpg">
 ```
 
 Let's assume you have an `image` field in the front matter of each of your content files:
--- a/content/functions/relLangURL.md
+++ b/content/functions/relLangURL.md
@@ -20,10 +20,10 @@
 
 `absLangURL` and `relLangURL` functions are similar to their [`absURL`](/functions/absurl/) and [`relURL`](/functions/relurl/) relatives but will add the correct language prefix when the site is configured with more than one language. (See [Configuring Multilingual][multiliconfig].)
 
-So for a site  `baseURL` set to `http://example.com/hugo/` and the current language is `en`:
+So for a site  `baseURL` set to `https://example.com/hugo/` and the current language is `en`:
 
 ```
-{{ "blog/" | absLangURL }} → "http://example.com/hugo/en/blog/"
+{{ "blog/" | absLangURL }} → "https://example.com/hugo/en/blog/"
 {{ "blog/" | relLangURL }} → "/hugo/en/blog/"
 ```
 
--- a/content/functions/relurl.md
+++ b/content/functions/relurl.md
@@ -18,10 +18,10 @@
 aliases: []
 ---
 
-Both `absURL` and `relURL` consider the configured value of `baseURL` in your site's [`config` file][configuration]. Given a `baseURL` set to `http://example.com/hugo/`:
+Both `absURL` and `relURL` consider the configured value of `baseURL` in your site's [`config` file][configuration]. Given a `baseURL` set to `https://example.com/hugo/`:
 
 ```
-{{ "mystyle.css" | absURL }} → "http://example.com/hugo/mystyle.css"
+{{ "mystyle.css" | absURL }} → "https://example.com/hugo/mystyle.css"
 {{ "mystyle.css" | relURL }} → "/hugo/mystyle.css"
 {{ "http://gohugo.io/" | relURL }} →  "http://gohugo.io/"
 {{ "http://gohugo.io/" | absURL }} →  "http://gohugo.io/"
--- a/content/functions/title.md
+++ b/content/functions/title.md
@@ -23,3 +23,11 @@
 ```
 {{title "BatMan"}}` → "Batman"
 ```
+
+Can be combined in pipes. In the following snippet, the link text is cleaned up using `humanize` to remove dashes and `title` to convert the value of `$name` to Intial Caps.
+
+```
+{{ range $name, $items := .Site.Taxonomies.categories }}
+    <li><a href="{{ printf "%s/%s" "categories" ($name | urlize | lower) | absURL }}">{{ $name | humanize | title }} ({{ len $items }})</a></li>
+{{ end }}
+```
--- a/content/getting-started/quick-start.md
+++ b/content/getting-started/quick-start.md
@@ -118,7 +118,7 @@
 Open up `config.toml` in a text editor:
 
 ```
-baseURL = "http://example.org/"
+baseURL = "https://example.org/"
 languageCode = "en-us"
 title = "My New Hugo Site"
 theme = "ananke"
--- a/content/templates/output-formats.md
+++ b/content/templates/output-formats.md
@@ -26,7 +26,7 @@
 
 This is the full set of built-in media types in Hugo:
 
-{{< datatable "media" "types" "Type" "Suffix" >}}
+{{< datatable "media" "types" "type" "suffix" >}}
 
 **Note:**
 
@@ -55,7 +55,7 @@
 
 This is the full set of Hugo's built-in output formats:
 
-{{< datatable "output" "formats" "Name" "MediaType" "Path" "BaseName" "Rel" "Protocol" "IsPlainText" "IsHTML" "NoUgly">}}
+{{< datatable "output" "formats" "name" "mediaType" "path" "baseName" "rel" "protocol" "isPlainText" "isHTML" "noUgly">}}
 
 * A page can be output in as many output formats as you want, and you can have an infinite amount of output formats defined **as long as they resolve to a unique path on the file system**. In the above table, the best example of this is `AMP` vs. `HTML`. `AMP` has the value `amp` for `Path` so it doesn't overwrite the `HTML` version; e.g. we can now have both `/index.html` and `/amp/index.html`.
 * The `MediaType` must match the `Type` of an already defined media type.
@@ -71,40 +71,40 @@
 protocol = "bep://"
 ```
 
-The above example is fictional, but if used for the homepage on a site with `baseURL` `http://example.org`, it will produce a plain text homepage with the URL `bep://example.org/myindex.enr`.
+The above example is fictional, but if used for the homepage on a site with `baseURL` `https://example.org`, it will produce a plain text homepage with the URL `bep://example.org/myindex.enr`.
 
 ### Configure Output Formats
 
 The following is the full list of configuration options for output formats and their default values:
 
-`Name`
+`name`
 : the output format identifier. This is used to define what output format(s) you want for your pages.
 
-`MediaType`
+`mediaType`
 : this must match the `Type` of a defined media type.
 
-`Path`
+`path`
 : sub path to save the output files.
 
-`BaseName`
+`baseName`
 : the base filename for the list filenames (homepage, etc.). **Default:** `index`.
 
-`Rel`
+`rel`
 : can be used to create `rel` values in `link` tags. **Default:** `alternate`.
 
-`Protocol`
+`protocol`
 : will replace the "http://" or "https://" in your `baseURL` for this output format.
 
-`IsPlainText`
+`isPlainText`
 : use Go's plain text templates parser for the templates. **Default:** `false`.
 
-`IsHTML`
+`isHTML`
 : used in situations only relevant for `HTML`-type formats; e.g., page aliases.
 
-`NoUgly`
+`noUgly`
 : used to turn off ugly URLs If `uglyURLs` is set to `true` in your site. **Default:** `false`.
 
-`NotAlternative`
+`notAlternative`
 : enable if it doesn't make sense to include this format in an `AlternativeOutputFormats` format listing on `Page` (e.g., with `CSS`). Note that we use the term *alternative* and not *alternate* here, as it does not necessarily replace the other format. **Default:** `false`.
 
 ## Output Formats for Pages
--- a/content/templates/rss.md
+++ b/content/templates/rss.md
@@ -84,9 +84,9 @@
 ```
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
-    <title>{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}</title>
+    <title>{{ if eq  .Title  .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
     <link>{{ .Permalink }}</link>
-    <description>Recent content {{ with .Title }}in {{.}} {{ end }}on {{ .Site.Title }}</description>
+    <description>Recent content {{ if ne  .Title  .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
     <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
     <language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
     <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
@@ -93,8 +93,10 @@
     <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
     <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
     <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
-    <atom:link href="{{.URL}}" rel="self" type="application/rss+xml" />
-    {{ range first 15 .Data.Pages }}
+    {{ with .OutputFormats.Get "RSS" }}
+        {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
+    {{ end }}
+    {{ range .Data.Pages }}
     <item>
       <title>{{ .Title }}</title>
       <link>{{ .Permalink }}</link>
@@ -101,7 +103,7 @@
       <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
       {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
       <guid>{{ .Permalink }}</guid>
-      <description>{{ .Content | html }}</description>
+      <description>{{ .Summary | html }}</description>
     </item>
     {{ end }}
   </channel>
--- a/content/variables/page.md
+++ b/content/variables/page.md
@@ -179,7 +179,7 @@
 title: My First Post
 date: date: 2017-02-20T15:26:23-06:00
 categories: [one]
-#tags: [two,three,four]
+tags: [two,three,four]
 ```
 
 With the above front matter, the `tags` and `categories` taxonomies are accessible via the following:
--- a/content/variables/site.md
+++ b/content/variables/site.md
@@ -109,7 +109,7 @@
 The following `config.toml` defines a site-wide param for `description`:
 
 ```
-baseURL = "http://yoursite.example.com/"
+baseURL = "https://yoursite.example.com/"
 
 [params]
   description = "Tesla's Awesome Hugo Site"
--- a/data/docs.json
+++ b/data/docs.json
@@ -2,76 +2,76 @@
   "media": {
     "types": [
       {
-        "Type": "application/javascript",
-        "String": "application/javascript+js",
-        "MainType": "application",
-        "SubType": "javascript",
-        "Suffix": "js",
-        "Delimiter": "."
+        "type": "application/javascript",
+        "string": "application/javascript+js",
+        "mainType": "application",
+        "subType": "javascript",
+        "suffix": "js",
+        "delimiter": "."
       },
       {
-        "Type": "application/json",
-        "String": "application/json+json",
-        "MainType": "application",
-        "SubType": "json",
-        "Suffix": "json",
-        "Delimiter": "."
+        "type": "application/json",
+        "string": "application/json+json",
+        "mainType": "application",
+        "subType": "json",
+        "suffix": "json",
+        "delimiter": "."
       },
       {
-        "Type": "application/rss",
-        "String": "application/rss+xml",
-        "MainType": "application",
-        "SubType": "rss",
-        "Suffix": "xml",
-        "Delimiter": "."
+        "type": "application/rss",
+        "string": "application/rss+xml",
+        "mainType": "application",
+        "subType": "rss",
+        "suffix": "xml",
+        "delimiter": "."
       },
       {
-        "Type": "application/xml",
-        "String": "application/xml+xml",
-        "MainType": "application",
-        "SubType": "xml",
-        "Suffix": "xml",
-        "Delimiter": "."
+        "type": "application/xml",
+        "string": "application/xml+xml",
+        "mainType": "application",
+        "subType": "xml",
+        "suffix": "xml",
+        "delimiter": "."
       },
       {
-        "Type": "text/calendar",
-        "String": "text/calendar+ics",
-        "MainType": "text",
-        "SubType": "calendar",
-        "Suffix": "ics",
-        "Delimiter": "."
+        "type": "text/calendar",
+        "string": "text/calendar+ics",
+        "mainType": "text",
+        "subType": "calendar",
+        "suffix": "ics",
+        "delimiter": "."
       },
       {
-        "Type": "text/css",
-        "String": "text/css+css",
-        "MainType": "text",
-        "SubType": "css",
-        "Suffix": "css",
-        "Delimiter": "."
+        "type": "text/css",
+        "string": "text/css+css",
+        "mainType": "text",
+        "subType": "css",
+        "suffix": "css",
+        "delimiter": "."
       },
       {
-        "Type": "text/csv",
-        "String": "text/csv+csv",
-        "MainType": "text",
-        "SubType": "csv",
-        "Suffix": "csv",
-        "Delimiter": "."
+        "type": "text/csv",
+        "string": "text/csv+csv",
+        "mainType": "text",
+        "subType": "csv",
+        "suffix": "csv",
+        "delimiter": "."
       },
       {
-        "Type": "text/html",
-        "String": "text/html+html",
-        "MainType": "text",
-        "SubType": "html",
-        "Suffix": "html",
-        "Delimiter": "."
+        "type": "text/html",
+        "string": "text/html+html",
+        "mainType": "text",
+        "subType": "html",
+        "suffix": "html",
+        "delimiter": "."
       },
       {
-        "Type": "text/plain",
-        "String": "text/plain+txt",
-        "MainType": "text",
-        "SubType": "plain",
-        "Suffix": "txt",
-        "Delimiter": "."
+        "type": "text/plain",
+        "string": "text/plain+txt",
+        "mainType": "text",
+        "subType": "plain",
+        "suffix": "txt",
+        "delimiter": "."
       }
     ]
   },
@@ -79,87 +79,143 @@
     "formats": [
       {
         "MediaType": "text/html+html",
-        "Name": "AMP",
-        "Path": "amp",
-        "BaseName": "index",
-        "Rel": "amphtml",
-        "Protocol": "",
-        "IsPlainText": false,
-        "IsHTML": true,
-        "NoUgly": false,
-        "NotAlternative": false
+        "name": "AMP",
+        "mediaType": {
+          "type": "text/html",
+          "string": "text/html+html",
+          "mainType": "text",
+          "subType": "html",
+          "suffix": "html",
+          "delimiter": "."
+        },
+        "path": "amp",
+        "baseName": "index",
+        "rel": "amphtml",
+        "protocol": "",
+        "isPlainText": false,
+        "isHTML": true,
+        "noUgly": false,
+        "notAlternative": false
       },
       {
         "MediaType": "text/css+css",
-        "Name": "CSS",
-        "Path": "",
-        "BaseName": "styles",
-        "Rel": "stylesheet",
-        "Protocol": "",
-        "IsPlainText": true,
-        "IsHTML": false,
-        "NoUgly": false,
-        "NotAlternative": true
+        "name": "CSS",
+        "mediaType": {
+          "type": "text/css",
+          "string": "text/css+css",
+          "mainType": "text",
+          "subType": "css",
+          "suffix": "css",
+          "delimiter": "."
+        },
+        "path": "",
+        "baseName": "styles",
+        "rel": "stylesheet",
+        "protocol": "",
+        "isPlainText": true,
+        "isHTML": false,
+        "noUgly": false,
+        "notAlternative": true
       },
       {
         "MediaType": "text/csv+csv",
-        "Name": "CSV",
-        "Path": "",
-        "BaseName": "index",
-        "Rel": "alternate",
-        "Protocol": "",
-        "IsPlainText": true,
-        "IsHTML": false,
-        "NoUgly": false,
-        "NotAlternative": false
+        "name": "CSV",
+        "mediaType": {
+          "type": "text/csv",
+          "string": "text/csv+csv",
+          "mainType": "text",
+          "subType": "csv",
+          "suffix": "csv",
+          "delimiter": "."
+        },
+        "path": "",
+        "baseName": "index",
+        "rel": "alternate",
+        "protocol": "",
+        "isPlainText": true,
+        "isHTML": false,
+        "noUgly": false,
+        "notAlternative": false
       },
       {
         "MediaType": "text/calendar+ics",
-        "Name": "Calendar",
-        "Path": "",
-        "BaseName": "index",
-        "Rel": "alternate",
-        "Protocol": "webcal://",
-        "IsPlainText": true,
-        "IsHTML": false,
-        "NoUgly": false,
-        "NotAlternative": false
+        "name": "Calendar",
+        "mediaType": {
+          "type": "text/calendar",
+          "string": "text/calendar+ics",
+          "mainType": "text",
+          "subType": "calendar",
+          "suffix": "ics",
+          "delimiter": "."
+        },
+        "path": "",
+        "baseName": "index",
+        "rel": "alternate",
+        "protocol": "webcal://",
+        "isPlainText": true,
+        "isHTML": false,
+        "noUgly": false,
+        "notAlternative": false
       },
       {
         "MediaType": "text/html+html",
-        "Name": "HTML",
-        "Path": "",
-        "BaseName": "index",
-        "Rel": "canonical",
-        "Protocol": "",
-        "IsPlainText": false,
-        "IsHTML": true,
-        "NoUgly": false,
-        "NotAlternative": false
+        "name": "HTML",
+        "mediaType": {
+          "type": "text/html",
+          "string": "text/html+html",
+          "mainType": "text",
+          "subType": "html",
+          "suffix": "html",
+          "delimiter": "."
+        },
+        "path": "",
+        "baseName": "index",
+        "rel": "canonical",
+        "protocol": "",
+        "isPlainText": false,
+        "isHTML": true,
+        "noUgly": false,
+        "notAlternative": false
       },
       {
         "MediaType": "application/json+json",
-        "Name": "JSON",
-        "Path": "",
-        "BaseName": "index",
-        "Rel": "alternate",
-        "Protocol": "",
-        "IsPlainText": true,
-        "IsHTML": false,
-        "NoUgly": false,
-        "NotAlternative": false
+        "name": "JSON",
+        "mediaType": {
+          "type": "application/json",
+          "string": "application/json+json",
+          "mainType": "application",
+          "subType": "json",
+          "suffix": "json",
+          "delimiter": "."
+        },
+        "path": "",
+        "baseName": "index",
+        "rel": "alternate",
+        "protocol": "",
+        "isPlainText": true,
+        "isHTML": false,
+        "noUgly": false,
+        "notAlternative": false
       },
       {
         "MediaType": "application/rss+xml",
-        "Name": "RSS",
-        "Path": "",
-        "BaseName": "index",
-        "Rel": "alternate",
-        "Protocol": "",
-        "IsPlainText": false,
-        "IsHTML": false,
-        "NoUgly": true,
-        "NotAlternative": false
+        "name": "RSS",
+        "mediaType": {
+          "type": "application/rss",
+          "string": "application/rss+xml",
+          "mainType": "application",
+          "subType": "rss",
+          "suffix": "xml",
+          "delimiter": "."
+        },
+        "path": "",
+        "baseName": "index",
+        "rel": "alternate",
+        "protocol": "",
+        "isPlainText": false,
+        "isHTML": false,
+        "noUgly": true,
+        "notAlternative": false
       }
     ],
     "layouts": [