end day 11 march progresses on bug fix

pull/68/head
Henrique Dias 2016-03-11 20:38:57 +00:00
parent 063ff180f7
commit 3fd60e487a
6 changed files with 87 additions and 43 deletions

View File

@ -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

View File

@ -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
});
}
}

View File

@ -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
View File

@ -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)
}
} */
/*

View File

@ -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()