Compare commits
4 Commits
548075696c
...
af9d6d6eb9
Author | SHA1 | Date |
---|---|---|
Stephen Searles | af9d6d6eb9 | 2 years ago |
Stephen Searles | 43e119f12c | 2 years ago |
Stephen Searles | 16e3583927 | 2 years ago |
Stephen Searles | 51c4837aaf | 2 years ago |
@ -0,0 +1,30 @@ |
||||
package frontend |
||||
|
||||
import "embed" |
||||
|
||||
//go:embed templates
|
||||
var templates embed.FS |
||||
|
||||
func readFilename(filename string) string { |
||||
f, err := templates.ReadFile(filename) |
||||
if err != nil { |
||||
panic(err) |
||||
} |
||||
return string(f) |
||||
} |
||||
|
||||
func EditPage() string { |
||||
return readFilename("templates/edit.html.tmpl") |
||||
} |
||||
|
||||
func AdminPage() string { |
||||
return readFilename("templates/admin.html.tmpl") |
||||
} |
||||
|
||||
func AuthorPage() string { |
||||
return readFilename("templates/author.html.tmpl") |
||||
} |
||||
|
||||
func UploadPage() string { |
||||
return readFilename("templates/upload.html.tmpl") |
||||
} |
@ -0,0 +1 @@ |
||||
<html><body>not implemented</body></html> |
@ -0,0 +1,44 @@ |
||||
<html> |
||||
<head> |
||||
</head> |
||||
<body> |
||||
{{ $timeFormat := "Jan _2 15:04:05" }} |
||||
<p>Create content:</p> |
||||
<form action="/hugo/edit/new" method="POST"> |
||||
<label>Name: <input type="text" name="name" /></label> |
||||
<select name="type"> |
||||
{{- range .ContentTypes }} |
||||
<option value="{{ . }}">{{ . }}</option> |
||||
{{- end }} |
||||
</select> |
||||
<input type="submit" /> |
||||
</form> |
||||
|
||||
<p>Edit content:</p> |
||||
<table>{{ range .Content }} |
||||
<tr> |
||||
{{ if .Metadata }} |
||||
<td> |
||||
<a href="/hugo/edit/{{ .Filename }}"> |
||||
{{ .Metadata.Title }} |
||||
</a> |
||||
</td> |
||||
<td> |
||||
{{ .Metadata.Date.Format $timeFormat }} |
||||
{{ if not (.Metadata.Lastmod.Equal .Metadata.Date) }} |
||||
(last modified {{.Metadata.Lastmod.Format $timeFormat }}) |
||||
{{end}} |
||||
</td> |
||||
{{ else }} |
||||
<td> |
||||
<a href="/hugo/edit/{{ .Filename }}"> |
||||
{{ .Filename }} |
||||
</a> |
||||
</td> |
||||
<td>(unable to load metadata)</td> |
||||
{{ end }} |
||||
</tr> |
||||
{{- end }} |
||||
</table> |
||||
</body> |
||||
</html> |
@ -0,0 +1,316 @@ |
||||
<html> |
||||
<head> |
||||
<script src="/hugo/simplemde.js"></script> |
||||
<style type="text/css" media="screen"> |
||||
#editor-wrapper { |
||||
position: absolute; |
||||
top: 50px; |
||||
right: 0; |
||||
bottom: 150px; |
||||
left: 40%; |
||||
} |
||||
#draft { |
||||
position: absolute; |
||||
top: 50px; |
||||
right: 60%; |
||||
bottom: 0; |
||||
left: 0; |
||||
|
||||
} |
||||
#draft > iframe { |
||||
height: 100%; |
||||
width: 100%; |
||||
border: none; |
||||
} |
||||
a { |
||||
text-decoration: underline; |
||||
text-decoration-style: dotted; |
||||
cursor: pointer; |
||||
} |
||||
</style> |
||||
<link rel="stylesheet" href="/hugo/simplemde.css" /> |
||||
<script src="/hugo/vue.js"></script> |
||||
<script src="/hugo/moment.js"></script> |
||||
|
||||
|
||||
<body> |
||||
<div id="container" > |
||||
<div id="header"> |
||||
<div id="lastSaved"> |
||||
<span v-if="sendQueue.length > 0 || Object.keys(needConfirmation).length > 0">last saved ${ lastSaved.from(now) }, saving</span> |
||||
<span v-else>saved</span> |
||||
<span v-if="connectionError">, ${connectionError}</span> |
||||
</div> |
||||
<div> |
||||
<a id="sideview-toggle-media">media</a> |
||||
<a id="sideview-toggle-draft">draft</a> |
||||
</div> |
||||
</div> |
||||
<div id="editor-wrapper"> |
||||
<textarea id="editor">{{ .LoadContent }}</textarea> |
||||
</div> |
||||
<div id="draft"><iframe src="{{ .IframeSource }}">Loading draft...</iframe></div> |
||||
</div> |
||||
<script> |
||||
|
||||
var iframe = document.querySelector("#draft > iframe"); |
||||
|
||||
document.onclick = function (event) { |
||||
var iframe = document.querySelector("#draft > iframe"); |
||||
switch (event.target.id) { |
||||
case "sideview-toggle-media": |
||||
iframe.src = "/hugo/media"; |
||||
break; |
||||
case "sideview-toggle-draft": |
||||
iframe.src = "{{ .IframeSource }}"; |
||||
break; |
||||
} |
||||
} |
||||
|
||||
var uiBindings = { |
||||
ltime: {{ .LTime }}, |
||||
serverLtime: 0, |
||||
lastSaved: moment(), |
||||
now: moment(), |
||||
connectionError: null, |
||||
sendQueue: [], |
||||
sentRecently: [], |
||||
needConfirmation: {}, |
||||
}; |
||||
|
||||
var app = new Vue({ |
||||
el: "#container", |
||||
data: uiBindings, |
||||
delimiters: ["${", "}"], |
||||
}); |
||||
|
||||
function getLtime() { |
||||
uiBindings.ltime++ |
||||
return uiBindings.ltime |
||||
} |
||||
|
||||
function observeServer(l, confirmed) { |
||||
uiBindings.serverLtime = l; |
||||
if (confirmed && confirmed.length > 0) { |
||||
confirmed.forEach(function (e) { |
||||
delete uiBindings.needConfirmation[e]; |
||||
}) |
||||
} |
||||
observe(l); |
||||
} |
||||
|
||||
function observe(l) { |
||||
if (l > uiBindings.ltime) { |
||||
uiBindings.now = moment(); |
||||
uiBindings.lastSaved = moment(); |
||||
uiBindings.ltime = l; |
||||
} |
||||
} |
||||
|
||||
var selectedImage; |
||||
var editorElem = document.getElementById("editor"); |
||||
var editor = new SimpleMDE({ |
||||
element: editorElem, |
||||
forceSync: true, |
||||
insertTexts: { |
||||
image: ["{\{% thumb filename=\"", "#url#\" width=\"200\" %}}"] |
||||
}, |
||||
imageURLFn: function () { |
||||
return selectedImage; |
||||
} |
||||
}); |
||||
|
||||
window.onmessage = function (evt) { |
||||
selectedImage = evt.data; |
||||
} |
||||
|
||||
|
||||
// Create WebSocket connection. |
||||
var socket = connect(); |
||||
|
||||
|
||||
const sawChangesBumpsTo = 10; |
||||
|
||||
var sentinelSrc = 'about:blank'; |
||||
var oldSrc = ''; |
||||
|
||||
var sawChanges = -1; |
||||
window.setInterval(function () { |
||||
if (sawChanges >= 0) { |
||||
sawChanges--; |
||||
if (sawChanges == 0) { |
||||
if (iframe.contentWindow) { |
||||
iframe.contentWindow.location.reload(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
uiBindings.now = moment(); |
||||
if (uiBindings.connectionError) { |
||||
socket = connect(); |
||||
} else if (uiBindings.sendQueue.length > 0) { |
||||
var ltime = getLtime(); |
||||
|
||||
// record lowest pending |
||||
// ltime at the time this message |
||||
// was serialized |
||||
var lowestPending = ltime; |
||||
for (c in uiBindings.needConfirmation) { |
||||
c = parseInt(c, 10); |
||||
if (lowestPending === 0 || c < lowestPending) { |
||||
lowestPending = c; |
||||
} |
||||
} |
||||
|
||||
var msg = JSON.stringify({ |
||||
"deltas": uiBindings.sendQueue, |
||||
"ltime": ltime, |
||||
"lowestPending": lowestPending, |
||||
}); |
||||
uiBindings.sendQueue = []; |
||||
uiBindings.needConfirmation[ltime] = msg; |
||||
} |
||||
|
||||
for (ltime in uiBindings.needConfirmation) { |
||||
var msg = uiBindings.needConfirmation[ltime]; |
||||
socket.send(msg); |
||||
} |
||||
}, 500); |
||||
|
||||
function connect() { |
||||
const socket = new WebSocket((location.protocol == "https:" ? 'wss://' : 'ws://') + location.host + location.pathname); |
||||
|
||||
// Listen for messages |
||||
socket.addEventListener('message', function (event) { |
||||
var message = JSON.parse(event.data); |
||||
observeServer(message.ltime, message.confirmed); |
||||
|
||||
var deltas = []; |
||||
deltas.push.apply(deltas, message.deltas); |
||||
|
||||
deltas.forEach(function(aceDelta) { |
||||
var cmDelta = aceDeltaToCM(aceDelta) |
||||
|
||||
var content = "" |
||||
var to = { |
||||
line: aceDelta.start.row, |
||||
ch: aceDelta.start.column, |
||||
} |
||||
|
||||
if (aceDelta.action == "insert") { |
||||
content = aceDelta.lines.join("\n"); |
||||
to = null; |
||||
} |
||||
|
||||
editor.codemirror.doc.replaceRange(content, cmDelta.from, to, "dontreflect"); |
||||
sawChanges = sawChangesBumpsTo; |
||||
}) |
||||
}); |
||||
|
||||
socket.addEventListener('open', function () { |
||||
uiBindings.connectionError = null; |
||||
}); |
||||
|
||||
socket.addEventListener('close', function () { |
||||
if (!uiBindings.connectionError) { |
||||
getLtime(); |
||||
uiBindings.connectionError = "server connection closed, reconnecting..."; |
||||
} |
||||
}); |
||||
|
||||
socket.addEventListener('error', function (err) { |
||||
if (!uiBindings.connectionError) { |
||||
uiBindings.connectionError = err; |
||||
getLtime(); |
||||
} |
||||
console.log(err); |
||||
}); |
||||
|
||||
|
||||
return socket; |
||||
} |
||||
|
||||
editor.codemirror.on("change", function (cm, cmDelta) { |
||||
if (cmDelta.origin == "dontreflect") { |
||||
return; |
||||
} |
||||
|
||||
var aceDelta = cmDeltaToAce(cmDelta); |
||||
console.log(cmDelta, "=>", aceDelta) |
||||
|
||||
sawChanges = sawChangesBumpsTo; |
||||
uiBindings.sendQueue.push.apply(uiBindings.sendQueue, aceDelta); |
||||
}) |
||||
|
||||
function cmDeltaToAce(cmDelta) { |
||||
var isRemove = (cmDelta.removed.length > 0 && cmDelta.removed[0].length > 0) || cmDelta.removed.length > 1; |
||||
var lines = isRemove ? cmDelta.removed : cmDelta.text; |
||||
var aceDelta = { |
||||
action: isRemove ? "remove" : "insert", |
||||
lines: lines, |
||||
start: { |
||||
row: cmDelta.from.line, |
||||
column: cmDelta.from.ch, |
||||
}, |
||||
end: { |
||||
row: cmDelta.from.line + (isRemove ? lines.length - 1 : lines.length - 1 ), |
||||
column: lines[lines.length-1].length, |
||||
} |
||||
}; |
||||
|
||||
if (aceDelta.start.row == aceDelta.end.row) { |
||||
aceDelta.end.column += cmDelta.from.ch; |
||||
} |
||||
|
||||
if (false && isRemove && aceDelta.start.row == aceDelta.end.row) { |
||||
var origStart = aceDelta.start; |
||||
aceDelta.start = aceDelta.end; |
||||
aceDelta.end = origStart; |
||||
aceDelta.start.column += cmDelta.from.ch; |
||||
} |
||||
|
||||
if (isRemove && ((cmDelta.text.length > 0 && cmDelta.text[0].length > 0) || cmDelta.text.length > 1)) { |
||||
cmDelta.removed = [""]; |
||||
var ret = [aceDelta]; |
||||
ret.push.apply(ret, cmDeltaToAce(cmDelta)); |
||||
return ret; |
||||
} |
||||
|
||||
return [aceDelta]; |
||||
} |
||||
|
||||
function aceDeltaToCM(aceDelta) { |
||||
|
||||
var cmDelta = { |
||||
text: [], |
||||
removed: [], |
||||
from: { |
||||
line: aceDelta.start.row, |
||||
ch: aceDelta.start.column, |
||||
}, |
||||
to: { |
||||
// cm deltas are weird. to refers to the selection end, which |
||||
// with a simple blinking cursor with no selection, is always |
||||
// the same as from |
||||
line: aceDelta.start.row, |
||||
ch: aceDelta.start.column, |
||||
}, |
||||
} |
||||
|
||||
if (aceDelta.action == "remove") { |
||||
var origStart = aceDelta.start; |
||||
aceDelta.start = aceDelta.end; |
||||
aceDelta.end = origStart; |
||||
|
||||
cmDelta.removed = aceDelta.lines |
||||
cmDelta.text = [""] |
||||
} else { |
||||
cmDelta.text = aceDelta.lines |
||||
cmDelta.removed = [""] |
||||
} |
||||
|
||||
return cmDelta; |
||||
} |
||||
</script> |
||||
</body> |
||||
</html> |
@ -0,0 +1,70 @@ |
||||
<input type="file" style="display: hidden;" id="{{.ElemName}}" /> |
||||
<div id="{{.ElemName}}_dropzone" ondrop="dropHandler(event);" ondragover="draghandler(event);" ondragenter="draghandler(event);" ondragleave="draghandler(event);" style="background-color: rgba(0,0,0,0.5); visibility: hidden; opacity:0; position: fixed; top: 0; bottom: 0; left: 0; right: 0; width: 100%; height: 100%; ; transition: visibility 175ms, opacity 175ms; z-index: 9999999;"></div> |
||||
<script> |
||||
document.addEventListener("DOMContentLoaded", function () { |
||||
var fileInput = document.getElementById('{{.ElemName}}'); |
||||
var dropzone = document.getElementById('{{.ElemName}}_dropzone'); |
||||
|
||||
fileInput.onchange = function () { |
||||
var formData = new FormData(); |
||||
fileInput.files.forEach(function (file) { |
||||
formData.append(file.name, file); |
||||
}); |
||||
upload(formData); |
||||
} |
||||
|
||||
var lastTarget = null; |
||||
|
||||
window.addEventListener("dragenter", function(e) |
||||
{ |
||||
lastTarget = e.target; // cache the last target here |
||||
// unhide our dropzone overlay |
||||
dropzone.style.visibility = ""; |
||||
dropzone.style.opacity = 1; |
||||
}); |
||||
|
||||
window.addEventListener("dragleave", function(e) |
||||
{ |
||||
// this is the magic part. when leaving the window, |
||||
// e.target happens to be exactly what we want: what we cached |
||||
// at the start, the dropzone we dragged into. |
||||
// so..if dragleave target matches our cache, we hide the dropzone. |
||||
if(e.target === lastTarget) |
||||
{ |
||||
dropzone.style.visibility = "hidden"; |
||||
dropzone.style.opacity = 0; |
||||
} |
||||
}); |
||||
|
||||
}); |
||||
|
||||
function draghandler(evt) { |
||||
evt.preventDefault(); |
||||
} |
||||
|
||||
function dropHandler(evt) { |
||||
evt.preventDefault(); |
||||
|
||||
var files = evt.dataTransfer.files; |
||||
var formData = new FormData(); |
||||
|
||||
for (var i = 0; i < files.length; i++) { |
||||
formData.append(files[i].name, files[i]); |
||||
} |
||||
|
||||
upload(formData); |
||||
return false; |
||||
} |
||||
|
||||
function upload(formData) { |
||||
var xhr = new XMLHttpRequest(); |
||||
xhr.onreadystatechange = function(e) { |
||||
if ( 4 == this.readyState ) { |
||||
window.location.reload(true); |
||||
} |
||||
} |
||||
xhr.open('POST', '/hugo/upload'); |
||||
xhr.send(formData); |
||||
} |
||||
|
||||
</script> |
@ -1,18 +1,142 @@ |
||||
module git.stephensearles.com/stephen/caddy-hugo2 |
||||
|
||||
go 1.13 |
||||
go 1.18 |
||||
|
||||
require ( |
||||
git.stephensearles.com/stephen/acedoc v0.0.0-20170928122432-96da2793a59d |
||||
git.stephensearles.com/stephen/idleshut v0.0.0-20180107224249-cde7779f51c8 |
||||
github.com/PuerkitoBio/goquery v1.5.0 |
||||
github.com/caddyserver/caddy v1.0.3 |
||||
github.com/gobuffalo/envy v1.7.0 // indirect |
||||
github.com/gohugoio/hugo v0.58.1 |
||||
github.com/caddyserver/caddy/v2 v2.1.1 |
||||
github.com/caddyserver/xcaddy v0.3.0 |
||||
github.com/gohugoio/hugo v0.74.4-0.20200822075643-d39636a5fc6b |
||||
github.com/gorilla/websocket v1.4.1 |
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 |
||||
github.com/peterbourgon/diskv v2.0.1+incompatible |
||||
github.com/spf13/afero v1.2.2 |
||||
github.com/spf13/viper v1.4.0 |
||||
github.com/spf13/viper v1.6.1 |
||||
github.com/tajtiattila/metadata v0.0.0-20180130123038-1ef25f4c37ea |
||||
go.uber.org/zap v1.15.0 |
||||
) |
||||
|
||||
require ( |
||||
cloud.google.com/go v0.54.0 // indirect |
||||
github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 // indirect |
||||
github.com/BurntSushi/locker v0.0.0-20171006230638-a6e239ea1c69 // indirect |
||||
github.com/BurntSushi/toml v0.3.1 // indirect |
||||
github.com/DataDog/zstd v1.4.1 // indirect |
||||
github.com/Masterminds/goutils v1.1.0 // indirect |
||||
github.com/Masterminds/semver/v3 v3.1.1 // indirect |
||||
github.com/Masterminds/sprig/v3 v3.1.0 // indirect |
||||
github.com/PuerkitoBio/purell v1.1.1 // indirect |
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect |
||||
github.com/alecthomas/chroma v0.8.0 // indirect |
||||
github.com/andybalholm/cascadia v1.0.0 // indirect |
||||
github.com/antlr/antlr4 v0.0.0-20200503195918-621b933c7a7f // indirect |
||||
github.com/armon/go-radix v1.0.0 // indirect |
||||
github.com/bep/debounce v1.2.0 // indirect |
||||
github.com/bep/gitmap v1.1.2 // indirect |
||||
github.com/bep/golibsass v0.6.0 // indirect |
||||
github.com/bep/tmc v0.5.1 // indirect |
||||
github.com/caddyserver/certmagic v0.11.2 // indirect |
||||
github.com/cenkalti/backoff/v4 v4.0.0 // indirect |
||||
github.com/cespare/xxhash v1.1.0 // indirect |
||||
github.com/cheekybits/genny v1.0.0 // indirect |
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect |
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect |
||||
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 // indirect |
||||
github.com/dgraph-io/badger v1.5.3 // indirect |
||||
github.com/dgraph-io/badger/v2 v2.0.1-rc1.0.20200413122845-09dd2e1a4195 // indirect |
||||
github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3 // indirect |
||||
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 // indirect |
||||
github.com/disintegration/gift v1.2.1 // indirect |
||||
github.com/dlclark/regexp2 v1.2.0 // indirect |
||||
github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac // indirect |
||||
github.com/evanw/esbuild v0.6.5 // indirect |
||||
github.com/fsnotify/fsnotify v1.4.9 // indirect |
||||
github.com/getkin/kin-openapi v0.14.0 // indirect |
||||
github.com/ghodss/yaml v1.0.0 // indirect |
||||
github.com/go-acme/lego/v3 v3.7.0 // indirect |
||||
github.com/go-sql-driver/mysql v1.5.0 // indirect |
||||
github.com/gobuffalo/envy v1.7.0 // indirect |
||||
github.com/gobwas/glob v0.2.3 // indirect |
||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect |
||||
github.com/golang/protobuf v1.4.2 // indirect |
||||
github.com/golang/snappy v0.0.1 // indirect |
||||
github.com/google/btree v1.0.0 // indirect |
||||
github.com/google/cel-go v0.5.1 // indirect |
||||
github.com/google/go-cmp v0.5.0 // indirect |
||||
github.com/google/uuid v1.1.1 // indirect |
||||
github.com/googleapis/gax-go/v2 v2.0.5 // indirect |
||||
github.com/hashicorp/hcl v1.0.0 // indirect |
||||
github.com/huandu/xstrings v1.3.1 // indirect |
||||
github.com/imdario/mergo v0.3.8 // indirect |
||||
github.com/jdkato/prose v1.1.1 // indirect |
||||
github.com/joho/godotenv v1.3.0 // indirect |
||||
github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a // indirect |
||||
github.com/klauspost/cpuid v1.3.0 // indirect |
||||
github.com/kyokomi/emoji v2.2.1+incompatible // indirect |
||||
github.com/libdns/libdns v0.0.0-20200501023120-186724ffc821 // indirect |
||||
github.com/lucas-clemente/quic-go v0.18.0 // indirect |
||||
github.com/lunixbochs/vtclean v1.0.0 // indirect |
||||
github.com/magiconair/properties v1.8.1 // indirect |
||||
github.com/manifoldco/promptui v0.3.1 // indirect |
||||
github.com/markbates/inflect v1.0.0 // indirect |
||||
github.com/marten-seemann/qpack v0.2.0 // indirect |
||||
github.com/marten-seemann/qtls v0.10.0 // indirect |
||||
github.com/marten-seemann/qtls-go1-15 v0.1.0 // indirect |
||||
github.com/mattn/go-colorable v0.1.6 // indirect |
||||
github.com/mattn/go-isatty v0.0.12 // indirect |
||||
github.com/mattn/go-runewidth v0.0.7 // indirect |
||||
github.com/miekg/dns v1.1.30 // indirect |
||||
github.com/miekg/mmark v1.3.6 // indirect |
||||
github.com/mitchellh/copystructure v1.0.0 // indirect |
||||
github.com/mitchellh/hashstructure v1.0.0 // indirect |
||||
github.com/mitchellh/mapstructure v1.1.2 // indirect |
||||
github.com/mitchellh/reflectwalk v1.0.0 // indirect |
||||
github.com/muesli/smartcrop v0.3.0 // indirect |
||||
github.com/nicksnyder/go-i18n v1.10.0 // indirect |
||||
github.com/niklasfasching/go-org v1.3.1 // indirect |
||||
github.com/olekukonko/tablewriter v0.0.4 // indirect |
||||
github.com/pelletier/go-toml v1.6.0 // indirect |
||||
github.com/pkg/errors v0.9.1 // indirect |
||||
github.com/rogpeppe/go-internal v1.5.1 // indirect |
||||
github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 // indirect |
||||
github.com/russross/blackfriday/v2 v2.0.1 // indirect |
||||
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd // indirect |
||||
github.com/samfoo/ansi v0.0.0-20160124022901-b6bd2ded7189 // indirect |
||||
github.com/sanity-io/litter v1.2.0 // indirect |
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect |
||||
github.com/smallstep/certificates v0.15.0-rc.1.0.20200506212953-e855707dc274 // indirect |
||||
github.com/smallstep/cli v0.14.4 // indirect |
||||
github.com/smallstep/nosql v0.3.0 // indirect |
||||
github.com/smallstep/truststore v0.9.5 // indirect |
||||
github.com/spf13/cast v1.3.1 // indirect |
||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect |
||||
github.com/spf13/pflag v1.0.5 // indirect |
||||
github.com/subosito/gotenv v1.2.0 // indirect |
||||
github.com/tdewolff/minify/v2 v2.6.2 // indirect |
||||
github.com/tdewolff/parse/v2 v2.4.2 // indirect |
||||
github.com/urfave/cli v1.22.2 // indirect |
||||
github.com/yuin/goldmark v1.1.32 // indirect |
||||
github.com/yuin/goldmark-highlighting v0.0.0-20200307114337-60d527fdb691 // indirect |
||||
go.etcd.io/bbolt v1.3.2 // indirect |
||||
go.opencensus.io v0.22.3 // indirect |
||||
go.uber.org/atomic v1.6.0 // indirect |
||||
go.uber.org/multierr v1.5.0 // indirect |
||||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de // indirect |
||||
golang.org/x/image v0.0.0-20191214001246-9130b4cfad52 // indirect |
||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381 // indirect |
||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d // indirect |
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e // indirect |
||||
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 // indirect |
||||
golang.org/x/text v0.3.2 // indirect |
||||
google.golang.org/api v0.20.0 // indirect |
||||
google.golang.org/appengine v1.6.5 // indirect |
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect |
||||
google.golang.org/grpc v1.27.1 // indirect |
||||
google.golang.org/protobuf v1.25.0 // indirect |
||||
gopkg.in/ini.v1 v1.51.1 // indirect |
||||
gopkg.in/square/go-jose.v2 v2.4.0 // indirect |
||||
gopkg.in/yaml.v2 v2.3.0 // indirect |
||||
howett.net/plist v0.0.0-20200419221736-3b63eb3a43b5 // indirect |
||||
) |
||||
|
@ -0,0 +1,8 @@ |
||||
.PHONY: run |
||||
run: CADDY_DEBUG=1 |
||||
run: |
||||
xcaddy build --with git.stephensearles.com/stephen/caddy-hugo2@latest=./ && cd testdir && ../caddy run --config Caddyfile
|
||||
|
||||
.PHONY: build |
||||
build: |
||||
xcaddy build --with github.com/caddy-dns/digitalocean --with git.stephensearles.com/stephen/caddy-hugo2@latest=./
|
@ -0,0 +1,17 @@ |
||||
{ |
||||
order hugo last |
||||
} |
||||
|
||||
http://localhost:8080 { |
||||
hugo { |
||||
comments test |
||||
} |
||||
root ./testdir/testsite |
||||
log |
||||
} |
||||
|
||||
http://localhost:8081, http://localhost:8082 { |
||||
root ./testdir/testsite2 |
||||
hugo |
||||
log |
||||
} |
@ -1,14 +0,0 @@ |
||||
localhost:8080 { |
||||
hugo { |
||||
comments test |
||||
} |
||||
root ./testsite |
||||
errors { * } |
||||
pprof |
||||
} |
||||
|
||||
localhost:8081, localhost:8082 { |
||||
root ./testsite2 |
||||
hugo |
||||
errors { * } |
||||
} |
Loading…
Reference in new issue