From 9fce461628529ddd7e450406a671dee9e6b9aa74 Mon Sep 17 00:00:00 2001 From: shaoying Date: Sat, 13 Jun 2020 04:32:59 +0800 Subject: [PATCH] opt word --- core/wiki/draw.go | 33 +++++++ core/wiki/wiki.go | 228 ---------------------------------------------- core/wiki/word.go | 220 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 253 insertions(+), 228 deletions(-) create mode 100644 core/wiki/draw.go create mode 100644 core/wiki/word.go diff --git a/core/wiki/draw.go b/core/wiki/draw.go new file mode 100644 index 00000000..5d721099 --- /dev/null +++ b/core/wiki/draw.go @@ -0,0 +1,33 @@ +package wiki + +import ( + "github.com/shylinux/icebergs" + "github.com/shylinux/toolkits" + + "path" +) + +const ( + DRAW = "draw" +) + +func init() { + Index.Merge(&ice.Context{ + Configs: map[string]*ice.Config{ + DRAW: {Name: "draw", Help: "思维导图", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.svg", + "prefix", ``, "suffix", ``, + )}, + }, + Commands: map[string]*ice.Command{ + DRAW: {Name: "draw path=自然/编程/hi.svg auto", Help: "思维导图", Meta: kit.Dict( + "display", "/plugin/local/wiki/draw.js", + ), Action: map[string]*ice.Action{ + "save": {Name: "save path text", Help: "保存", Hand: func(m *ice.Message, arg ...string) { + m.Cmd("nfs.save", path.Join(m.Conf(DRAW, "meta.path"), kit.Select("hi.svg", arg[0])), arg[1:]) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + reply(m, cmd, arg...) + }}, + }, + }, nil) +} diff --git a/core/wiki/wiki.go b/core/wiki/wiki.go index 96e97028..43eafd24 100644 --- a/core/wiki/wiki.go +++ b/core/wiki/wiki.go @@ -6,7 +6,6 @@ import ( "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" - "fmt" "os" "path" "strings" @@ -31,45 +30,18 @@ func reply(m *ice.Message, cmd string, arg ...string) bool { } var Index = &ice.Context{Name: "wiki", Help: "文档中心", - Caches: map[string]*ice.Cache{}, Configs: map[string]*ice.Config{ - "title": {Name: "title", Help: "标题", Value: kit.Data("template", title)}, "brief": {Name: "brief", Help: "摘要", Value: kit.Data("template", brief)}, "refer": {Name: "refer", Help: "参考", Value: kit.Data("template", refer)}, "spark": {Name: "spark", Help: "段落", Value: kit.Data("template", spark)}, "local": {Name: "local", Help: "文件", Value: kit.Data("template", local)}, - "shell": {Name: "shell", Help: "命令", Value: kit.Data("template", shell)}, - "field": {Name: "field", Help: "插件", Value: kit.Data("template", field, - "some", kit.Dict("simple", kit.Dict( - "inputs", kit.List( - kit.MDB_INPUT, "text", "name", "name", - kit.MDB_INPUT, "button", "value", "查看", "action", "auto", - kit.MDB_INPUT, "button", "value", "返回", "cb", "Last", - ), - )), - )}, "order": {Name: "order", Help: "列表", Value: kit.Data("template", order)}, "table": {Name: "table", Help: "表格", Value: kit.Data("template", table)}, "stack": {Name: "stack", Help: "结构", Value: kit.Data("template", stack)}, - "chart": {Name: "chart", Help: "绘图", Value: kit.Data("template", prefix, "suffix", ``)}, - "draw": {Name: "draw", Help: "思维导图", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.svg", - "prefix", ``, "suffix", ``, - )}, "data": {Name: "data", Help: "数据表格", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.csv")}, - "word": {Name: "word", Help: "语言文字", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.shy", - "alias", map[string]interface{}{ - "label": []interface{}{"chart", "label"}, - "chain": []interface{}{"chart", "chain"}, - - "section": []interface{}{"title", "section"}, - "chapter": []interface{}{"title", "chapter"}, - "endmenu": []interface{}{"title", "endmenu"}, - "premenu": []interface{}{"title", "premenu"}, - }, - )}, "walk": {Name: "walk", Help: "走遍世界", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.csv")}, "feel": {Name: "feel", Help: "影音媒体", Value: kit.Data(kit.MDB_SHORT, "name", "path", "", "regs", ".*\\.(png|jpg|JPG|MOV|m4v)")}, }, @@ -81,48 +53,6 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心", m.Save("feel") }}, - "title": {Name: "title [chapter|section|endmenu|premenu] text", Help: "标题", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - title, _ := m.Optionv("title").(map[string]int) - switch arg[0] { - case "endmenu": - // 后置目录 - m.Render(ice.RENDER_TEMPLATE, endmenu) - return - case "premenu": - // 前置目录 - m.Render(ice.RENDER_TEMPLATE, premenu) - return - case "section": - arg = arg[1:] - title["section"]++ - m.Option("level", "h3") - m.Option("prefix", fmt.Sprintf("%d.%d", title["chapter"], title["section"])) - case "chapter": - arg = arg[1:] - title["chapter"]++ - title["section"] = 0 - m.Option("level", "h2") - m.Option("prefix", fmt.Sprintf("%d", title["chapter"])) - default: - m.Option("level", "h1") - m.Option("prefix", "") - } - m.Option(kit.MDB_TYPE, cmd) - m.Option(kit.MDB_NAME, arg[0]) - m.Option(kit.MDB_TEXT, arg[0]) - - // 添加目录 - ns := strings.Split(m.Conf("runtime", "node.name"), "-") - menu, _ := m.Optionv("menu").(map[string]interface{}) - menu["list"] = append(menu["list"].([]interface{}), map[string]interface{}{ - "content": m.Option("content", kit.Select(ns[len(ns)-1], arg, 0)), - "prefix": m.Option("prefix"), - "level": m.Option("level"), - }) - - // 生成网页 - m.Render(ice.RENDER_TEMPLATE, m.Conf("title", "meta.template")) - }}, "brief": {Name: "brief name text", Help: "摘要", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { m.Echo(`
`) @@ -195,48 +125,6 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心", } m.Render(ice.RENDER_TEMPLATE, m.Conf(cmd, "meta.template")) }}, - "shell": {Name: "shell name text", Help: "命令", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(kit.MDB_TYPE, cmd) - m.Option(kit.MDB_NAME, arg[0]) - m.Option(kit.MDB_TEXT, arg[1]) - - m.Option("input", strings.Join(arg[1:], " ")) - m.Option("output", m.Cmdx(ice.CLI_SYSTEM, "sh", "-c", m.Option("input"))) - m.Render(ice.RENDER_TEMPLATE, m.Conf(cmd, "meta.template")) - }}, - "field": {Name: "field name text", Help: "插件", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(kit.MDB_TYPE, cmd) - m.Option(kit.MDB_NAME, arg[0]) - m.Option(kit.MDB_TEXT, arg[1]) - - data := kit.Dict() - cmds := kit.Split(arg[1]) - m.Search(cmds[0], func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) { - if ls := strings.Split(cmds[0], "."); len(ls) > 1 { - m.Cmd(ice.CTX_COMMAND, strings.Join(ls[:len(ls)-1], "."), key) - } else { - m.Cmd(ice.CTX_COMMAND, key) - } - if data["feature"], data["inputs"] = cmd.Meta, cmd.List; len(cmd.List) == 0 { - data["inputs"] = m.Confv("field", "meta.some.simple.inputs") - } - }) - if len(data) == 0 { - m.Echo("not found", arg[1]) - } - - for i := 2; i < len(arg)-1; i += 2 { - if data := m.Confv("field", kit.Keys("meta.some", arg[i+1], arg[i])); data != nil { - m.Option(arg[i], data) - } else { - m.Parse("option", arg[i], arg[i+1]) - } - data[arg[i]] = m.Optionv(arg[i]) - } - - m.Option("meta", data) - m.Render(ice.RENDER_TEMPLATE, m.Conf(cmd, "meta.template")) - }}, "order": {Name: "order name text", Help: "列表", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option(kit.MDB_TYPE, cmd) @@ -289,60 +177,7 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心", Stack(m, cmd, 0, kit.Parse(nil, "", chain.show(m, arg[1])...)) m.Echo("") }}, - "chart": {Name: "chart label|chain|table name text [fg bg fs ls p m]", Help: "绘图", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - // 创建类型 - var chart Chart - switch arg[0] { - case "label": - chart = &Label{} - case "chain": - chart = &Chain{} - } - arg[1] = strings.TrimSpace(arg[1]) - arg[2] = strings.TrimSpace(arg[2]) - // 基本参数 - m.Option(kit.MDB_TYPE, arg[0]) - m.Option(kit.MDB_NAME, arg[1]) - m.Option(kit.MDB_TEXT, arg[2]) - m.Option("font-size", kit.Select("24", arg, 3)) - m.Option("stroke", kit.Select("yellow", arg, 4)) - m.Option("fill", kit.Select("purple", arg, 5)) - - // 扩展参数 - m.Option("style", "") - m.Option("compact", "false") - m.Option("stroke-width", "2") - m.Option("padding", "10") - m.Option("margin", "10") - // m.Option("font-family", kit.Select("", "monospace", len(arg[2]) == len([]rune(arg[2])))) - m.Option("font-family", "monospace") - for i := 6; i < len(arg)-1; i++ { - m.Option(arg[i], arg[i+1]) - } - - // 计算尺寸 - chart.Init(m, arg[2:]...) - m.Option("width", chart.GetWidth()) - m.Option("height", chart.GetHeight()) - - // 渲染绘图 - m.Render(ice.RENDER_TEMPLATE, m.Conf("chart", "meta.template")) - chart.Draw(m, 0, 0) - m.Render(ice.RENDER_TEMPLATE, m.Conf("chart", "meta.suffix")) - }}, - - "draw": {Name: "draw path auto", Help: "思维导图", Meta: kit.Dict("display", "local/wiki/draw"), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) > 0 && arg[0] == "action" { - switch arg[1] { - case "保存": - m.Cmd("nfs.save", path.Join(m.Conf(cmd, "meta.path"), kit.Select("hi.svg", arg[2])), arg[3:]) - } - return - } - - reply(m, cmd, arg...) - }}, "data": {Name: "data path auto", Help: "数据表格", Meta: kit.Dict("display", "local/wiki/data"), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) > 0 && arg[0] == "action" { switch arg[1] { @@ -359,69 +194,6 @@ var Index = &ice.Context{Name: "wiki", Help: "文档中心", // 解析数据 m.CSV(m.Result()) }}, - "word": {Name: "word path=自然/编程/hi.shy auto", Help: "语言文字", Meta: kit.Dict("display", "local/wiki/word"), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) > 0 && arg[0] == "action" { - switch arg[1] { - case "story": - cmds := kit.Split(arg[4]) - if len(arg) > 6 { - switch arg[5] { - case "action": - switch arg[6] { - case "favor": - m.Cmdy(ice.WEB_FAVOR, arg[7:]) - return - } - } - } - if m.Right(cmds, arg[5:]) { - m.Cmdy(cmds, arg[5:]) - } - return - case "追加": - if f, e := os.OpenFile(path.Join(m.Conf(cmd, "meta.path"), arg[2]), os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666); m.Assert(e) { - defer f.Close() - f.WriteString("\n") - f.WriteString(arg[3]) - - if len(arg) > 4 { - f.WriteString(` "`) - f.WriteString(arg[4]) - f.WriteString(`"`) - } - if len(arg) > 5 { - f.WriteString(" `") - f.WriteString(arg[5]) - f.WriteString("`") - } - for _, v := range arg[6:] { - f.WriteString(" `") - f.WriteString(v) - f.WriteString("`") - } - - f.WriteString("\n") - f.WriteString("\n") - } - - case "保存": - m.Cmd("nfs.save", path.Join(m.Conf(cmd, "meta.path"), arg[2]), arg[3]) - } - return - } - - if reply(m, cmd, arg...) { - // 目录列表 - return - } - - // 解析脚本 - m.Option(ice.WEB_TMPL, "raw") - m.Optionv("title", map[string]int{}) - m.Optionv("menu", map[string]interface{}{"list": []interface{}{}}) - m.Optionv(ice.MSG_ALIAS, m.Confv("word", "meta.alias")) - m.Set("result").Cmdy(ice.SSH_SOURCE, path.Join(m.Conf(cmd, "meta.path"), arg[0])) - }}, "feel": {Name: "feel path auto 上传:button=@upload", Help: "影音媒体", Meta: kit.Dict( "display", "local/wiki/feel", "detail", []string{"标签", "删除"}, ), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/core/wiki/word.go b/core/wiki/word.go new file mode 100644 index 00000000..7779c4d5 --- /dev/null +++ b/core/wiki/word.go @@ -0,0 +1,220 @@ +package wiki + +import ( + ice "github.com/shylinux/icebergs" + kit "github.com/shylinux/toolkits" + + "fmt" + "path" + "strings" +) + +const ( + WORD = "word" + + TITLE = "title" + CHART = "chart" + FIELD = "field" + SHELL = "shell" + + CHAPTER = "chapter" + SECTION = "section" + PREMENU = "premenu" + ENDMENU = "endmenu" + + LABEL = "label" + CHAIN = "chain" +) + +func init() { + Index.Merge(&ice.Context{ + Configs: map[string]*ice.Config{ + TITLE: {Name: "title", Help: "标题", Value: kit.Data("template", title)}, + CHART: {Name: "chart", Help: "图表", Value: kit.Data("template", prefix, "suffix", ``)}, + FIELD: {Name: "field", Help: "插件", Value: kit.Data("template", field, + "some", kit.Dict("simple", kit.Dict( + "inputs", kit.List( + kit.MDB_INPUT, "text", "name", "name", + kit.MDB_INPUT, "button", "value", "查看", "action", "auto", + kit.MDB_INPUT, "button", "value", "返回", "cb", "Last", + ), + )), + )}, + SHELL: {Name: "shell", Help: "命令", Value: kit.Data("template", shell)}, + + WORD: {Name: "word", Help: "语言文字", Value: kit.Data(kit.MDB_SHORT, "name", + "path", "", "regs", ".*\\.shy", "alias", map[string]interface{}{ + LABEL: []interface{}{CHART, LABEL}, + CHAIN: []interface{}{CHART, CHAIN}, + + SECTION: []interface{}{TITLE, SECTION}, + CHAPTER: []interface{}{TITLE, CHAPTER}, + ENDMENU: []interface{}{TITLE, ENDMENU}, + PREMENU: []interface{}{TITLE, PREMENU}, + }, + )}, + }, + Commands: map[string]*ice.Command{ + TITLE: {Name: "title [chapter|section|endmenu|premenu] text", Help: "标题", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + title, _ := m.Optionv(TITLE).(map[string]int) + switch arg[0] { + case ENDMENU: + // 后置目录 + m.Render(ice.RENDER_TEMPLATE, endmenu) + return + case PREMENU: + // 前置目录 + m.Render(ice.RENDER_TEMPLATE, premenu) + return + case SECTION: + // 分节标题 + arg = arg[1:] + title[SECTION]++ + m.Option("level", "h3") + m.Option("prefix", fmt.Sprintf("%d.%d", title[CHAPTER], title[SECTION])) + case CHAPTER: + // 章节标题 + arg = arg[1:] + title[CHAPTER]++ + title[SECTION] = 0 + m.Option("level", "h2") + m.Option("prefix", fmt.Sprintf("%d", title[CHAPTER])) + default: + // 文章标题 + m.Option("level", "h1") + m.Option("prefix", "") + } + + // 基本参数 + m.Option(kit.MDB_TYPE, TITLE) + m.Option(kit.MDB_NAME, arg[0]) + m.Option(kit.MDB_TEXT, arg[0]) + + // 添加目录 + ns := strings.Split(m.Conf("runtime", "node.name"), "-") + menu, _ := m.Optionv("menu").(map[string]interface{}) + menu["list"] = append(menu["list"].([]interface{}), map[string]interface{}{ + "content": m.Option("content", kit.Select(ns[len(ns)-1], arg, 0)), + "prefix": m.Option("prefix"), + "level": m.Option("level"), + }) + + // 渲染引擎 + m.Render(ice.RENDER_TEMPLATE, m.Conf(TITLE, "meta.template")) + }}, + CHART: {Name: "chart label|chain name text", Help: "图表", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + var chart Chart + switch arg[0] { + case LABEL: + // 标签 + chart = &Label{} + case CHAIN: + // 链接 + chart = &Chain{} + } + arg[1] = strings.TrimSpace(arg[1]) + arg[2] = strings.TrimSpace(arg[2]) + + // 基本参数 + m.Option(kit.MDB_TYPE, arg[0]) + m.Option(kit.MDB_NAME, arg[1]) + m.Option(kit.MDB_TEXT, arg[2]) + + // 扩展参数 + m.Option("font-size", "24") + m.Option("stroke", "blue") + m.Option("fill", "yellow") + // 扩展参数 + m.Option("style", "") + m.Option("compact", "false") + m.Option("stroke-width", "2") + m.Option("padding", "10") + m.Option("margin", "10") + // m.Option("font-family", kit.Select("", "monospace", len(arg[2]) == len([]rune(arg[2])))) + m.Option("font-family", "monospace") + for i := 3; i < len(arg)-1; i++ { + m.Option(arg[i], arg[i+1]) + } + + // 计算尺寸 + chart.Init(m, arg[2]) + m.Option("width", chart.GetWidth()) + m.Option("height", chart.GetHeight()) + + // 渲染引擎 + m.Render(ice.RENDER_TEMPLATE, m.Conf(CHART, "meta.template")) + chart.Draw(m, 0, 0) + m.Render(ice.RENDER_TEMPLATE, m.Conf(CHART, "meta.suffix")) + }}, + FIELD: {Name: "field name text", Help: "插件", Action: map[string]*ice.Action{ + "run": {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(arg[1:]) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + // 基本参数 + m.Option(kit.MDB_TYPE, FIELD) + m.Option(kit.MDB_NAME, arg[0]) + m.Option(kit.MDB_TEXT, arg[1]) + + // 命令参数 + data := kit.Dict(kit.MDB_NAME, arg[0]) + cmds := kit.Split(arg[1]) + m.Search(cmds[0], func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) { + if ls := strings.Split(cmds[0], "."); len(ls) > 1 { + m.Cmd(ice.CTX_COMMAND, strings.Join(ls[:len(ls)-1], "."), key) + } else { + m.Cmd(ice.CTX_COMMAND, key) + } + if data["feature"], data["inputs"] = cmd.Meta, cmd.List; len(cmd.List) == 0 { + data["inputs"] = m.Confv("field", "meta.some.simple.inputs") + } + }) + + // 扩展参数 + for i := 2; i < len(arg)-1; i += 2 { + if data := m.Confv("field", kit.Keys("meta.some", arg[i+1], arg[i])); data != nil { + m.Option(arg[i], data) + } else { + m.Parse("option", arg[i], arg[i+1]) + } + data[arg[i]] = m.Optionv(arg[i]) + } + + // 渲染引擎 + m.Option("meta", data) + m.Render(ice.RENDER_TEMPLATE, m.Conf(cmd, "meta.template")) + }}, + SHELL: {Name: "shell name text", Help: "命令", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + // 基本参数 + m.Option(kit.MDB_TYPE, SHELL) + m.Option(kit.MDB_NAME, arg[0]) + m.Option(kit.MDB_TEXT, arg[1]) + + // 渲染引擎 + m.Option("input", strings.Join(arg[1:], " ")) + m.Option("output", m.Cmdx(ice.CLI_SYSTEM, "sh", "-c", m.Option("input"))) + m.Render(ice.RENDER_TEMPLATE, m.Conf(SHELL, "meta.template")) + }}, + + WORD: {Name: "word path=自然/编程/hi.shy auto", Help: "语言文字", Meta: kit.Dict( + "display", "/plugin/local/wiki/word.js", + ), Action: map[string]*ice.Action{ + "story": {Name: "story", Help: "运行", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(arg[0], "action", "run", arg[1:]) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if reply(m, cmd, arg...) { + // 目录列表 + return + } + + // 解析脚本 + m.Option(ice.WEB_TMPL, "raw") + m.Optionv(TITLE, map[string]int{}) + m.Optionv("menu", map[string]interface{}{"list": []interface{}{}}) + m.Optionv(ice.MSG_ALIAS, m.Confv(WORD, "meta.alias")) + m.Set(ice.MSG_RESULT).Cmdy(ice.SSH_SOURCE, path.Join(m.Conf(WORD, "meta.path"), arg[0])) + }}, + }, + }, nil) +}