From 1aade992b21b1e16a1e97e6d2627dec2add6732a Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 29 Sep 2023 12:44:05 +0800 Subject: [PATCH] [add] active & extend support --- sui/api/process.go | 3 ++- sui/core/interfaces.go | 5 ++++- sui/core/page.go | 5 +++++ sui/core/types.go | 2 ++ sui/storages/local/page.go | 16 ++++++++++++---- sui/storages/local/page_test.go | 2 +- 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/sui/api/process.go b/sui/api/process.go index 18d28e2b..890166eb 100644 --- a/sui/api/process.go +++ b/sui/api/process.go @@ -171,7 +171,8 @@ func PageTree(process *process.Process) interface{} { exception.New(err.Error(), 500).Throw() } - tree, err := tmpl.PageTree() + route := route(process, 2) + tree, err := tmpl.PageTree(route) if err != nil { exception.New(err.Error(), 500).Throw() } diff --git a/sui/core/interfaces.go b/sui/core/interfaces.go index ea514952..aa017fff 100644 --- a/sui/core/interfaces.go +++ b/sui/core/interfaces.go @@ -13,7 +13,7 @@ type SUI interface { // ITemplate is the interface for the ITemplate type ITemplate interface { Pages() ([]IPage, error) - PageTree() ([]*PageTreeNode, error) + PageTree(route string) ([]*PageTreeNode, error) Page(route string) (IPage, error) Blocks() ([]IBlock, error) @@ -30,6 +30,9 @@ type ITemplate interface { // IPage is the interface for the page type IPage interface { Load() error + + Get() *Page + EditorRender(request *Request) (*ResponseEditor, error) EditorPageSource() ResponseSource EditorScriptSource() ResponseSource diff --git a/sui/core/page.go b/sui/core/page.go index 68138f2c..c113f2b8 100644 --- a/sui/core/page.go +++ b/sui/core/page.go @@ -1,5 +1,10 @@ package core +// Get get the base info +func (page *Page) Get() *Page { + return page +} + // GetHTML get the html func (page *Page) GetHTML() {} diff --git a/sui/core/types.go b/sui/core/types.go index 67dac148..f7a36b2e 100644 --- a/sui/core/types.go +++ b/sui/core/types.go @@ -23,6 +23,8 @@ type PageTreeNode struct { IsDir bool `json:"is_dir,omitempty"` Children []*PageTreeNode `json:"children,omitempty"` IPage IPage `json:"page,omitempty"` + Expand bool `json:"expand,omitempty"` + Active bool `json:"active,omitempty"` } // Component is the struct for the component diff --git a/sui/storages/local/page.go b/sui/storages/local/page.go index ed3fa08c..102d979e 100644 --- a/sui/storages/local/page.go +++ b/sui/storages/local/page.go @@ -41,11 +41,13 @@ func (tmpl *Template) Pages() ([]core.IPage, error) { } // PageTree gets the page tree. -func (tmpl *Template) PageTree() ([]*core.PageTreeNode, error) { +func (tmpl *Template) PageTree(route string) ([]*core.PageTreeNode, error) { + exts := []string{"*.sui", "*.html", "*.htm", "*.page"} rootNode := &core.PageTreeNode{ Name: tmpl.Name, IsDir: true, + Expand: true, Children: []*core.PageTreeNode{}, // 初始为空的切片 } @@ -82,6 +84,7 @@ func (tmpl *Template) PageTree() ([]*core.PageTreeNode, error) { Name: dir, IsDir: true, Children: []*core.PageTreeNode{}, + Expand: true, } currentDir.Children = append(currentDir.Children, newDir) currentDir = newDir @@ -100,6 +103,9 @@ func (tmpl *Template) PageTree() ([]*core.PageTreeNode, error) { return err } + pageInfo := page.Get() + active := route == pageInfo.Route + // Attach the page to the appropriate directory node. dirs := strings.Split(relPath, string(filepath.Separator)) currentDir := rootNode @@ -112,10 +118,12 @@ func (tmpl *Template) PageTree() ([]*core.PageTreeNode, error) { } } + currentDir.Expand = active currentDir.Children = append(currentDir.Children, &core.PageTreeNode{ - Name: tmpl.getPageBase(currentDir.Name), - IsDir: false, - IPage: page, + Name: tmpl.getPageBase(currentDir.Name), + IsDir: false, + IPage: page, + Active: active, }) return nil diff --git a/sui/storages/local/page_test.go b/sui/storages/local/page_test.go index ff322622..be9197b4 100644 --- a/sui/storages/local/page_test.go +++ b/sui/storages/local/page_test.go @@ -53,7 +53,7 @@ func TestTemplatePageTree(t *testing.T) { t.Fatalf("GetTemplate error: %v", err) } - pages, err := tmpl.PageTree() + pages, err := tmpl.PageTree("/page/[id]") if err != nil { t.Fatalf("Pages error: %v", err) }