renderer added, storage + renderer interfaces renamed to Interface
This commit is contained in:
parent
d63dba41a8
commit
e92d895690
7
main.go
7
main.go
@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/dalu/wiki/wiki/storage/mongo"
|
"github.com/dalu/wiki/wiki/storage/mongo"
|
||||||
"gopkg.in/mgo.v2"
|
"gopkg.in/mgo.v2"
|
||||||
"gopkg.in/mgo.v2/bson"
|
"gopkg.in/mgo.v2/bson"
|
||||||
|
"github.com/dalu/wiki/wiki/template"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -25,15 +26,17 @@ func main() {
|
|||||||
log.Fatal("initializeWiki: ", e.Error())
|
log.Fatal("initializeWiki: ", e.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
renderer := template.New(true)
|
||||||
|
|
||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
|
|
||||||
wikiHandler := wiki.NewWikiHandler(mongostore, log)
|
wikiHandler := wiki.NewWikiHandler(mongostore, renderer, log)
|
||||||
mux.Handle(wiki.DefaultMountPath, http.StripPrefix(wiki.DefaultMountPath, wikiHandler))
|
mux.Handle(wiki.DefaultMountPath, http.StripPrefix(wiki.DefaultMountPath, wikiHandler))
|
||||||
|
|
||||||
log.Fatal(http.ListenAndServe(":8080", mux))
|
log.Fatal(http.ListenAndServe(":8080", mux))
|
||||||
}
|
}
|
||||||
|
|
||||||
func initializeWiki(s storage.WikiStorage) error {
|
func initializeWiki(s storage.Interface) error {
|
||||||
_, e := s.GetTermByName("")
|
_, e := s.GetTermByName("")
|
||||||
if e != nil {
|
if e != nil {
|
||||||
if e == mgo.ErrNotFound {
|
if e == mgo.ErrNotFound {
|
||||||
|
0
views/base.html.twig
Normal file
0
views/base.html.twig
Normal file
13
views/layout.html.twig
Normal file
13
views/layout.html.twig
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{% extends "base.html.twig" %}
|
||||||
|
{% block css %}
|
||||||
|
{% endblock %}
|
||||||
|
{% block body %}
|
||||||
|
{% block nav %}{% endblock %}
|
||||||
|
{% block header %}{% endblock %}
|
||||||
|
{% block left %}{% endblock %}
|
||||||
|
{% block middle %}{% endblock %}
|
||||||
|
{% block right %}{% endblock %}
|
||||||
|
{% block footer %}{% endblock %}
|
||||||
|
{% endblock %}
|
||||||
|
{% block js %}
|
||||||
|
{% endblock %}
|
@ -1,11 +1,12 @@
|
|||||||
package wiki
|
package wiki
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
//"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/Sirupsen/logrus"
|
"github.com/Sirupsen/logrus"
|
||||||
"github.com/dalu/wiki/wiki/storage"
|
"github.com/dalu/wiki/wiki/storage"
|
||||||
|
"github.com/dalu/wiki/wiki/template"
|
||||||
)
|
)
|
||||||
|
|
||||||
const DefaultMountPath = "/wiki/"
|
const DefaultMountPath = "/wiki/"
|
||||||
@ -16,14 +17,16 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type wikiHandler struct {
|
type wikiHandler struct {
|
||||||
s storage.WikiStorage
|
s storage.Interface
|
||||||
|
r template.Interface
|
||||||
l *logrus.Logger
|
l *logrus.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWikiHandler(s storage.WikiStorage, l *logrus.Logger) *wikiHandler {
|
func NewWikiHandler(s storage.Interface, r template.Interface, l *logrus.Logger) *wikiHandler {
|
||||||
l.Level = logrus.DebugLevel
|
l.Level = logrus.DebugLevel
|
||||||
return &wikiHandler{
|
return &wikiHandler{
|
||||||
s: s,
|
s: s,
|
||||||
|
r: r,
|
||||||
l: l,
|
l: l,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,9 +83,20 @@ func (h *wikiHandler) show(w http.ResponseWriter, r *http.Request) {
|
|||||||
h.l.Error("wikihandler.show.GetRevisionByTermID:", e)
|
h.l.Error("wikihandler.show.GetRevisionByTermID:", e)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx := make(map[string]interface{})
|
||||||
|
ctx["term"] = term
|
||||||
|
ctx["revision"] = revision
|
||||||
|
|
||||||
|
if e := h.r.Render(w, "wiki/show.html.twig", ctx); e != nil {
|
||||||
|
h.l.Error("wikiHandler.show.Renderer.write:", e)
|
||||||
|
}
|
||||||
|
|
||||||
// temporary
|
// temporary
|
||||||
|
/*
|
||||||
if e := json.NewEncoder(w).Encode(revision); e != nil {
|
if e := json.NewEncoder(w).Encode(revision); e != nil {
|
||||||
h.l.Error("wikihandler.show.NewEncoder:", e)
|
h.l.Error("wikihandler.show.NewEncoder:", e)
|
||||||
http.Error(w, e.Error(), http.StatusInternalServerError)
|
http.Error(w, e.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package storage
|
package storage
|
||||||
|
|
||||||
type WikiStorage interface {
|
type Interface interface {
|
||||||
TermStorage
|
TermInterface
|
||||||
RevisionStorage
|
RevisionInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
type TermStorage interface {
|
type TermInterface interface {
|
||||||
CreateTerm(term *Term) error
|
CreateTerm(term *Term) error
|
||||||
UpdateTerm(term *Term) error
|
UpdateTerm(term *Term) error
|
||||||
RemoveTerm(term *Term) error
|
RemoveTerm(term *Term) error
|
||||||
@ -15,7 +15,7 @@ type TermStorage interface {
|
|||||||
GetTerms() ([]*Term, error)
|
GetTerms() ([]*Term, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type RevisionStorage interface {
|
type RevisionInterface interface {
|
||||||
CreateRevision(revision *Revision) error
|
CreateRevision(revision *Revision) error
|
||||||
RemoveRevision(revision *Revision) error
|
RemoveRevision(revision *Revision) error
|
||||||
RemoveRevisionsByTermID(termID string) error
|
RemoveRevisionsByTermID(termID string) error
|
||||||
|
7
wiki/template/interface.go
Normal file
7
wiki/template/interface.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package template
|
||||||
|
|
||||||
|
import "io"
|
||||||
|
|
||||||
|
type Interface interface {
|
||||||
|
Render(w io.Writer, name string, data interface{}) error
|
||||||
|
}
|
50
wiki/template/renderer.go
Normal file
50
wiki/template/renderer.go
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package template
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/GeertJohan/go.rice"
|
||||||
|
"github.com/flosch/pongo2"
|
||||||
|
)
|
||||||
|
|
||||||
|
type loader struct {
|
||||||
|
ricebox *rice.Box
|
||||||
|
}
|
||||||
|
|
||||||
|
func (loader) Abs(base, name string) string {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l loader) Get(path string) (io.Reader, error) {
|
||||||
|
return l.ricebox.Open(path)
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(debug bool) *Renderer {
|
||||||
|
l := loader{
|
||||||
|
ricebox: rice.MustFindBox("views"),
|
||||||
|
}
|
||||||
|
set := pongo2.NewSet("wiki", l)
|
||||||
|
set.Debug = debug
|
||||||
|
return &Renderer{
|
||||||
|
set: set,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type Renderer struct {
|
||||||
|
set *pongo2.TemplateSet
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Renderer) Render(w io.Writer, name string, data interface{}) error {
|
||||||
|
t ,e := r.set.FromCache(name)
|
||||||
|
if e != nil {
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
return t.ExecuteWriter(pongoContext(data), w)
|
||||||
|
}
|
||||||
|
|
||||||
|
func pongoContext(data interface{}) pongo2.Context {
|
||||||
|
if ctx, ok := data.(map[string]interface{}); ok {
|
||||||
|
return ctx
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
12
wiki/template/views/base.html.twig
Normal file
12
wiki/template/views/base.html.twig
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{% block lang %}{% endblock %}">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>{% block title %}{% endblock %}</title>
|
||||||
|
{% block css %}{% endblock %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{% block body %}{% endblock %}
|
||||||
|
{% block js %}{% endblock %}
|
||||||
|
</body>
|
||||||
|
</html>
|
13
wiki/template/views/layout.html.twig
Normal file
13
wiki/template/views/layout.html.twig
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{% extends "base.html.twig" %}
|
||||||
|
{% block css %}
|
||||||
|
{% endblock %}
|
||||||
|
{% block body %}
|
||||||
|
{% block nav %}{% endblock %}
|
||||||
|
{% block header %}{% endblock %}
|
||||||
|
{% block left %}{% endblock %}
|
||||||
|
{% block middle %}{% endblock %}
|
||||||
|
{% block right %}{% endblock %}
|
||||||
|
{% block footer %}{% endblock %}
|
||||||
|
{% endblock %}
|
||||||
|
{% block js %}
|
||||||
|
{% endblock %}
|
1
wiki/template/views/wiki/edit.html.twig
Normal file
1
wiki/template/views/wiki/edit.html.twig
Normal file
@ -0,0 +1 @@
|
|||||||
|
{% extends "layout.html.twig" %}
|
1
wiki/template/views/wiki/new.html.twig
Normal file
1
wiki/template/views/wiki/new.html.twig
Normal file
@ -0,0 +1 @@
|
|||||||
|
{% extends "layout.html.twig" %}
|
5
wiki/template/views/wiki/show.html.twig
Normal file
5
wiki/template/views/wiki/show.html.twig
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{% extends "layout.html.twig" %}
|
||||||
|
{% block middle %}
|
||||||
|
<h1>{{ term.Name }}</h1>
|
||||||
|
{{ revision.Text }}
|
||||||
|
{% endblock %}
|
1
wiki/templates/loader.go
Normal file
1
wiki/templates/loader.go
Normal file
@ -0,0 +1 @@
|
|||||||
|
package templates
|
Loading…
Reference in New Issue
Block a user