mirror of
https://github.com/jackyzha0/hugo-obsidian.git
synced 2024-06-14 11:42:35 +03:00
more cleaning up, add support for #3
This commit is contained in:
parent
fcef39bb73
commit
55d209053d
39
README.md
39
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
|
||||
<div id="graph-container">
|
||||
{{partial "graph_partial.html" .}}
|
||||
</div>
|
||||
```
|
||||
|
||||
### 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"
|
||||
```
|
||||
```
|
@ -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"
|
1
go.mod
1
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
|
||||
)
|
||||
|
3
go.sum
3
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=
|
||||
|
38
main.go
38
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,28 @@ 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 {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
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 +134,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 +148,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 +176,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{
|
||||
|
Loading…
Reference in New Issue
Block a user