select.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /**
  2. * @fileOverview
  3. *
  4. * 节点选择功能
  5. *
  6. * @author: techird
  7. * @copyright: Baidu FEX, 2014
  8. */
  9. KityMinder.registerUI('ribbon/view/select', function(minder) {
  10. var $tabs = minder.getUI('ribbon/tabs');
  11. var $selectPanel = new FUI.LabelPanel({
  12. label: minder.getLang('panels.level'),
  13. column: true
  14. }).appendTo($tabs.view);
  15. var $selectButtonMenu = new FUI.ButtonMenu({
  16. id: 'select-button-menu',
  17. text: minder.getLang('ui.select'),
  18. layout: 'bottom',
  19. buttons: [{}, {
  20. label: minder.getLang('ui.selectall')
  21. }],
  22. menu: {
  23. items: ['revert', 'siblings', 'level', 'path', 'tree'].map(function(mode) {
  24. return {
  25. label: minder.getLang('ui.select' + mode),
  26. value: mode
  27. };
  28. })
  29. }
  30. }).appendTo($selectPanel);
  31. var select = {
  32. all: function() {
  33. var selection = [];
  34. minder.getRoot().traverse(function(node) {
  35. selection.push(node);
  36. });
  37. minder.select(selection, true);
  38. },
  39. revert: function() {
  40. var selected = minder.getSelectedNodes();
  41. var selection = [];
  42. minder.getRoot().traverse(function(node) {
  43. if (selected.indexOf(node) == -1) {
  44. selection.push(node);
  45. }
  46. });
  47. minder.select(selection, true);
  48. },
  49. siblings: function() {
  50. var selected = minder.getSelectedNodes();
  51. var selection = [];
  52. selected.forEach(function(node) {
  53. if (!node.parent) return;
  54. node.parent.children.forEach(function(sibling) {
  55. if (selection.indexOf(sibling) == -1) selection.push(sibling);
  56. });
  57. });
  58. minder.select(selection, true);
  59. },
  60. level: function() {
  61. var selectedLevel = minder.getSelectedNodes().map(function(node) {
  62. return node.getLevel();
  63. });
  64. var selection = [];
  65. minder.getRoot().traverse(function(node) {
  66. if (selectedLevel.indexOf(node.getLevel()) != -1) {
  67. selection.push(node);
  68. }
  69. });
  70. minder.select(selection, true);
  71. },
  72. path: function() {
  73. var selected = minder.getSelectedNodes();
  74. var selection = [];
  75. selected.forEach(function(node) {
  76. while(node && selection.indexOf(node) == -1) {
  77. selection.push(node);
  78. node = node.parent;
  79. }
  80. });
  81. minder.select(selection, true);
  82. },
  83. tree: function() {
  84. var selected = minder.getSelectedNodes();
  85. var selection = [];
  86. selected.forEach(function(parent) {
  87. parent.traverse(function(node) {
  88. if (selection.indexOf(node) == -1) selection.push(node);
  89. });
  90. });
  91. minder.select(selection, true);
  92. }
  93. };
  94. $selectButtonMenu.on('buttonclick', select.all);
  95. $selectButtonMenu.on('select', function(e, info) {
  96. select[info.value]();
  97. });
  98. });