drafts kinda render now

pull/8/head
Stephen Searles 7 years ago
parent c479f26d1d
commit c8124bab27
  1. 40
      caddyhugo.go
  2. 31
      templates.go
  3. 1
      testdir/testsite/config.toml
  4. 29
      testdir/testsite/content/default/sdf.md

@ -220,21 +220,13 @@ func (ch *CaddyHugo) serveDraft(w http.ResponseWriter, r *http.Request) (int, er
defer ch.mtx.Unlock()
docref, ok := ch.docs[name]
if !ok {
fmt.Println("DRAFT", name, ch.docs)
return http.StatusNotFound, fmt.Errorf("draft not found")
}
filename := path.Join(docref.tmpdir, name)
_, err = os.Stat(filename)
if err != nil {
fmt.Println("DRAFT", filename)
return http.StatusNotFound, fmt.Errorf("draft not found")
}
http.FileServer(http.Dir(docref.tmpdir)).ServeHTTP(w, r)
http.StripPrefix(
"/hugo/draft/"+encoded,
http.FileServer(http.Dir(docref.tmpdir))).ServeHTTP(w, r)
return 200, nil
}
@ -262,27 +254,37 @@ func (ch *CaddyHugo) doc(r *http.Request) (*docref, error) {
}
ch.docs[name] = ref
hugoCmd := exec.Command("hugo", "--watch", "-D", "-d", ref.tmpdir)
hugoCmd.Dir = ch.Site.Root
err = hugoCmd.Start()
if err != nil {
return nil, fmt.Errorf("error starting hugo: %v", err)
}
go func() {
ticker := time.NewTicker(WebsocketFileTicker)
idleTicks := 0
defer func() {
err := hugoCmd.Process.Signal(os.Interrupt)
if err != nil {
fmt.Println("error signaling to hugo:", err)
}
err = hugoCmd.Wait()
if err != nil {
fmt.Println("error waiting for hugo:", err)
}
}()
for {
<-ticker.C
ch.mtx.Lock()
fmt.Println("saving", name)
err := ioutil.WriteFile(name, []byte(ref.doc.Contents()), 0644)
if err != nil {
fmt.Println("error saving document contents:", err)
}
fmt.Println("rendering in", ref.tmpdir)
cmd := exec.Command("hugo", "-D", "-d", ref.tmpdir)
cmd.Dir = ch.Site.Root
if out, err := cmd.CombinedOutput(); err != nil {
fmt.Println("error rendering draft:", err, "output:", string(out))
}
if ref.clients == 0 {
idleTicks++
idleTime := time.Duration(idleTicks) * WebsocketFileTicker

@ -67,8 +67,15 @@ func (t tmplData) LoadContent() (string, error) {
return t.Doc.Contents(), nil
}
func baseNoExt(name string) string {
base := path.Base(name)
return base[:len(base)-len(path.Ext(base))]
}
func (t tmplData) IframeSource() string {
return fmt.Sprintf("/hugo/draft/%s/%s", base64.RawURLEncoding.EncodeToString([]byte(t.docref.name)), t.docref.name)
name := baseNoExt(t.docref.name)
ctype := baseNoExt(path.Dir(t.docref.name))
return fmt.Sprintf("/hugo/draft/%s/%s/%s/", base64.RawURLEncoding.EncodeToString([]byte(t.docref.name)), ctype, name)
}
var EditPage = `<html>
@ -94,6 +101,11 @@ var EditPage = `<html>
left: 0;
}
#draft > iframe {
height: 100%;
width: 100%;
border: none;
}
</style>
<body>
@ -120,6 +132,20 @@ var EditPage = `<html>
// Create WebSocket connection.
const socket = new WebSocket('ws://localhost:8080' + location.pathname);
var iframe = document.querySelector("#draft > iframe");
const sawChangesBumpsTo = 10;
var sawChanges = -1;
window.setInterval(function () {
if (sawChanges >= 0) {
sawChanges--;
if (sawChanges == 0) {
iframe.contentWindow.location.reload();
}
}
}, 50);
// Listen for messages
socket.addEventListener('message', function (event) {
// console.log('Message from server', event.data);
@ -132,6 +158,7 @@ var EditPage = `<html>
deltas.forEach(function(delta) {
delta.dontreflect = true;
session.getDocument().applyDelta(delta);
sawChanges = sawChangesBumpsTo;
})
});
@ -145,6 +172,8 @@ var EditPage = `<html>
if (delta.dontreflect) {
return;
}
sawChanges = sawChangesBumpsTo;
cases.push({"delta":delta, "after":session.getDocument().getValue()});
console.log(JSON.stringify(cases));
socket.send(JSON.stringify({

@ -1,3 +1,4 @@
baseURL = "http://example.org/"
languageCode = "en-us"
title = "My New Hugo Site"
theme = "hugo-theme-minos"

@ -5,3 +5,32 @@ title = "sdf"
+++
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ac neque dignissim enim ullamcorper volutpat at ac nunc. Morbi feugiat mi velit, quis mattis massa auctor id. Morbi ut ex risus. Vivamus in sapien vel urna tincidunt blandit et sed magna. Aliquam quis mollis ipsum. Mauris ac bibendum est, sit amet dictum dolor. Donec luctus sit amet ante sit amet varius. Cras laoreet dictum euismod. Phasellus posuere quis ex ut rhoncus. Cras et leo eros. Donec eget auctor purus, et consequat tortor.
Aenean ac velit eget justo viverra malesuada. Curabitur facilisis, erat nec consectetur vulputate, lorem urna pulvinar lectus, quis interdum erat augue vitae nisi. Sed in velit placerat, pellentesque enim eget, sollicitudin justo. Praesent vel lacus ut justo sodales sollicitudin id id justo. Phasellus mollis pretium velit, a auctor velit porta et. Phasellus ex dui, venenatis sed tellus ac, pharetra malesuada felis. Duis ut nibh at velit scelerisque consectetur nec pulvinar urna. Praesent bibendum ullamcorper facilisis.
Fusce in lobortis elit. Sed ullamcorper interdum dolor in molestie. Quisque condimentum nisl at mauris tristique accumsan. Integer nec nibh nisi. Quisque ante ex, suscipit ut elementum ac, venenatis ultrices nibh. Proin sodales mauris augue. Maecenas venenatis nisi justo. Aenean efficitur nibh orci, a maximus felis egestas eget. Praesent eget metus luctus, consectetur lectus a, hendrerit mi. Quisque sem ex, venenatis nec lobortis quis, malesuada sed nisl. Curabitur erat diam, lobortis vel elit non, maximus vulputate lacus.
Morbi scelerisque sodales odio. Nam ut lorem imperdiet, suscipit ante convallis, fringilla quam. Ut eu risus at elit lobortis molestie. Nullam vulputate iaculis mi, at imperdiet nibh placerat sit amet. In ornare arcu sodales fringilla malesuada. Pellentesque lorem neque, bibendum a imperdiet et, pretium ac quam. In nec condimentum lorem.
Nam maximus urna non metus fringilla, non luctus ligula pellentesque. Nam tristique quis nulla a molestie. Sed maximus iaculis ante, quis eleifend dui tincidunt ac. Nullam consequat, dolor in vestibulum convallis, arcu lacus semper nulla, ut tristique risus turpis ut eros. Mauris semper libero pellentesque vehicula pretium. Phasellus elementum massa ut eros consectetur pretium. Phasellus non sollicitudin sapien, vel fermentum turpis. Cras vulputate, dolor et dapibus molestie, justo elit facilisis lectus, in hendrerit est sem quis ligula. Vestibulum at nunc eu orci posuere tristique eget nec metus. Fusce orci velit, placerat vel ligula vitae, rhoncus convallis massa.
Suspendisse suscipit sagittis elit ac interdum. Fusce id sem in velit finibus dignissim in sit amet purus. Vivamus ac erat sapien. Nunc vitae auctor ipsum. Sed volutpat tristique neque vitae tincidunt. Cras id egestas lacus. Vivamus at fermentum tortor, ut luctus tortor. Nullam id diam dui.
Aliquam nec ornare nibh. Vivamus efficitur, sapien in commodo molestie, leo tellus suscipit dui, sit amet pretium purus dolor vel mi. Praesent eleifend maximus sapien sed euismod. Etiam congue, metus vitae pulvinar dapibus, ligula felis pharetra mi, in tincidunt ipsum risus sed orci. In placerat iaculis purus ullamcorper porttitor. Proin quis leo in mauris placerat ultricies eget sed purus. Suspendisse potenti. Praesent imperdiet sem imperdiet est dictum, ac ultricies est dapibus. Etiam commodo posuere libero sed imperdiet. Cras luctus eu nulla quis vestibulum. Cras ut dui molestie, ultricies orci sit amet, semper arcu. Vestibulum nunc magna, sodales sed ex et, finibus consectetur quam. Fusce euismod in nulla vel suscipit.
Curabitur elementum, ante in blandit sodales, ex diam efficitur nibh, scelerisque varius quam odio sed metus. Donec nec ultrices ligula. Aliquam nec sagittis urna, nec malesuada ipsum. Duis accumsan tincidunt fermentum. Maecenas in ornare elit. Vestibulum porttitor tincidunt porta. Phasellus imperdiet mauris quam, at semper eros aliquet vitae. Sed ornare neque non leo pretium ultricies. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer nec lobortis ante, sodales venenatis urna. Integer quis fermentum nibh. Phasellus ex quam, ultricies sit amet porta nec, fringilla condimentum elit. Aliquam rutrum, ex et molestie pharetra, sapien metus dapibus nunc, sit amet blandit neque felis eget ipsum. Aliquam finibus pretium risus, a accumsan nulla convallis at.
Nunc a dui eu mi sollicitudin feugiat. Curabitur nec dolor pulvinar, tempus libero sit amet, commodo leo. Nulla dictum posuere volutpat. Nunc interdum eros ac luctus bibendum. Cras volutpat vel ligula eu tristique. Pellentesque et iaculis mi. Aliquam laoreet mi at odio fermentum tempus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin non auctor ligula. Nullam in volutpat massa, sed pharetra felis. Sed id finibus nisl. Curabitur nec ipsum at lacus ultrices semper. Proin at neque rutrum, eleifend massa in, placerat leo. Fusce vulputate sapien nec massa ultrices, vel pellentesque dolor malesuada. Phasellus leo sem, efficitur eu massa at, placerat hendrerit diam.
Curabitur sodales posuere ullamcorper. Mauris cursus eget nisl at posuere. Integer fermentum ligula et interdum volutpat. Pellentesque sed quam tincidunt, rhoncus turpis ac, maximus lectus. Aenean aliquet ut leo varius vestibulum. Pellentesque congue, nunc vel tristique condimentum, nisl arcu porta neque, eget cursus sem lorem vel tellus. Nullam cursus ex in tincidunt luctus. Suspendisse eu porta neque, id tempus neque. Suspendisse non neque eros.
Praesent porta mi non convallis consectetur. Suspendisse euismod augue nunc, euismod viverra metus maximus ut. Cras ac enim fringilla, pretium massa at, rhoncus dolor. Praesent ultrices neque in ex rutrum sagittis sed et tortor. Etiam sodales at massa eu accumsan. Pellentesque malesuada varius leo vitae consequat. Duis venenatis enim nec neque blandit, eu auctor quam dignissim. Phasellus eget commodo orci. Integer mauris nisl, vehicula sed purus vel, ultricies faucibus nibh. Phasellus non leo sit amet eros volutpat congue eget non orci. Aliquam sagittis, sapien a elementum interdum, est dui hendrerit neque, dictum condimentum magna risus vitae nisl. Fusce maximus in magna ac fermentum. Ut dignissim varius diam pretium tincidunt.
Curabitur dignissim feugiat volutpat. Phasellus et nibh ultricies ex blandit interdum in ut urna. Vestibulum luctus elementum neque sed tincidunt. Vestibulum dignissim ante neque, at ultrices tellus ultricies porttitor. Nulla vitae arcu sit amet sapien dictum ullamcorper. Cras fermentum nisi non enim interdum ultrices. Donec ornare a lacus malesuada tristique. Integer placerat vestibulum pretium. Proin at ante risus.
Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse potenti. Donec euismod ante pharetra scelerisque condimentum. Mauris sit amet varius nisi. Ut rhoncus, velit eget semper fringilla, nulla massa ultrices leo, eu facilisis magna eros sed tellus. Suspendisse a consectetur magna. Proin venenatis at libero eu auctor. Sed rhoncus eget nunc id rhoncus. Phasellus nec scelerisque tortor, a lobortis ante. Morbi tincidunt magna et risus rhoncus finibus ut sed eros. Maecenas ac placerat elit. Etiam et ultrices lacus, in molestie urna.
Maecenas placerat eu dui et lobortis. Cras a ante eu risus tempor egestas ac eu tellus. Quisque sollicitudin rhoncus tellus eu efficitur. Phasellus sit amet sem in tortor fermentum volutpat. Morbi porta tempus condimentum. In hac habitasse platea dictumst. Pellentesque iaculis tortor a tempor venenatis. Aliquam imperdiet eleifend tempor. In magna neque, interdum vel aliquet nec, malesuada eget ipsum. Donec vitae porttitor augue. Nulla convallis sem eu erat facilisis auctor. Etiam tempor tortor a magna elementum, dictum tristique massa venenatis. Donec consectetur ex non elementum vestibulum. Aenean vestibulum dictum purus, at imperdiet arcu. In in dolor lectus.
Nulla placerat tincidunt sem, eget rhoncus odio auctor non. Ut aliquet, nunc ac accumsan pulvinar, justo magna rutrum risus, ut laoreet mi eros non lacus. Praesent sit amet ultricies tortor, pharetra tristique mi. Sed at imperdiet metus. Nunc lobortis mollis bibendum. Proin tortor ex, interdum eget neque at, consequat euismod lectus. Nulla cursus mollis purus a laoreet. Aliquam tristique nunc tempor pharetra pellentesque. Nullam convallis ante ex.

Loading…
Cancel
Save