URI: 
       Add ReadDir function to list local files. - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 81e69c416d985ff57e654bc5613341828a033c9f
   DIR parent 72ecd0cdc7b02bf55cf86cd13afbbfdc4f72de9c
  HTML Author: Russell Oliver <roliver8143@gmail.com>
       Date:   Fri, 26 Jun 2015 20:23:37 +1000
       
       Add ReadDir function to list local files.
       
       Includes documentation.
       
       Diffstat:
         A docs/content/extras/localfiles.md   |      51 +++++++++++++++++++++++++++++++
         A docs/layouts/shortcodes/fileindex.… |      16 ++++++++++++++++
         M tpl/template_funcs.go               |       1 +
         M tpl/template_resources.go           |      24 ++++++++++++++++++++++++
       
       4 files changed, 92 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/docs/content/extras/localfiles.md b/docs/content/extras/localfiles.md
       @@ -0,0 +1,51 @@
       +---
       +aliases:
       +- /doc/localfiles/
       +date: 2015-06-12
       +menu:
       +  main:
       +    parent: extras
       +next: /community/mailing-list
       +notoc: true
       +prev: /extras/urls
       +title: Traversing Local Files
       +weight: 110
       +---
       +
       +## Traversing Local Files
       +
       +Hugo includes a way to traverse local files. 
       +This is done using the 'ReadDir' function. 
       +
       +## Using ReadDir
       +
       +ReadDir takes a single string input that is relative to the root directory of the site. It returns an array of [os.FileInfo](https://golang.org/pkg/os/#FileInfo)
       +
       +Let's create a shortcode to build a file index with links using ReadDir. 
       +
       +'fileindex.html'
       +
       +    <table style="width=100%">
       +    <th>Size in bytes</th>
       +    <th>Name</th>
       +    {{$dir := .Get "dir"}}
       +    {{ $url := .Get "baseurl" }}
       +    
       +    {{ $files := ReadDir $dir }}
       +        {{ range $files }}
       +                            <tr>
       +                    <td>{{.Size}}</td>
       +                    <td>
       +                        <a href="{{$url}}{{.Name | urlize }}"> {{.Name}}</a>
       +                        </td>
       +                </tr> 
       +             {{ end }}
       +    </table>
       +    
       +Now lets use it to list the css files used on this site
       +
       +    {{</* fileindex dir="static/css" baseurl="/css/" */>}}
       +
       +Is rendered as:
       +
       +{{< fileindex dir="static/css/" baseurl="/css/">}}
   DIR diff --git a/docs/layouts/shortcodes/fileindex.html b/docs/layouts/shortcodes/fileindex.html
       @@ -0,0 +1,16 @@
       +<table style="width=100%">
       +<th>Size in bytes</th>
       +<th>Name</th>
       +{{$dir := .Get "dir"}}
       +{{ $url := .Get "baseurl" }}
       +
       +{{ $files := ReadDir $dir }}
       +    {{ range $files }}
       +                        <tr>
       +                <td>{{.Size}}</td>
       +                <td>
       +                    <a href="{{$url}}{{.Name | urlize }}"> {{.Name}}</a>
       +                    </td>
       +            </tr> 
       +         {{ end }}
       +</table>
   DIR diff --git a/tpl/template_funcs.go b/tpl/template_funcs.go
       @@ -1353,6 +1353,7 @@ func init() {
                        "dateFormat":  DateFormat,
                        "getJSON":     GetJSON,
                        "getCSV":      GetCSV,
       +                "ReadDir":     ReadDir,
                        "seq":         helpers.Seq,
                        "getenv":      func(varName string) string { return os.Getenv(varName) },
        
   DIR diff --git a/tpl/template_resources.go b/tpl/template_resources.go
       @@ -21,6 +21,8 @@ import (
                "io/ioutil"
                "net/http"
                "net/url"
       +        "os"
       +        "path/filepath"
                "strings"
                "sync"
                "time"
       @@ -263,3 +265,25 @@ func GetCSV(sep string, urlParts ...string) [][]string {
                }
                return d
        }
       +
       +func ReadDir(path string) []os.FileInfo {
       +    wd := ""
       +    p := ""
       +        if viper.GetString("WorkingDir") != "" {
       +                wd = viper.GetString("WorkingDir")
       +        }
       +    if strings.Contains(path, "..") {
       +        jww.ERROR.Printf("Path contains parent directory marker ..\n", path)
       +                return nil
       +    }
       +
       +        p = filepath.Clean(path)
       +        p = filepath.Join(wd, p)
       +
       +        list, err := ioutil.ReadDir(p)
       +        if err != nil {
       +                jww.ERROR.Printf("Failed to read Directory %s with error message %s", path, err)
       +                return nil
       +        }
       +        return list
       +}