From 5d6c7d32d6e4f17c496a07ba0eb809d4f7179937 Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 25 Sep 2023 14:56:02 +0800 Subject: [PATCH] [add] page soruce structure --- sui/storages/local/local_test.go | 14 ++++-- sui/storages/local/page.go | 77 +++++++++++++++++++++++++++++ sui/storages/local/page_test.go | 62 +++++++++++++++++++++++ sui/storages/local/template.go | 72 --------------------------- sui/storages/local/template_test.go | 61 ----------------------- 5 files changed, 149 insertions(+), 137 deletions(-) create mode 100644 sui/storages/local/page_test.go diff --git a/sui/storages/local/local_test.go b/sui/storages/local/local_test.go index b641f258..fd166db5 100644 --- a/sui/storages/local/local_test.go +++ b/sui/storages/local/local_test.go @@ -18,15 +18,15 @@ func TestGetTemplates(t *testing.T) { t.Fatalf("GetTemplates error: %v", err) } - if len(dempTmpls) < 2 { + if len(dempTmpls) < 3 { t.Fatalf("The demo templates less than %v", len(dempTmpls)) } assert.Equal(t, "tech-blue", dempTmpls[0].(*Template).ID) - assert.Equal(t, "TECH-BLUE", dempTmpls[0].(*Template).Name) - assert.Equal(t, []string{}, dempTmpls[0].(*Template).Screenshots) + assert.Equal(t, "Tech Blue DEMO", dempTmpls[0].(*Template).Name) + assert.Equal(t, true, len(dempTmpls[1].(*Template).Screenshots) > 0) assert.Equal(t, 1, dempTmpls[0].(*Template).Version) - assert.Equal(t, "", dempTmpls[0].(*Template).Descrption) + assert.Equal(t, "Tech Blue DEMO", dempTmpls[0].(*Template).Descrption) assert.Equal(t, "website-ai", dempTmpls[1].(*Template).ID) assert.Equal(t, "Website DEMO", dempTmpls[1].(*Template).Name) @@ -34,6 +34,12 @@ func TestGetTemplates(t *testing.T) { assert.Equal(t, 2, dempTmpls[1].(*Template).Version) assert.Equal(t, "AI Website DEMO", dempTmpls[1].(*Template).Descrption) + assert.Equal(t, "wechat-web", dempTmpls[2].(*Template).ID) + assert.Equal(t, "WECHAT-WEB", dempTmpls[2].(*Template).Name) + assert.Equal(t, []string{}, dempTmpls[2].(*Template).Screenshots) + assert.Equal(t, 1, dempTmpls[2].(*Template).Version) + assert.Equal(t, "", dempTmpls[2].(*Template).Descrption) + } func TestGetTemplate(t *testing.T) { diff --git a/sui/storages/local/page.go b/sui/storages/local/page.go index 0c5772a6..023cc8ad 100644 --- a/sui/storages/local/page.go +++ b/sui/storages/local/page.go @@ -1,5 +1,82 @@ package local +import ( + "fmt" + "path/filepath" + "strings" + + "github.com/yaoapp/kun/log" + "github.com/yaoapp/yao/sui/core" +) + +// Pages get the pages +func (tmpl *Template) Pages() ([]core.IPage, error) { + + exts := []string{"*.sui", "*.html", "*.htm", "*.page"} + pages := []core.IPage{} + tmpl.local.fs.Walk(tmpl.Root, func(root, file string, isdir bool) error { + name := filepath.Base(file) + if isdir { + if strings.HasPrefix(name, "__") { + return filepath.SkipDir + } + return nil + } + + if strings.HasPrefix(name, "__") { + return nil + } + + page, err := tmpl.getPageFrom(file) + if err != nil { + log.Error("Get page error: %v", err) + return nil + } + + pages = append(pages, page) + return nil + }, exts...) + + return pages, nil +} + +// Page get the page +func (tmpl *Template) Page(route string) (core.IPage, error) { + path := filepath.Join(tmpl.Root, route) + exts := []string{".sui", ".html", ".htm", ".page"} + for _, ext := range exts { + file := fmt.Sprintf("%s%s", path, ext) + if exist, _ := tmpl.local.fs.Exists(file); exist { + return tmpl.getPageFrom(file) + } + } + return nil, fmt.Errorf("Page %s not found", route) +} + +func (tmpl *Template) getPageFrom(path string) (core.IPage, error) { + route := tmpl.getPageRoute(path) + return tmpl.getPage(route, path) +} + +func (tmpl *Template) getPage(route, file string) (core.IPage, error) { + root := filepath.Dir(file) + return &Page{ + tmpl: tmpl, + Page: &core.Page{ + Route: route, + Root: root, + Codes: core.SourceCodes{ + HTML: core.Source{File: fmt.Sprintf("%s%s", route, filepath.Ext(file))}, + CSS: core.Source{File: fmt.Sprintf("%s.css", route)}, + JS: core.Source{File: fmt.Sprintf("%s.js", route)}, + DATA: core.Source{File: fmt.Sprintf("%s.json", route)}, + TS: core.Source{File: fmt.Sprintf("%s.ts", route)}, + LESS: core.Source{File: fmt.Sprintf("%s.less", route)}, + }, + }, + }, nil +} + // Get get the page func (page *Page) Get() error { return nil diff --git a/sui/storages/local/page_test.go b/sui/storages/local/page_test.go new file mode 100644 index 00000000..7666d884 --- /dev/null +++ b/sui/storages/local/page_test.go @@ -0,0 +1,62 @@ +package local + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestTemplatePages(t *testing.T) { + tests := prepare(t) + defer clean() + + tmpl, err := tests.Demo.GetTemplate("website-ai") + if err != nil { + t.Fatalf("GetTemplate error: %v", err) + } + + pages, err := tmpl.Pages() + if err != nil { + t.Fatalf("Pages error: %v", err) + } + + if len(pages) < 1 { + t.Fatalf("Pages error: %v", len(pages)) + } + + assert.Equal(t, "/index", pages[0].(*Page).Route) + assert.Equal(t, "/templates/website-ai", pages[0].(*Page).Root) + assert.Equal(t, "/index.css", pages[0].(*Page).Codes.CSS.File) + assert.Equal(t, "/index.html", pages[0].(*Page).Codes.HTML.File) + assert.Equal(t, "/index.js", pages[0].(*Page).Codes.JS.File) + assert.Equal(t, "/index.less", pages[0].(*Page).Codes.LESS.File) + assert.Equal(t, "/index.ts", pages[0].(*Page).Codes.TS.File) + assert.Equal(t, "/index.json", pages[0].(*Page).Codes.DATA.File) +} + +func TestTemplatePage(t *testing.T) { + + tests := prepare(t) + defer clean() + + tmpl, err := tests.Demo.GetTemplate("website-ai") + if err != nil { + t.Fatalf("GetTemplate error: %v", err) + } + + page, err := tmpl.Page("/index") + if err != nil { + t.Fatalf("Page error: %v", err) + } + assert.Equal(t, "/index", page.(*Page).Route) + assert.Equal(t, "/templates/website-ai", page.(*Page).Root) + assert.Equal(t, "/index.css", page.(*Page).Codes.CSS.File) + assert.Equal(t, "/index.html", page.(*Page).Codes.HTML.File) + assert.Equal(t, "/index.js", page.(*Page).Codes.JS.File) + assert.Equal(t, "/index.less", page.(*Page).Codes.LESS.File) + assert.Equal(t, "/index.ts", page.(*Page).Codes.TS.File) + assert.Equal(t, "/index.json", page.(*Page).Codes.DATA.File) + + _, err = tmpl.Page("/the/page/could/not/be/found") + assert.Contains(t, err.Error(), "Page /the/page/could/not/be/found not found") +} diff --git a/sui/storages/local/template.go b/sui/storages/local/template.go index f819d238..e29dbfc1 100644 --- a/sui/storages/local/template.go +++ b/sui/storages/local/template.go @@ -1,12 +1,8 @@ package local import ( - "fmt" "path/filepath" "strings" - - "github.com/yaoapp/kun/log" - "github.com/yaoapp/yao/sui/core" ) // Get get the template @@ -19,74 +15,6 @@ func (tmpl *Template) Save() error { return nil } -// Pages get the pages -func (tmpl *Template) Pages() ([]core.IPage, error) { - - exts := []string{"*.sui", "*.html", "*.htm", "*.page"} - pages := []core.IPage{} - tmpl.local.fs.Walk(tmpl.Root, func(root, file string, isdir bool) error { - name := filepath.Base(file) - if isdir { - if strings.HasPrefix(name, "__") { - return filepath.SkipDir - } - return nil - } - - if strings.HasPrefix(name, "__") { - return nil - } - - page, err := tmpl.getPageFrom(file) - if err != nil { - log.Error("Get page error: %v", err) - return nil - } - - pages = append(pages, page) - return nil - }, exts...) - - return pages, nil -} - -// Page get the page -func (tmpl *Template) Page(route string) (core.IPage, error) { - path := filepath.Join(tmpl.Root, route) - exts := []string{".sui", ".html", ".htm", ".page"} - for _, ext := range exts { - file := fmt.Sprintf("%s%s", path, ext) - if exist, _ := tmpl.local.fs.Exists(file); exist { - return tmpl.getPageFrom(file) - } - } - return nil, fmt.Errorf("Page %s not found", route) -} - -func (tmpl *Template) getPageFrom(path string) (core.IPage, error) { - route := tmpl.getPageRoute(path) - return tmpl.getPage(route, path) -} - -func (tmpl *Template) getPage(route, file string) (core.IPage, error) { - root := filepath.Dir(file) - return &Page{ - tmpl: tmpl, - Page: &core.Page{ - Route: route, - Root: root, - Codes: core.SourceCodes{ - HTML: core.Source{File: fmt.Sprintf("%s%s", route, filepath.Ext(file))}, - CSS: core.Source{File: fmt.Sprintf("%s.css", route)}, - JS: core.Source{File: fmt.Sprintf("%s.js", route)}, - DATA: core.Source{File: fmt.Sprintf("%s.json", route)}, - TS: core.Source{File: fmt.Sprintf("%s.ts", route)}, - LESS: core.Source{File: fmt.Sprintf("%s.less", route)}, - }, - }, - }, nil -} - func (tmpl *Template) getPageRoute(path string) string { return strings.TrimSuffix(path[len(tmpl.Root):], filepath.Ext(path)) } diff --git a/sui/storages/local/template_test.go b/sui/storages/local/template_test.go index 7666d884..469c3dc0 100644 --- a/sui/storages/local/template_test.go +++ b/sui/storages/local/template_test.go @@ -1,62 +1 @@ package local - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestTemplatePages(t *testing.T) { - tests := prepare(t) - defer clean() - - tmpl, err := tests.Demo.GetTemplate("website-ai") - if err != nil { - t.Fatalf("GetTemplate error: %v", err) - } - - pages, err := tmpl.Pages() - if err != nil { - t.Fatalf("Pages error: %v", err) - } - - if len(pages) < 1 { - t.Fatalf("Pages error: %v", len(pages)) - } - - assert.Equal(t, "/index", pages[0].(*Page).Route) - assert.Equal(t, "/templates/website-ai", pages[0].(*Page).Root) - assert.Equal(t, "/index.css", pages[0].(*Page).Codes.CSS.File) - assert.Equal(t, "/index.html", pages[0].(*Page).Codes.HTML.File) - assert.Equal(t, "/index.js", pages[0].(*Page).Codes.JS.File) - assert.Equal(t, "/index.less", pages[0].(*Page).Codes.LESS.File) - assert.Equal(t, "/index.ts", pages[0].(*Page).Codes.TS.File) - assert.Equal(t, "/index.json", pages[0].(*Page).Codes.DATA.File) -} - -func TestTemplatePage(t *testing.T) { - - tests := prepare(t) - defer clean() - - tmpl, err := tests.Demo.GetTemplate("website-ai") - if err != nil { - t.Fatalf("GetTemplate error: %v", err) - } - - page, err := tmpl.Page("/index") - if err != nil { - t.Fatalf("Page error: %v", err) - } - assert.Equal(t, "/index", page.(*Page).Route) - assert.Equal(t, "/templates/website-ai", page.(*Page).Root) - assert.Equal(t, "/index.css", page.(*Page).Codes.CSS.File) - assert.Equal(t, "/index.html", page.(*Page).Codes.HTML.File) - assert.Equal(t, "/index.js", page.(*Page).Codes.JS.File) - assert.Equal(t, "/index.less", page.(*Page).Codes.LESS.File) - assert.Equal(t, "/index.ts", page.(*Page).Codes.TS.File) - assert.Equal(t, "/index.json", page.(*Page).Codes.DATA.File) - - _, err = tmpl.Page("/the/page/could/not/be/found") - assert.Contains(t, err.Error(), "Page /the/page/could/not/be/found not found") -}