package ice import ( "net/http" "path" "strings" "shylinux.com/x/icebergs/base/web/html" kit "shylinux.com/x/toolkits" ) func AddRender(key string, render func(*Message, ...Any) string) { Info.render[key] = render } func RenderAction(key ...string) Actions { return Actions{CTX_INIT: {Hand: func(m *Message, arg ...string) { cmd := m.CommandKey() kit.For(key, func(key string) { AddRender(key, func(m *Message, arg ...Any) string { return m.Cmd(cmd, key, arg).Result() }) }) }}} } func Render(m *Message, cmd string, args ...Any) string { if render, ok := Info.render[cmd]; ok { return render(m, args...) } trans := kit.Value(m._cmd.Meta, CTX_TRANS) switch arg := kit.Simple(args...); cmd { case RENDER_BUTTON: list := []string{} for _, k := range args { switch k := k.(type) { case []string: kit.For(k, func(k string) { list = append(list, Render(m, RENDER_BUTTON, k)) }) case string: if k == "" { break } if strings.HasPrefix(k, "`, k, kit.Select(k, kit.Value(trans, k), !m.IsEnglish()))) }) case Map, Maps: kit.For(k, func(k, v string) { list = append(list, kit.Format(``, k, kit.Select(v, k, m.IsEnglish()))) }) default: list = append(list, Render(m, RENDER_BUTTON, kit.LowerCapital(kit.Format(k)))) } } return strings.Join(list, "") case RENDER_ANCHOR: return kit.Format(`%s`, kit.Select(arg[0], arg, 1), arg[0]) case RENDER_SCRIPT: return kit.Format(`%s`, arg[0]) case RENDER_IMAGES: if len(arg) > 1 { return kit.Format(``, arg[0], arg[1]) } return kit.Format(``, arg[0]) case RENDER_VIDEOS: return kit.Format(`