From a4611d11a8926f72347a62a179b397659b30bdb7 Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Mon, 4 Sep 2023 16:49:24 +0800 Subject: [PATCH] Doc: update --- README.md | 4 + web/src/assets/avatar/南风.jpg | Bin 0 -> 34225 bytes web/src/pages/Doc/catalogList.js | 3 +- web/src/pages/Doc/en/changelog/index.md | 50 + web/src/pages/Doc/en/changelog/index.vue | 31 + web/src/pages/Doc/en/constructor/index.md | 14 +- web/src/pages/Doc/en/constructor/index.vue | 1065 +------------------ web/src/pages/Doc/en/doExport/index.md | 8 +- web/src/pages/Doc/en/doExport/index.vue | 10 +- web/src/pages/Doc/en/introduction/index.md | 4 + web/src/pages/Doc/en/introduction/index.vue | 4 + web/src/pages/Doc/en/node/index.md | 6 +- web/src/pages/Doc/en/node/index.vue | 8 +- web/src/pages/Doc/en/scrollbar/index.md | 64 ++ web/src/pages/Doc/en/scrollbar/index.vue | 70 ++ web/src/pages/Doc/en/search/index.md | 2 +- web/src/pages/Doc/en/search/index.vue | 2 +- web/src/pages/Doc/routerList.js | 8 +- web/src/pages/Doc/zh/changelog/index.md | 50 + web/src/pages/Doc/zh/changelog/index.vue | 31 + web/src/pages/Doc/zh/constructor/index.md | 14 +- web/src/pages/Doc/zh/constructor/index.vue | 52 +- web/src/pages/Doc/zh/course23/index.md | 116 ++ web/src/pages/Doc/zh/course23/index.vue | 112 ++ web/src/pages/Doc/zh/course24/index.md | 65 ++ web/src/pages/Doc/zh/course24/index.vue | 60 ++ web/src/pages/Doc/zh/course3/index.md | 22 + web/src/pages/Doc/zh/course3/index.vue | 15 + web/src/pages/Doc/zh/doExport/index.md | 8 +- web/src/pages/Doc/zh/doExport/index.vue | 10 +- web/src/pages/Doc/zh/introduction/index.md | 4 + web/src/pages/Doc/zh/introduction/index.vue | 4 + web/src/pages/Doc/zh/node/index.md | 6 +- web/src/pages/Doc/zh/node/index.vue | 4 +- web/src/pages/Doc/zh/scrollbar/index.md | 64 ++ web/src/pages/Doc/zh/scrollbar/index.vue | 70 ++ 36 files changed, 966 insertions(+), 1094 deletions(-) create mode 100644 web/src/assets/avatar/南风.jpg create mode 100644 web/src/pages/Doc/en/scrollbar/index.md create mode 100644 web/src/pages/Doc/en/scrollbar/index.vue create mode 100644 web/src/pages/Doc/zh/course23/index.md create mode 100644 web/src/pages/Doc/zh/course23/index.vue create mode 100644 web/src/pages/Doc/zh/course24/index.md create mode 100644 web/src/pages/Doc/zh/course24/index.vue create mode 100644 web/src/pages/Doc/zh/scrollbar/index.md create mode 100644 web/src/pages/Doc/zh/scrollbar/index.vue diff --git a/README.md b/README.md index dd269b3a..04935180 100644 --- a/README.md +++ b/README.md @@ -169,4 +169,8 @@ const mindMap = new MindMap({ 布林 + + + 南风 +

\ No newline at end of file diff --git a/web/src/assets/avatar/南风.jpg b/web/src/assets/avatar/南风.jpg new file mode 100644 index 0000000000000000000000000000000000000000..562987e90f6a08462e766be663b67300bd842b59 GIT binary patch literal 34225 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 { +let CourseList = new Array(24).fill(0).map((_, index) => { return 'course' + (index + 1) }) let APIList = [ @@ -34,6 +34,7 @@ let APIList = [ 'nodeImgAdjust', 'search', 'painter', + 'scrollbar', 'xmind', 'markdown', 'utils' diff --git a/web/src/pages/Doc/en/changelog/index.md b/web/src/pages/Doc/en/changelog/index.md index 2122c69f..19a4a42d 100644 --- a/web/src/pages/Doc/en/changelog/index.md +++ b/web/src/pages/Doc/en/changelog/index.md @@ -1,5 +1,55 @@ # Changelog +## 0.7.0 + +Breaking change: Removed the section of node activation style in the theme file, Setting the activation style of nodes is no longer supported, and the activation effect has been changed to a unified node outer border style, while also supporting the mouse hover effect. + +Fix: + +> 1.Fix rendering anomalies when the node border size is relatively large. +> +> 2.Fixed an issue where the node style of the associated line will not be updated when switching themes. +> +> 3.Fix that selecting all did not trigger node_ The issue with active events. + +新增: + +> 1.When folding nodes, displays the number of collapsed nodes. +> +> 2.Support the position of the endpoint of the associated line to follow mouse drag changes. +> +> 3.Add a scrollbar plugin. +> +> 4.Support opening specified online files through fileURL query parameters in URLs. +> +> 5.The fishbone diagram supports setting node margins. +> +> 6.By default, double-click to reset the canvas. +> +> 7.Modify the parameters of the export image method, and when exporting PDF, if the size of the mind map is smaller than A4 paper, do not rotate the direction. +> +> 8.Improve the clarity of exported images and PDFs on high-definition screens. +> +> 9.Add a pre destruction lifecycle function to the plugin to address the issue of some side effects that were not cleared during the destruction of the mind map. +> +> 10.Optimize the settings of the basic style and do not trigger full rendering when modifying theme attributes that do not affect size. +> +> 11.Prohibit triggering node right-click menu events when multiple node selections are completed, to avoid triggering the right-click menu display. +> +> 12.Optimize the Select plugin so that if multiple selected nodes do not change, the activation event is not triggered. +> +> 13.The activation node list thrown by event node_active no longer directly references the internal activation list. +> +> 14.Optimize the logic of mouse button down node events, and support dragging the canvas by holding down the root node with the right mouse button in the right-click drag and drop canvas mode. + +Demo: + +> 1.Do not directly reference the internal activation node list to optimize performance. +> +> 2.Support configuring whether to display scrollbars. +> +> 3.Delete the active node configuration in the sidebar node style configuration section. + ## 0.6.17 Fix: diff --git a/web/src/pages/Doc/en/changelog/index.vue b/web/src/pages/Doc/en/changelog/index.vue index e0c5e977..cdcf02fe 100644 --- a/web/src/pages/Doc/en/changelog/index.vue +++ b/web/src/pages/Doc/en/changelog/index.vue @@ -1,6 +1,37 @@ diff --git a/web/src/pages/Doc/en/node/index.md b/web/src/pages/Doc/en/node/index.md index 74d54d3a..60bd459e 100644 --- a/web/src/pages/Doc/en/node/index.md +++ b/web/src/pages/Doc/en/node/index.md @@ -110,17 +110,21 @@ Get the final style value applied to this node `root`: whether it is the root node, default `false` -`isActive`: whether the value being fetched is the active state style value, +`isActive`: v0.7.0+has been abandoned, whether the value being fetched is the active state style value, default `false` ### setStyle(prop, value, isActive) +- `isActive`: v0.7.0+has been abandoned + Modify a style of the node, a shortcut method for the `SET_NODE_STYLE` command ### setStyles(style, isActive) > v0.6.12+ +- `isActive`: v0.7.0+has been abandoned + Modify multiple styles of nodes, a shortcut method for the `SET_NODE_STYLES` command ### getData(key) diff --git a/web/src/pages/Doc/en/node/index.vue b/web/src/pages/Doc/en/node/index.vue index eb479570..fc5f1ed9 100644 --- a/web/src/pages/Doc/en/node/index.vue +++ b/web/src/pages/Doc/en/node/index.vue @@ -64,14 +64,20 @@

Get the final style value applied to this node

prop: the style property to get

root: whether it is the root node, default false

-

isActive: whether the value being fetched is the active state style value, +

isActive: v0.7.0+has been abandoned, whether the value being fetched is the active state style value, default false

setStyle(prop, value, isActive)

+
    +
  • isActive: v0.7.0+has been abandoned
  • +

Modify a style of the node, a shortcut method for the SET_NODE_STYLE command

setStyles(style, isActive)

v0.6.12+

+
    +
  • isActive: v0.7.0+has been abandoned
  • +

Modify multiple styles of nodes, a shortcut method for the SET_NODE_STYLES command

getData(key)

Get the specified value in the data object of the node's real data nodeData, diff --git a/web/src/pages/Doc/en/scrollbar/index.md b/web/src/pages/Doc/en/scrollbar/index.md new file mode 100644 index 00000000..10974f51 --- /dev/null +++ b/web/src/pages/Doc/en/scrollbar/index.md @@ -0,0 +1,64 @@ +# Scrollbar plugin + +> v0.7.0+ + +This plugin is used to help develop the functionality of horizontal and vertical scrollbar. + +## Register + +```js +import MindMap from 'simple-mind-map' +import Scrollbar from 'simple-mind-map/src/plugins/Scrollbar.js' +MindMap.usePlugin(Scrollbar) +``` + +After registration and instantiation of `MindMap`, the instance can be obtained through `mindMap.scrollbar`. + +## Event + +#### scrollbar_change + +Triggered when the scrollbar data changes, you can listen to this event to update the position and size of the scrollbar. + +## Method + +### setScrollBarWrapSize(width, height) + +- `width`: Number, The width of your scrollbar container element. + +- `height`: Number, The height of your scrollbar container element. + +Set the size of the scroll bar container, which is the width of the container for horizontal scrollbars and the height of the container for vertical scrollbars. When your scrollbar container size changes, you need to call this method again. + +### calculationScrollbar() + +> You need to first call the setScrollBarWrapSize method to set the width and height of the scroll bar container element. +> +> Generally, it is necessary to monitor scrollbar_change event, and then call it to update the scroll bar. + +Return value: + +```js +{ + // Vertical scrollbar + vertical: { + top, + height + }, + // Horizontal scrollbar + horizontal: { + left, + width + } +} +``` + +Obtain the size and position of the scroll bar, and you can set it to the scroll bar element based on the return value to achieve the effect of rendering and caring about the scroll bar. + +### onMousedown(e, type) + +- `e`: The event object for the mouse down event. + +- `type`: The type of scroll bar pressed, vertical(Vertical scrollbar)、horizontal(Horizontal scrollbar)。 + +This method needs to be called when the mouse press event of the scrollbar element occurs. \ No newline at end of file diff --git a/web/src/pages/Doc/en/scrollbar/index.vue b/web/src/pages/Doc/en/scrollbar/index.vue new file mode 100644 index 00000000..d5851f33 --- /dev/null +++ b/web/src/pages/Doc/en/scrollbar/index.vue @@ -0,0 +1,70 @@ + + + + + \ No newline at end of file diff --git a/web/src/pages/Doc/en/search/index.md b/web/src/pages/Doc/en/search/index.md index 215917f6..8ba3235b 100644 --- a/web/src/pages/Doc/en/search/index.md +++ b/web/src/pages/Doc/en/search/index.md @@ -12,7 +12,7 @@ import Search from 'simple-mind-map/src/plugins/Search.js' MindMap.usePlugin(Search) ``` -After registration and instantiation of `MindMap`, the instance can be obtained through `mindMap.Search`. +After registration and instantiation of `MindMap`, the instance can be obtained through `mindMap.search`. ## Event diff --git a/web/src/pages/Doc/en/search/index.vue b/web/src/pages/Doc/en/search/index.vue index c47b9d40..26f7d4e9 100644 --- a/web/src/pages/Doc/en/search/index.vue +++ b/web/src/pages/Doc/en/search/index.vue @@ -10,7 +10,7 @@ import Search from 'simple-mind-map/src/plugins/Search.js' MindMap.usePlugin(Search) -

After registration and instantiation of MindMap, the instance can be obtained through mindMap.Search.

+

After registration and instantiation of MindMap, the instance can be obtained through mindMap.search.

Event

search_info_change

You can listen to 'search_info_change' event to get the number of current search results and the index currently located.

diff --git a/web/src/pages/Doc/routerList.js b/web/src/pages/Doc/routerList.js index 578b9aa2..88f8964b 100644 --- a/web/src/pages/Doc/routerList.js +++ b/web/src/pages/Doc/routerList.js @@ -29,6 +29,8 @@ export default [ { path: 'course20', title: '如何自定义节点内容' }, { path: 'course21', title: '如何复制、剪切、粘贴' }, { path: 'course22', title: '如何实现搜索、替换' }, + { path: 'course23', title: '如何渲染滚动条' }, + { path: 'course24', title: '如何开发一个插件' }, { path: 'doExport', title: 'Export 插件' }, { path: 'drag', title: 'Drag插件' }, { path: 'introduction', title: '简介' }, @@ -52,7 +54,8 @@ export default [ { path: 'nodeImgAdjust', title: 'NodeImgAdjust插件' }, { path: 'search', title: 'Search插件' }, { path: 'painter', title: 'Painter插件' }, - { path: 'help1', title: '概要/关联线' }, + { path: 'painter', title: 'Painter插件' }, + { path: 'scrollbar', title: 'Scrollbar插件' }, { path: 'help2', title: '客户端' } ] }, @@ -85,7 +88,8 @@ export default [ { path: 'touchEvent', title: 'TouchEvent plugin' }, { path: 'nodeImgAdjust', title: 'NodeImgAdjust plugin' }, { path: 'search', title: 'Search plugin' }, - { path: 'painter', title: 'Painter plugin' } + { path: 'painter', title: 'Painter plugin' }, + { path: 'scrollbar', title: 'Scrollbar plugin' } ] } ] diff --git a/web/src/pages/Doc/zh/changelog/index.md b/web/src/pages/Doc/zh/changelog/index.md index 213a6609..32722852 100644 --- a/web/src/pages/Doc/zh/changelog/index.md +++ b/web/src/pages/Doc/zh/changelog/index.md @@ -1,5 +1,55 @@ # Changelog +## 0.7.0 + +破坏性更新:删除了主题文件中节点激活样式的部分,不再支持设置节点的激活样式,激活效果改为统一的节点外边框样式,同时支持鼠标hover效果。 + +修复: + +> 1.修复节点边框尺寸比较大的情况下的的渲染异常问题。 +> +> 2.修复切换主题时存在关联线的节点样式不会更新的问题。 +> +> 3.修复全选没有触发node_active事件的问题。 + +新增: + +> 1.收起节点时,显示折叠的节点数量。 +> +> 2.支持关联线端点的位置跟随鼠标拖拽变化。 +> +> 3.新增滚动条插件。 +> +> 4.支持在url中通过fileURL查询参数打开指定的在线文件。 +> +> 5.鱼骨图支持设置节点margin。 +> +> 6.默认关闭双击复位画布。 +> +> 7.修改导出图片方法的参数,导出pdf时如果思维导图尺寸小于a4纸那么不旋转方向。 +> +> 8.提升导出的图片和pdf在高清屏的清晰度。 +> +> 9.插件新增销毁前生命周期函数,解决销毁思维导图时插件的一些副作用没有清除的问题。 +> +> 10.优化基础样式的设置,修改不影响大小的主题属性时不触发全量渲染。 +> +> 11.右键多选节点结束时禁止触发节点右键菜单事件,避免触发右键菜单显示。 +> +> 12.优化Select插件,如果多选节点没有变化,那么不触发激活激活事件。 +> +> 13.node_active事件抛出的激活节点列表不再直接引用内部激活列表。 +> +> 14.优化鼠标按下节点事件逻辑,在右键拖拽画布模式下支持右键按住根节点拖拽画布。 + +Demo: + +> 1.不直接引用内部激活节点列表,优化性能。 +> +> 2.支持配置是否显示滚动条。 +> +> 3.删除侧边栏节点样式配置部分的激活节点配置。 + ## 0.6.17 修复: diff --git a/web/src/pages/Doc/zh/changelog/index.vue b/web/src/pages/Doc/zh/changelog/index.vue index a98e89cd..73cfeb0f 100644 --- a/web/src/pages/Doc/zh/changelog/index.vue +++ b/web/src/pages/Doc/zh/changelog/index.vue @@ -1,6 +1,37 @@ diff --git a/web/src/pages/Doc/zh/node/index.md b/web/src/pages/Doc/zh/node/index.md index dd7ea6a9..67706eb7 100644 --- a/web/src/pages/Doc/zh/node/index.md +++ b/web/src/pages/Doc/zh/node/index.md @@ -110,16 +110,20 @@ `root`:是否是根节点,默认`false` -`isActive`:获取的是否是激活状态的样式值,默认`false` +`isActive`:v0.7.0+已废弃,获取的是否是激活状态的样式值,默认`false` ### setStyle(prop, value, isActive) +`isActive`:v0.7.0+已废弃 + 修改节点的某个样式,`SET_NODE_STYLE`命令的快捷方法 ### setStyles(style, isActive) > v0.6.12+ +`isActive`:v0.7.0+已废弃 + 修改节点多个样式,`SET_NODE_STYLES`命令的快捷方法 ### getData(key) diff --git a/web/src/pages/Doc/zh/node/index.vue b/web/src/pages/Doc/zh/node/index.vue index ffc2a5cc..8642a410 100644 --- a/web/src/pages/Doc/zh/node/index.vue +++ b/web/src/pages/Doc/zh/node/index.vue @@ -64,13 +64,15 @@

获取某个最终应用到该节点的样式值

prop:要获取的样式属性

root:是否是根节点,默认false

-

isActive:获取的是否是激活状态的样式值,默认false

+

isActive:v0.7.0+已废弃,获取的是否是激活状态的样式值,默认false

setStyle(prop, value, isActive)

+

isActive:v0.7.0+已废弃

修改节点的某个样式,SET_NODE_STYLE命令的快捷方法

setStyles(style, isActive)

v0.6.12+

+

isActive:v0.7.0+已废弃

修改节点多个样式,SET_NODE_STYLES命令的快捷方法

getData(key)

获取该节点真实数据nodeDatadata对象里的指定值,key不传返回这个data对象

diff --git a/web/src/pages/Doc/zh/scrollbar/index.md b/web/src/pages/Doc/zh/scrollbar/index.md new file mode 100644 index 00000000..49a20d1e --- /dev/null +++ b/web/src/pages/Doc/zh/scrollbar/index.md @@ -0,0 +1,64 @@ +# Scrollbar 插件 + +> v0.7.0+ + +该插件用于帮助开发水平和垂直滚动条的功能。 + +## 注册 + +```js +import MindMap from 'simple-mind-map' +import Scrollbar from 'simple-mind-map/src/plugins/Scrollbar.js' +MindMap.usePlugin(Scrollbar) +``` + +注册完且实例化`MindMap`后可通过`mindMap.scrollbar`获取到该实例。 + +## 事件 + +#### scrollbar_change + +当滚动条数据发生改变时触发,你可以监听该事件来更新滚动条位置和大小。 + +## 方法 + +### setScrollBarWrapSize(width, height) + +- `width`:Number,你的滚动条容器元素的宽度。 + +- `height`: Number,你的滚动条容器元素的高度。 + +设置滚动条容器的大小,对于水平滚动条,即容器的宽度,对于垂直滚动条,即容器的高度。当你的滚动条容器尺寸改变时需要再次调用该方法。 + +### calculationScrollbar() + +> 需要先调用setScrollBarWrapSize方法设置滚动条容器元素的宽高。 +> +> 一般需要监听scrollbar_change事件,然后调用该方法更新滚动条。 + +返回值: + +```js +{ + // 垂直滚动条 + vertical: { + top, + height + }, + // 水平滚动条 + horizontal: { + left, + width + } +} +``` + +获取滚动条大小和位置,你可以根据返回值来设置到滚动条元素上,达到渲染和关心滚动条的效果。 + +### onMousedown(e, type) + +- `e`:鼠标按下事件的事件对象。 + +- `type`:按下的滚动条类型,vertical(垂直滚动条)、horizontal(水平滚动条)。 + +滚动条元素的鼠标按下事件时需要调用该方法。 \ No newline at end of file diff --git a/web/src/pages/Doc/zh/scrollbar/index.vue b/web/src/pages/Doc/zh/scrollbar/index.vue new file mode 100644 index 00000000..fc06ba0f --- /dev/null +++ b/web/src/pages/Doc/zh/scrollbar/index.vue @@ -0,0 +1,70 @@ + + + + + \ No newline at end of file