Browse Source

Return left sidebar, optimize, sub menu

Vova Tkach 6 years ago
parent
commit
aa72b92cdd
3 changed files with 75 additions and 7 deletions
  1. 7 1
      modules/module_index.go
  2. 3 3
      modules/module_some.go
  3. 65 3
      modules/modules.go

+ 7 - 1
modules/module_index.go

@@ -8,6 +8,7 @@ import (
 	"os"
 	"os"
 	"strconv"
 	"strconv"
 
 
+	"golang-fave/assets"
 	"golang-fave/consts"
 	"golang-fave/consts"
 	"golang-fave/engine/wrapper"
 	"golang-fave/engine/wrapper"
 	"golang-fave/utils"
 	"golang-fave/utils"
@@ -19,6 +20,11 @@ func (this *Modules) RegisterModule_Index() *Module {
 		Mount:  "index",
 		Mount:  "index",
 		Name:   "Pages",
 		Name:   "Pages",
 		Order:  0,
 		Order:  0,
+		Icon:   assets.SysSvgIconPage,
+		Sub: &[]MISub{
+			{Mount: "default", Name: "List of pages", Icon: assets.SysSvgIconList},
+			{Mount: "add", Name: "Add new page", Icon: assets.SysSvgIconPlus},
+		},
 	}, func(wrap *wrapper.Wrapper) {
 	}, func(wrap *wrapper.Wrapper) {
 		// Front-end
 		// Front-end
 		wrap.RenderFrontEnd("index", consts.TmplDataModIndex{
 		wrap.RenderFrontEnd("index", consts.TmplDataModIndex{
@@ -35,7 +41,7 @@ func (this *Modules) RegisterModule_Index() *Module {
 		})
 		})
 	}, func(wrap *wrapper.Wrapper) (string, string, string) {
 	}, func(wrap *wrapper.Wrapper) (string, string, string) {
 		// Back-end
 		// Back-end
-		return "1", "Index", "Index Sidebar"
+		return this.getSidebarModules(wrap), "Index", "Index Sidebar"
 	})
 	})
 }
 }
 
 

+ 3 - 3
modules/module_some.go

@@ -12,7 +12,7 @@ func (this *Modules) RegisterModule_Some() *Module {
 		Order:  1,
 		Order:  1,
 	}, nil, func(wrap *wrapper.Wrapper) (string, string, string) {
 	}, nil, func(wrap *wrapper.Wrapper) (string, string, string) {
 		// Back-end
 		// Back-end
-		return "2", "Some", "Some Sidebar"
+		return this.getSidebarModules(wrap), "Some", "Some Sidebar"
 	})
 	})
 }
 }
 
 
@@ -24,7 +24,7 @@ func (this *Modules) RegisterModule_More() *Module {
 		Order:  2,
 		Order:  2,
 	}, nil, func(wrap *wrapper.Wrapper) (string, string, string) {
 	}, nil, func(wrap *wrapper.Wrapper) (string, string, string) {
 		// Back-end
 		// Back-end
-		return "3", "More", "More Sidebar"
+		return this.getSidebarModules(wrap), "More", "More Sidebar"
 	})
 	})
 }
 }
 
 
@@ -37,6 +37,6 @@ func (this *Modules) RegisterModule_System() *Module {
 		System: true,
 		System: true,
 	}, nil, func(wrap *wrapper.Wrapper) (string, string, string) {
 	}, nil, func(wrap *wrapper.Wrapper) (string, string, string) {
 		// Back-end
 		// Back-end
-		return "4", "System", "System Sidebar"
+		return this.getSidebarModules(wrap), "System", "System Sidebar"
 	})
 	})
 }
 }

+ 65 - 3
modules/modules.go

@@ -13,6 +13,12 @@ import (
 	"golang-fave/utils"
 	"golang-fave/utils"
 )
 )
 
 
