Documentation ¶
Index ¶
- Constants
- Variables
- func CustomIncrId() func(TopicID) string
- func SaveCustom(sheet *Topic, custom map[string]string, v interface{}, ...) error
- func SaveCustomWorkbook(output io.Writer, wk *WorkBook, custom map[string]string, ...) error
- func SaveSheets(path string, sheet ...*Topic) error
- type AddMode
- type Children
- type ContentStruct
- type Notes
- type StructureClass
- type Style
- type Topic
- func (st *Topic) Add(title string, modes ...AddMode) *Topic
- func (st *Topic) AddLabel(label ...string) *Topic
- func (st *Topic) AddNotes(notes string) *Topic
- func (st *Topic) CId(title string) TopicID
- func (st *Topic) CIds(title string) (res []TopicID)
- func (st *Topic) IsCent() bool
- func (st *Topic) Move(componentId TopicID, modes ...AddMode) *Topic
- func (st *Topic) On(componentId ...TopicID) *Topic
- func (st *Topic) OnTitle(title string) *Topic
- func (st *Topic) Parent(componentId ...TopicID) *Topic
- func (st *Topic) Range(f func(int, *Topic) error) error
- func (st *Topic) Remove(title string) *Topic
- func (st *Topic) RemoveByID(componentId TopicID) *Topic
- func (st *Topic) RemoveChildren()
- func (st *Topic) Resources() map[TopicID]string
- func (st *Topic) UpSheet(sheetTitle, centralTopicTitle string, structureClass ...StructureClass)
- type TopicID
- type WorkBook
Constants ¶
const ( DefaultMarkdownName = "default" DefaultMarkdownFormat = "{{Repeat \"#\" ." + MarkdownKeyDeep + "}} {{." + CustomKeyTitle + "}}\n\n{{range $i,$v := ." + CustomKeyLabels + "}}> {{$v}}\n\n{{end}}{{range $i,$v := (SplitLines ." + CustomKeyNotes + " \"\\n\\r\")}}> {{$v}}\n\n{{end}}" MarkdownKeyDeep = "Deep" // 所在层级,>=1 )
const ( CustomKeyId = "Id" CustomKeyTitle = "Title" CustomKeyParentId = "ParentId" CustomKeyIsRoot = "IsRoot" CustomKeyLabels = "Labels" CustomKeyNotes = "Notes" )
Variables ¶
var RootIsNull = errors.New("RootTopic is null")
Functions ¶
func SaveCustom ¶
func SaveCustom(sheet *Topic, custom map[string]string, v interface{}, genId func(id TopicID) string) error
SaveCustom 自定义字段,将数据写入指定对象中
param sheet: xmind的sheet数据 custom: map[string]string{ CustomKeyId: "id", // 以该json tag字段作为主题ID CustomKeyTitle: "title", // 以该json tag字段作为主题内容 CustomKeyParentId: "parent", // 以该json tag字段作为判断父节点的依据 // "parentId",表示根节点不添加父节点id // "parentId,xx",表示根节点添加值为空的父节点id CustomKeyIsRoot: "isRoot", // 以该json tag字段,true表示为根节点 // "",表示所有节点都不添加 // "isRoot,xx",表示只添加根节点 CustomKeyLabels: "labels", // 以该json tag字段作为标签 CustomKeyNotes: "notes", // 以该json tag字段作为备注 } v: 可以为 *string,*[]byte,*[]Nodes{} 这几种类型 genId: 外部自定义生成id方案,自动生成的id是参照xmind,可能有点长 return error: 返回错误
func SaveCustomWorkbook ¶
func SaveCustomWorkbook(output io.Writer, wk *WorkBook, custom map[string]string, genId func(id TopicID) string) error
SaveCustomWorkbook 保存workbook到自定义json中
func SaveSheets ¶
SaveSheets 保存多个sheet画布到一个xmind文件
Types ¶
type Children ¶
type Children struct {
Attached []*Topic `json:"attached" xml:"topics>topic"`
}
下面的结构支持从xml和json中解析xmind文件 但只支持生成json的xmind文件,没有做直接生成xml文件的方法
type ContentStruct ¶
type ContentStruct struct {
Content string `json:"content" xml:"content"`
}
下面的结构支持从xml和json中解析xmind文件 但只支持生成json的xmind文件,没有做直接生成xml文件的方法
func (*ContentStruct) UnmarshalXML ¶
func (cs *ContentStruct) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
type Notes ¶
type Notes struct {
Plain ContentStruct `json:"plain" xml:"plain"`
}
下面的结构支持从xml和json中解析xmind文件 但只支持生成json的xmind文件,没有做直接生成xml文件的方法
type StructureClass ¶
type StructureClass string
下面的结构支持从xml和json中解析xmind文件 但只支持生成json的xmind文件,没有做直接生成xml文件的方法
const ( ContentJson = "content.json" ContentXml = "content.xml" Manifest = "manifest.json" Metadata = "metadata.json" Thumbnails = "Thumbnails" Resources = "resources" StructMapUnbalanced StructureClass = "org.xmind.ui.map.unbalanced" // 思维导图 StructMap StructureClass = "org.xmind.ui.map" // 平衡图(向下) StructMapClockwise StructureClass = "org.xmind.ui.map.clockwise" // 平衡图(顺时针) StructMapAnticlockwise StructureClass = "org.xmind.ui.map.anticlockwise" // 平衡图(逆时针) StructOrgChartDown StructureClass = "org.xmind.ui.org-chart.down" // 组织结构图(向下) StructOrgChartUp StructureClass = "org.xmind.ui.org-chart.up" // 组织结构图(向上) StructTreeRight StructureClass = "org.xmind.ui.tree.right" // 树状图(向右) StructTreeLeft StructureClass = "org.xmind.ui.tree.left" // 树状图(向左) StructLogicRight StructureClass = "org.xmind.ui.logic.right" // 逻辑图(向右) StructLogicLeft StructureClass = "org.xmind.ui.logic.left" // 逻辑图(向左) StructTimelineHorizontal StructureClass = "org.xmind.ui.timeline.horizontal" // 水平时间轴 StructTimelineVertical StructureClass = "org.xmind.ui.timeline.vertical" // 垂直时间轴 StructFishHoneLeftHeaded StructureClass = "org.xmind.ui.fishbone.leftHeaded" // 鱼骨图(头向左) StructFishHoneRightHeaded StructureClass = "org.xmind.ui.fishbone.rightHeaded" // 鱼骨图(头向左) StructSpreadsheet StructureClass = "org.xmind.ui.spreadsheet" // 矩阵(行) StructSpreadsheetColumn StructureClass = "org.xmind.ui.spreadsheet.column" // 矩阵(列) )
type Style ¶
type Style struct { Properties struct{} `json:"properties"` Id TopicID `json:"id"` }
下面的结构支持从xml和json中解析xmind文件 但只支持生成json的xmind文件,没有做直接生成xml文件的方法
type Topic ¶
type Topic struct { RootTopic *Topic `json:"rootTopic,omitempty" xml:"topic"` Children *Children `json:"children,omitempty" xml:"children,omitempty"` Notes *Notes `json:"notes,omitempty" xml:"notes,omitempty"` ID TopicID `json:"id" xml:"id,attr"` Title string `json:"title" xml:"title"` StructureClass StructureClass `json:"structureClass,omitempty" xml:"structure-class,attr"` Style Style `json:"style"` Labels []string `json:"labels,omitempty" xml:"labels>label,omitempty"` // contains filtered or unexported fields }
下面的结构支持从xml和json中解析xmind文件 但只支持生成json的xmind文件,没有做直接生成xml文件的方法
func LoadCustom ¶
LoadCustom 根据符合要求的任意结构加载
param data: 方式1: 使用如下方式进行调用,根节点没有父节点,其他节点均设置父节点ID LoadCustom([]Nodes{{"root","top"},{"123","one","root"}},map[string]string{ CustomKeyId: "id", CustomKeyTitle: "topic", CustomKeyParentId: "parentId", }) 测试如下结构 type Nodes struct { ID string `json:"id"` Topic string `json:"topic"` ParentId string `json:"parentId"` Labels []string `json:"labels"` Notes string `json:"notes"` } 方式2: 传json string: data := `[ {"a":"1","b":"main topic","labels":["l1","l2"],"notes":"notes"}, {"a":"2","b":"topic1","c":"1"}, {"a":"3","b":"topic2","c":"1"}, {"a":"4","b":"topic3","c":"2"}, {"a":"5","b":"topic4","c":"2"}, {"a":"6","b":"topic5","c":"3"}, {"a":"7","b":"topic6","c":"3"}]` LoadCustom(data,map[string]string{ CustomKeyId: "id", // 以该json tag字段作为主题ID CustomKeyTitle: "topic", // 以该json tag字段作为主题内容 CustomKeyParentId: "parentId", // 以该json tag字段作为判断父节点的依据 CustomKeyIsRoot: "isRoot", // 以该json tag字段,bool类型,true表示根节点,false表示普通节点 CustomKeyLabels: "labels", // 以该json tag字段作为主题标签 CustomKeyNotes: "notes", // 以该json tag字段作为主题备注 }) return *Topic: 生成的主题地址 error: 返回错误
func NewSheet ¶
func NewSheet(sheetTitle, centralTopicTitle string, structureClass ...StructureClass) *Topic
NewSheet 创建一个画布
param sheetTitle: 画布名称 centralTopicTitle: 中心主题 structureClass: 整体样式 return *Topic: 中心主题地址
func (*Topic) CId ¶
CId 根据主题内容获取第一个匹配到的主题ID
param title: 主题内容 return TopicID: 匹配title的主题ID,有多个相同title时只返回第一个匹配成功的结果
func (*Topic) Move ¶
Move 将指定节点移动到当前节点对应位置
param componentId: 要移动过来的节点 modes: 移动过来的添加方式,不传则默认移动为最后一个子主题 return *Topic: 当前主题地址
func (*Topic) RemoveByID ¶
RemoveByID 删除指定主题ID的节点
param title: 待删除子主题内容 return *Topic: 当前主题地址
特别注意,删除主题成功会自动定位到中心主题上,如果需要切换需要显示使用 On 操作
func (*Topic) UpSheet ¶
func (st *Topic) UpSheet(sheetTitle, centralTopicTitle string, structureClass ...StructureClass)
UpSheet 更新画布,可以在任何节点主题执行
param sheetTitle: 画布名称 centralTopicTitle: 中心主题 structureClass: 整体样式
type TopicID ¶
type TopicID string
下面的结构支持从xml和json中解析xmind文件 但只支持生成json的xmind文件,没有做直接生成xml文件的方法
const (
CentKey TopicID = "" // 中心主题地址Key,开放给调用者
)
func (TopicID) MarshalJSON ¶
type WorkBook ¶
type WorkBook struct { XMLName xml.Name `xml:"xmap-content"` Topics []*Topic `json:"sheet" xml:"sheet"` }
下面的结构支持从xml和json中解析xmind文件 但只支持生成json的xmind文件,没有做直接生成xml文件的方法
func LoadCustomWorkbook ¶
LoadCustomWorkbook 加载自定义workbook的json
func LoadFile ¶
LoadFile 从文件加载xmind数据 当文件为
*.xmind 时会尝试读取压缩包的[content.json,content.xml]文件 *.* 时会直接按照[*.json,*.xml]这几种格式读取