@7polo/kityminder-core
Version:
KityMinder Core Implement
159 lines (143 loc) • 5.92 kB
JavaScript
define(function(require, exports, module) {
var kity = require('../core/kity');
var utils = require('../core/utils');
var Minder = require('../core/minder');
var MinderNode = require('../core/node');
var Command = require('../core/command');
var Module = require('../core/module');
var TextRenderer = require('./text');
function getNodeDataOrStyle(node, name) {
return node.getData(name) || node.getStyle(name);
}
TextRenderer.registerStyleHook(function(node, textGroup) {
var dataColor = node.getData('color');
var selectedColor = node.getStyle('selected-color');
var styleColor = node.getStyle('color');
var foreColor = dataColor || (node.isSelected() && selectedColor ? selectedColor : styleColor);
var fontFamily = getNodeDataOrStyle(node, 'font-family');
var fontSize = getNodeDataOrStyle(node, 'font-size');
textGroup.fill(foreColor);
textGroup.eachItem(function(index, item) {
item.setFont({
'family': fontFamily,
'size': fontSize
});
});
});
Module.register('fontmodule', {
'commands': {
/**
* @command ForeColor
* @description 设置选中节点的字体颜色
* @param {string} color 表示颜色的字符串
* @state
* 0: 当前有选中的节点
* -1: 当前没有选中的节点
* @return 如果只有一个节点选中,返回已选中节点的字体颜色;否则返回 'mixed'。
*/
'forecolor': kity.createClass('fontcolorCommand', {
base: Command,
execute: function(km, color) {
var nodes = km.getSelectedNodes();
nodes.forEach(function(n) {
n.setData('color', color);
n.render();
});
},
queryState: function(km) {
return km.getSelectedNodes().length === 0 ? -1 : 0;
},
queryValue: function(km) {
if (km.getSelectedNodes().length == 1) {
return km.getSelectedNodes()[0].getData('color');
}
return 'mixed';
}
}),
/**
* @command Background
* @description 设置选中节点的背景颜色
* @param {string} color 表示颜色的字符串
* @state
* 0: 当前有选中的节点
* -1: 当前没有选中的节点
* @return 如果只有一个节点选中,返回已选中节点的背景颜色;否则返回 'mixed'。
*/
'background': kity.createClass('backgroudCommand', {
base: Command,
execute: function(km, color) {
var nodes = km.getSelectedNodes();
nodes.forEach(function(n) {
n.setData('background', color);
n.render();
});
},
queryState: function(km) {
return km.getSelectedNodes().length === 0 ? -1 : 0;
},
queryValue: function(km) {
if (km.getSelectedNodes().length == 1) {
return km.getSelectedNodes()[0].getData('background');
}
return 'mixed';
}
}),
/**
* @command FontFamily
* @description 设置选中节点的字体
* @param {string} family 表示字体的字符串
* @state
* 0: 当前有选中的节点
* -1: 当前没有选中的节点
* @return 返回首个选中节点的字体
*/
'fontfamily': kity.createClass('fontfamilyCommand', {
base: Command,
execute: function(km, family) {
var nodes = km.getSelectedNodes();
nodes.forEach(function(n) {
n.setData('font-family', family);
n.render();
km.layout();
});
},
queryState: function(km) {
return km.getSelectedNodes().length === 0 ? -1 : 0;
},
queryValue: function(km) {
var node = km.getSelectedNode();
if (node) return node.getData('font-family');
return null;
}
}),
/**
* @command FontSize
* @description 设置选中节点的字体大小
* @param {number} size 字体大小(px)
* @state
* 0: 当前有选中的节点
* -1: 当前没有选中的节点
* @return 返回首个选中节点的字体大小
*/
'fontsize': kity.createClass('fontsizeCommand', {
base: Command,
execute: function(km, size) {
var nodes = km.getSelectedNodes();
nodes.forEach(function(n) {
n.setData('font-size', size);
n.render();
km.layout(300);
});
},
queryState: function(km) {
return km.getSelectedNodes().length === 0 ? -1 : 0;
},
queryValue: function(km) {
var node = km.getSelectedNode();
if (node) return node.getData('font-size');
return null;
}
})
}
});
});