+type MISub struct {
+	Mount string
+	Name  string
+	Icon  string
+}
+
 type MInfo struct {
 type MInfo struct {
 	Id     string
 	Id     string
 	WantDB bool
 	WantDB bool
@@ -20,6 +26,8 @@ type MInfo struct {
 	Name   string
 	Name   string
 	Order  int
 	Order  int
 	System bool
 	System bool
+	Icon   string
+	Sub    *[]MISub
 }
 }
 
 
 type Module struct {
 type Module struct {
@@ -110,11 +118,11 @@ func (this *Modules) getCurrentModule(wrap *wrapper.Wrapper, backend bool) (*Mod
 	return mod, modCurr
 	return mod, modCurr
 }
 }
 
 
-func (this *Modules) getNavMenuModules(wrap *wrapper.Wrapper, sys bool) string {
+func (this *Modules) getModulesList(wrap *wrapper.Wrapper, sys bool, all bool) []*MInfo {
 	list := make([]*MInfo, 0)
 	list := make([]*MInfo, 0)
 	for _, mod := range this.mods {
 	for _, mod := range this.mods {
 		if mod.Back != nil {
 		if mod.Back != nil {
-			if mod.Info.System == sys {
+			if mod.Info.System == sys || all {
 				list = append(list, &mod.Info)
 				list = append(list, &mod.Info)
 			}
 			}
 		}
 		}
@@ -122,7 +130,37 @@ func (this *Modules) getNavMenuModules(wrap *wrapper.Wrapper, sys bool) string {
 	sort.Slice(list, func(i, j int) bool {
 	sort.Slice(list, func(i, j int) bool {
 		return list[i].Order < list[j].Order
 		return list[i].Order < list[j].Order
 	})
 	})
-	html := ""
+	return list
+}
+
+func (this *Modules) getSidebarModuleSubMenu(wrap *wrapper.Wrapper, mod *MInfo) string {
+	html := ``
+	if mod.Sub != nil {
+		for _, item := range *mod.Sub {
+			class := ""
+			if (item.Mount == "default" && len(wrap.UrlArgs) <= 1) || (len(wrap.UrlArgs) >= 2 && item.Mount == wrap.UrlArgs[1]) {
+				class = " active"
+			}
+			icon := item.Icon
+			if icon == "" {
+				icon = assets.SysSvgIconGear
+			}
+			href := "/cp/" + mod.Mount + "/" + item.Mount + "/"
+			if mod.Mount == "index" && item.Mount == "default" {
+				href = "/cp/"
+			}
+			html += `<li class="nav-item` + class + `"><a class="nav-link" href="` + href + `">` + icon + item.Name + `</a></li>`
+		}
+		if html != "" {
+			html = `<ul class="nav flex-column">` + html + `</ul>`
+		}
+	}
+	return html
+}
+
+func (this *Modules) getNavMenuModules(wrap *wrapper.Wrapper, sys bool) string {
+	html := ``
+	list := this.getModulesList(wrap, sys, false)
 	for _, mod := range list {
 	for _, mod := range list {
 		class := ""
 		class := ""
 		if mod.Mount == wrap.CurrModule {
 		if mod.Mount == wrap.CurrModule {
@@ -133,6 +171,30 @@ func (this *Modules) getNavMenuModules(wrap *wrapper.Wrapper, sys bool) string {
 	return html
 	return html
 }
 }
 
 
+func (this *Modules) getSidebarModules(wrap *wrapper.Wrapper) string {
+	html := `<ul class="nav flex-column">`
+	list := this.getModulesList(wrap, false, true)
+	for _, mod := range list {
+		class := ""
+		submenu := ""
+		if mod.Mount == wrap.CurrModule {
+			class = " active"
+			submenu = this.getSidebarModuleSubMenu(wrap, mod)
+		}
+		icon := mod.Icon
+		if icon == "" {
+			icon = assets.SysSvgIconGear
+		}
+		href := "/cp/" + mod.Mount + "/"
+		if mod.Mount == "index" {
+			href = "/cp/"
+		}
+		html += `<li class="nav-item` + class + `"><a class="nav-link" href="` + href + `">` + icon + mod.Name + `</a>` + submenu + `</li>`
+	}
+	html += `</ul>`
+	return html
+}
+
 func New() *Modules {
 func New() *Modules {
 	m := Modules{
 	m := Modules{
 		mods: map[string]*Module{},
 		mods: map[string]*Module{},