diff --git a/README.md b/README.md
index 05ffe4e..ac6392a 100644
--- a/README.md
+++ b/README.md
@@ -9,14 +9,14 @@ This repository comes to you in two parts.
## GitHub Action
GitHub action and binary to scrape [Obsidian](http://obsidian.md/) vault for links and exposes them as a `.yml` file for easy consumption by [Hugo](https://gohugo.io/).
### Example Usage (Binary)
-Read Markdown from the `/content` folder and place the resulting `linkIndex.yaml` into `/data`
+Read Markdown from the `/content` folder and place the resulting `linkIndex.yaml` (and `contentIndex.yaml` if the `index` flag is enabled) into `/data`
```shell
# Installation
go install github.com/jackyzha0/hugo-obsidian
# Run
-hugo-obsidian -input=content -output=data
+hugo-obsidian -input=content -output=data -index=true
```
### Example Usage (GitHub Action)
@@ -35,37 +35,6 @@ jobs:
with:
input: content # input folder
output: data # output folder
+ index: true # whether to index content
...
```
-
-## Hugo Partial
-To then embed this information in your Hugo site, you can copy and use the provided partials in `/partials`. Graph provides a graph view of all nodes and links and Backlinks provides a list of pages that link to this page.
-
-To start, create a `graphConfig.yaml` file in `/data` in your Hugo folder. This will be our main point of configuration for the graph partial.
-
-Then, in one of your Hugo templates, do something like the following to render the graph.
-
-```html
-
- {{partial "graph_partial.html" .}}
-
-```
-
-### Configuration
-Example:
-
-```yaml
-enableLegend: false
-enableDrag: true
-enableZoom: false
-base:
- node: "#284b63"
- activeNode: "#f28482"
- inactiveNode: "#a8b3bd"
- link: "#babdbf"
- activeLink: "#5a7282"
-paths:
- - /toc: "#4388cc"
- - /newsletters: "#e0b152"
- - /posts: "#42c988"
-```
diff --git a/example_graphConfig.yaml b/example_graphConfig.yaml
deleted file mode 100644
index adb9c6e..0000000
--- a/example_graphConfig.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-enableLegend: false
-enableDrag: true
-enableZoom: false
-base:
- node: "#284b63"
- activeNode: "#f28482"
- inactiveNode: "#a8b3bd"
- hoverNode: "#afbfc9"
- link: "#aeb4b8"
- activeLink: "#5a7282"
-paths:
- - /toc: "#4388cc"
- - /newsletters: "#e0b152"
- - /posts: "#42c988"
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 33b1cdc..8003706 100644
--- a/go.mod
+++ b/go.mod
@@ -3,6 +3,7 @@ module github.com/jackyzha0/hugo-obsidian
go 1.16
require (
+ github.com/gernest/front v0.0.0-20210301115436-8a0b0a782d0a // indirect
github.com/nikitavoloboev/markdown-parser v0.0.0-20200626055436-f545e8dd85d3 // indirect
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
)
diff --git a/go.sum b/go.sum
index b2fc18b..710c751 100644
--- a/go.sum
+++ b/go.sum
@@ -1,4 +1,6 @@
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/gernest/front v0.0.0-20210301115436-8a0b0a782d0a h1:z7BePknRd4Nz3CeWDhcmCkuCliM2YY/RnjWpdPUuQQo=
+github.com/gernest/front v0.0.0-20210301115436-8a0b0a782d0a/go.mod h1:FwEMwQ5+xky8tbzDLj72k2RAqXnFByLNwxg+9UZDtqU=
github.com/golang-commonmark/html v0.0.0-20180910111043-7d7c804e1d46 h1:FeNEDxIy7XouGTJKiJ9Ze5vUbcAIW/FRhQbtKBNmEz8=
github.com/golang-commonmark/html v0.0.0-20180910111043-7d7c804e1d46/go.mod h1:LVbxopYhspqklDpfaS/qDc6HhWwkpF1ptTj3vMFRoSQ=
github.com/golang-commonmark/linkify v0.0.0-20180910111149-f05efb453a0e h1:TkuRzcq232K5ytXtQ+BPicsjYWZgt/lS6gJ5HqcUifQ=
@@ -18,6 +20,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
golang.org/dl v0.0.0-20190829154251-82a15e2f2ead/go.mod h1:IUMfjQLJQd4UTqG1Z90tenwKoCX93Gn3MAQJMOSBsDQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/main.go b/main.go
index 7e7d8e2..2fbb657 100644
--- a/main.go
+++ b/main.go
@@ -3,13 +3,13 @@ package main
import (
"flag"
"fmt"
+ "github.com/gernest/front"
md "github.com/nikitavoloboev/markdown-parser"
"gopkg.in/yaml.v3"
"io/fs"
"io/ioutil"
"path"
"path/filepath"
- "regexp"
"strings"
)
@@ -91,7 +91,10 @@ func getText(dir string) string {
func walk(root, ext string, index bool) (res []Link, i ContentIndex) {
println(root)
i = make(ContentIndex)
- titleRegex := regexp.MustCompile(`title: "(.*)"`)
+
+ m := front.NewMatter()
+ m.Handle("---", front.YAMLHandler)
+ nPrivate := 0
err := filepath.WalkDir(root, func(s string, d fs.DirEntry, e error) error {
if e != nil {
@@ -101,18 +104,29 @@ func walk(root, ext string, index bool) (res []Link, i ContentIndex) {
res = append(res, parse(s, root)...)
if index {
text := getText(s)
- matches := titleRegex.FindStringSubmatch(text)
+
+ frontmatter, body, err := m.Parse(strings.NewReader(text))
+ if err != nil {
+ frontmatter = map[string]interface{}{}
+ body = text
+ }
+
var title string
- if len(matches) > 1 {
- title = matches[1]
+ if parsedTitle, ok := frontmatter["title"]; ok {
+ title = parsedTitle.(string)
} else {
title = "Untitled Page"
}
- adjustedPath := hugoPathTrim(trim(s, root, ".md"))
- i[adjustedPath] = Content{
- Title: title,
- Content: text,
+ // check if page is private
+ if parsedPrivate, ok := frontmatter["draft"]; !ok || !parsedPrivate.(bool) {
+ adjustedPath := hugoPathTrim(trim(s, root, ".md"))
+ i[adjustedPath] = Content{
+ Title: title,
+ Content: body,
+ }
+ } else {
+ nPrivate++
}
}
}
@@ -121,7 +135,8 @@ func walk(root, ext string, index bool) (res []Link, i ContentIndex) {
if err != nil {
panic(err)
}
- fmt.Printf("parsed %d total links \n", len(res))
+ fmt.Printf("Ignored %d private files \n", nPrivate)
+ fmt.Printf("Parsed %d total links \n", len(res))
return res, i
}
@@ -134,7 +149,7 @@ func filter(links []Link) (res []Link) {
res = append(res, l)
}
}
- fmt.Printf("removed %d external and non-markdown links\n", len(links) - len(res))
+ fmt.Printf("Removed %d external and non-markdown links\n", len(links) - len(res))
return res
}
@@ -162,7 +177,7 @@ func index(links []Link) (index Index) {
return index
}
-const message = "# THIS FILE WAS GENERATED using github.com/jackyzha0/hugo-obsidian\n# DO NOT EDIT\n"
+const message = "# THIS FILE WAS GENERATED USING github.com/jackyzha0/hugo-obsidian\n# DO NOT EDIT\n"
func write(links []Link, contentIndex ContentIndex, toIndex bool, out string) error {
index := index(links)
resStruct := struct{