Commit 1fbea29d authored by campaign's avatar campaign

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

parents dd8bb74c c1aa09cd
...@@ -27,7 +27,7 @@ module.exports = function (grunt) { ...@@ -27,7 +27,7 @@ module.exports = function (grunt) {
var getPath = function (readFile) { var getPath = function (readFile) {
var sources = require("fs").readFileSync(readFile); var sources = require("fs").readFileSync(readFile);
sources = /Array\(([^)]+)\)/.exec(sources); sources = /paths\s=\s\[([\s\S]*?)\]/ig.exec(sources);
sources = sources[1].replace(/\/\/.*\n/g, '\n').replace(/'|"|\n|\t|\s/g, ''); sources = sources[1].replace(/\/\/.*\n/g, '\n').replace(/'|"|\n|\t|\s/g, '');
sources = sources.split(","); sources = sources.split(",");
sources.forEach(function (filepath, index) { sources.forEach(function (filepath, index) {
...@@ -65,7 +65,6 @@ module.exports = function (grunt) { ...@@ -65,7 +65,6 @@ module.exports = function (grunt) {
files: (function () { files: (function () {
var files = {}; var files = {};
files[distPath + 'kityminder.all.min.js'] = distPath + 'kityminder.all.js'; files[distPath + 'kityminder.all.min.js'] = distPath + 'kityminder.all.js';
console.log(files);
return files; return files;
})() })()
} }
...@@ -101,7 +100,7 @@ module.exports = function (grunt) { ...@@ -101,7 +100,7 @@ module.exports = function (grunt) {
overwrite: true, overwrite: true,
replacements: [{ replacements: [{
from: /kity\/dist\/kity\.js/ig, from: /kity\/dist\/kity\.js/ig,
to: 'lib/kitygraph.all.min.js' to: 'lib/kity.min.js'
}, { }, {
from: /import\.js/, from: /import\.js/,
to: 'kityminder.all.min.js' to: 'kityminder.all.min.js'
...@@ -154,13 +153,15 @@ module.exports = function (grunt) { ...@@ -154,13 +153,15 @@ module.exports = function (grunt) {
grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-text-replace'); grunt.loadNpmTasks('grunt-text-replace');
// Build task(s).
grunt.registerTask('default', ['concat', 'uglify', 'copy', 'replace']);
/* [liverload plugin & task ] ------------------------------------*/ /* [liverload plugin & task ] ------------------------------------*/
grunt.loadNpmTasks('grunt-regarde'); grunt.loadNpmTasks('grunt-regarde');
grunt.loadNpmTasks('grunt-contrib-connect'); grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-livereload'); grunt.loadNpmTasks('grunt-contrib-livereload');
// Build task(s).
grunt.registerTask('default', ['concat', 'uglify', 'copy', 'replace']);
grunt.registerTask('live', ['livereload-start', 'connect', 'regarde']); grunt.registerTask('live', ['livereload-start', 'connect', 'regarde']);
}; };
\ No newline at end of file
...@@ -2,17 +2,19 @@ Kity Minder ...@@ -2,17 +2,19 @@ Kity Minder
========== ==========
## 简介 ## 简介
KityMinder 是百度 FEX 团队的 f-cube 小组(原UEditor小组)的又一力作。作为一款在线的脑图编辑工具,它有着很多Native编辑工具的交互体验。KM与UE有着一样的宗旨,就是注重最终用户的使用体验。同时,它充分发挥了Web云存储的优势,可以直接将编辑中的脑图同步到云端。此外,借由独创的 “云盘分享”功能,用户可以一键将当前编辑的脑图直接生成在线链接共享给其他用户,实现无缝沟通。
KityMinder 是百度 FEX 团队的 f-cube 小组(原 UEditor 小组)的又一力作。作为一款在线的脑图编辑工具,它有着不亚于 native 脑图工具的交互体验。同时,它充分发挥了 Web 云存储的优势,可以直接将编辑中的脑图同步到云端。此外,借由独创的 “云盘分享”功能,用户可以一键将当前编辑的脑图直接生成在线链接共享给其他用户,实现无缝沟通。
![KityMinder](summary.jpg "KityMinder 界面") ![KityMinder](summary.jpg "KityMinder 界面")
KM是基于SVG技术实现,使用JavaScript+html实现。支持绝大多数的主流浏览器。 KityMinder 基于 SVG 技术实现,支持绝大多数的主流浏览器,包括:
支持列表如下
1. Chrome 1. Chrome
2. Firefox 2. Firefox
3. Safari 3. Safari
4. IE9+ 4. IE9+<sup>*</sup>
*: IE9 不支持部分导出功能。
## 线上版本 ## 线上版本
...@@ -34,9 +36,9 @@ KM是基于SVG技术实现,使用JavaScript+html实现。支持绝大多数的 ...@@ -34,9 +36,9 @@ KM是基于SVG技术实现,使用JavaScript+html实现。支持绝大多数的
## 依赖说明 ## 依赖说明
KityMinder 依赖 Kity 库。刚下载的压缩包或者刚从 github 拉下来的代码会有一个空的 kity 目录。要运行调试,必须加载 Kity 的依赖: KityMinder 依赖 Kity 库。刚下载的压缩包或者刚从 github 拉下来的代码会有一个空的 Kity 目录。要运行调试,必须加载 Kity 的依赖:
1. 如果你下载的是 KityMinder 的压缩包,那么需要手动下载 [Kity](http://kitygraph.github.io/kityminder/kity/dist/kitygraph.all.js) 库到 kity/dist/kitygraph.all.js 1. 如果你下载的是 KityMinder 的压缩包,那么需要手动下载 [Kity](http://fex.baidu.com/kityminder/kity/dist/kity.js) 库到 kity/dist/kity.js
2. 如果你是从 github 上拉源代码下来的,那么可以更新一下子模块: 2. 如果你是从 github 上拉源代码下来的,那么可以更新一下子模块:
...@@ -47,5 +49,6 @@ git submodule update ...@@ -47,5 +49,6 @@ git submodule update
``` ```
## 联系我们 ## 联系我们
邮件: kity@baidu.com
邮件组: kity@baidu.com
讨论群: 374918234 讨论群: 374918234
( function ( utils ) { (function(utils) {
var content = '<div class="image-content" style="padding:20px;width:360px;">'; var content = '<div class="image-content" style="padding:20px;width:360px;">';
content += '<style>'; content += '<style>';
content += '.kmui-dialog-<%= container %> input{'; content += '.kmui-dialog-<%= container %> input{';
...@@ -36,39 +36,39 @@ ...@@ -36,39 +36,39 @@
KM.registerWidget( 'image', { KM.registerWidget('image', {
tpl: content, tpl: content,
initContent: function ( km ) { initContent: function(km) {
var lang = km.getLang( 'dialogs.image' ), var lang = km.getLang('dialogs.image'),
html; html;
if ( lang ) { if (lang) {
html = $.parseTmpl( this.tpl, utils.extend( { html = $.parseTmpl(this.tpl, utils.extend({
'container': 'image' 'container': 'image'
}, lang ) ); }, lang));
} }
this.root().html( html ); this.root().html(html);
}, },
initEvent: function ( km, $w ) { initEvent: function(km, $w) {
$w.find( '#image_insert' ).on( 'click', function () { $w.find('#image_insert').on('click', function() {
km.execCommand( 'image', $w.find( '#image_href' ).val() ); km.execCommand('image', $w.find('#image_href').val());
$w.kmui().hide(); $w.kmui().hide();
} ); });
$w.find( '#image_href' ).on( 'keydown', function ( e ) { $w.find('#image_href').on('keydown', function(e) {
if ( e.keyCode === 13 ) { if (e.keyCode === 13) {
km.execCommand( 'image', $w.find( '#image_href' ).val() ); km.execCommand('image', $w.find('#image_href').val());
$w.kmui().hide(); $w.kmui().hide();
} }
} ).on('input', function() { }).on('input', function() {
$w.find('#image_preview').attr('src', $w.find( '#image_href' ).val()); $w.find('#image_preview').attr('src', $w.find('#image_href').val());
}); });
var url = km.queryCommandValue( 'image' ); var url = km.queryCommandValue('image');
var $input = $w.find( '#image_href' ); var $input = $w.find('#image_href');
$input.val( url || 'http://' ); $input.val(url || 'http://');
if(url) $w.find('#image_preview').attr('src', url); if (url) $w.find('#image_preview').attr('src', url);
setTimeout( function () { setTimeout(function() {
$input.focus(); $input.focus();
} ); });
}, },
width: 400 width: 400
} ); });
} )( KM.Utils ); })(KM.Utils);
\ No newline at end of file \ No newline at end of file
(function (utils) { (function(utils) {
KM.registerWidget('resource', { KM.registerWidget('resource', {
tpl: tpl: '<div class="resource-container">' +
'<div class="resource-container">' + '<div class="add-resource">' +
'<div class="add-resource">' + '<input type="text" /><button class="button">添加</button>' +
'<input type="text" /><button class="button">添加</button>' + '<ul class="global-resource"></ul>' +
'<ul class="global-resource"></ul>' + '</div>' +
'</div>' +
'</div>' + '</div>' +
'<div class="no-selected">未选中节点</div>', '<div class="no-selected">未选中节点</div>',
initContent: function (km, $w) { initContent: function(km, $w) {
var lang = km.getLang('dialogs.resource'), var lang = km.getLang('dialogs.resource'),
html = $.parseTmpl(this.tpl, lang); html = $.parseTmpl(this.tpl, lang);
this.root().html(html); this.root().html(html);
}, },
initEvent: function (km, $w) { initEvent: function(km, $w) {
var $container = $w.find('.resource-container'); var $container = $w.find('.resource-container');
var $noSelected = $w.find('.no-selected'); var $noSelected = $w.find('.no-selected');
var $current = $w.find('.current-resource').hide(); var $current = $w.find('.current-resource').hide();
...@@ -43,7 +42,7 @@ ...@@ -43,7 +42,7 @@
$addInput.val(null); $addInput.val(null);
} }
$addInput.on('keydown', function (e) { $addInput.on('keydown', function(e) {
if (e.keyCode == 13) addResource(); if (e.keyCode == 13) addResource();
}); });
...@@ -51,25 +50,25 @@ ...@@ -51,25 +50,25 @@
switchDisplay(); switchDisplay();
$global.delegate('input[type=checkbox]', 'change', function () { $global.delegate('input[type=checkbox]', 'change', function() {
km.execCommand('resource', $global.find('input[type=checkbox]:checked').map(function (index, chk) { km.execCommand('resource', $global.find('input[type=checkbox]:checked').map(function(index, chk) {
return $(chk).data('resource'); return $(chk).data('resource');
}).toArray()); }).toArray());
}); });
km.on('interactchange', function (e) { km.on('interactchange', function(e) {
var resource = this.queryCommandValue("resource"); var resource = this.queryCommandValue("resource");
var used = this.getUsedResource(); var used = this.getUsedResource();
switchDisplay(); switchDisplay();
$global.empty().append(used.map(function (name) { $global.empty().append(used.map(function(name) {
var $li = $('<li></li>'), var $li = $('<li></li>'),
$label = $('<label></label>').appendTo($li), $label = $('<label></label>').appendTo($li),
$chk = $('<input type="checkbox" />') $chk = $('<input type="checkbox" />')
.data('resource', name) .data('resource', name)
.prop('checked', ~resource.indexOf(name)) .prop('checked', ~resource.indexOf(name))
.appendTo($label); .appendTo($label);
$label.append(name); $label.append(name);
var color = km.getResourceColor(name); var color = km.getResourceColor(name);
return $li.css({ return $li.css({
......
...@@ -7,26 +7,26 @@ ...@@ -7,26 +7,26 @@
<meta name="description" content="百度脑图,便捷的脑图编辑工具。让您在线上直接创建、保存并分享你的思路。"> <meta name="description" content="百度脑图,便捷的脑图编辑工具。让您在线上直接创建、保存并分享你的思路。">
<script src="lib/jquery-2.1.0.min.js?_=1401256332199" charset="utf-8"></script> <script src="lib/jquery-2.1.0.min.js?_=1403688582922" charset="utf-8"></script>
<script src="lib/ZeroClipboard.min.js?_=1401256332199" charset="utf-8"></script> <script src="lib/ZeroClipboard.min.js?_=1403688582922" charset="utf-8"></script>
<script type="text/javascript"> <script type="text/javascript">
ZeroClipboard.setDefaults( { moviePath: 'lib/ZeroClipboard.swf' } ); ZeroClipboard.setDefaults( { moviePath: 'lib/ZeroClipboard.swf' } );
</script> </script>
<script src="lib/kitygraph.all.min.js?_=1401256332199" charset="utf-8"></script> <script src="lib/kity.min.js?_=1403688582922" charset="utf-8"></script>
<script src="kityminder.all.min.js?_=1401256332199" charset="utf-8"></script> <script src="kityminder.all.min.js?_=1403688582922" charset="utf-8"></script>
<script src="kityminder.config.js?_=1401256332199" charset="utf-8"></script> <script src="kityminder.config.js?_=1403688582922" charset="utf-8"></script>
<script src="lang/zh-cn/zh-cn.js?_=1401256332199" charset="utf-8"></script> <script src="lang/zh-cn/zh-cn.js?_=1403688582922" charset="utf-8"></script>
<script src="lib/zip.js?_=1401256332199" charset="utf-8"></script> <script src="lib/zip.js?_=1403688582922" charset="utf-8"></script>
<script> <script>
zip.inflateJSPath = 'lib/inflate.js'; zip.inflateJSPath = 'lib/inflate.js';
</script> </script>
<script src="lib/jquery.xml2json.js?_=1401256332199" charset="utf-8"></script> <script src="lib/jquery.xml2json.js?_=1403688582922" charset="utf-8"></script>
<script src="lib/baidu-frontia-js-full-1.0.0.js?_=1401256332199" charset="utf-8"></script> <script src="lib/baidu-frontia-js-full-1.0.0.js?_=1403688582922" charset="utf-8"></script>
<script src="social/draftmanager.js?_=1401256332199" charset="utf-8"></script> <script src="social/draftmanager.js?_=1403688582922" charset="utf-8"></script>
<script src="social/social.js?_=1401256332199" charset="utf-8"></script> <script src="social/social.js?_=1403688582922" charset="utf-8"></script>
<link href="social/social.css" rel="stylesheet"> <link href="social/social.css" rel="stylesheet">
<link href="themes/default/css/import.css" type="text/css" rel="stylesheet" /> <link href="themes/default/css/import.css" type="text/css" rel="stylesheet" />
...@@ -62,8 +62,8 @@ ...@@ -62,8 +62,8 @@
</body> </body>
<script> <script>
// create km instance // create km instance
window.km = KM.getKityMinder('kityminder'); km = KM.getKityMinder('kityminder');
// New Version Notify // New Version Notify
$(function() { $(function() {
...@@ -75,6 +75,18 @@ ...@@ -75,6 +75,18 @@
localStorage.lastKMVersion = KM.version; localStorage.lastKMVersion = KM.version;
} }
}); });
km.on('unziperror', function(ev){
alert('unziperror');
});
km.on('parseerror', function(ev){
alert('parseerror');
});
km.on('unknownprotocal', function(ev){
alert('unknownprotocal');
});
</script> </script>
<!--Baidu Tongji Code--> <!--Baidu Tongji Code-->
......
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
(function () { (function() {
function getKMBasePath(docUrl, confUrl) { function getKMBasePath(docUrl, confUrl) {
return getBasePath(docUrl || self.document.URL || self.location.href, confUrl || getConfigFilePath()); return getBasePath(docUrl || self.document.URL || self.location.href, confUrl || getConfigFilePath());
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
'KITYMINDER_HOME_URL': getKMBasePath(), 'KITYMINDER_HOME_URL': getKMBasePath(),
//定义工具栏 //定义工具栏
toolbars: [ toolbars: [
'hand | zoom-in zoom zoom-out | collapsenode expandnode | undo redo | bold italic | fontfamily fontsize forecolor | saveto | switchlayout | hyperlink unhyperlink image removeimage | markers resource | node | help' 'hand | zoom-in zoom zoom-out | collapsenode expandnode | undo redo | bold italic | fontfamily fontsize forecolor | saveto | hyperlink unhyperlink image removeimage | markers resource | node | help'
] ]
//只读模式,默认是false //只读模式,默认是false
//readOnly: true //readOnly: true
......
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -716,11 +716,17 @@ ...@@ -716,11 +716,17 @@
function seekEOCDR(offset, entriesCallback) { function seekEOCDR(offset, entriesCallback) {
reader.readUint8Array(reader.size - offset, offset, function(bytes) { reader.readUint8Array(reader.size - offset, offset, function(bytes) {
var dataView = getDataHelper(bytes.length, bytes).view; var dataView = getDataHelper(bytes.length, bytes).view;
if (dataView.getUint32(0) != 0x504b0506) { try{
seekEOCDR(offset + 1, entriesCallback); if (dataView.getUint32(0) != 0x504b0506) {
} else { seekEOCDR(offset + 1, entriesCallback);
entriesCallback(dataView); } else {
entriesCallback(dataView);
}
}catch(e){
console.log(e);
onerror(ERR_READ);
} }
}, function() { }, function() {
onerror(ERR_READ); onerror(ERR_READ);
}); });
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"name": "kityminder", "name": "kityminder",
"title": "kityminder", "title": "kityminder",
"description": "Kity Minder", "description": "Kity Minder",
"version": "1.1.3.1", "version": "1.1.3",
"homepage": "https://github.com/fex-team/kityminder", "homepage": "https://github.com/fex-team/kityminder",
"author": { "author": {
"name": "f-cube @ FEX", "name": "f-cube @ FEX",
......
...@@ -42,6 +42,10 @@ kity.extendClass(MinderNode, { ...@@ -42,6 +42,10 @@ kity.extendClass(MinderNode, {
return this.getLayoutInstance().getOrderHint(this); return this.getLayoutInstance().getOrderHint(this);
}, },
getExpandPosition: function() {
return this.getLayoutInstance().getExpandPosition();
},
getLayoutInstance: function() { getLayoutInstance: function() {
var LayoutClass = KityMinder._layout[this.getLayout()]; var LayoutClass = KityMinder._layout[this.getLayout()];
var layout = new LayoutClass(); var layout = new LayoutClass();
...@@ -128,30 +132,19 @@ kity.extendClass(MinderNode, { ...@@ -128,30 +132,19 @@ kity.extendClass(MinderNode, {
} }
} }
this.getMinder().layout(this, duration); this.getMinder().layout(duration);
return this; return this;
},
getLayoutContextPoints: function() {
return this.getLayoutInstance().getLayoutContextPoints(this);
} }
}); });
kity.extendClass(Minder, { kity.extendClass(Minder, {
layout: function(root, duration) { layout: function(duration) {
if (+root === root) {
duration = root;
root = null;
}
root = root || this.getRoot();
// traverse without root this.getRoot().traverse(function(node) {
root.traverse(function(node) {
node.setLayoutTransform(null); node.setLayoutTransform(null);
}, true); });
function layoutNode(node) { function layoutNode(node) {
...@@ -167,17 +160,24 @@ kity.extendClass(Minder, { ...@@ -167,17 +160,24 @@ kity.extendClass(Minder, {
layout.doLayout(node); layout.doLayout(node);
} }
layoutNode(root); layoutNode(this.getRoot());
this.applyLayoutResult(root, duration); this.applyLayoutResult(this.getRoot(), duration);
return this.fire('layout'); return this.fire('layout');
}, },
refresh: function(duration) {
this.getRoot().preTraverse(function(node) { node.render(); });
return this.layout(duration);
},
applyLayoutResult: function(root, duration) { applyLayoutResult: function(root, duration) {
root = root || this.getRoot(); root = root || this.getRoot();
var me = this; var me = this;
if (root.getComplex() > 100) duration = 0;
function apply(node, pMatrix) { function apply(node, pMatrix) {
var matrix = node.getLayoutTransform().merge(pMatrix); var matrix = node.getLayoutTransform().merge(pMatrix);
var lastMatrix = node._lastLayoutTransform || new kity.Matrix(); var lastMatrix = node._lastLayoutTransform || new kity.Matrix();
......
...@@ -37,6 +37,13 @@ var MinderNode = KityMinder.MinderNode = kity.createClass('MinderNode', { ...@@ -37,6 +37,13 @@ var MinderNode = KityMinder.MinderNode = kity.createClass('MinderNode', {
return this.root === this; return this.root === this;
}, },
/**
* 判断节点是否叶子
*/
isLeaf: function() {
return this.children.length === 0;
},
/** /**
* 获取节点的根节点 * 获取节点的根节点
*/ */
...@@ -65,11 +72,14 @@ var MinderNode = KityMinder.MinderNode = kity.createClass('MinderNode', { ...@@ -65,11 +72,14 @@ var MinderNode = KityMinder.MinderNode = kity.createClass('MinderNode', {
}, },
/** /**
* 获得节点的复杂度 * 获得节点的复杂度(即子树中节点的数量)
* @return {[type]} [description]
*/ */
getComplex: function() { getComplex: function() {
var complex = 0;
this.traverse(function() {
complex++;
});
return complex;
}, },
/** /**
......
...@@ -33,6 +33,7 @@ KityMinder.registerLayout('bottom', kity.createClass({ ...@@ -33,6 +33,7 @@ KityMinder.registerLayout('bottom', kity.createClass({
return box; return box;
}); });
var nodeContentBox = node.getContentBox(); var nodeContentBox = node.getContentBox();
node.setLayoutVector(new kity.Vector(nodeContentBox.cx - 5, nodeContentBox.bottom));
var i, x, y, child, childTreeBox, childContentBox; var i, x, y, child, childTreeBox, childContentBox;
var transform = new kity.Matrix(); var transform = new kity.Matrix();
x = -totalTreeWidth / 2; x = -totalTreeWidth / 2;
...@@ -50,7 +51,6 @@ KityMinder.registerLayout('bottom', kity.createClass({ ...@@ -50,7 +51,6 @@ KityMinder.registerLayout('bottom', kity.createClass({
y = nodeContentBox.height + node.getStyle('margin-bottom') + children[i].getStyle('margin-top'); y = nodeContentBox.height + node.getStyle('margin-bottom') + children[i].getStyle('margin-top');
children[i].setLayoutTransform(new kity.Matrix().translate(x, y)); children[i].setLayoutTransform(new kity.Matrix().translate(x, y));
x += childTreeBox.width / 2 + children[i].getStyle('margin-right'); x += childTreeBox.width / 2 + children[i].getStyle('margin-right');
child.setLayoutVector(new kity.Vector(childContentBox.cx - 5, childContentBox.bottom));
} }
} }
} }
...@@ -64,6 +64,5 @@ KityMinder.registerConnectProvider('bottom', function(node, parent, connection) ...@@ -64,6 +64,5 @@ KityMinder.registerConnectProvider('bottom', function(node, parent, connection)
pathData.push('L', new kity.Point(pBox.cx, pBox.bottom + parent.getStyle('margin-bottom'))); pathData.push('L', new kity.Point(pBox.cx, pBox.bottom + parent.getStyle('margin-bottom')));
pathData.push('L', new kity.Point(box.cx, pBox.bottom + parent.getStyle('margin-bottom'))); pathData.push('L', new kity.Point(box.cx, pBox.bottom + parent.getStyle('margin-bottom')));
pathData.push('L', new kity.Point(box.cx, box.top)); pathData.push('L', new kity.Point(box.cx, box.top));
console.log(pathData);
connection.setPathData(pathData); connection.setPathData(pathData);
}); });
\ No newline at end of file
...@@ -14,7 +14,7 @@ KityMinder.registerConnectProvider('default', function(node, parent, connection, ...@@ -14,7 +14,7 @@ KityMinder.registerConnectProvider('default', function(node, parent, connection,
var start, end, vector; var start, end, vector;
var abs = Math.abs; var abs = Math.abs;
var pathData = []; var pathData = [];
var side = node.getLayoutVector().x > 0 ? 'right' : 'left'; var side = box.x > pBox.x ? 'right' : 'left';
node.getMinder().getPaper().addResource(connectMarker); node.getMinder().getPaper().addResource(connectMarker);
......
...@@ -66,6 +66,12 @@ KityMinder.registerLayout('default', kity.createClass({ ...@@ -66,6 +66,12 @@ KityMinder.registerLayout('default', kity.createClass({
y = -totalTreeHeight / 2; y = -totalTreeHeight / 2;
if (side != 'left') {
parent.setLayoutVector(new kity.Vector(nodeContentBox.right, nodeContentBox.cy));
} else {
parent.setLayoutVector(new kity.Vector(nodeContentBox.left, nodeContentBox.cy));
}
for (i = 0; i < children.length; i++) { for (i = 0; i < children.length; i++) {
child = children[i]; child = children[i];
childTreeBox = childTreeBoxes[i]; childTreeBox = childTreeBoxes[i];
...@@ -77,15 +83,9 @@ KityMinder.registerLayout('default', kity.createClass({ ...@@ -77,15 +83,9 @@ KityMinder.registerLayout('default', kity.createClass({
if (side == 'right') { if (side == 'right') {
x = nodeContentBox.right - childContentBox.left; x = nodeContentBox.right - childContentBox.left;
x += parent.getStyle('margin-right') + child.getStyle('margin-left'); x += parent.getStyle('margin-right') + child.getStyle('margin-left');
// 设置布局矢量
child.setLayoutVector(new kity.Vector(childContentBox.right, childContentBox.cy));
} else { } else {
x = nodeContentBox.left - childContentBox.right; x = nodeContentBox.left - childContentBox.right;
x -= parent.getStyle('margin-left') + child.getStyle('margin-right'); x -= parent.getStyle('margin-left') + child.getStyle('margin-right');
// 设置布局矢量
child.setLayoutVector(new kity.Vector(childContentBox.left, childContentBox.cy));
} }
// 竖直方向上的布局 // 竖直方向上的布局
......
...@@ -28,6 +28,7 @@ KityMinder.registerLayout('filetree', kity.createClass({ ...@@ -28,6 +28,7 @@ KityMinder.registerLayout('filetree', kity.createClass({
return box; return box;
}); });
var nodeContentBox = node.getContentBox(); var nodeContentBox = node.getContentBox();
node.setLayoutVector(new kity.Vector(nodeContentBox.left + 6, nodeContentBox.bottom));
var i, x, y, child, childTreeBox, childContentBox; var i, x, y, child, childTreeBox, childContentBox;
var transform = new kity.Matrix(); var transform = new kity.Matrix();
y = nodeContentBox.bottom + node.getStyle('margin-bottom'); y = nodeContentBox.bottom + node.getStyle('margin-bottom');
...@@ -41,7 +42,6 @@ KityMinder.registerLayout('filetree', kity.createClass({ ...@@ -41,7 +42,6 @@ KityMinder.registerLayout('filetree', kity.createClass({
y += child.getStyle('margin-top'); y += child.getStyle('margin-top');
child.setLayoutTransform(new kity.Matrix().translate(x, y)); child.setLayoutTransform(new kity.Matrix().translate(x, y));
y += childTreeBox.height + children[i].getStyle('margin-bottom'); y += childTreeBox.height + children[i].getStyle('margin-bottom');
child.setLayoutVector(new kity.Vector(childContentBox.left + 10, childContentBox.bottom));
} }
} }
}, },
......
...@@ -75,7 +75,7 @@ KityMinder.registerModule('Expand', function() { ...@@ -75,7 +75,7 @@ KityMinder.registerModule('Expand', function() {
node.traverse(function(node) { node.traverse(function(node) {
node.render(); node.render();
}); });
node.getMinder().layout(null, 200); node.getMinder().layout(200);
} }
// 将展开的操作和状态读取接口拓展到 MinderNode 上 // 将展开的操作和状态读取接口拓展到 MinderNode 上
......
/* global Renderer: true */ /* global Renderer: true */
var wireframe = /wire/.test(window.location.href);
var OutlineRenderer = kity.createClass('OutlineRenderer', { var OutlineRenderer = kity.createClass('OutlineRenderer', {
base: Renderer, base: Renderer,
create: function(node) { create: function(node) {
var group = new kity.Group();
var outline = this.outline = new kity.Rect() var outline = new kity.Rect()
.setId(KityMinder.uuid('node_outline')); .setId(KityMinder.uuid('node_outline'));
var shadow = this.shadow = new kity.Rect()
.setId(KityMinder.uuid('node_shadow'));
group.addShapes([shadow, outline]);
if (wireframe) {
var oxy = this.oxy = new kity.Path()
.stroke('#f6f')
.setPathData('M0,-50L0,50M-50,0L50,0');
var box = this.wireframe = new kity.Rect()
.stroke('lightgreen');
group.addShapes([oxy, box]);
}
this.bringToBack = true; this.bringToBack = true;
return group;
return outline;
}, },
update: function(created, node) { update: function(outline, node, box) {
var contentBox = node.getContentBox();
var paddingLeft = node.getStyle('padding-left'), var paddingLeft = node.getStyle('padding-left'),
paddingRight = node.getStyle('padding-right'), paddingRight = node.getStyle('padding-right'),
...@@ -40,51 +22,78 @@ var OutlineRenderer = kity.createClass('OutlineRenderer', { ...@@ -40,51 +22,78 @@ var OutlineRenderer = kity.createClass('OutlineRenderer', {
paddingBottom = node.getStyle('padding-bottom'); paddingBottom = node.getStyle('padding-bottom');
var outlineBox = { var outlineBox = {
x: contentBox.x - paddingLeft, x: box.x - paddingLeft,
y: contentBox.y - paddingTop, y: box.y - paddingTop,
width: contentBox.width + paddingLeft + paddingRight, width: box.width + paddingLeft + paddingRight,
height: contentBox.height + paddingTop + paddingBottom height: box.height + paddingTop + paddingBottom
}; };
this.outline
.setPosition(outlineBox.x, outlineBox.y)
.setSize(outlineBox.width, outlineBox.height)
.setRadius(node.getStyle('radius'));
var prefix = node.isSelected() ? 'selected-' : ''; var prefix = node.isSelected() ? 'selected-' : '';
this.outline.fill(node.getStyle(prefix + 'background')); outline
this.outline.stroke(node.getStyle(prefix + 'stroke'), .setPosition(outlineBox.x, outlineBox.y)
node.getStyle(prefix + 'stroke-width')); .setSize(outlineBox.width, outlineBox.height)
.setRadius(node.getStyle('radius'))
if (node.getStyle('shadow')) { .fill(node.getStyle(prefix + 'background'))
this.shadow .stroke(node.getStyle(prefix + 'stroke'),
.setVisible(true) node.getStyle(prefix + 'stroke-width'));
.setPosition(outlineBox.x + 4, outlineBox.y + 5)
.setSize(outlineBox.width, outlineBox.height)
.fill(node.getStyle('shadow'))
.setRadius(node.getStyle('radius'));
} else {
this.shadow.setVisible(false);
}
if (wireframe) {
this.wireframe
.setPosition(outlineBox.x, outlineBox.y)
.setSize(outlineBox.width, outlineBox.height);
}
return outlineBox; return outlineBox;
} }
}); });
var ShadowRenderer = kity.createClass('ShadowRenderer', { var ShadowRenderer = kity.createClass('ShadowRenderer', {
base: Renderer,
create: function(node) {
this.bringToBack = true;
return new kity.Rect();
},
shouldRender: function(node) {
return node.getStyle('shadow');
},
update: function(shadow, node, box) {
shadow.setPosition(box.x + 4, box.y + 5)
.setSize(box.width, box.height)
.fill(node.getStyle('shadow'))
.setRadius(node.getStyle('radius'));
}
});
var wireframeOption = /wire/.test(window.location.href);
var WireframeRenderer = kity.createClass('WireframeRenderer', {
base: Renderer,
create: function() {
var wireframe = new kity.Group();
var oxy = this.oxy = new kity.Path()
.stroke('#f6f')
.setPathData('M0,-50L0,50M-50,0L50,0');
var box = this.wireframe = new kity.Rect()
.stroke('lightgreen');
return wireframe.addShapes([oxy, box]);
},
shouldRender: function() {
return wireframeOption;
},
update: function(created, node, box) {
this.wireframe
.setPosition(box.x, box.y)
.setSize(box.width, box.height);
}
}); });
KityMinder.registerModule('OutlineModule', function() { KityMinder.registerModule('OutlineModule', function() {
return { return {
renderers: { renderers: {
outline: OutlineRenderer outline: OutlineRenderer,
outside: [ShadowRenderer, WireframeRenderer]
} }
}; };
}); });
\ No newline at end of file
...@@ -26,7 +26,7 @@ KityMinder.registerModule('Select', function() { ...@@ -26,7 +26,7 @@ KityMinder.registerModule('Select', function() {
return this.selectEnd(); return this.selectEnd();
} }
startPosition = g.snapToSharp(e.getPosition()); startPosition = g.snapToSharp(e.getPosition('paper'));
}, },
selectMove: function(e) { selectMove: function(e) {
if (minder.getStatus() == 'textedit') { if (minder.getStatus() == 'textedit') {
...@@ -35,7 +35,9 @@ KityMinder.registerModule('Select', function() { ...@@ -35,7 +35,9 @@ KityMinder.registerModule('Select', function() {
if (!startPosition) return; if (!startPosition) return;
var p1 = startPosition, var p1 = startPosition,
p2 = e.getPosition(); p2 = e.getPosition('paper');
console.log(e.kityEvent.targetShape);
// 检测是否要进入选区模式 // 检测是否要进入选区模式
if (!marqueeMode) { if (!marqueeMode) {
......
...@@ -14,7 +14,7 @@ KityMinder.registerTheme('bottom', { ...@@ -14,7 +14,7 @@ KityMinder.registerTheme('bottom', {
'main-font-size': 16, 'main-font-size': 16,
'main-padding': [6, 20], 'main-padding': [6, 20],
'main-margin': [30, 0, 10, 0], 'main-margin': [30, 0, 10, 0],
'main-radius': 10, 'main-radius': 5,
'main-space': 5, 'main-space': 5,
'sub-color': 'white', 'sub-color': 'white',
......
...@@ -13,8 +13,8 @@ KityMinder.registerTheme('filetree', { ...@@ -13,8 +13,8 @@ KityMinder.registerTheme('filetree', {
'main-stroke': 'none', 'main-stroke': 'none',
'main-font-size': 16, 'main-font-size': 16,
'main-padding': [6, 20], 'main-padding': [6, 20],
'main-margin': [30, 0, 10, 0], 'main-margin': [15, 15, 15, 10],
'main-radius': 10, 'main-radius': 0,
'main-space': 5, 'main-space': 5,
'sub-color': 'black', 'sub-color': 'black',
...@@ -22,8 +22,8 @@ KityMinder.registerTheme('filetree', { ...@@ -22,8 +22,8 @@ KityMinder.registerTheme('filetree', {
'sub-stroke': 'none', 'sub-stroke': 'none',
'sub-font-size': 12, 'sub-font-size': 12,
'sub-padding': [5, 10], 'sub-padding': [5, 10],
'sub-margin': [5, 15, 10, 5], 'sub-margin': [15, 15, 15, 10],
'sub-radius': 5, 'sub-radius': 0,
'sub-space': 5, 'sub-space': 5,
'connect-color': 'white', 'connect-color': 'white',
......
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