Changed tags to allow same-name taggs with different categories, added tag list
This commit is contained in:
@@ -52,7 +52,7 @@ func listFiltered(category model.PageCategory) wrouter.FunctionHandlerFunc {
|
||||
vm := viewmodel.PageList{}
|
||||
|
||||
if tagName != "" {
|
||||
tag, err := model.FindTag("name", tagName)
|
||||
tag, err := model.FindTag("name", tagName, "")
|
||||
if err != nil {
|
||||
response.Text(w, 404, err.Error())
|
||||
return true
|
||||
@@ -79,11 +79,53 @@ func listFiltered(category model.PageCategory) wrouter.FunctionHandlerFunc {
|
||||
}
|
||||
}
|
||||
|
||||
func listTagged(tagType string) wrouter.FunctionHandlerFunc {
|
||||
return func(path string, w http.ResponseWriter, req *http.Request, user *auth.User) bool {
|
||||
var err error
|
||||
|
||||
if req.Method != "GET" || strings.LastIndex(req.URL.Path, "/") >= len(path) {
|
||||
return false
|
||||
}
|
||||
|
||||
tagName := strings.Replace(req.URL.Path[len(path):], "_", " ", -1)
|
||||
|
||||
vm := viewmodel.PageList{}
|
||||
|
||||
if tagName == "" {
|
||||
return false
|
||||
}
|
||||
|
||||
tag, err := model.FindTag("name", tagName, tagType)
|
||||
if err != nil {
|
||||
response.Text(w, 404, err.Error())
|
||||
return true
|
||||
}
|
||||
|
||||
vm.ActiveTag = *tag
|
||||
vm.Headers, err = model.ListHeadersByTag("", tag)
|
||||
|
||||
vm.Categories = model.PageCategories
|
||||
vm.Setup(user)
|
||||
|
||||
if err != nil {
|
||||
response.Text(w, 500, err.Error())
|
||||
return true
|
||||
}
|
||||
|
||||
view.Render(w, "index", 200, vm)
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
ListController.Function("/", listIndex)
|
||||
|
||||
ListController.Function("/", listFiltered(model.PageCategory{Key: ""}))
|
||||
for _, category := range model.PageCategories {
|
||||
ListController.Function(fmt.Sprintf("/%s/", strings.ToLower(category.Plural)), listFiltered(category))
|
||||
}
|
||||
|
||||
for _, tagType := range model.TagTypes {
|
||||
ListController.Function(fmt.Sprintf("/%s/", strings.ToLower(tagType)), listTagged(tagType))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"git.aiterp.net/AiteRP/aitestory/view"
|
||||
"git.aiterp.net/AiteRP/aitestory/viewmodel"
|
||||
|
||||
"git.aiterp.net/AiteRP/aitestory/model"
|
||||
"git.aiterp.net/gisle/wrouter"
|
||||
"git.aiterp.net/gisle/wrouter/auth"
|
||||
)
|
||||
|
||||
// TagController serves and handles the tag managment pages
|
||||
var TagController = wrouter.Router{}
|
||||
|
||||
func tagList(path string, w http.ResponseWriter, req *http.Request, user *auth.User) bool {
|
||||
//var err error
|
||||
if (req.Method != "GET" && req.Method != "POST") || len(req.URL.Path) > len(path) {
|
||||
return false
|
||||
}
|
||||
|
||||
tl := viewmodel.TagList{}
|
||||
tl.Tags, _ = model.ListTags()
|
||||
tl.Setup(user)
|
||||
|
||||
view.Render(w, "tags/list", 200, tl)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func init() {
|
||||
TagController.Function("/", tagList)
|
||||
}
|
||||
Reference in New Issue
Block a user