11.12.2018

This commit is contained in:
Mikolaj 2018-12-11 20:42:44 +01:00
parent 6e4b3bb045
commit e0b131be8f
5 changed files with 77 additions and 13 deletions

12
helpers/random.go Normal file
View File

@ -0,0 +1,12 @@
package helpers
import (
"crypto/rand"
"fmt"
)
func GenerateId() string {
b := make([]byte, 8)
rand.Read(b)
return fmt.Sprintf("%x", b)
}

52
main.go
View File

@ -5,7 +5,8 @@ import (
"html/template" "html/template"
"net/http" "net/http"
"github.com/blog/models" "git.wmi.amu.edu.pl/s439508/Pracownia.Programowania/helpers"
"git.wmi.amu.edu.pl/s439508/Pracownia.Programowania/models"
) )
var posts map[string]*models.Post var posts map[string]*models.Post
@ -16,11 +17,12 @@ func index(w http.ResponseWriter, r *http.Request) {
"views/write.html", "views/write.html",
"views/header.html", "views/header.html",
"views/footer.html", "views/footer.html",
"views/index.html",
) )
if err != nil { if err != nil {
fmt.Fprintf(w, err.Error()) fmt.Fprintf(w, err.Error())
} }
t.ExecuteTemplate(w, "write", nil) t.ExecuteTemplate(w, "index", posts)
} }
func write(w http.ResponseWriter, r *http.Request) { func write(w http.ResponseWriter, r *http.Request) {
@ -28,11 +30,30 @@ func write(w http.ResponseWriter, r *http.Request) {
"views/index.html", "views/index.html",
"views/header.html", "views/header.html",
"views/footer.html", "views/footer.html",
"views/write.html",
) )
if err != nil { if err != nil {
fmt.Fprintf(w, err.Error()) fmt.Fprintf(w, err.Error())
} }
t.ExecuteTemplate(w, "index", nil) t.ExecuteTemplate(w, "write", nil)
}
func edit(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles(
"views/index.html",
"views/header.html",
"views/footer.html",
"views/write.html",
)
if err != nil {
fmt.Fprintf(w, err.Error())
}
id := r.FormValue("id")
post, found := posts[id]
if !found {
http.NotFound(w, r)
}
t.ExecuteTemplate(w, "write", post)
} }
func savePost(w http.ResponseWriter, r *http.Request) { func savePost(w http.ResponseWriter, r *http.Request) {
@ -40,8 +61,27 @@ func savePost(w http.ResponseWriter, r *http.Request) {
title := r.FormValue("title") title := r.FormValue("title")
content := r.FormValue("content") content := r.FormValue("content")
post := models.NewPost(id, title, content) var post *models.Post
post[post.Id] = post if id != "" {
post = posts[id]
post.Title = title
post.Content = content
} else {
post := models.NewPost(helpers.GenerateId(), title, content)
posts[post.Id] = post
}
http.Redirect(w, r, "/", 302)
}
func deletePost(w http.ResponseWriter, r *http.Request) {
id := r.FormValue("id")
if id == "" {
http.NotFound(w, r)
}
delete(posts, id)
http.Redirect(w, r, "/", 302) http.Redirect(w, r, "/", 302)
} }
@ -52,7 +92,9 @@ func main() {
http.Handle("/bower_components/", http.StripPrefix("/bower_components/", http.FileServer(http.Dir("./bower_components/")))) http.Handle("/bower_components/", http.StripPrefix("/bower_components/", http.FileServer(http.Dir("./bower_components/"))))
http.HandleFunc("/", index) http.HandleFunc("/", index)
http.HandleFunc("/write", write) http.HandleFunc("/write", write)
http.HandleFunc("/edit", edit)
http.HandleFunc("/savePost", savePost) http.HandleFunc("/savePost", savePost)
http.HandleFunc("/deletePost", deletePost)
http.ListenAndServe(":8080", nil) http.ListenAndServe(":8080", nil)
} }

View File

@ -1,6 +1,6 @@
package models package models
type Psot struct { type Post struct {
Id string Id string
Title string Title string
Content string Content string

View File

@ -2,17 +2,25 @@
{{ template "header" }} {{ template "header" }}
{{ range $key, $value := . }}
<div class="row"> <div class="row">
<div class="col-xs-2"></div> <div class="col-xs-2"></div>
<div class="col-xs-2"></div> <div class="col-xs-8">
<h1><a href ="/edit?id={{$value.Id}}">{{ $value.Title }}</a></h1>
</div>
<div class="col-xs-2"></div> <div class="col-xs-2"></div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-xs-2"></div> <div class="col-xs-2"></div>
<div class="col-xs-8">
{{ $value.Content }}
</div>
<div class="col-xs-2"></div> <div class="col-xs-2"></div>
<div class="col-xs-2"></div> </div>
</div> {{end}}
{{ template "footer" }} {{ template "footer" }}

View File

@ -5,20 +5,22 @@
<div class="col-xs-4"></div> <div class="col-xs-4"></div>
<div class="col-xs-4"> <div class="col-xs-4">
<form action="/savePost" method="POST" role="form"> <form action="/savePost" method="POST" role="form">
<input type="hidden" name="id"/> <input type="hidden" name="id" value="{{.Id}}"/>
<div class="form-group"> <div class="form-group">
<label for="title">Tytul</label> <label for="title">Tytul</label>
<input type="text" class="form-control" id="title" name="title"/> <input type="text" class="form-control" id="title" name="title" value ="{{.Title}}"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="content">Content</label> <label for="content">Content</label>
<textarea name="content" id="content"></textarea> <textarea name="content" id="content">{{.Content}}</textarea>
</div> </div>
<button type="submit" class="btn btn-default">Submit</button> <button type="submit" class="btn btn-default">Submit</button>
</form> </form>
</div> </div>
<div class="col-xs-4"> <div class="col-xs-4">
<a href="deletePost">Usun</a> {{ if.Id }}
<a href="deletePost?id={{.Id}}">Delete</a>
{{ end }}
</div> </div>
</div> </div>