[add] app icons
This commit is contained in:
parent
16aee0251a
commit
a57220859e
4 changed files with 121 additions and 10 deletions
|
|
@ -70,6 +70,9 @@ func Load(cfg config.Config) error {
|
|||
return err
|
||||
}
|
||||
|
||||
// Load icons
|
||||
dsl.icons(cfg)
|
||||
|
||||
// Apply a language pack
|
||||
if lang.Default != nil {
|
||||
lang.Default.Apply(dsl)
|
||||
|
|
@ -131,6 +134,19 @@ func exportAPI() error {
|
|||
}
|
||||
http.Paths = append(http.Paths, path)
|
||||
|
||||
process = "yao.app.Icons"
|
||||
path = gou.Path{
|
||||
Label: "App Icons",
|
||||
Description: "App Icons",
|
||||
Path: "/icons/:name",
|
||||
Guard: "-",
|
||||
Method: "GET",
|
||||
Process: process,
|
||||
In: []string{"$param.name"},
|
||||
Out: gou.Out{Status: 200},
|
||||
}
|
||||
http.Paths = append(http.Paths, path)
|
||||
|
||||
// api source
|
||||
source, err := jsoniter.Marshal(http)
|
||||
if err != nil {
|
||||
|
|
@ -152,6 +168,21 @@ func exportProcess() {
|
|||
gou.RegisterProcessHandler("yao.app.setting", processSetting)
|
||||
gou.RegisterProcessHandler("yao.app.xgen", processXgen)
|
||||
gou.RegisterProcessHandler("yao.app.menu", processMenu)
|
||||
gou.RegisterProcessHandler("yao.app.icons", processIcons)
|
||||
}
|
||||
|
||||
func processIcons(process *gou.Process) interface{} {
|
||||
process.ValidateArgNums(1)
|
||||
name := process.ArgsString(0)
|
||||
file, err := filepath.Abs(filepath.Join(config.Conf.Root, "icons", name))
|
||||
if err != nil {
|
||||
exception.New(err.Error(), 400).Throw()
|
||||
}
|
||||
content, err := ioutil.ReadFile(file)
|
||||
if err != nil {
|
||||
exception.New(err.Error(), 400).Throw()
|
||||
}
|
||||
return string(content)
|
||||
}
|
||||
|
||||
func processMenu(process *gou.Process) interface{} {
|
||||
|
|
@ -211,19 +242,48 @@ func processXgen(process *gou.Process) interface{} {
|
|||
}
|
||||
|
||||
if admin, has := login.Logins["admin"]; has {
|
||||
layout := map[string]interface{}{}
|
||||
if admin.Layout.Site != "" {
|
||||
layout["site"] = admin.Layout.Site
|
||||
}
|
||||
|
||||
if admin.Layout.Slogan != "" {
|
||||
layout["slogan"] = admin.Layout.Slogan
|
||||
}
|
||||
|
||||
if admin.Layout.Cover != "" {
|
||||
layout["cover"] = admin.Layout.Cover
|
||||
}
|
||||
|
||||
xgenLogin["entry"]["admin"] = admin.Layout.Entry
|
||||
xgenLogin["admin"] = map[string]interface{}{
|
||||
"captcha": "/api/__yao/login/admin/captcha?type=digit",
|
||||
"login": "/api/__yao/login/admin",
|
||||
"layout": layout,
|
||||
}
|
||||
}
|
||||
|
||||
if user, has := login.Logins["user"]; has {
|
||||
layout := map[string]interface{}{}
|
||||
if user.Layout.Site != "" {
|
||||
layout["site"] = user.Layout.Site
|
||||
}
|
||||
|
||||
if user.Layout.Slogan != "" {
|
||||
layout["slogan"] = user.Layout.Slogan
|
||||
}
|
||||
|
||||
if user.Layout.Cover != "" {
|
||||
layout["cover"] = user.Layout.Cover
|
||||
}
|
||||
|
||||
xgenLogin["entry"]["user"] = user.Layout.Entry
|
||||
xgenLogin["user"] = map[string]interface{}{
|
||||
"captcha": "/api/__yao/login/user/captcha?type=digit",
|
||||
"login": "/api/__yao/login/user",
|
||||
"layout": layout,
|
||||
}
|
||||
xgenLogin["layout"] = layout
|
||||
}
|
||||
|
||||
xgenSetting := map[string]interface{}{
|
||||
|
|
@ -237,6 +297,14 @@ func processXgen(process *gou.Process) interface{} {
|
|||
"login": xgenLogin,
|
||||
}
|
||||
|
||||
if Setting.Logo != "" {
|
||||
xgenSetting["logo"] = Setting.Logo
|
||||
}
|
||||
|
||||
if Setting.Favicon != "" {
|
||||
xgenSetting["favicon"] = Setting.Favicon
|
||||
}
|
||||
|
||||
return xgenSetting
|
||||
}
|
||||
|
||||
|
|
@ -264,3 +332,17 @@ func (dsl *DSL) replaceAdminRoot() error {
|
|||
|
||||
return data.ReplaceXGen("\"__yao_admin_root\"", fmt.Sprintf("\"%s\"", root))
|
||||
}
|
||||
|
||||
// icons
|
||||
func (dsl *DSL) icons(cfg config.Config) {
|
||||
|
||||
favicon := filepath.Join(cfg.Root, "icons", "app.ico")
|
||||
if _, err := os.Stat(favicon); err == nil {
|
||||
dsl.Favicon = fmt.Sprintf("/api/__yao/app/icons/app.ico")
|
||||
}
|
||||
|
||||
logo := filepath.Join(cfg.Root, "icons", "app.png")
|
||||
if _, err := os.Stat(logo); err == nil {
|
||||
dsl.Logo = fmt.Sprintf("/api/__yao/app/icons/app.png")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import (
|
|||
"github.com/yaoapp/gou"
|
||||
"github.com/yaoapp/kun/any"
|
||||
"github.com/yaoapp/yao/config"
|
||||
"github.com/yaoapp/yao/flow"
|
||||
"github.com/yaoapp/yao/lang"
|
||||
"github.com/yaoapp/yao/widgets/login"
|
||||
)
|
||||
|
|
@ -86,7 +87,7 @@ func TestExport(t *testing.T) {
|
|||
|
||||
api, has := gou.APIs["widgets.app"]
|
||||
assert.True(t, has)
|
||||
assert.Equal(t, 2, len(api.HTTP.Paths))
|
||||
assert.Equal(t, 3, len(api.HTTP.Paths))
|
||||
|
||||
_, has = gou.ThirdHandlers["yao.app.setting"]
|
||||
assert.True(t, has)
|
||||
|
|
@ -132,12 +133,33 @@ func TestProcessXgen(t *testing.T) {
|
|||
assert.Equal(t, "/x/Table/pet", xgen.Get("login.entry.user"))
|
||||
assert.Equal(t, "/api/__yao/login/user/captcha?type=digit", xgen.Get("login.user.captcha"))
|
||||
assert.Equal(t, "/api/__yao/login/user", xgen.Get("login.user.login"))
|
||||
assert.Equal(t, "/images/login/cover.svg", xgen.Get("login.layout.cover"))
|
||||
assert.Equal(t, "/api/__yao/app/icons/app.ico", xgen.Get("favicon"))
|
||||
assert.Equal(t, "/api/__yao/app/icons/app.png", xgen.Get("logo"))
|
||||
assert.Equal(t, os.Getenv("YAO_ENV"), xgen.Get("mode"))
|
||||
assert.Equal(t, "Demo Application", xgen.Get("name"))
|
||||
assert.Equal(t, true, xgen.Get("optional.hideNotification"))
|
||||
assert.Equal(t, "localStorage", xgen.Get("token"))
|
||||
}
|
||||
|
||||
func TestProcessMenu(t *testing.T) {
|
||||
loadApp(t)
|
||||
res, err := gou.NewProcess("yao.app.Menu").Exec()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
assert.Len(t, res, 2)
|
||||
}
|
||||
|
||||
func TestProcessIcons(t *testing.T) {
|
||||
loadApp(t)
|
||||
res, err := gou.NewProcess("yao.app.Icons", "app.png").Exec()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
assert.Greater(t, len(res.(string)), 10)
|
||||
}
|
||||
|
||||
func loadApp(t *testing.T) {
|
||||
|
||||
os.Setenv("YAO_LANG", "")
|
||||
|
|
@ -148,6 +170,11 @@ func loadApp(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = flow.Load(config.Conf)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = Load(config.Conf)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ type DSL struct {
|
|||
Version string `json:"version,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Theme string `json:"theme,omitempty"`
|
||||
Logo string `json:"logo,omitempty"`
|
||||
Favicon string `json:"favicon,omitempty"`
|
||||
Menu MenuDSL `json:"menu,omitempty"`
|
||||
Optional OptionalDSL `json:"optional,omitempty"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ func TestLoad(t *testing.T) {
|
|||
assert.Equal(t, "yao.login.Admin", Logins["admin"].Action.Process)
|
||||
assert.Equal(t, []string{":payload"}, Logins["admin"].Action.Args)
|
||||
assert.Equal(t, "yao.utils.Captcha", Logins["admin"].Layout.Captcha)
|
||||
assert.Equal(t, "/images/admin-cover.png", Logins["admin"].Layout.Cover)
|
||||
assert.Equal(t, "/images/login/cover.svg", Logins["admin"].Layout.Cover)
|
||||
assert.Equal(t, "/x/Chart/dashboard", Logins["admin"].Layout.Entry)
|
||||
assert.Equal(t, "https://yaoapps.com", Logins["admin"].Layout.Site)
|
||||
assert.Equal(t, "Make Your Dream With Yao App Engine", Logins["admin"].Layout.Slogan)
|
||||
|
|
@ -37,9 +37,9 @@ func TestLoad(t *testing.T) {
|
|||
assert.Equal(t, "scripts.user.Login", Logins["user"].Action.Process)
|
||||
assert.Equal(t, []string{":payload"}, Logins["user"].Action.Args)
|
||||
assert.Equal(t, "yao.utils.Captcha", Logins["user"].Layout.Captcha)
|
||||
assert.Equal(t, "/images/user-cover.png", Logins["user"].Layout.Cover)
|
||||
assert.Equal(t, "/images/login/cover.svg", Logins["user"].Layout.Cover)
|
||||
assert.Equal(t, "/x/Table/pet", Logins["user"].Layout.Entry)
|
||||
assert.Equal(t, "https://yaoapps.com/docs", Logins["user"].Layout.Site)
|
||||
assert.Equal(t, "https://yaoapps.com/doc", Logins["user"].Layout.Site)
|
||||
assert.Equal(t, "Make Your Dream With Yao App Engine", Logins["user"].Layout.Slogan)
|
||||
}
|
||||
|
||||
|
|
@ -59,7 +59,7 @@ func TestLoadHK(t *testing.T) {
|
|||
assert.Equal(t, "yao.login.Admin", Logins["admin"].Action.Process)
|
||||
assert.Equal(t, []string{":payload"}, Logins["admin"].Action.Args)
|
||||
assert.Equal(t, "yao.utils.Captcha", Logins["admin"].Layout.Captcha)
|
||||
assert.Equal(t, "/images/admin-cover.png", Logins["admin"].Layout.Cover)
|
||||
assert.Equal(t, "/images/login/cover.svg", Logins["admin"].Layout.Cover)
|
||||
assert.Equal(t, "/x/Chart/dashboard", Logins["admin"].Layout.Entry)
|
||||
assert.Equal(t, "https://yaoapps.com", Logins["admin"].Layout.Site)
|
||||
assert.Equal(t, "夢想讓我們與眾不同", Logins["admin"].Layout.Slogan)
|
||||
|
|
@ -69,9 +69,9 @@ func TestLoadHK(t *testing.T) {
|
|||
assert.Equal(t, "scripts.user.Login", Logins["user"].Action.Process)
|
||||
assert.Equal(t, []string{":payload"}, Logins["user"].Action.Args)
|
||||
assert.Equal(t, "yao.utils.Captcha", Logins["user"].Layout.Captcha)
|
||||
assert.Equal(t, "/images/user-cover.png", Logins["user"].Layout.Cover)
|
||||
assert.Equal(t, "/images/login/cover.svg", Logins["user"].Layout.Cover)
|
||||
assert.Equal(t, "/x/Table/pet", Logins["user"].Layout.Entry)
|
||||
assert.Equal(t, "https://yaoapps.com/docs", Logins["user"].Layout.Site)
|
||||
assert.Equal(t, "https://yaoapps.com/doc", Logins["user"].Layout.Site)
|
||||
assert.Equal(t, "夢想讓我們與眾不同", Logins["user"].Layout.Slogan)
|
||||
}
|
||||
|
||||
|
|
@ -91,7 +91,7 @@ func TestLoadCN(t *testing.T) {
|
|||
assert.Equal(t, "yao.login.Admin", Logins["admin"].Action.Process)
|
||||
assert.Equal(t, []string{":payload"}, Logins["admin"].Action.Args)
|
||||
assert.Equal(t, "yao.utils.Captcha", Logins["admin"].Layout.Captcha)
|
||||
assert.Equal(t, "/images/admin-cover.png", Logins["admin"].Layout.Cover)
|
||||
assert.Equal(t, "/images/login/cover.svg", Logins["admin"].Layout.Cover)
|
||||
assert.Equal(t, "/x/Chart/dashboard", Logins["admin"].Layout.Entry)
|
||||
assert.Equal(t, "https://yaoapps.com", Logins["admin"].Layout.Site)
|
||||
assert.Equal(t, "梦想让我们与众不同", Logins["admin"].Layout.Slogan)
|
||||
|
|
@ -101,9 +101,9 @@ func TestLoadCN(t *testing.T) {
|
|||
assert.Equal(t, "scripts.user.Login", Logins["user"].Action.Process)
|
||||
assert.Equal(t, []string{":payload"}, Logins["user"].Action.Args)
|
||||
assert.Equal(t, "yao.utils.Captcha", Logins["user"].Layout.Captcha)
|
||||
assert.Equal(t, "/images/user-cover.png", Logins["user"].Layout.Cover)
|
||||
assert.Equal(t, "/images/login/cover.svg", Logins["user"].Layout.Cover)
|
||||
assert.Equal(t, "/x/Table/pet", Logins["user"].Layout.Entry)
|
||||
assert.Equal(t, "https://yaoapps.com/docs", Logins["user"].Layout.Site)
|
||||
assert.Equal(t, "https://yaoapps.com/doc", Logins["user"].Layout.Site)
|
||||
assert.Equal(t, "梦想让我们与众不同", Logins["user"].Layout.Slogan)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue