findRelationNode.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. "use strict";
  2. function findRelationNode(node, p, type) {
  3. var isArray = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  4. // parent child ancestor descendant
  5. var nodes = [];
  6. var _prcess = {
  7. parent: function parent(_node) {
  8. if (!_node || !_node.$parent) {
  9. return;
  10. }
  11. var _p = _node.$parent.$self.is || _node.$parent.$self.route;
  12. if (_p === p) {
  13. return _node.$parent;
  14. }
  15. },
  16. child: function child(_node) {
  17. var _child = null;
  18. _node.$children.forEach(function (child) {
  19. var _p = child.$self.is;
  20. if (_p === p) {
  21. _child = child;
  22. if (!isArray) {
  23. return _child;
  24. }
  25. nodes.push(_child);
  26. }
  27. });
  28. return _child;
  29. },
  30. ancestor: function ancestor(__node) {
  31. if (!__node) {
  32. return;
  33. }
  34. var _node = null;
  35. _node = _prcess.parent(__node);
  36. if (!_node) {
  37. _node = _prcess.ancestor(__node.$parent);
  38. }
  39. return _node;
  40. },
  41. descendant: function descendant(__node) {
  42. var _node = null;
  43. _node = _prcess.child(__node);
  44. if (!_node) {
  45. __node.$children.forEach(function (c) {
  46. _node = _prcess.child(c);
  47. if (!_node) {
  48. _node = _prcess.descendant(c);
  49. }
  50. });
  51. }
  52. return _node;
  53. }
  54. };
  55. var ret = _prcess[type](node);
  56. if (isArray) {
  57. if (type === 'parent' || type === 'ancestor') {
  58. return [ret];
  59. }
  60. return nodes;
  61. }
  62. return ret;
  63. }
  64. module.exports = findRelationNode;