shithub: hugo

Download patch

ref: 1d0d280e2080c30f83b6cff8914b63fadc1b1901
parent: a7dae30a8f9373d8536c2e7a3e8bdaa79735719c
author: spf13 <[email protected]>
date: Thu Oct 31 05:51:13 EDT 2013

Addition of an indexes section to the docs. Updated most of the existing index content.

--- a/docs/content/extras/indexes.md
+++ /dev/null
@@ -1,222 +1,0 @@
----
-title: "Indexes"
-date: "2013-07-01"
-aliases: ["/doc/indexes/"]
-groups: ["extras"]
-groups_weight: 30
----
-
-Hugo includes support for user defined indexes of content. In our 
-terminology an index is best thought of as tags applied to content
-but they can be used for far more than just tags. Other common
-uses would include categories, groups, series. For the purpose of 
-this document we will just use tags for our example. For a more 
-complete example see [spf13.com-hugo](http://github.com/spf13/spf13.com-hugo).
-
-## Defining Indexes for a site
-
-Indexes must be defined in the site configuration, before they
-can be used throughout the site. 
-
-Here is an example configuration in YAML that specifies two indexes.
-Notice the format is **singular key** : *plural value*. While 
-we could use an inflection library to pluralize this, they currently
-support only a few languages, so instead we've opted for user defined
-pluralization.
-
-**config.yaml**
-
-    ---
-    indexes:
-        tag: "tags"
-        topic: "topics"
-    baseurl: "http://spf13.com/"
-    title: "Steve Francia is spf13.com"
-    ---
-
-## Creating index templates
-For each index type a template needs to be provided to render the index page.
-In the case of tags, this will render the content for /tags/TAGNAME/.
-
-The template must be called the singular name of the index and placed in 
-layouts/indexes
-
-    .
-    └── layouts
-        └── indexes
-            └── category.html
-
-The template will be provided Data about the index. 
-
-### Variables
-
-The following variables are available to the index template:
-
-**.Title**  The title for the content. <br>
-**.Date** The date the content is published on.<br>
-**.Permalink** The Permanent link for this page.<br>
-**.RSSLink** Link to the indexes' rss link. <br>
-**.Data.Pages** The content that is assigned this index.<br>
-**.Data.`singular`** The index itself.<br>
-
-#### Example
-
-    {{ template "chrome/header.html" . }}
-    {{ template "chrome/subheader.html" . }}
-
-    <section id="main">
-      <div>
-       <h1 id="title">{{ .Title }}</h1>
-        {{ range .Data.Pages }}
-            {{ .Render "summary"}}
-        {{ end }}
-      </div>
-    </section>
-
-    {{ template "chrome/footer.html" }}
-
-
-## Assigning indexes to content
-
-Once an index is defined at the site level, any piece of content
-can be assigned to it regardless of content type or section.
-
-Assigning content to an index is done in the front matter.
-Simply create a variable with the *plural* name of the index
-and assign all keys you want this content to match against. 
-
-**Index values are case insensitive**
-
-#### Example
-    {
-        "title": "Hugo: A fast and flexible static site generator",
-        "tags": [
-            "Development",
-            "golang",
-            "Blogging"
-        ],
-        "slug": "hugo",
-        "project_url": "http://github.com/spf13/hugo"
-    }
-
-
-## Displaying indexes within content
-
-Within your content templates you may wish to display 
-the indexes that that piece of content is assigned to.
-
-Because we are leveraging the front matter system to 
-define indexes for content, the indexes assigned to 
-each content piece are located in the usual place 
-(.Params.`plural`)
-
-#### Example
-
-    <ul id="tags">
-      {{ range .Params.tags }}
-        <li><a href="tags/{{ . | urlize }}">{{ . }}</a> </li>
-      {{ end }}
-    </ul>
-
-If you wish to display the list of all indexes, the index can
-be retrieved from the `.Site` variable.
-
-#### Example
-
-    <ul id="all-tags">
-      {{ range .Site.Indexes.tags }}  
-        <li><a href="/tags/{{ .Name | urlize }}">{{ .Name }}</a></li>  
-      {{ end }}
-    </ul>
-
-## Creating Indexes of Indexes
-
-Hugo also supports creating pages that list your values for each 
-index along with the number of content items associated with the 
-index key.
-
-This may take the form of a tag cloud or simply a list.
-
-To have hugo create these indexes of indexes pages, simply create
-a template in indexes called indexes.html
-
-Hugo provides two different versions of the index. One alphabetically
-sorted, the other sorted by most popular. It's important to recognize
-that the data structure of the two is different.
-
-#### Example indexes.html file (alphabetical)
-
-    {{ template "chrome/header.html" . }}
-    {{ template "chrome/subheader.html" . }}
-
-    <section id="main">
-      <div>
-       <h1 id="title">{{ .Title }}</h1>
-       <ul>
-       {{ $data := .Data }}
-        {{ range $key, $value := .Data.Index }}
-        <li><a href="{{ $data.Plural }}/{{ $key | urlize }}"> {{ $key }} </a> {{ len $value }} </li>
-        {{ end }}
-       </ul>
-      </div>
-    </section>
-
-    {{ template "chrome/footer.html" }}
-
-
-#### Example indexes.html file (ordered)
-
-    {{ template "chrome/header.html" . }}
-    {{ template "chrome/subheader.html" . }}
-
-    <section id="main">
-      <div>
-       <h1 id="title">{{ .Title }}</h1>
-       <ul>
-        {{ range $data.OrderedIndex }}
-        <li><a href="{{ $data.Plural }}/{{ .Name | urlize }}"> {{ .Name }} </a> {{ .Count }} </li>
-        {{ end }}
-       </ul>
-      </div>
-    </section>
-
-    {{ template "chrome/footer.html" }}
-
-### Variables available to indexes of indexes pages.
-
-**.Title**  The title for the content. <br>
-**.Date** The date the content is published on.<br>
-**.Permalink** The Permanent link for this page.<br>
-**.RSSLink** Link to the indexes' rss link. <br>
-**.Data.Singular** The singular name of the index <br>
-**.Data.Plural** The plural name of the index<br>
-**.Data.Index** The Alphabetical index<br>
-**.Data.OrderedIndex** The popular index<br>
-
-## Creating a menu based on indexes
-
-Hugo can generate menus based on indexes by iterating and
-nesting the index keys. This can be used to build a hierarchy
-of content within your site.
-
-To have hugo create the menu, simply create a template in chome
-called menu.html, then include it using the 
-`{{ template "chrome/menu.html" . }}` syntax.
-
-
-#### Example menu.html file 
-
-    <section id="menu">
-      <ul>
-        {{ range $indexname, $index := .Site.Indexes }}
-          <li><a href="/{{ $indexname | urlize }}">{{ $indexname }}</a> 
-            <ul> 
-              {{ range $index }}
-                <li><a href="/{{ $indexname | urlize }}/{{ .Name | urlize }}">{{ .Name }}</a></li>
-              {{ end }}
-            </ul>
-          </li> 
-        {{ end }}
-      </ul>
-    </section>
-
--- a/docs/content/extras/indexes/category.md
+++ /dev/null
@@ -1,57 +1,0 @@
----
-title: "Index Category Example"
-date: "2013-07-01"
-linktitle: "Example - Categories"
-groups: ["extras"]
-groups_weight: 40
----
-
-This page demonstrates an example of using indexes to provide categories for your site.
-
-### config.yaml
-First step is to define the index in your config file.
-*Because we use both the singular and plural name of the index in our rendering it's
-important to provide both here. We require this, rather than using inflection in
-effort to support as many languages as possible.*
-
-    ---
-    indexes:
-        category: "categories"
-    baseurl: "http://spf13.com/"
-    title: "Steve Francia is spf13.com"
-    ---
-
-### /layouts/indexes/category.html
-
-For each index type a template needs to be provided to render the index page.
-In the case of categories, this will render the content for /categories/CATEGORYNAME/.
-
-    {{ template "chrome/header.html" . }}
-    {{ template "chrome/subheader.html" . }}
-
-    <section id="main">
-      <div>
-       <h1 id="title">{{ .Title }}</h1>
-        {{ range .Data.Pages }}
-            {{ .Render "summary"}}
-        {{ end }}
-      </div>
-    </section>
-
-    {{ template "chrome/footer.html" }}
-
-
-### Assigning indexes to content
-
-Make sure that the index is set in the front matter:
-
-    {
-        "title": "Hugo: A fast and flexible static site generator",
-        "categories": [
-            "Development",
-            "golang",
-            "Blogging"
-        ],
-        "slug": "hugo"
-    }
-
--- /dev/null
+++ b/docs/content/indexes/category.md
@@ -1,0 +1,58 @@
+---
+title: "Example Index - Category"
+date: "2013-07-01"
+linktitle: "Example - Categories"
+aliases: ["/extras/indexes/category"]
+groups: ["indexes"]
+groups_weight: 60
+---
+
+This page demonstrates what would be required to add a new index called "categories" to your site.
+
+### config.yaml
+First step is to define the index in your config file.
+*Because we use both the singular and plural name of the index in our rendering it's
+important to provide both here. We require this, rather than using inflection in
+effort to support as many languages as possible.*
+
+    ---
+    indexes:
+        category: "categories"
+    baseurl: "http://spf13.com/"
+    title: "Steve Francia is spf13.com"
+    ---
+
+### /layouts/indexes/category.html
+
+For each index type a template needs to be provided to render the index page.
+In the case of categories, this will render the content for /categories/CATEGORYNAME/.
+
+    {{ template "chrome/header.html" . }}
+    {{ template "chrome/subheader.html" . }}
+
+    <section id="main">
+      <div>
+       <h1 id="title">{{ .Title }}</h1>
+        {{ range .Data.Pages }}
+            {{ .Render "summary"}}
+        {{ end }}
+      </div>
+    </section>
+
+    {{ template "chrome/footer.html" }}
+
+
+### Assigning indexes to content
+
+Make sure that the index is set in the front matter:
+
+    {
+        "title": "Hugo: A fast and flexible static site generator",
+        "categories": [
+            "Development",
+            "golang",
+            "Blogging"
+        ],
+        "slug": "hugo"
+    }
+
--- /dev/null
+++ b/docs/content/indexes/displaying.md
@@ -1,0 +1,109 @@
+---
+title:  "Rendering Indexes"
+date: "2013-07-01"
+linktitle: "Displaying"
+groups: ["indexes"]
+groups_weight: 20
+---
+# For Content
+### Index values assigned to this content
+
+Within your content templates you may wish to display 
+the indexes that that piece of content is assigned to.
+
+Because we are leveraging the front matter system to 
+define indexes for content, the indexes assigned to 
+each content piece are located in the usual place 
+(.Params.`plural`)
+
+#### Example
+
+    <ul id="tags">
+      {{ range .Params.tags }}
+        <li><a href="tags/{{ . | urlize }}">{{ . }}</a> </li>
+      {{ end }}
+    </ul>
+
+# Anywhere
+### Displaying all keys for an index
+
+If you wish to display the list of all keys for an index you can 
+find retrieve them from the `.Site` variable.
+
+This may take the form of a tag cloud, a menu or simply a list.
+
+The following example displays all tag keys:
+
+#### Example
+
+    <ul id="all-tags">
+      {{ range .Site.Indexes.tags }}
+        <li><a href="/tags/{{ .Name | urlize }}">{{ .Name }}</a></li>  
+      {{ end }}
+    </ul>
+
+## Creating a menu based on indexes
+
+Hugo can generate menus based on indexes by iterating and
+nesting the index keys. This can be used to build a hierarchy
+of content within your site.
+
+To have hugo create the menu, simply create a template in chrome
+called menu.html, then include it using the 
+`{{ template "chrome/menu.html" . }}` syntax.
+
+
+This example will list all indexes, each of their keys and all the content assigned to each key.
+#### Example complete menu.html file
+
+    <section id="menu">
+      <ul>
+        {{ range $indexname, $index := .Site.Indexes }}
+          <li><a href="/{{ $indexname | urlize }}">{{ $indexname }}</a> 
+            <ul> 
+              {{ range $key, $value := $index }}
+              <li> {{ $key }} </li>
+                    <ul>
+                    {{ range $value.Pages }}
+                        <li hugo-nav="{{ .RelPermalink}}"><a href="{{ .Permalink}}"> {{ .LinkTitle }} </a> </li>
+                    {{ end }}
+                    </ul>
+              {{ end }}
+            </ul>
+          </li> 
+        {{ end }}
+      </ul>
+    </section>
+
+
+It is more likely that you would want to use a single index for navigation.
+In this example we are using the `groups` index for our menu.
+#### Example menu.html file using a single index
+
+    <section id="menu">
+        <ul>
+            {{ range $key, $index := .Site.Indexes.groups }}
+            <li> {{ $key }} </li>
+            <ul>
+                {{ range $index.Pages }}
+                <li hugo-nav="{{ .RelPermalink}}"><a href="{{ .Permalink}}"> {{ .LinkTitle }} </a> </li>
+                {{ end }}
+            </ul>
+            {{ end }}
+        </ul>
+    </section>
+
+Or order the keys by Popularity
+#### Example menu.html file using a single index
+    <section id="menu">
+        <ul>
+            {{ range .Site.Indexes.groups.ByCount }}
+            <li> {{ .Name }} </li>
+            <ul>
+                {{ range .Pages }}
+                <li hugo-nav="{{ .RelPermalink}}"><a href="{{ .Permalink}}"> {{ .LinkTitle }} </a> </li>
+                {{ end }}
+            </ul>
+            {{ end }}
+        </ul>
+    </section>
--- /dev/null
+++ b/docs/content/indexes/lists.md
@@ -1,0 +1,74 @@
+---
+title: "Index Lists"
+date: "2013-07-01"
+aliases: ["/doc/indexes/", "/extras/indexes"]
+linktitle: "Lists"
+groups: ["indexes"]
+groups_weight: 40
+---
+
+An index list is a list of all the keys that are contained in the index. When a
+template is present, this will be rendered at /IndexPlural/
+
+Hugo also supports creating pages that list your values for each index along
+with the number of content items associated with the index key. These are
+global pages, not attached to any specific content, but rather display the meta
+data in aggregate.
+
+To have hugo create these list of indexes pages, simply create a template in
+/layouts/indexes/ called indexes.html
+
+Hugo can order the meta data in two different ways. It can be ordered by the
+number of content assigned to that key or alphabetically.
+
+
+#### Example indexes.html file (alphabetical)
+
+    {{ template "chrome/header.html" . }}
+    {{ template "chrome/subheader.html" . }}
+
+    <section id="main">
+      <div>
+       <h1 id="title">{{ .Title }}</h1>
+       <ul>
+       {{ $data := .Data }}
+        {{ range $key, $value := .Data.Index.Alphabetical }}
+        <li><a href="{{ $data.Plural }}/{{ $value.Name | urlize }}"> {{ $value.Name }} </a> {{ $value.Count }} </li>
+        {{ end }}
+       </ul>
+      </div>
+    </section>
+
+    {{ template "chrome/footer.html" }}
+
+
+#### Example indexes.html file (ordered)
+
+    {{ template "chrome/header.html" . }}
+    {{ template "chrome/subheader.html" . }}
+
+    <section id="main">
+      <div>
+       <h1 id="title">{{ .Title }}</h1>
+       <ul>
+       {{ $data := .Data }}
+        {{ range $key, $value := .Data.Index.ByCount }}
+        <li><a href="{{ $data.Plural }}/{{ $value.Name | urlize }}"> {{ $value.Name }} </a> {{ $value.Count }} </li>
+        {{ end }}
+       </ul>
+      </div>
+    </section>
+
+    {{ template "chrome/footer.html" }}
+
+### Variables available to list of indexes pages.
+
+**.Title**  The title for the content. <br>
+**.Date** The date the content is published on.<br>
+**.Permalink** The Permanent link for this page.<br>
+**.RSSLink** Link to the indexes' rss link. <br>
+**.Data.Singular** The singular name of the index <br>
+**.Data.Plural** The plural name of the index<br>
+**.Data.Index** The Index itself<br>
+**.Data.Index.Alphabetical** The Index alphabetized<br>
+**.Data.Index.ByCount** The Index ordered by popularity<br>
--- /dev/null
+++ b/docs/content/indexes/overview.md
@@ -1,0 +1,75 @@
+---
+title: "Index Overview"
+date: "2013-07-01"
+aliases: ["/doc/indexes/", "/extras/indexes"]
+linktitle: "Overview"
+groups: ["indexes"]
+groups_weight: 10
+---
+
+Hugo includes support for user defined groupings of content called indexes.
+
+Indexes can be used to organize content in a variety of ways. For example, if I
+wanted to use a wordpress style organization I would create two indexes called
+"categories" and "tags". Other common uses would include categories, tags, groups,
+navigation, series and many more. Just think of an index as way to organize similar content.
+
+It's important to understand what Indexes do. At it's most basic form an index
+is simply a map of a key to a list of content values.
+
+In the hugo internals this is stored as Site.Indexes[Plural][key][]pages.
+For example all the content tagged with GoLang would be found at 
+Site.Indexes["tags"]["golang"].
+
+For a
+more complete example see the source of [this docs site](http://github.com/spf13/hugo/docs/).
+
+## Defining Indexes for a site
+
+Indexes must be defined in the site configuration, before they
+can be used throughout the site. 
+
+Here is an example configuration in YAML that specifies two indexes.
+Notice the format is **singular key** : *plural value*. While 
+we could use an inflection library to pluralize this, they currently
+support only a few languages, so instead we've opted for user defined
+pluralization.
+
+**config.yaml**
+
+    ---
+    indexes:
+        tag: "tags"
+        category: "categories"
+    baseurl: "http://spf13.com/"
+    title: "Steve Francia is spf13.com"
+    ---
+
+
+## Assigning index values to content
+
+Once an index is defined at the site level, any piece of content
+can be assigned to it regardless of content type or section.
+
+Assigning content to an index is done in the front matter.
+Simply create a variable with the *plural* name of the index
+and assign all keys you want this content to match against. 
+
+**Index values are case insensitive**
+
+#### Example
+    {
+        "title": "Hugo: A fast and flexible static site generator",
+        "tags": [
+            "Development",
+            "golang",
+            "fast",
+            "Blogging"
+        ],
+        "categories" : [
+            "Development"
+        ]
+        "slug": "hugo",
+        "project_url": "http://github.com/spf13/hugo"
+    }
+
--- /dev/null
+++ b/docs/content/indexes/templates.md
@@ -1,0 +1,55 @@
+---
+title: "Index Templates"
+date: "2013-07-01"
+linktitle: "Templates"
+groups: ["indexes"]
+groups_weight: 30
+---
+
+There are two different templates that the use of indexes will require you to provide.
+
+The first is a list of all the content assigned to a specific index key. The
+second is a [list](/indexes/lists/) of all keys for that index. This document
+addresses the template used for the first type.
+
+## Creating index templates
+For each index type a template needs to be provided to render the index page.
+In the case of tags, this will render the content for /tags/TAGNAME/.
+
+The template must be called the singular name of the index and placed in 
+layouts/indexes
+
+    .
+    └── layouts
+        └── indexes
+            └── category.html
+
+The template will be provided Data about the index. 
+
+### Variables
+
+The following variables are available to the index template:
+
+**.Title**  The title for the content. <br>
+**.Date** The date the content is published on.<br>
+**.Permalink** The Permanent link for this page.<br>
+**.RSSLink** Link to the indexes' rss link. <br>
+**.Data.Pages** The content that is assigned this index.<br>
+**.Data.`singular`** The index itself.<br>
+
+#### Example
+
+    {{ template "chrome/header.html" . }}
+    {{ template "chrome/subheader.html" . }}
+
+    <section id="main">
+      <div>
+       <h1 id="title">{{ .Title }}</h1>
+        {{ range .Data.Pages }}
+            {{ .Render "summary"}}
+        {{ end }}
+      </div>
+    </section>
+
+    {{ template "chrome/footer.html" }}
+
--- a/docs/content/layout/go-templates.md
+++ b/docs/content/layout/go-templates.md
@@ -1,8 +1,9 @@
 ---
 title: "Go Templates"
 date: "2013-07-01"
-groups: ["layout---"]
+groups: ["layout"]
 groups_weight: 80
+draft: true
 ---
 
 Hugo uses the excellent golang html/template library for its template engine.
--- a/docs/layouts/chrome/menu.html
+++ b/docs/layouts/chrome/menu.html
@@ -38,6 +38,14 @@
         </ul>
       </li>
       <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Indexes <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+            {{ range $key, $value := .Site.Indexes.groups.indexes.Pages }}
+            <li hugo-nav="{{$value.RelPermalink}}"><a href="{{$value.Permalink}}"> {{ $value.LinkTitle }} </a> </li>
+            {{ end }}
+        </ul>
+      </li>
+      <li class="dropdown">
         <a href="#" class="dropdown-toggle" data-toggle="dropdown">Extras <b class="caret"></b></a>
         <ul class="dropdown-menu">
             {{ range $key, $value := .Site.Indexes.groups.extras.Pages }}