end day 11 march progresses on bug fix
parent
063ff180f7
commit
3fd60e487a
|
@ -67,7 +67,7 @@ module.exports = function(grunt) {
|
|||
},
|
||||
main: {
|
||||
files: {
|
||||
'assets/public/js/app.min.js': ['assets/src/js/**/*.js']
|
||||
'assets/public/js/app.min.js': ['assets/public_src/js/**/*.js']
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -89,31 +89,38 @@ $(document).on('page:editor', function() {
|
|||
editor.fadeIn();
|
||||
}
|
||||
|
||||
var data = JSON.stringify($(this).serializeJSON()),
|
||||
button = $(this).find("input[type=submit]:focus");
|
||||
var button = $(this).find("input[type=submit]:focus");
|
||||
var data = {
|
||||
content: $(this).serializeJSON(),
|
||||
type: button.data("type"),
|
||||
schedule: button.data("schedule"),
|
||||
regenerate: button.data("regenerate")
|
||||
}
|
||||
|
||||
var request = new XMLHttpRequest();
|
||||
request.open("POST", window.location);
|
||||
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
|
||||
request.setRequestHeader("X-Regenerate", button.data("regenerate"));
|
||||
request.setRequestHeader("X-Schedule", button.data("schedule"));
|
||||
request.setRequestHeader("X-Content-Type", button.data("type"));
|
||||
request.send(data);
|
||||
request.send(JSON.stringify(data));
|
||||
request.onreadystatechange = function() {
|
||||
if (request.readyState == 4) {
|
||||
var response = JSON.parse(request.responseText),
|
||||
type = "success",
|
||||
timeout = 5000;
|
||||
|
||||
if (request.status == 200) {
|
||||
notification({
|
||||
text: button.data("message"),
|
||||
type: 'success',
|
||||
timeout: 5000
|
||||
});
|
||||
} else {
|
||||
notification({
|
||||
text: 'Something went wrong.',
|
||||
type: 'error'
|
||||
});
|
||||
console.log(request.responseText);
|
||||
response.message = button.data("message");
|
||||
}
|
||||
|
||||
if (request.status != 200) {
|
||||
type = "error";
|
||||
timeout = false;
|
||||
}
|
||||
|
||||
notification({
|
||||
text: response.message,
|
||||
type: type,
|
||||
timeout: timeout
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -46,10 +46,10 @@
|
|||
{{ end }}
|
||||
|
||||
<p class="toolbar">
|
||||
<input type="submit" data-type="{{ .Class }}" data-message="{{ if eq .Class "frontmatter-only" }}The fields were put on their way.{{ else if eq .Class "content-only" }}Every byte was saved.{{ else }}Post saved with pomp and circumstance.{{ end }}" data-regenerate="false" value="Save">
|
||||
<input type="submit" data-type="{{ .Class }}" data-regenerate="false" data-schedule="false" data-message="{{ if eq .Class "frontmatter-only" }}The fields were put on their way.{{ else if eq .Class "content-only" }}Every byte was saved.{{ else }}Post saved with pomp and circumstance.{{ end }}" value="Save">
|
||||
<span class="right">
|
||||
{{ if and (eq .Class "complete") ( .IsPost ) }}<input type="submit" data-type="{{ .Class }}" data-message="Post scheduled." data-schedule="true" value="Schedule"> {{ end }}
|
||||
<input type="submit" data-type="{{ .Class }}" data-message="{{ if eq .Class "frontmatter-only" }}Saved and regenerated.{{ else if eq .Class "content-only" }}Done. What do you want more?{{ else }}Post published. Go and share it!{{ end }}" data-regenerate="true" class="default" value="Publish">
|
||||
{{ if and (eq .Class "complete") ( .IsPost ) }}<input type="submit" data-type="{{ .Class }}" data-schedule="true" data-regenerate="false" data-message="Post scheduled." value="Schedule"> {{ end }}
|
||||
<input type="submit" data-type="{{ .Class }}" data-regenerate="true" data-schedule="true" data-message="{{ if eq .Class "frontmatter-only" }}Saved and regenerated.{{ else if eq .Class "content-only" }}Done. What do you want more?{{ else }}Post published. Go and share it!{{ end }}" class="default" value="Publish">
|
||||
</span>
|
||||
</p>
|
||||
</main>
|
||||
|
|
12
hugo.go
12
hugo.go
|
@ -1,6 +1,6 @@
|
|||
//go:generate go get github.com/jteeuwen/go-bindata
|
||||
//go:generate go install github.com/jteeuwen/go-bindata/go-bindata
|
||||
//go:generate go-bindata -prefix assets/ -pkg assets -o routes/assets/assets.go assets/templates/ assets/public/...
|
||||
//go:generate go-bindata -debug -prefix assets/ -pkg assets -o routes/assets/assets.go assets/templates/ assets/public/...
|
||||
|
||||
// Package hugo makes the bridge between the static website generator Hugo
|
||||
// and the webserver Caddy, also providing an administrative user interface.
|
||||
|
@ -143,15 +143,9 @@ func (h CaddyHugo) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error
|
|||
code, err = git.ServeHTTP(w, r, h.Config)
|
||||
}
|
||||
|
||||
// Whenever the header "X-Regenerate" is true, the website should be
|
||||
// regenerated. Used in edit and settings, for example.
|
||||
if r.Header.Get("X-Regenerate") == "true" {
|
||||
go hugo.Run(h.Config, false)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
/* if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
} */
|
||||
|
||||
/*
|
||||
|
||||
|
|
|
@ -12,29 +12,64 @@ import (
|
|||
|
||||
"github.com/hacdias/caddy-hugo/config"
|
||||
"github.com/hacdias/caddy-hugo/tools/hugo"
|
||||
"github.com/hacdias/caddy-hugo/tools/server"
|
||||
"github.com/robfig/cron"
|
||||
"github.com/spf13/cast"
|
||||
"github.com/spf13/hugo/parser"
|
||||
)
|
||||
|
||||
var schedule, contentType, regenerate string
|
||||
|
||||
// POST handles the POST method on editor page
|
||||
func POST(w http.ResponseWriter, r *http.Request, c *config.Config, filename string) (int, error) {
|
||||
// Get the JSON information sent using a buffer
|
||||
rawBuffer := new(bytes.Buffer)
|
||||
rawBuffer.ReadFrom(r.Body)
|
||||
|
||||
// Creates the raw file "map" using the JSON
|
||||
var rawFile map[string]interface{}
|
||||
json.Unmarshal(rawBuffer.Bytes(), &rawFile)
|
||||
// Creates the data map using the JSON
|
||||
var data map[string]interface{}
|
||||
json.Unmarshal(rawBuffer.Bytes(), &data)
|
||||
|
||||
// Checks if all the all data is defined
|
||||
if _, ok := data["type"]; !ok {
|
||||
return server.RespondJSON(w, map[string]string{
|
||||
"message": "Content type not set.",
|
||||
}, http.StatusBadRequest, nil)
|
||||
}
|
||||
|
||||
if _, ok := data["content"]; !ok {
|
||||
return server.RespondJSON(w, map[string]string{
|
||||
"message": "Content not sent.",
|
||||
}, http.StatusBadRequest, nil)
|
||||
}
|
||||
|
||||
if _, ok := data["schedule"]; !ok {
|
||||
return server.RespondJSON(w, map[string]string{
|
||||
"message": "Schedule information not sent.",
|
||||
}, http.StatusBadRequest, nil)
|
||||
}
|
||||
|
||||
if _, ok := data["regenerate"]; !ok {
|
||||
return server.RespondJSON(w, map[string]string{
|
||||
"message": "Regenerate information not sent.",
|
||||
}, http.StatusBadRequest, nil)
|
||||
}
|
||||
|
||||
rawFile := data["content"].(map[string]interface{})
|
||||
contentType = data["type"].(string)
|
||||
schedule = data["schedule"].(string)
|
||||
regenerate = data["regenerate"].(string)
|
||||
|
||||
// Initializes the file content to write
|
||||
var file []byte
|
||||
|
||||
switch r.Header.Get("X-Content-Type") {
|
||||
switch contentType {
|
||||
case "frontmatter-only":
|
||||
f, code, err := parseFrontMatterOnlyFile(rawFile, filename)
|
||||
if err != nil {
|
||||
return code, err
|
||||
return server.RespondJSON(w, map[string]string{
|
||||
"message": err.Error(),
|
||||
}, code, err)
|
||||
}
|
||||
|
||||
file = f
|
||||
|
@ -47,24 +82,32 @@ func POST(w http.ResponseWriter, r *http.Request, c *config.Config, filename str
|
|||
case "complete":
|
||||
f, code, err := parseCompleteFile(r, c, rawFile, filename)
|
||||
if err != nil {
|
||||
return code, err
|
||||
return server.RespondJSON(w, map[string]string{
|
||||
"message": err.Error(),
|
||||
}, code, err)
|
||||
}
|
||||
|
||||
file = f
|
||||
default:
|
||||
return http.StatusBadRequest, errors.New("X-Content-Type header not defined")
|
||||
return server.RespondJSON(w, map[string]string{
|
||||
"message": "Invalid content type.",
|
||||
}, http.StatusBadRequest, nil)
|
||||
}
|
||||
|
||||
// Write the file
|
||||
err := ioutil.WriteFile(filename, file, 0666)
|
||||
|
||||
if err != nil {
|
||||
return http.StatusInternalServerError, err
|
||||
return server.RespondJSON(w, map[string]string{
|
||||
"message": err.Error(),
|
||||
}, http.StatusInternalServerError, err)
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.Write([]byte("{}"))
|
||||
return http.StatusOK, nil
|
||||
if regenerate == "true" {
|
||||
go hugo.Run(c, false)
|
||||
}
|
||||
|
||||
return server.RespondJSON(w, map[string]string{}, http.StatusOK, nil)
|
||||
}
|
||||
|
||||
func parseFrontMatterOnlyFile(rawFile map[string]interface{}, filename string) ([]byte, int, error) {
|
||||
|
@ -114,7 +157,7 @@ func parseCompleteFile(r *http.Request, c *config.Config, rawFile map[string]int
|
|||
delete(rawFile, "content")
|
||||
|
||||
// Schedule the post
|
||||
if r.Header.Get("X-Schedule") == "true" {
|
||||
if schedule == "true" {
|
||||
t := cast.ToTime(rawFile["date"].(string))
|
||||
|
||||
scheduler := cron.New()
|
||||
|
|
Loading…
Reference in New Issue