From e3ac3a6a4b7fbc2d5e64b9b8a91ec20033d0c93b Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Mon, 14 Sep 2015 22:36:15 +0100 Subject: [PATCH] changes --- edit/edit.go | 40 +++++++++++++++++++++++++++++++++++++--- settings/settings.go | 5 ++++- static/js/app.js | 6 ++++++ 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/edit/edit.go b/edit/edit.go index 85a6fe97..a1823dd5 100644 --- a/edit/edit.go +++ b/edit/edit.go @@ -1,6 +1,8 @@ package edit import ( + "bytes" + "encoding/json" "io/ioutil" "log" "net/http" @@ -24,15 +26,47 @@ func Execute(w http.ResponseWriter, r *http.Request) (int, error) { filename := strings.Replace(r.URL.Path, "/admin/edit/", "", 1) if r.Method == "POST" { - r.ParseForm() - err := ioutil.WriteFile(filename, []byte(r.Form["content"][0]), 0666) + // 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) + + // The main content of the file + mainContent := rawFile["content"].(string) + + // Removes the main content from the rest of the frontmatter + delete(rawFile, "content") + + // Converts the frontmatter in JSON + jsonFrontmatter, err := json.Marshal(rawFile) if err != nil { log.Print(err) return 500, err } - commands.Execute() + // Indents the json + frontMatterBuffer := new(bytes.Buffer) + json.Indent(frontMatterBuffer, jsonFrontmatter, "", " ") + + // Generates the final file + file := new(bytes.Buffer) + file.Write(frontMatterBuffer.Bytes()) + file.Write([]byte(mainContent)) + + err = ioutil.WriteFile(filename, file.Bytes(), 0666) + + if err != nil { + log.Print(err) + return 500, err + } + + w.Header().Set("Content-Type", "application/json") + w.Write([]byte("{}")) + go commands.Execute() } else { if _, err := os.Stat(filename); os.IsNotExist(err) { log.Print(err) diff --git a/settings/settings.go b/settings/settings.go index 7bf725be..8046b8f1 100644 --- a/settings/settings.go +++ b/settings/settings.go @@ -50,7 +50,10 @@ func Execute(w http.ResponseWriter, r *http.Request) (int, error) { w.Header().Set("Content-Type", "application/json") w.Write([]byte("{}")) - go commands.Execute() + + if r.Header.Get("X-Save-Mode") == "publish" { + go commands.Execute() + } } else { content, err := ioutil.ReadFile("config." + language) diff --git a/static/js/app.js b/static/js/app.js index a84f8ba0..d15814be 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -3,10 +3,16 @@ $(document).ready(function() { var data = JSON.stringify($(this).serializeField()) var url = $(this).attr('action') + console.log(data) + $.ajax({ type: 'POST', url: url, data: data, + beforeSend: function(xhr) { + // add publish and save + xhr.setRequestHeader('X-Save-Mode', 'publish'); + } dataType: 'json', encode: true, }).done(function(data) {