From fdb8f8fa76ff38dd03fb6da41fbb09c8da9f42f4 Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Sun, 10 Jan 2016 20:01:34 -0800 Subject: [PATCH] ui add for filter and search, start of backend for filter --- categories/categories.go | 15 ++++++++++++-- js/funcs.js | 6 +++++- news/news.go | 10 ++++++--- route_handlers.go | 9 ++++++++- templates/layout.html | 29 ++++++++++++++++++++++++++ templates/pages/categories.html | 36 ++++++--------------------------- templates/pages/news.html | 13 ++++++++++++ templates/pages/post.html | 15 +------------- 8 files changed, 82 insertions(+), 51 deletions(-) diff --git a/categories/categories.go b/categories/categories.go index a963e82..0bfc989 100644 --- a/categories/categories.go +++ b/categories/categories.go @@ -15,11 +15,14 @@ type Category struct { Children []*Category } -var CategoriesTree []*Category -var CategoriesFlat map[int]*Category +var CategoriesTree []*Category = nil +var CategoriesFlat map[int]*Category = nil // Cavet: slight cheat. All parents must have Category_id < their children. func LoadCategories(db *sql.DB) { + if CategoriesFlat != nil { + return //already loaded + } CategoriesTree = []*Category{} CategoriesFlat = make(map[int]*Category) @@ -99,6 +102,14 @@ func Delete(db *sql.DB, id int) error { return err } +func GetListOfChildrenIds(id int) []int { + list := []int{id} + for _,category := range CategoriesFlat[id].Children { + list = append(list, GetListOfChildrenIds(category.Id)...) + } + return list +} + func (category *Category) ChangeParent(db *sql.DB, parent *Category) error { var err error if parent == nil { diff --git a/js/funcs.js b/js/funcs.js index 71444ef..915fd0b 100644 --- a/js/funcs.js +++ b/js/funcs.js @@ -21,8 +21,12 @@ $(document).ready( function () { $(".add-category-col").addClass("has-error"); } }); + + $("form.search .filter-category").change(function (e) { + e.target.parentElement.submit(); + }); - $(".category-change-parent").change(function (e) { + $("form.change-parent .category-change-parent").change(function (e) { e.target.parentElement.submit(); }); diff --git a/news/news.go b/news/news.go index e262e73..de15038 100644 --- a/news/news.go +++ b/news/news.go @@ -94,10 +94,14 @@ func Get(db *sql.DB, id int) (*News, error) { } // Load and return in NewsContainer format all the unexported news items -func LoadPage(db *sql.DB, offset, amount int) ([]*News, int, error) { +func LoadPage(db *sql.DB, offset, amount int, categoryFilter []int) ([]*News, int, error) { categories.LoadCategories(db) // required by addContainer - - rows, err := db.Query("SELECT " + SQL_NEWS_FIELDS + " FROM news ORDER BY timestamp DESC LIMIT $1 OFFSET $2", amount, offset) + + where := "" + if categoryFilter != nil { + where = "WHERE id in $3" + } + rows, err := db.Query("SELECT " + SQL_NEWS_FIELDS + " FROM news " + where + " ORDER BY timestamp DESC LIMIT $1 OFFSET $2", amount, offset, categoryFilter) if err != nil { fmt.Println("DB errpr reading LoadPage news: ", err) return nil, 0, err diff --git a/route_handlers.go b/route_handlers.go index 9ea0cbf..17fac36 100644 --- a/route_handlers.go +++ b/route_handlers.go @@ -405,6 +405,7 @@ func categoryDeleteHandler(w http.ResponseWriter, r *http.Request, user *user.Us func newsFormHandler(w http.ResponseWriter, r *http.Request, user *user.User, session *sessions.Session) { flashes := GetFlashes(session) session.Save(r, w) + categories.LoadCategories(db) var offset = 0 var amount = 100 @@ -412,8 +413,14 @@ func newsFormHandler(w http.ResponseWriter, r *http.Request, user *user.User, se if eOffset == nil { offset = amount * argOffset } + + categoryFilterId, cidErr := strconv.Atoi(r.FormValue("category")) + categoryFilter := []int{} + if cidErr == nil { + categories.GetListOfChildrenIds(categoryFilterId) + } - news, count, err := news.LoadPage(db, offset, amount) + news, count, err := news.LoadPage(db, offset, amount, categoryFilter) if err != nil { session.AddFlash("Error loading news", flash_err) } diff --git a/templates/layout.html b/templates/layout.html index 36b107c..227c008 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -80,3 +80,32 @@ {{end}} {{end}} + + + + + +{{define "select-category"}} + +{{end}} + +{{define "option-category"}} + + {{range $child := .category.Children}} + {{template "option-category" dict "category" $child "id" $.id}} + {{end}} +{{end}} \ No newline at end of file diff --git a/templates/pages/categories.html b/templates/pages/categories.html index 6397d0d..9e17b44 100644 --- a/templates/pages/categories.html +++ b/templates/pages/categories.html @@ -6,12 +6,12 @@ {{end}}
-
+
- {{template "select-category" dict "categories" .categories "id" -1}} + {{template "select-category" dict "categories" .categories "id" -1 "fieldName" "parent"}}
{{ .csrfField }} @@ -39,12 +39,13 @@ new category select
-
+ {{ .csrfField }} + {{if $.category.Parent.Valid }} - {{template "select-category" dict "categories" .categories "id" $.category.Parent.Value}} + {{template "select-category" dict "categories" .categories "id" $.category.Parent.Value "fieldName" "parent"}} {{else}} - {{template "select-category" dict "categories" .categories "id" -1}} + {{template "select-category" dict "categories" .categories "id" -1 "fieldName" "parent"}} {{end}}
@@ -55,28 +56,3 @@ new category select {{end}} {{end}} - - -{{define "select-category"}} - -{{end}} - -{{define "option-category"}} - - {{range $child := .category.Children}} - {{template "option-category" dict "category" $child "id" $.id}} - {{end}} -{{end}} \ No newline at end of file diff --git a/templates/pages/news.html b/templates/pages/news.html index a9e2d41..801e5c0 100644 --- a/templates/pages/news.html +++ b/templates/pages/news.html @@ -10,6 +10,19 @@ Drag this bookmarklet to bookmark bar and click anywhere to add a link
+ +
 
+ + {{template "pager" .}} diff --git a/templates/pages/post.html b/templates/pages/post.html index 25e6e21..61539fe 100644 --- a/templates/pages/post.html +++ b/templates/pages/post.html @@ -7,24 +7,11 @@
Link:
Title:
Category:
- + {{template "select-category" dict "categories" .categories "id" $.category_id "fieldName" "category"}}
Notes:
{{ .csrfField }}
-{{end}} - - -{{define "option-category"}} - - {{range $child := .category.Children}} - {{template "option-category" dict "category" $child "category_id" $.category_id}} - {{end}} {{end}} \ No newline at end of file