Commit d2b688c3 authored by campaign's avatar campaign

Merge remote-tracking branch 'origin/dev' into dev

parents 9c172c66 9d5a594d
# KityMinder 更新日志
## v1.2.0
### 功能更新
1. 支持ipad上的文字编辑
### 新功能
1. 允许节点自由拖动
2. 允许节点排序(包括拖动以及快捷键 Alt + Up 和 Alt + Down)
3. 节点上插入在线图片(暂不支持本地图片)
4. 节点上添加资源标签(分配负责人)
5. 支持节点复制粘贴
6. 支持换肤,添加了 “文艺清新” 系列的几个皮肤
### 体验优化
1. 界面重新设计,更加美观
2. 布局性能有较大的提高
3. 调整了文字输入的交互
4. 添加了布局时的动画效果
5. 扩大了超链接的点击范围
6. 优先级增加至 9 个,进度增加至 9 个
### BUG 修复
1. 修复 XSS 攻击问题(超链接和图片)
2. 修复导入损坏文件报错的问题
3. 修复新版 Chrome 下载扩展名错误问题
4. 修复 SVG 和 PNG 在缩放之后导出不全的问题
5. 修复缩放后选区闪烁的问题
6. 修复分享内容无法更新的问题 说明:需要再次点击分享创建更新链接
## v1.1.3.2
......@@ -14,6 +40,7 @@
## v1.1.3.1
### Hot Fix
1. 修复某些输入法下输入英文的问题
2. 添加网盘操作(加载列表、保存文件等)失败后重试的机制
......
......@@ -2,8 +2,8 @@
<html>
<head>
<meta charset="utf-8">
<meta name="title" content="百度脑图">
<meta name="keyword" content="图,kity,svg,minder,百度,fex,前端,在线">
<meta name="title" content="百度脑图(KityMinder)">
<meta name="keyword" content="kityminder,脑图,思维导图,kity,svg,minder,百度,fex,前端,在线">
<meta name="description" content="百度脑图,便捷的脑图编辑工具。让您在线上直接创建、保存并分享你的思路。">
<script src="lib/jquery-2.1.0.min.js" charset="utf-8"></script>
......
......@@ -28,9 +28,8 @@ KityMinder.LANG['zh-cn'] = {
'saveto': '另存为',
'hand': '允许拖拽',
'zoom': '放大缩小',
'markers': '添加标签',
'resource': '分配资源',
'switchlayout': '切换主题',
'markers': '标签',
'resource': '资源',
'help': '帮助',
'preference': '偏好设置',
'image': '插入图片',
......@@ -58,14 +57,14 @@ KityMinder.LANG['zh-cn'] = {
'none': '无',
'progress': {
'title': '进度',
'notdone': "未完成",
'done1': '完成1/8',
'done2': '完成1/4',
'done3': '完成3/8',
'done4': '完成1/2',
'done5': '完成5/8',
'done6': '完成3/4',
'done7': '完成7/8',
'notdone': '未完成',
'done1': '完成 1/8',
'done2': '完成 1/4',
'done3': '完成 3/8',
'done4': '完成 1/2',
'done5': '完成 5/8',
'done6': '完成 3/4',
'done7': '完成 7/8',
'done': '已完成'
}
},
......@@ -77,28 +76,24 @@ KityMinder.LANG['zh-cn'] = {
'resource': {}
},
'node': {
'appendsiblingnode': '插入同级节点',
'appendsiblingnode': '插入兄弟节点',
'appendchildnode': '插入子节点',
'removenode': '删除节点',
'editnode': '编辑节点'
},
'layout': {
'default': '左右展开',
'bottom': '向下展开'
'removenode': '删除',
'editnode': '编辑'
},
'hyperlink': {
'hyperlink': '插入超链接',
'unhyperlink': '取消超链接'
'hyperlink': '链接...',
'unhyperlink': '移除链接'
},
'image': {
'image': '插入图片',
'removeimage': '除图片'
'image': '图片...',
'removeimage': '除图片'
},
'marker': {
'marker': '进度/优先级'
'marker': '进度/优先级...'
},
'resource': {
'resource': '分配资源'
'resource': '资源...'
}
};
\ No newline at end of file
## 文件操作
- [ ] 创建新文件
- [ ] 操作:文件菜单点击新建
- [ ] 反馈:编辑区域剩一个跟节点,并且镜头会居中到根节点
- [ ] 反馈:草稿箱保存了上一个文件的内容
- [ ] 导入本地文件
- [ ] 操作:文件菜单点击导入
- [ ] 导入 .txt 格式
- [ ] 导入 .km 格式
- [ ] 导入 .xmind 格式
- [ ] 导入 .mm 格式
- [ ] 导入 .mmap 格式
- [ ] 操作:把文件拖放到编辑区域(格式同上述格式)
- [ ] 反馈:正确导入能显示文件正确的内容
- [ ] 节点树不缺不多
- [ ] 优先级和进度正确显示
- [ ] 超链接正确显示
- [ ] 反馈:错误的文件向用户提示文件损坏
- [ ] 草稿箱
- [ ] 加载完毕后加载上次打开的脑图
- [ ] 能打开草稿箱内容
- [ ] 草稿箱菜单的删除和清除功能正常
- [ ] 网盘文件
- [ ] 登录后,文件菜单上列出最近编辑的网盘脑图文件
- [ ] 点击脑图上的文件在编辑区加载其内容
- [ ] 格式支持同上
- [ ] 点击文件菜单的「保存到网盘」,文件保存到了个人的百度网盘上
- [ ] 文件保存
- [ ] 刚从网盘打开的文件,其状态是 「已保存」
- [ ] 新创建的文件、打开的文件发生了编辑,其状态是 「未保存」
- [ ] 「未保存」的文件在文件标题处会有一个 `*`
- [ ] 「未保存」的文件按 `Ctrl + S` 或点击「保存」菜单后,文件会保存到网盘上,状态变为「已保存」
- [ ] 如果当前文件「未保存」,草稿箱会记录其「未保存」的状态
- [ ] 可以创建新或打开其它文件,重新打开「未保存」的文件其状态依然是「未保存」,内容是上次编辑的内容
- [ ] 从网盘打开文件时,如果草稿箱的版本「未保存」,会打开草稿箱的版本。
- [ ] 如果再重新打开一次,会询问用户是否忽略未保存的版本,强制打开网盘的版本
- [ ] 文件分享
- [ ] 点击「分享」按钮,会生成一个分享链接
- [ ] 分享浮层中其它社交分享的信息正确
- [ ] 打开分享链接,会打开分享的脑图内容
## 工具箱
- [ ] 「工具箱」按钮点击切换工具箱的显示状态
## 节点操作
对于所有节点操作,都需要先有选中的节点,才能进行操作。
- [ ] 插入子节点
- [ ] 操作:按 Tab 插入
- [ ] 操作:右键菜单插入
- [ ] 操作:工具栏下拉菜单插入
- [ ] 反馈:选中节点产生了一个新的子节点,并且新节点文本被选中,进入编辑状态,同时布局会调整
- [ ] 插入兄弟节点
- [ ] 操作:按 Enter 插入
- [ ] 操作:右键菜单插入
- [ ] 操作:工具栏下拉菜单插入
- [ ] 反馈:选中节点产生了一个新的兄弟节点,并且新节点文本被选中,进入编辑状态,同时布局会调整
- [ ] 编辑节点
- [ ] 操作:按 F2 编辑
- [ ] 操作:右键菜单编辑
- [ ] 操作:工具栏下拉菜单编辑
- [ ] 反馈:节点进入编辑状态,文字全选
- [ ] 删除节点
- [ ] 操作:按 Del 删除
- [ ] 操作:右键菜单删除
- [ ] 操作:工具栏下拉菜单删除
- [ ] 反馈:节点被删除,同时布局会调整
- [ ] 展开/收起节点
- [ ] 点击非叶子节点上的 `-`,节点被收起
- [ ] 点击非叶子节点上的 `+`,节点被展开,展开后子树的展开收起状态跟收起前一致
- [ ] 点击工具栏上的「收起节点」按钮
- [ ] 如果选中了节点,会收起选中的节点
- [ ] 如果没有选中节点,会把所有节点收起至一级节点
- [ ] 点击工具栏上的「展开节点」按钮
- [ ] 如果选中了节点,会展开选中节点以及
- [ ] 节点拖动
- [ ] 节点不在编辑状态的时候可以随意拖动位置
- [ ] 节点拖动到同级节点的附近可以触发排序点,松开会将拖动的节点排序到指定的位置
- [ ] 节点拖动到非子树上的节点可以触发移动提示,松开会让拖动的节点变成目标节点的子节点
- [ ] 节点排序
- [ ] 可以用上述拖放的形式排序
- [ ] 可以使用 `Alt + Up``Alt + Down` 分别向上、向下调整顺序
- [ ] 节点复制、剪切、粘贴
- [ ] 使用 `Ctrl + C` 复制节点树到剪贴板
- [ ] 使用 `Ctrl + X` 剪切节点数到剪贴板
- [ ] 使用 `Ctrl + V` 粘贴节点树到目标节点
## 风格和模板设置
- [ ] 设置结构
- [ ] 使用「模板」下拉菜单可以切换脑图的布局形式
- [ ] 皮肤设置
- [ ] 使用「皮肤」下来菜单可以切换
- [ ] 老版本的文件打开
- [ ] 默认布局的使用「思维导图」的模板,使用「脑图经典」的皮肤
- [ ] 向下布局的使用「组织结构图」的模板,使用「温柔寒光」的皮肤
## 样式设置
- [ ] 工具栏上的「字体」、「字号」、「加粗」、「斜体」、「字体颜色」能正确设置
## 节点附件
- [ ] 使用工具栏或上下文菜单插入、移除超链接
- [ ] 超链接格式必须正确(只能是 HTTP 资源)
- [ ] 使用工具栏或上下文菜单插入、移除图片
- [ ] 图片资源必须存在
- [ ] 使用工具栏或上下文菜单设置优先级和进度
- [ ] 使用工具栏或上下文菜单设置资源
- [ ] 资源对话框会显示脑图上使用到的所有资源
- [ ] 可以对选中节点添加资源或勾选、取消资源
## 视野操作
- [ ] 可以使用工具栏上的「小手」按钮触发拖动模式,拖动模式可以随意拖动编辑区域
- [ ] 可以直接拖动根节点
- [ ] 可以使用触摸板双指拖动视野(Mac Chrome)
- [ ] 双击空白区域定位根节点到
- [ ] 可以使用工具栏上的「缩放组件」进行视野的缩放
KM.registerToolbarUI('node', function(name) {
var shortcutKeys = {
'appendsiblingnode': 'enter',
'appendchildnode': 'tab',
'removenode': 'del|backspace',
'appendsiblingnode': 'Enter',
'appendchildnode': 'Tab',
'removenode': 'Del',
'editnode': 'F2'
};
......@@ -67,8 +67,6 @@ KM.registerToolbarUI('node', function(name) {
//comboboxWidget.button().kmui().disabled(-1);
return comboboxWidget.button().addClass('kmui-combobox');
function transForInserttopic(options) {
var tempItems = [];
......@@ -76,7 +74,7 @@ KM.registerToolbarUI('node', function(name) {
utils.each(options.items, function(k, v) {
options.value.push(v);
tempItems.push((msg[k] || k) + '(' + shortcutKeys[v].toUpperCase() + ')');
tempItems.push((msg[k] || k) + ' (' + shortcutKeys[v] + ')');
options.autowidthitem.push($.wordCountAdaptive(tempItems[tempItems.length - 1]));
});
......
......@@ -151,9 +151,11 @@ var TreeDragger = kity.createClass('TreeDragger', {
this._minder.execCommand('arrange', this._dragSources, index);
this._renderOrderHint(null);
} else {
this._minder.fire('savescene');
}
this._leaveDragMode();
this._minder.fire('treedragend');
this._minder.fire('contentchange');
},
// 进入拖放模式:
......
......@@ -69,8 +69,9 @@ Minder.Selection = kity.createClass( 'Selection', {
},
setPosition: function ( offset ) {
try {
this.x = Math.round(offset.x);
this.y = Math.round(offset.y);
// 这两个是神奇的 0.5 —— SVG 要边缘锐利,你需要一些对齐
this.x = Math.round(offset.x) - 0.5;
this.y = Math.round(offset.y) - 1.5;
} catch ( e ) {
console.log(e);
......@@ -79,7 +80,7 @@ Minder.Selection = kity.createClass( 'Selection', {
return this;
},
setHeight: function ( height ) {
this.height = height;
this.height = Math.round(height) + 2;
return this;
},
setHide: function () {
......
......@@ -13,6 +13,9 @@ var TextRenderer = KityMinder.TextRenderer = kity.createClass('TextRenderer', {
this.setTextStyle(node, text.setContent(node.getText()));
var box = text.getBoundaryBox();
var r = Math.round;
if (kity.Browser.ie) {
box.y += 1;
}
return new kity.Box(r(box.x), r(box.y), r(box.width), r(box.height));
},
......
......@@ -30,8 +30,7 @@ var ViewDragger = kity.createClass("ViewDragger", {
this._minder.on('normal.mousedown readonly.mousedown readonly.touchstart', function(e) {
// 点击未选中的根节点临时开启
if (e.getTargetNode() == this.getRoot() &&
(!this.getRoot().isSelected() || !this.isSingleSelect())) {
if (e.getTargetNode() == this.getRoot()) {
lastPosition = e.getPosition();
isRootDrag = true;
}
......
......@@ -16,6 +16,10 @@ KityMinder.registerModule('Zoom', function() {
finishValue: zoom / 100,
setter: function(target, value) {
viewport.zoom = value;
viewport.center = {
x: viewport.center.x | 0 + 0.5,
y: viewport.center.y | 0 + 0.5
};
target.setViewPort(viewport);
}
});
......
......@@ -4,7 +4,6 @@
}
function generate(h) {
var textSelectionColor = kity.Color.parse('rgb(27,171,255)');
return {
'background': '#fbfbfb',
......@@ -16,14 +15,13 @@
'root-margin': [30, 100],
'root-radius': 5,
'root-space': 10,
'root-text-selection-color': textSelectionColor.set('h', h).set('l', 20),
'main-color': 'black',
'main-background': hsl(h, 33, 95),
'main-stroke': hsl(h, 37, 60),
'main-stroke-width': 1,
'main-font-size': 16,
'main-font-size': 14,
'main-padding': [6, 20],
'main-margin': 20,
'main-radius': 3,
......@@ -56,7 +54,7 @@
'order-hint-path-color': hsl(h, 100, 25),
'order-hint-path-width': 1,
'text-selection-color': textSelectionColor.set('h', h)
'text-selection-color': hsl(h, 100, 20)
};
}
......
......@@ -7,12 +7,13 @@
padding: 5px 0;
background-color: #ffffff;
font-size: 12px;
box-shadow: 2px 5px 15px rgba(0, 0, 0, .5);
border-radius: 3px;
box-shadow: 0 1px 5px hsla(0, 0%, 0%, 0.3);
/* border-radius: 3px; */
min-width: 160px;
_width: 160px;
-webkit-transform: translateX(2px);
font-family: Arial, "Heiti SC", "Microsoft Yahei";
/* border-top: 3px solid hsl(224, 16%, 27%); */
}
.kmui-combobox-menu .kmui-combobox-item {
......@@ -47,6 +48,7 @@
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#0099f2', endColorstr='#0076dd',GradientType=0 ); /* IE6-8 */
color: white;
background: hsl(222, 14%, 41%);
/*border: 1px solid #a3bde3;*/
}
......
......@@ -51,7 +51,7 @@
background: -webkit-linear-gradient(top, #0099f2 0%,#4096ee 0%,#0076dd 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #0099f2 0%,#4096ee 0%,#0076dd 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #0099f2 0%,#4096ee 0%,#0076dd 100%); /* IE10+ */
background: #5a6378; /* W3C */
background: hsl(222, 14%, 41%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#0099f2', endColorstr='#0076dd',GradientType=0 ); /* IE6-8 */
color: white;
......
......@@ -10,7 +10,7 @@ html, body, #kityminder, div.kmui-editor-body {
}
#title, #panel {
background: #393F4F;
background: hsl(224, 16%, 27%);
font-family: 'Hiragino Sans GB', 'Arial', 'Microsoft Yahei';
/* -webkit-font-smoothing: antialiased; */
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment