package main import ( "fmt" "html/template" "net/http" "git.wmi.amu.edu.pl/s439508/Pracownia.Programowania/common" "git.wmi.amu.edu.pl/s439508/Pracownia.Programowania/helpers" "git.wmi.amu.edu.pl/s439508/Pracownia.Programowania/models" "github.com/go-martini/martini" "github.com/martini-contrib/render" ) func index(rend render.Render) { posts, err := models.Posts.FindAll() if err != nil { rend.Error(http.StatusBadRequest) return } rend.HTML(http.StatusOK, "index", posts) } func write(rend render.Render) { rend.HTML(http.StatusOK, "write", &models.Post{}) } func edit(rend render.Render, w http.ResponseWriter, r *http.Request, params martini.Params) { post, err := models.Posts.FindOne(params["id"]) if err != nil { rend.Error(http.StatusNotFound) return } rend.HTML(http.StatusOK, "write", post) } func savePost(rend render.Render, w http.ResponseWriter, r *http.Request) { id := r.FormValue("id") title := r.FormValue("title") if title == "" { rend.Error(http.StatusNotFound) return } else { contentMd := r.FormValue("content") contentHtml := helpers.MarkdownToHtml(contentMd) contentCom := r.FormValue("content1") if id != "" { if err := models.Posts.Update(id, title, contentHtml, contentMd, contentCom); err != nil { rend.Error(http.StatusBadRequest) return } } else { if _, err := models.Posts.Create(helpers.GenerateId(), title, contentHtml, contentMd, contentCom); err != nil { rend.Error(http.StatusBadRequest) return } } } rend.Redirect("/") } func deletePost(rend render.Render, w http.ResponseWriter, r *http.Request, params martini.Params) { if err := models.Posts.DeletebyId(params["id"]); err != nil { rend.Error(http.StatusNotFound) return } rend.Redirect("/") } func getHtmlPost(rend render.Render, w http.ResponseWriter, r *http.Request) { md := r.FormValue("md") rend.JSON(http.StatusOK, map[string]interface{}{ "html": helpers.MarkdownToHtml(md), }) } func unescape(s string) interface{} { return template.HTML(s) } func main() { common.ConnectDB() fmt.Println("Listening port 3000") m := martini.Classic() unescapeFuncMap := template.FuncMap{"unescape": unescape} m.Use(render.Renderer(render.Options{ Directory: "views", Layout: "layout", Extensions: []string{".html"}, Funcs: []template.FuncMap{unescapeFuncMap}, Charset: "UTF-8", IndentJSON: true, })) staticOptions := martini.StaticOptions{Prefix: "bower_components"} m.Use(martini.Static("bower_components", staticOptions)) m.Get("/", index) m.Get("/write", write) m.Get("/edit/:id", edit) m.Post("/savePost", savePost) m.Get("/deletePost/:id", deletePost) m.Post("/getHtml", getHtmlPost) m.Run() }