kityminder
Version:
289 lines (259 loc) • 9.1 kB
JavaScript
var AppendChildCommand = kity.createClass('AppendChildCommand', {
base: Command,
execute: function(km, text) {
var parent = km.getSelectedNode();
if (!parent) {
return null;
}
text = text || km.getLang('topic');
parent.expand();
var node = km.createNode(text, parent);
km.select(node, true);
node.render();
km.layout(600);
},
queryState: function(km) {
var selectedNode = km.getSelectedNode();
return selectedNode ? 0 : -1;
}
});
var AppendSiblingCommand = kity.createClass('AppendSiblingCommand', {
base: Command,
execute: function(km, text) {
var sibling = km.getSelectedNode();
var parent = sibling.parent;
if (!parent) {
return km.execCommand('AppendChildNode', text);
}
text = text || km.getLang('topic');
var node = km.createNode(text, parent, sibling.getIndex() + 1);
km.select(node, true);
node.render();
km.layout(600);
},
queryState: function(km) {
var selectedNode = km.getSelectedNode();
return selectedNode ? 0 : -1;
}
});
var RemoveNodeCommand = kity.createClass('RemoverNodeCommand', {
base: Command,
execute: function(km, text) {
var nodes = km.getSelectedNodes();
var ancestor = MinderNode.getCommonAncestor.apply(null, nodes);
nodes.forEach(function(node) {
if (!node.isRoot()) km.removeNode(node);
});
km.select(ancestor || km.getRoot(), true);
km.layout(600);
},
queryState: function(km) {
var selectedNode = km.getSelectedNode();
return selectedNode ? 0 : -1;
}
});
var EditNodeCommand = kity.createClass('EditNodeCommand', {
base: Command,
execute: function(km) {
var selectedNode = km.getSelectedNode();
if (!selectedNode) {
return null;
}
km.select(selectedNode, true);
km.textEditNode(selectedNode);
},
queryState: function(km) {
var selectedNode = km.getSelectedNode();
if (!selectedNode) {
return -1;
}
else {
return 0;
}
},
isNeedUndo: function() {
return false;
}
});
var $importDialog;
var $exportDialog;
var ImportTextNode = kity.createClass('ImportTextNode', {
base: Command,
execute: function(km, text) {
if (!$importDialog) {
var plainProtocol = km.getProtocol('plain');
var height = 400;
$importDialog = new FUI.Dialog({
width: 600,
height: height,
prompt: true,
caption: km.getLang('ui.importtextnode')
}).appendTo(document.getElementById('content-wrapper'));
var $dialogBody = $($importDialog.getBodyElement());
$dialogBody.html([
'<textarea style="width: 100%; height: ' + (height - 130) + 'px"></textarea>'
].join(''));
var $editor = $dialogBody.find('textarea');
var $ok = $importDialog.getButton(0);
var $errorMsg = $('<span class="validate-error"></span>');
var rootNode;
function check(value) {
var error;
if (!value) {
error = '内容不能为空';
}
else {
try {
rootNode = plainProtocol.decode(value, true);
}
catch (ex) {
error = '文本格式解析错误. ' + ex.message;
}
}
if (error) {
$editor.addClass('validate-error');
$errorMsg.text(error);
$ok.disable();
}
else {
$editor.removeClass('validate-error');
$errorMsg.text('');
$ok.enable();
}
}
$editor.after($errorMsg);
$editor.on('input', function() {
check($editor.val());
});
$editor.on('keydown keyup', function(e) {
if (e.keyCode === 9 && e.type === 'keydown') {
e.preventDefault();
var s = this.selectionStart;
this.value = this.value.substring(0, this.selectionStart) + '\t' +
this.value.substring(this.selectionEnd);
this.selectionEnd = s + 1;
}
if (e.keyCode === 13 && !e.shiftKey) {
return;
}
e.stopPropagation();
});
$importDialog.on('open', function() {
check($editor.val());
setTimeout(function() {
$editor[0].focus();
}, 10);
});
$importDialog.on('ok', function() {
var _selectedNodes = [];
function appendChild(parent, child, index) {
if (!parent || !child) {
return;
}
var kmNode = km.createNode(child.data.text, parent);
if (child.children) {
child.children.forEach(function(item) {
appendChild(kmNode, item);
});
}
kmNode.render();
return kmNode;
}
var selectedNode = km.getSelectedNode();
if (rootNode && rootNode.children && selectedNode) {
selectedNode.expand();
rootNode.children.forEach(function(child) {
_selectedNodes.push(appendChild(selectedNode, child));
});
}
km.select(_selectedNodes, true);
km.layout(300);
$editor.val('');
_selectedNodes = null;
rootNode = null;
});
}
$importDialog.open();
},
queryState: function(km) {
var selectedNode = km.getSelectedNode();
return selectedNode ? 0 : -1;
}
});
var ExportTextNode = kity.createClass('ExportTextNode', {
base: Command,
execute: function(km, text) {
if (!$exportDialog) {
var plainProtocol = km.getProtocol('plain');
var height = 400;
$exportDialog = new FUI.Dialog({
width: 600,
height: height,
prompt: true,
caption: km.getLang('ui.exporttextnode')
}).appendTo(document.getElementById('content-wrapper'));
var $dialogBody = $($exportDialog.getBodyElement());
$dialogBody.html([
'<textarea style="width: 100%; height: ' + (height - 130) + 'px"></textarea>'
].join(''));
var $editor = $dialogBody.find('textarea');
$editor.on('keydown keyup', function(e) {
if (e.keyCode === 9 && e.type === 'keydown') {
e.preventDefault();
var s = this.selectionStart;
this.value = this.value.substring(0, this.selectionStart) + '\t' +
this.value.substring(this.selectionEnd);
this.selectionEnd = s + 1;
}
if (e.keyCode === 13 && !e.shiftKey) {
return;
}
e.stopPropagation();
});
$exportDialog.on('open', function() {
$editor.val(plainProtocol.encode(km.getSelectedNode()));
setTimeout(function() {
$editor[0].focus();
}, 10);
});
}
$exportDialog.open();
},
queryState: function(km) {
var selectedNode = km.getSelectedNode();
return selectedNode ? 0 : -1;
}
});
KityMinder.registerModule('NodeModule', function() {
return {
commands: {
'AppendChildNode': AppendChildCommand,
'AppendSiblingNode': AppendSiblingCommand,
'ImportTextNode': ImportTextNode,
'ExportTextNode': ExportTextNode,
'RemoveNode': RemoveNodeCommand,
'EditNode': EditNodeCommand
},
'contextmenu': [{
command: 'appendsiblingnode'
}, {
command: 'appendchildnode'
}, {
command: 'editnode'
}, {
command: 'removenode'
}, {
command: 'importtextnode'
}, {
command: 'exporttextnode'
}, {
divider: 1
}],
'commandShortcutKeys': {
'appendsiblingnode': 'normal::Enter',
'appendchildnode': 'normal::Insert|Tab',
'editnode': 'normal::F2',
'removenode': 'normal::Del|Backspace'
}
};
});