kityminder
Version:
104 lines (98 loc) • 3.31 kB
JavaScript
/**
* @fileOverview
*
* 节点选择功能
*
* @author: techird
* @copyright: Baidu FEX, 2014
*/
KityMinder.registerUI('ribbon/view/select', function(minder) {
var $tabs = minder.getUI('ribbon/tabs');
var $selectPanel = new FUI.LabelPanel({
label: minder.getLang('panels.level'),
column: true
}).appendTo($tabs.view);
var $selectButtonMenu = new FUI.ButtonMenu({
id: 'select-button-menu',
text: minder.getLang('ui.select'),
layout: 'bottom',
buttons: [{}, {
label: minder.getLang('ui.selectall')
}],
menu: {
items: ['revert', 'siblings', 'level', 'path', 'tree'].map(function(mode) {
return {
label: minder.getLang('ui.select' + mode),
value: mode
};
})
}
}).appendTo($selectPanel);
var select = {
all: function() {
var selection = [];
minder.getRoot().traverse(function(node) {
selection.push(node);
});
minder.select(selection, true);
},
revert: function() {
var selected = minder.getSelectedNodes();
var selection = [];
minder.getRoot().traverse(function(node) {
if (selected.indexOf(node) == -1) {
selection.push(node);
}
});
minder.select(selection, true);
},
siblings: function() {
var selected = minder.getSelectedNodes();
var selection = [];
selected.forEach(function(node) {
if (!node.parent) return;
node.parent.children.forEach(function(sibling) {
if (selection.indexOf(sibling) == -1) selection.push(sibling);
});
});
minder.select(selection, true);
},
level: function() {
var selectedLevel = minder.getSelectedNodes().map(function(node) {
return node.getLevel();
});
var selection = [];
minder.getRoot().traverse(function(node) {
if (selectedLevel.indexOf(node.getLevel()) != -1) {
selection.push(node);
}
});
minder.select(selection, true);
},
path: function() {
var selected = minder.getSelectedNodes();
var selection = [];
selected.forEach(function(node) {
while(node && selection.indexOf(node) == -1) {
selection.push(node);
node = node.parent;
}
});
minder.select(selection, true);
},
tree: function() {
var selected = minder.getSelectedNodes();
var selection = [];
selected.forEach(function(parent) {
parent.traverse(function(node) {
if (selection.indexOf(node) == -1) selection.push(node);
});
});
minder.select(selection, true);
}
};
$selectButtonMenu.on('buttonclick', select.all);
$selectButtonMenu.on('select', function(e, info) {
select[info.value]();
});
});