<commit_before># Kity Minder 目标设定

## 第一期目标

* 架构搭建
* 自动布局
* 双击节点文字编辑
* 节点之间的连线（子节点向父节点）
* 导入和导出（JSON格式）
* 基本键盘导航：基于位置的选择导航；Tab插入子级；Enter插入同级
* 上述功能的撤销操作

## 第二期目标

* 自由布局
* 拖动修改子级
* 子节点展开/收起
* 思路连接线
* 外观模板支持

## 第三期目标

* 协同操作
* 云存储
* 应用推广


# Kity Minder 整体设计

整体设计脑图地址：[Architectrue.mmap](Architectrue.mmap)


## `abstract` Command
表示一条在 KityMinder 上执行的命令

### `method` execute(Minder minder [,args...] )
命令执行，如果该命令可撤销，应自行保存需要的状态

### `method` revert()
撤销命令的执行



## `abstract` Module
Module定义一个模块，表示控制脑图中一个功能的模块（布局、渲染、输入文字、图标叠加等）

### `method` load(Minder minder) : this
模块装载的时候被调用，此时应该进行一些基本的初始化工作。
### `method` registerCommands(Minder minder) : this
模块注册命令的时候被调用，此时应该注册一些模块中需要调用的命令。
### `method` bindEvents(Minder minder) : this
模块绑定事件的时候被调用，此时应该绑定需要的事件，根据事件来触发命令，达到对 Minder 的控制。

### `method` destroy() : this
模块卸载时被调用，此时可以回收模块资源。



## MinderNode

MinderNode 是 Kity Minder 需要展示和控制的树的一个节点。节点上提供了*树遍历*和*数据存取*的功能。并且提供对节点对应的渲染容器（Kity.Group）的访问

节点上提供公开字段，任何模块可以读取和修改，这些字段会提供给 KityMinder 作为渲染的依据。

公开的字段和存放的数据都会在导出、保存现场的时候被保留。

MinderTreeNode 维护的树关系和数据只是作为一个脑图的结构和数据，不具有任何渲染和交互的能力。

### 树遍历

通过 6 个接口来进行树的访问和修改操作

`node.getParent()` 返回当前节点的父节点

`node.getChildren()` 返回当前节点的子节点

`node.getIndex()` 返回当前节点在父节点中的位置，如果没有父节点，返回 -1

`node.insertChild( node, index )` 插入一个子节点到当前节点上，插入的位置为 index

`node.removeChild( node | index )` 移除一个子节点或指定位置的子节点

`node.getChild( index )` 获得指定位置的子节点

### 数据存取

`node.getData(name)` 获得指定字段的数据

`node.setData(name, value)` 设定指定字段的数据

### 公开字段

`node.setData( "x", value )` 设置节点的 x 坐标

`node.setData( "y", value )` 设置节点的 y 坐标

`node.getData( "x", value )` 获取节点的 x 坐标

`node.getData( "y", value )` 获取节点的 y 坐标

`node.setData( "text", value )` 设置节点的文本

`node.getData( "text", value )` 获取节点的文本

### 渲染容器

`node.getRenderContainer()` 返回当前节点的渲染容器


## KityMinder
脑图使用类

### `static method` registerCommand( name, commandClass )
注册一个命令

### `static method` registerModule( name, moduleClass )
注册一个模块

### `constructor` KityMinder()
创建脑图画布。KityMinder 实例化的时候，会从模块池中取出模块，并且实例化这些模块，然后加载。

### `method` getRoot() : MinderNode
获取脑图根节点
<commit_msg>changed km Architecture document<commit_after># Kity Minder 目标设定

## 第一期目标

* 架构搭建
* 自动布局
* 双击节点文字编辑
* 节点之间的连线（子节点向父节点）
* 导入和导出（JSON格式）
* 基本键盘导航：基于位置的选择导航；Tab插入子级；Enter插入同级
* 上述功能的撤销操作

## 第二期目标

* 自由布局
* 拖动修改子级
* 子节点展开/收起
* 思路连接线
* 外观模板支持

## 第三期目标

* 协同操作
* 云存储
* 应用推广


# Kity Minder 整体设计

整体设计脑图地址：[Architectrue.mmap](Architectrue.mmap)


## `abstract` Command
表示一条在 KityMinder 上执行的命令

### `method` execute(Minder minder [,args...] )
命令执行，如果该命令可撤销，应自行保存需要的状态

### `method` revert()
撤销命令的执行



## `abstract` Module
Module定义一个模块，表示控制脑图中一个功能的模块（布局、渲染、输入文字、图标叠加等）

### `method` load(Minder minder) : this
模块装载的时候被调用，此时应该进行一些基本的初始化工作。
### `method` registerCommands(Minder minder) : this
模块注册命令的时候被调用，此时应该注册一些模块中需要调用的命令。
### `method` bindEvents(Minder minder) : this
模块绑定事件的时候被调用，此时应该在Minder上绑定模块相关的事件响应，通过事件响应来触发命令，达到对Minder的控制。

### `method` destroy() : this
模块卸载时被调用，此时可以回收模块资源。



## MinderNode

MinderNode 是 Kity Minder 需要展示和控制的树的一个节点。节点上提供了*树遍历*和*数据存取*的功能。并且提供对节点对应的渲染容器（Kity.Group）的访问

节点上提供公开字段，任何模块可以读取和修改，这些字段会提供给 KityMinder 作为渲染的依据。

公开的字段和存放的数据都会在导出、保存现场的时候被保留。

MinderTreeNode 维护的树关系和数据只是作为一个脑图的结构和数据，不具有任何渲染和交互的能力。

### 树遍历

通过 6 个接口来进行树的访问和修改操作

`node.getParent()` 返回当前节点的父节点

`node.getChildren()` 返回当前节点的子节点

`node.getIndex()` 返回当前节点在父节点中的位置，如果没有父节点，返回 -1

`node.insertChild( node, index )` 插入一个子节点到当前节点上，插入的位置为 index

`node.removeChild( node | index )` 移除一个子节点或指定位置的子节点

`node.getChild( index )` 获得指定位置的子节点

### 数据存取

`node.getData(name)` 获得指定字段的数据

`node.setData(name, value)` 设定指定字段的数据

### 公开字段

`node.setData( "x", value )` 设置节点的 x 坐标

`node.setData( "y", value )` 设置节点的 y 坐标

`node.getData( "x", value )` 获取节点的 x 坐标

`node.getData( "y", value )` 获取节点的 y 坐标

`node.setData( "text", value )` 设置节点的文本

`node.getData( "text", value )` 获取节点的文本

### 渲染容器

`node.getRenderContainer()` 返回当前节点的渲染容器


## KityMinder
脑图使用类

### `static method` registerModule( name, moduleClass )
注册一个模块

### `constructor` KityMinder()
创建脑图画布。KityMinder 实例化的时候，会从模块池中取出模块，并且实例化这些模块，然后加载。

### `method` registerCommand( name, commandClass )
注册一个命令

### `method` getRoot() : MinderNode
获取脑图根节点

{'fraction_non_alphanumeric': 0.13851351351351351, 'fraction_numerical': 0.0009652509652509653, 'mean_word_length': 6.109777015437393, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1313009', 'n_tokens_mistral': 2655, 'n_tokens_neox': 3070, 'n_words': 324}