From 234e2a1ec4af2f83151386be8cdd7aa72c95664f Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Mon, 14 Sep 2015 22:03:09 +0100 Subject: [PATCH] frontmatter parsing better; edit not working --- edit/edit.go | 26 +++++--- frontmatter/frontmatter.go | 17 ++---- settings/settings.go | 2 +- static/css/main.css | 122 +++++++++++++++++++++++-------------- static/js/app.js | 62 ++++++++++++------- templates/base_full.tmpl | 34 ++++++----- templates/edit.tmpl | 8 +-- 7 files changed, 161 insertions(+), 110 deletions(-) diff --git a/edit/edit.go b/edit/edit.go index 9716ccd1..85a6fe97 100644 --- a/edit/edit.go +++ b/edit/edit.go @@ -7,13 +7,16 @@ import ( "os" "strings" + "github.com/hacdias/caddy-hugo/frontmatter" "github.com/hacdias/caddy-hugo/page" "github.com/spf13/hugo/commands" + "github.com/spf13/hugo/parser" ) -type fileInfo struct { - Content string - Name string +type information struct { + Name string + Content string + FrontMatter interface{} } // Execute sth @@ -36,21 +39,28 @@ func Execute(w http.ResponseWriter, r *http.Request) (int, error) { return 404, nil } - file, err := ioutil.ReadFile(filename) + reader, err := os.Open(filename) if err != nil { log.Print(err) return 500, err } - inf := new(fileInfo) - inf.Content = string(file) - inf.Name = filename + file, err := parser.ReadFrom(reader) + + inf := new(information) + inf.Content = string(file.Content()) + inf.FrontMatter, err = frontmatter.Pretty(file.FrontMatter()) + + if err != nil { + log.Print(err) + return 500, err + } page := new(page.Page) page.Title = "Edit" page.Body = inf - return page.Render(w, r, "edit") + return page.Render(w, r, "edit", "frontmatter") } return 200, nil diff --git a/frontmatter/frontmatter.go b/frontmatter/frontmatter.go index f4e97012..1601a2b7 100644 --- a/frontmatter/frontmatter.go +++ b/frontmatter/frontmatter.go @@ -8,24 +8,15 @@ import ( ) // Pretty creates a new FrontMatter object -func Pretty(content []byte, language string) (interface{}, error) { - var err error - var c interface{} - - if language == "yaml" { - c, err = parser.HandleYAMLMetaData(content) - } else if language == "json" { - c, err = parser.HandleJSONMetaData(content) - } else if language == "toml" { - c, err = parser.HandleTOMLMetaData(content) - } +func Pretty(content []byte) (interface{}, error) { + frontType := parser.DetectFrontMatter(rune(content[0])) + front, err := frontType.Parse(content) if err != nil { return []string{}, err } - //log.Print(c) - return rawToPretty(c, ""), nil + return rawToPretty(front, ""), nil } type frontmatter struct { diff --git a/settings/settings.go b/settings/settings.go index 2d4f70ed..7bf725be 100644 --- a/settings/settings.go +++ b/settings/settings.go @@ -59,7 +59,7 @@ func Execute(w http.ResponseWriter, r *http.Request) (int, error) { return 500, err } - f, err := frontmatter.Pretty(content, language) + f, err := frontmatter.Pretty(content) if err != nil { log.Print(err) diff --git a/static/css/main.css b/static/css/main.css index 57839442..83e03b9a 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -1,76 +1,106 @@ body { - font-family: 'Roboto', sans-serif; - color: #212121; - height: 100%; - width: 100%; + font-family: 'Roboto', sans-serif; + color: #212121; + height: 100%; + width: 100%; } + header { - position: fixed; - top: 0; - left: 0; - height: 3em; - width: 100%; - background-color: #212121; - padding: 0 2em; - box-sizing: border-box; - z-index: 999; - color: #fff; + position: fixed; + top: 0; + left: 0; + height: 3em; + width: 100%; + background-color: #EEE; + padding: 0 2em; + box-sizing: border-box; + z-index: 999; + color: #555; } -header nav {} header nav ul { - margin: 0; - padding: 0; + +header nav {} + +header nav ul { + margin: 0; + padding: 0; + display: -webkit-box; + /* OLD - iOS 6-, Safari 3.1-6 */ + display: -moz-box; + /* OLD - Firefox 19- (buggy but mostly works) */ + display: -ms-flexbox; + /* TWEENER - IE 10 */ + display: -webkit-flex; + /* NEW - Chrome */ + display: flex; } + header nav ul li { - list-style-type: none; - display: inline-block; - vertical-align: middle; + list-style-type: none; + display: inline-block; + vertical-align: middle; } + +header nav ul li:last-child { + margin-left: auto; +} + header nav img { height: 2em; } + header nav ul li a { - padding: 0.5em 0.5em; - line-height: 2em; - display: block; - text-decoration: none; - color: inherit; - transition: .5s ease background-color; + padding: 0.5em 0.5em; + line-height: 2em; + display: block; + text-decoration: none; + color: inherit; + transition: .5s ease background-color; } + header nav ul li a:hover { - background-color: rgba(255, 255, 255, 0.3); + background-color: rgba(255, 255, 255, 0.57); } + main { - top: 3em; - position: relative; + top: 3em; + position: relative; } + .content { - margin: 1.5em auto; - width: 80%; - max-width: 800px; + margin: 1.5em auto; + width: 80%; + max-width: 800px; } + textarea { - width: 100%; - min-height: 50em; - resize: vertical; - border: 0; - font-family: inherit; + width: 100%; + min-height: 50em; + resize: vertical; + border: 0; + font-family: inherit; } + /* FORMS */ -form { - -} +form {} form input { - -color: rgba(0, 0, 0, 0.41);width: 15em;line-height: 1.25em;margin: .5em 0;border: 1px solid #fff;transition: .5s ease-out all;} + color: rgba(0, 0, 0, 0.41); + width: 15em; + line-height: 1.25em; + margin: .5em 0; + border: 1px solid #fff; + transition: .5s ease-out all; +} form input:focus { - color: inherit; - outline: 0; - border-bottom: 1px solid #2196F3; + color: inherit; + outline: 0; + border-bottom: 1px solid #2196F3; } form label { -width: 10.5em;display: inline-block;} + width: 10.5em; + display: inline-block; +} \ No newline at end of file diff --git a/static/js/app.js b/static/js/app.js index 489adc7a..a84f8ba0 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -4,11 +4,11 @@ $(document).ready(function() { var url = $(this).attr('action') $.ajax({ - type : 'POST', - url : url, - data : data, - dataType : 'json', - encode : true, + type: 'POST', + url: url, + data: data, + dataType: 'json', + encode: true, }).done(function(data) { alert("it workss"); }).fail(function(data) { @@ -17,24 +17,42 @@ $(document).ready(function() { event.preventDefault(); }); + + $("#logout").click(function(e) { + e.preventDefault(); + jQuery.ajax({ + type: "GET", + url: "/admin", + async: false, + username: "logmeout", + password: "123456", + headers: { + "Authorization": "Basic xxx" + } + }) + .fail(function() { + window.location = "/"; + }); + return false; + }); }); -$.fn.serializeField = function() { - var result = {}; - this.each(function() { - $(this).find("> *").each(function() { - var $this = $(this); - var name = $this.attr("name"); - if ($this.is("fieldset") && name) { - result[name] = $this.serializeField(); - } - else { - $.each($this.serializeArray(), function() { - result[this.name] = this.value; - }); - } - }); +$.fn.serializeField = function() { + var result = {}; + this.each(function() { + $(this).find("> *").each(function() { + var $this = $(this); + var name = $this.attr("name"); + + if ($this.is("fieldset") && name) { + result[name] = $this.serializeField(); + } else { + $.each($this.serializeArray(), function() { + result[this.name] = this.value; + }); + } }); - return result; -}; + }); + return result; +}; \ No newline at end of file diff --git a/templates/base_full.tmpl b/templates/base_full.tmpl index 7e801a1a..c7231659 100644 --- a/templates/base_full.tmpl +++ b/templates/base_full.tmpl @@ -1,29 +1,32 @@ + - - - - -{{ .Title }} + + + + + {{ .Title }} - + - - + + + - - + +
@@ -34,4 +37,5 @@ - + + \ No newline at end of file diff --git a/templates/edit.tmpl b/templates/edit.tmpl index 38fa022d..fea9a3ac 100644 --- a/templates/edit.tmpl +++ b/templates/edit.tmpl @@ -1,16 +1,14 @@ -{{ define "content" }} -{{ with .Body }} +{{ define "content" }} {{ with .Body }}
-

Editing {{ .Name }}

+ {{ template "frontmatter" .FrontMatter }}
-{{ end }} -{{ end }} +{{ end }} {{ end }} \ No newline at end of file