end day 11 march progresses on bug fix
This commit is contained in:
parent
063ff180f7
commit
3fd60e487a
|
@ -67,7 +67,7 @@ module.exports = function(grunt) {
|
||||||
},
|
},
|
||||||
main: {
|
main: {
|
||||||
files: {
|
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();
|
editor.fadeIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = JSON.stringify($(this).serializeJSON()),
|
var button = $(this).find("input[type=submit]:focus");
|
||||||
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();
|
var request = new XMLHttpRequest();
|
||||||
request.open("POST", window.location);
|
request.open("POST", window.location);
|
||||||
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
|
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
|
||||||
request.setRequestHeader("X-Regenerate", button.data("regenerate"));
|
request.send(JSON.stringify(data));
|
||||||
request.setRequestHeader("X-Schedule", button.data("schedule"));
|
|
||||||
request.setRequestHeader("X-Content-Type", button.data("type"));
|
|
||||||
request.send(data);
|
|
||||||
request.onreadystatechange = function() {
|
request.onreadystatechange = function() {
|
||||||
if (request.readyState == 4) {
|
if (request.readyState == 4) {
|
||||||
|
var response = JSON.parse(request.responseText),
|
||||||
|
type = "success",
|
||||||
|
timeout = 5000;
|
||||||
|
|
||||||
if (request.status == 200) {
|
if (request.status == 200) {
|
||||||
notification({
|
response.message = button.data("message");
|
||||||
text: button.data("message"),
|
|
||||||
type: 'success',
|
|
||||||
timeout: 5000
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
notification({
|
|
||||||
text: 'Something went wrong.',
|
|
||||||
type: 'error'
|
|
||||||
});
|
|
||||||
console.log(request.responseText);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (request.status != 200) {
|
||||||
|
type = "error";
|
||||||
|
timeout = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
notification({
|
||||||
|
text: response.message,
|
||||||
|
type: type,
|
||||||
|
timeout: timeout
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,10 +46,10 @@
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<p class="toolbar">
|
<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">
|
<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 }}
|
{{ 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-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">
|
<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>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
</main>
|
</main>
|
||||||
|
|
12
hugo.go
12
hugo.go
|
@ -1,6 +1,6 @@
|
||||||
//go:generate go get github.com/jteeuwen/go-bindata
|
//go:generate go get github.com/jteeuwen/go-bindata
|
||||||
//go:generate go install github.com/jteeuwen/go-bindata/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
|
// Package hugo makes the bridge between the static website generator Hugo
|
||||||
// and the webserver Caddy, also providing an administrative user interface.
|
// 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)
|
code, err = git.ServeHTTP(w, r, h.Config)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Whenever the header "X-Regenerate" is true, the website should be
|
/* if err != nil {
|
||||||
// regenerated. Used in edit and settings, for example.
|
|
||||||
if r.Header.Get("X-Regenerate") == "true" {
|
|
||||||
go hugo.Run(h.Config, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
}
|
} */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
|
|
|
@ -12,29 +12,64 @@ import (
|
||||||
|
|
||||||
"github.com/hacdias/caddy-hugo/config"
|
"github.com/hacdias/caddy-hugo/config"
|
||||||
"github.com/hacdias/caddy-hugo/tools/hugo"
|
"github.com/hacdias/caddy-hugo/tools/hugo"
|
||||||
|
"github.com/hacdias/caddy-hugo/tools/server"
|
||||||
"github.com/robfig/cron"
|
"github.com/robfig/cron"
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
"github.com/spf13/hugo/parser"
|
"github.com/spf13/hugo/parser"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var schedule, contentType, regenerate string
|
||||||
|
|
||||||
// POST handles the POST method on editor page
|
// POST handles the POST method on editor page
|
||||||
func POST(w http.ResponseWriter, r *http.Request, c *config.Config, filename string) (int, error) {
|
func POST(w http.ResponseWriter, r *http.Request, c *config.Config, filename string) (int, error) {
|
||||||
// Get the JSON information sent using a buffer
|
// Get the JSON information sent using a buffer
|
||||||
rawBuffer := new(bytes.Buffer)
|
rawBuffer := new(bytes.Buffer)
|
||||||
rawBuffer.ReadFrom(r.Body)
|
rawBuffer.ReadFrom(r.Body)
|
||||||
|
|
||||||
// Creates the raw file "map" using the JSON
|
// Creates the data map using the JSON
|
||||||
var rawFile map[string]interface{}
|
var data map[string]interface{}
|
||||||
json.Unmarshal(rawBuffer.Bytes(), &rawFile)
|
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
|
// Initializes the file content to write
|
||||||
var file []byte
|
var file []byte
|
||||||
|
|
||||||
switch r.Header.Get("X-Content-Type") {
|
switch contentType {
|
||||||
case "frontmatter-only":
|
case "frontmatter-only":
|
||||||
f, code, err := parseFrontMatterOnlyFile(rawFile, filename)
|
f, code, err := parseFrontMatterOnlyFile(rawFile, filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return code, err
|
return server.RespondJSON(w, map[string]string{
|
||||||
|
"message": err.Error(),
|
||||||
|
}, code, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
file = f
|
file = f
|
||||||
|
@ -47,24 +82,32 @@ func POST(w http.ResponseWriter, r *http.Request, c *config.Config, filename str
|
||||||
case "complete":
|
case "complete":
|
||||||
f, code, err := parseCompleteFile(r, c, rawFile, filename)
|
f, code, err := parseCompleteFile(r, c, rawFile, filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return code, err
|
return server.RespondJSON(w, map[string]string{
|
||||||
|
"message": err.Error(),
|
||||||
|
}, code, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
file = f
|
file = f
|
||||||
default:
|
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
|
// Write the file
|
||||||
err := ioutil.WriteFile(filename, file, 0666)
|
err := ioutil.WriteFile(filename, file, 0666)
|
||||||
|
|
||||||
if err != nil {
|
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")
|
if regenerate == "true" {
|
||||||
w.Write([]byte("{}"))
|
go hugo.Run(c, false)
|
||||||
return http.StatusOK, nil
|
}
|
||||||
|
|
||||||
|
return server.RespondJSON(w, map[string]string{}, http.StatusOK, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseFrontMatterOnlyFile(rawFile map[string]interface{}, filename string) ([]byte, int, error) {
|
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")
|
delete(rawFile, "content")
|
||||||
|
|
||||||
// Schedule the post
|
// Schedule the post
|
||||||
if r.Header.Get("X-Schedule") == "true" {
|
if schedule == "true" {
|
||||||
t := cast.ToTime(rawFile["date"].(string))
|
t := cast.ToTime(rawFile["date"].(string))
|
||||||
|
|
||||||
scheduler := cron.New()
|
scheduler := cron.New()
|
||||||
|
|
Loading…
Reference in New Issue