1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2025-10-31 15:43:00 +00:00

Categories, views: Unexport stuff

This commit is contained in:
Timur Ismagilov
2022-04-02 00:43:11 +03:00
parent 686c329615
commit e69c1dc2f9
3 changed files with 24 additions and 16 deletions

View File

@@ -1,4 +1,4 @@
// Package categories provides category management. All operations in this package are mutexed. // Package categories provides category management.
// //
// As per the long pondering, this is how categories (cats for short) // As per the long pondering, this is how categories (cats for short)
// work in Mycorrhiza: // work in Mycorrhiza:
@@ -12,12 +12,19 @@
// cat operations are not mentioned on the recent changes page. // cat operations are not mentioned on the recent changes page.
// - For cat A, if there are 0 hyphae in the cat, cat A does not // - For cat A, if there are 0 hyphae in the cat, cat A does not
// exist. If there are 1 or more hyphae in the cat, cat A exists. // exist. If there are 1 or more hyphae in the cat, cat A exists.
//
// List of things to do with categories later:
//
// - Forbid / in cat names.
// - Rename categories.
// - Delete categories.
// - Bind hyphae.
package categories package categories
import "sync" import "sync"
// List returns names of all categories. // listOfCategories returns names of all categories.
func List() (categoryList []string) { func listOfCategories() (categoryList []string) {
mutex.RLock() mutex.RLock()
for cat, _ := range categoryToHyphae { for cat, _ := range categoryToHyphae {
categoryList = append(categoryList, cat) categoryList = append(categoryList, cat)
@@ -26,8 +33,8 @@ func List() (categoryList []string) {
return categoryList return categoryList
} }
// WithHypha returns what categories have the given hypha. The hypha name must be canonical. // categoriesWithHypha returns what categories have the given hypha. The hypha name must be canonical.
func WithHypha(hyphaName string) (categoryList []string) { func categoriesWithHypha(hyphaName string) (categoryList []string) {
mutex.RLock() mutex.RLock()
defer mutex.RUnlock() defer mutex.RUnlock()
if node, ok := hyphaToCategories[hyphaName]; ok { if node, ok := hyphaToCategories[hyphaName]; ok {
@@ -37,8 +44,8 @@ func WithHypha(hyphaName string) (categoryList []string) {
} }
} }
// Contents returns what hyphae are in the category. If the returned slice is empty, the category does not exist, and vice versa. The category name must be canonical. // hyphaeInCategory returns what hyphae are in the category. If the returned slice is empty, the category does not exist, and vice versa. The category name must be canonical.
func Contents(catName string) (hyphaList []string) { func hyphaeInCategory(catName string) (hyphaList []string) {
mutex.RLock() mutex.RLock()
defer mutex.RUnlock() defer mutex.RUnlock()
if node, ok := categoryToHyphae[catName]; ok { if node, ok := categoryToHyphae[catName]; ok {
@@ -50,8 +57,8 @@ func Contents(catName string) (hyphaList []string) {
var mutex sync.RWMutex var mutex sync.RWMutex
// AddHyphaToCategory adds the hypha to the category and updates the records on the disk. If the hypha is already in the category, nothing happens. Pass canonical names. // addHyphaToCategory adds the hypha to the category and updates the records on the disk. If the hypha is already in the category, nothing happens. Pass canonical names.
func AddHyphaToCategory(hyphaName, catName string) { func addHyphaToCategory(hyphaName, catName string) {
mutex.Lock() mutex.Lock()
if node, ok := hyphaToCategories[hyphaName]; ok { if node, ok := hyphaToCategories[hyphaName]; ok {
node.storeCategory(catName) node.storeCategory(catName)
@@ -68,8 +75,8 @@ func AddHyphaToCategory(hyphaName, catName string) {
go saveToDisk() go saveToDisk()
} }
// RemoveHyphaFromCategory removes the hypha from the category and updates the records on the disk. If the hypha is not in the category, nothing happens. Pass canonical names. // removeHyphaFromCategory removes the hypha from the category and updates the records on the disk. If the hypha is not in the category, nothing happens. Pass canonical names.
func RemoveHyphaFromCategory(hyphaName, catName string) { func removeHyphaFromCategory(hyphaName, catName string) {
mutex.Lock() mutex.Lock()
if node, ok := hyphaToCategories[hyphaName]; ok { if node, ok := hyphaToCategories[hyphaName]; ok {
node.removeCategory(catName) node.removeCategory(catName)

View File

@@ -11,6 +11,7 @@ import (
"strings" "strings"
) )
// InitCategoriesHandlers initializes HTTP handlers for the given router. Call somewhere in package web.
func InitCategoriesHandlers(r *mux.Router) { func InitCategoriesHandlers(r *mux.Router) {
r.PathPrefix("/add-to-category").HandlerFunc(handlerAddToCategory).Methods("POST") r.PathPrefix("/add-to-category").HandlerFunc(handlerAddToCategory).Methods("POST")
r.PathPrefix("/remove-from-category").HandlerFunc(handlerRemoveFromCategory).Methods("POST") r.PathPrefix("/remove-from-category").HandlerFunc(handlerRemoveFromCategory).Methods("POST")
@@ -51,7 +52,7 @@ func handlerRemoveFromCategory(w http.ResponseWriter, rq *http.Request) {
http.Redirect(w, rq, redirectTo, http.StatusSeeOther) http.Redirect(w, rq, redirectTo, http.StatusSeeOther)
return return
} }
RemoveHyphaFromCategory(hyphaName, catName) removeHyphaFromCategory(hyphaName, catName)
http.Redirect(w, rq, redirectTo, http.StatusSeeOther) http.Redirect(w, rq, redirectTo, http.StatusSeeOther)
} }
@@ -71,6 +72,6 @@ func handlerAddToCategory(w http.ResponseWriter, rq *http.Request) {
http.Redirect(w, rq, redirectTo, http.StatusSeeOther) http.Redirect(w, rq, redirectTo, http.StatusSeeOther)
return return
} }
AddHyphaToCategory(hyphaName, catName) addHyphaToCategory(hyphaName, catName)
http.Redirect(w, rq, redirectTo, http.StatusSeeOther) http.Redirect(w, rq, redirectTo, http.StatusSeeOther)
} }

View File

@@ -63,7 +63,7 @@ func CategoryCard(meta viewutil.Meta, hyphaName string) string {
var buf strings.Builder var buf strings.Builder
err := viewCardChain.Get(meta).ExecuteTemplate(&buf, "category card", cardData{ err := viewCardChain.Get(meta).ExecuteTemplate(&buf, "category card", cardData{
hyphaName, hyphaName,
WithHypha(hyphaName), categoriesWithHypha(hyphaName),
meta.U.CanProceed("add-to-category"), meta.U.CanProceed("add-to-category"),
}) })
if err != nil { if err != nil {
@@ -87,7 +87,7 @@ func categoryPage(meta viewutil.Meta, catName string) {
CommonScripts: cfg.CommonScripts, CommonScripts: cfg.CommonScripts,
}, },
CatName: catName, CatName: catName,
Hyphae: Contents(catName), Hyphae: hyphaeInCategory(catName),
GivenPermissionToModify: meta.U.CanProceed("add-to-category"), GivenPermissionToModify: meta.U.CanProceed("add-to-category"),
}); err != nil { }); err != nil {
log.Println(err) log.Println(err)
@@ -106,7 +106,7 @@ func categoryList(meta viewutil.Meta) {
HeaderLinks: cfg.HeaderLinks, HeaderLinks: cfg.HeaderLinks,
CommonScripts: cfg.CommonScripts, CommonScripts: cfg.CommonScripts,
}, },
Categories: List(), Categories: listOfCategories(),
}); err != nil { }); err != nil {
log.Println(err) log.Println(err)
} }