mirror of
https://github.com/facundoolano/jorge.git
synced 2024-11-16 07:47:40 +01:00
Build site using the pretty uris dir structure (#42)
* update build file to produce pretty uri dir structure * remove unnecessary file server customization * update target html logs in docs * fix tests
This commit is contained in:
parent
a94ea7069d
commit
ea8041ed3d
6 changed files with 33 additions and 42 deletions
14
README.md
14
README.md
|
@ -43,12 +43,12 @@ To preview your site locally, use `jorge serve`:
|
|||
$ cd myblog
|
||||
$ jorge serve
|
||||
wrote target/feed.xml
|
||||
wrote target/blog/goodbye-markdown.html
|
||||
wrote target/blog/my-first-post.html
|
||||
wrote target/blog/hello-org.html
|
||||
wrote target/blog/goodbye-markdown/index.html
|
||||
wrote target/blog/my-first-post/index.html
|
||||
wrote target/blog/hello-org/index.html
|
||||
wrote target/blog/index.html
|
||||
wrote target/index.html
|
||||
wrote target/blog/tags.html
|
||||
wrote target/blog/tags/index.html
|
||||
serving at http://localhost:4001
|
||||
```
|
||||
|
||||
|
@ -96,10 +96,10 @@ Finally, you can render a minified version of your site with `jorge build`:
|
|||
$ jorge build
|
||||
wrote target/index.html
|
||||
wrote target/assets/css/main.css
|
||||
wrote target/blog/hello.html
|
||||
wrote target/blog/my-first-post.html
|
||||
wrote target/blog/hello/index.html
|
||||
wrote target/blog/my-first-post/index.html
|
||||
wrote target/feed.xml
|
||||
wrote target/tags.html
|
||||
wrote target/tags/index.html
|
||||
```
|
||||
|
||||
And that's about it. For more details see the:
|
||||
|
|
|
@ -42,7 +42,7 @@ func (cmd *Serve) Run(ctx *kong.Context) error {
|
|||
defer watcher.Close()
|
||||
|
||||
// serve the target dir with a file server
|
||||
fs := http.FileServer(HTMLFileSystem{http.Dir(config.TargetDir)})
|
||||
fs := http.FileServer(http.Dir(config.TargetDir))
|
||||
http.Handle("/", fs)
|
||||
|
||||
if config.LiveReload {
|
||||
|
@ -156,24 +156,6 @@ func watchProjectFiles(watcher *fsnotify.Watcher, config *config.Config) error {
|
|||
})
|
||||
}
|
||||
|
||||
// Tweaks the http file system to construct a server that hides the .html suffix from requests.
|
||||
// Based on https://stackoverflow.com/a/57281956/993769
|
||||
type HTMLFileSystem struct {
|
||||
dirFS http.Dir
|
||||
}
|
||||
|
||||
func (htmlFS HTMLFileSystem) Open(name string) (http.File, error) {
|
||||
// Try name as supplied
|
||||
f, err := htmlFS.dirFS.Open(name)
|
||||
if os.IsNotExist(err) {
|
||||
// Not found, try with .html
|
||||
if f, err := htmlFS.dirFS.Open(name + ".html"); err == nil {
|
||||
return f, nil
|
||||
}
|
||||
}
|
||||
return f, err
|
||||
}
|
||||
|
||||
// The event broker mediates between the file watcher
|
||||
// that publishes site rebuild events
|
||||
// and the clients listening for them to refresh the browser
|
||||
|
|
|
@ -15,11 +15,11 @@ $ cd myblog
|
|||
$ jorge serve
|
||||
building site
|
||||
wrote target/feed.xml
|
||||
wrote target/blog/goodbye-markdown.html
|
||||
wrote target/blog/hello-org.html
|
||||
wrote target/blog/goodbye-markdown/index.html
|
||||
wrote target/blog/hello-org/index/.html
|
||||
wrote target/index.html
|
||||
wrote target/blog/index.html
|
||||
wrote target/blog/tags.html
|
||||
wrote target/blog/tags/index.html
|
||||
done
|
||||
serving at http://localhost:4001
|
||||
#+end_src
|
||||
|
|
|
@ -13,12 +13,11 @@ So far you've seen how to [[file:jorge-init][start a project]], [[file:jorge-ser
|
|||
#+begin_src console
|
||||
$ jorge build
|
||||
skipping draft target/blog/my-own-blog-post.org
|
||||
wrote target/2024-02-23-another-kind-of-post.html
|
||||
wrote target/blog/my-own-blog-post.html
|
||||
wrote target/blog/goodbye-markdown.html
|
||||
wrote target/2024-02-23-another-kind-of-post/index.html
|
||||
wrote target/blog/goodbye-markdown/index.html
|
||||
wrote target/assets/css/main.css
|
||||
wrote target/blog/hello-org.html
|
||||
wrote target/blog/tags.html
|
||||
wrote target/blog/hello-org/index.html
|
||||
wrote target/blog/tags/index.html
|
||||
wrote target/index.html
|
||||
wrote target/feed.xml
|
||||
wrote target/blog/index.html
|
||||
|
@ -44,7 +43,7 @@ But for the sake of completeness, this is how this site is deployed: I have a VP
|
|||
location / {
|
||||
# First attempt to serve request as file,
|
||||
# then as directory. Otherwise respond 404.
|
||||
try_files $uri $uri.html $uri/ =404;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
12
site/site.go
12
site/site.go
|
@ -327,9 +327,19 @@ func (site *site) buildFile(path string) error {
|
|||
targetPath = strings.TrimSuffix(targetPath, filepath.Ext(targetPath)) + templ.TargetExt()
|
||||
contentReader = bytes.NewReader(content)
|
||||
}
|
||||
targetExt := filepath.Ext(targetPath)
|
||||
|
||||
// arrange paths to ensure pretty uris, eg move blog/tags.html to blog/tags/index.html
|
||||
if targetExt == ".html" && filepath.Base(targetPath) != "index.html" {
|
||||
targetDir := strings.TrimSuffix(targetPath, ".html")
|
||||
targetPath = filepath.Join(targetDir, "index.html")
|
||||
err = os.MkdirAll(targetDir, DIR_RWE_MODE)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// post process file acording to extension and config
|
||||
targetExt := filepath.Ext(targetPath)
|
||||
contentReader, err = markup.Smartify(targetExt, contentReader)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -560,9 +560,9 @@ layout: base
|
|||
assertEqual(t, err, nil)
|
||||
|
||||
// test target files generated
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p1.html"))
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p1", "index.html"))
|
||||
assertEqual(t, err, nil)
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p2.html"))
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p2", "index.html"))
|
||||
assertEqual(t, err, nil)
|
||||
|
||||
// test index includes p1 and p2
|
||||
|
@ -629,9 +629,9 @@ layout: base
|
|||
assertEqual(t, err, nil)
|
||||
|
||||
// test target files generated
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p1.html"))
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p1", "index.html"))
|
||||
assertEqual(t, err, nil)
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p2.html"))
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p2", "index.html"))
|
||||
assertEqual(t, err, nil)
|
||||
|
||||
// test index includes p1 and p2
|
||||
|
@ -654,9 +654,9 @@ layout: base
|
|||
assertEqual(t, err, nil)
|
||||
|
||||
// test only non drafts generated
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p1.html"))
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p1", "index.html"))
|
||||
assertEqual(t, err, nil)
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p2.html"))
|
||||
_, err = os.Stat(filepath.Join(config.TargetDir, "p2", "index.html"))
|
||||
assert(t, os.IsNotExist(err))
|
||||
|
||||
// test index includes p1 but NOT p2
|
||||
|
|
Loading…
Reference in a new issue