diff --git a/wiki.go b/wiki.go index 722cd13..e4c3a8f 100644 --- a/wiki.go +++ b/wiki.go @@ -13,6 +13,18 @@ type Pagina struct { Corpo []byte } +// Observe que usamos quase exatamente o mesmo código de template em ambos os Handlers(view e edit). +// Vamos remover essa duplicação movendo o código de template para sua própria função + +// Ela possui 3 parametros, ResponseWriter, tmpl que é uma string e um ponteiro para o struct Pagina +// O parseFiles vem pra função usando o segundo parametro como argumento e concatena com .html +// e então executa a função assim como faziamos nos Handler. + +func renderizaTemplate(escrever http.ResponseWriter, tmpl string, pagina *Pagina) { + template, _ := template.ParseFiles(tmpl + ".html") + template.Execute(escrever, pagina) +} + // salvar persiste os dados da página func (p *Pagina) salvar() error { nomeDoArquivo := p.Titulo + ".txt" @@ -29,19 +41,18 @@ func carregaPagina(titulo string) (*Pagina, error) { return &Pagina{Titulo: titulo, Corpo: corpo}, nil } -// Já que estamos trabalhando com templates agora, vamos criar um template para o nosso viewHandler -// Verifique o arquiv view.html - -// Modifique viewHandler de acordo: +// E modifique os Handlers para usar essa função -// viewHandler escreve o titulo e corpo da pagina em html formatado +// viewHandler r o titulo e corpo da pagina em html formatado func viewHandler(escrever http.ResponseWriter, ler *http.Request) { titulo := ler.URL.Path[len("/view/"):] pagina, _ := carregaPagina(titulo) - template, _ := template.ParseFiles("view.html") - template.Execute(escrever, pagina) + // Agora só precisamos chamar a função com os parametros exigidos diminuindo a redundância + renderizaTemplate(escrever, "view", pagina) } +// E modifique os Handlers para usar essa função + // editHandler carrega um formulário de edição func editHandler(escrever http.ResponseWriter, ler *http.Request) { titulo := ler.URL.Path[len("/edit/"):] @@ -49,8 +60,8 @@ func editHandler(escrever http.ResponseWriter, ler *http.Request) { if err != nil { pagina = &Pagina{Titulo: titulo} } - template, _ := template.ParseFiles("edit.html") - template.Execute(escrever, pagina) + // Agora só precisamos chamar a função com os parametros exigidos diminuindo a redundância + renderizaTemplate(escrever, "edit", pagina) } func main() { @@ -59,3 +70,11 @@ func main() { // http.HandleFunc("/save/", saveHandler) log.Fatal(http.ListenAndServe(":8080", nil)) } + +// Se comentarmos o registro do nosso saveHandler não implementado, podemos buildar e +// testar nosso programa mais uma vez. + +// // $ go build wiki.go +// // $ ./wiki + +// e na porta 8080 de localhost podemos mudar o path no browser entre view e edit