focus.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.Focus = void 0;
  4. const WalkerUtil = require("./walker_util.js");
  5. class Focus {
  6. static factory(primaryId, nodeIds, rebuilt, dom) {
  7. const idFunc = (id) => WalkerUtil.getBySemanticId(dom, id);
  8. const dict = rebuilt.nodeDict;
  9. const node = idFunc(primaryId);
  10. const nodes = nodeIds.map(idFunc);
  11. const snodes = nodeIds.map(function (primaryId) {
  12. return dict[primaryId];
  13. });
  14. const focus = new Focus(snodes, dict[primaryId]);
  15. focus.domNodes = nodes;
  16. focus.domPrimary_ = node;
  17. focus.allNodes = Focus.generateAllVisibleNodes_(nodeIds, nodes, dict, dom);
  18. return focus;
  19. }
  20. static generateAllVisibleNodes_(ids, nodes, dict, domNode) {
  21. let result = [];
  22. for (let i = 0, l = ids.length; i < l; i++) {
  23. if (nodes[i]) {
  24. const allNodes = Focus.getAllVisibleNodes([ids[i]], domNode);
  25. if (allNodes.length) {
  26. result = result.concat(allNodes);
  27. }
  28. else {
  29. result.push(nodes[i]);
  30. }
  31. continue;
  32. }
  33. const virtual = dict[ids[i]];
  34. if (!virtual) {
  35. continue;
  36. }
  37. const childIds = virtual.childNodes.map((x) => x.id.toString());
  38. const children = Focus.getAllVisibleNodes(childIds, domNode);
  39. result = result.concat(Focus.generateAllVisibleNodes_(childIds, children, dict, domNode));
  40. }
  41. return result;
  42. }
  43. static getAllVisibleNodes(ids, domNode) {
  44. let result = [];
  45. for (const id of ids) {
  46. result = result.concat(WalkerUtil.getAllBySemanticId(domNode, id));
  47. }
  48. return result;
  49. }
  50. constructor(nodes, primary) {
  51. this.nodes = nodes;
  52. this.primary = primary;
  53. this.domNodes = [];
  54. this.domPrimary_ = null;
  55. this.allNodes = [];
  56. }
  57. getSemanticPrimary() {
  58. return this.primary;
  59. }
  60. getSemanticNodes() {
  61. return this.nodes;
  62. }
  63. getNodes() {
  64. return this.allNodes;
  65. }
  66. getDomNodes() {
  67. return this.domNodes;
  68. }
  69. getDomPrimary() {
  70. return this.domPrimary_;
  71. }
  72. toString() {
  73. return 'Primary:' + this.domPrimary_ + ' Nodes:' + this.domNodes;
  74. }
  75. clone() {
  76. const focus = new Focus(this.nodes, this.primary);
  77. focus.domNodes = this.domNodes;
  78. focus.domPrimary_ = this.domPrimary_;
  79. focus.allNodes = this.allNodes;
  80. return focus;
  81. }
  82. }
  83. exports.Focus = Focus;