33ef8a13f94b177753ea3852cde2862d057729d25376cf6f7ce8597b1a51ab1d024c1b9e5fe8bd9448c73b454dce633bb44e2ab276845e452f6f54c14bb181 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
  6. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  7. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  8. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  9. return c > 3 && r && Object.defineProperty(target, key, r), r;
  10. };
  11. import { AbstractTree } from './abstractTree.js';
  12. import { CompressibleObjectTreeModel } from './compressedObjectTreeModel.js';
  13. import { ObjectTreeModel } from './objectTreeModel.js';
  14. import { memoize } from '../../../common/decorators.js';
  15. import { Iterable } from '../../../common/iterator.js';
  16. export class ObjectTree extends AbstractTree {
  17. constructor(user, container, delegate, renderers, options = {}) {
  18. super(user, container, delegate, renderers, options);
  19. this.user = user;
  20. }
  21. get onDidChangeCollapseState() { return this.model.onDidChangeCollapseState; }
  22. setChildren(element, children = Iterable.empty(), options) {
  23. this.model.setChildren(element, children, options);
  24. }
  25. rerender(element) {
  26. if (element === undefined) {
  27. this.view.rerender();
  28. return;
  29. }
  30. this.model.rerender(element);
  31. }
  32. hasElement(element) {
  33. return this.model.has(element);
  34. }
  35. createModel(user, view, options) {
  36. return new ObjectTreeModel(user, view, options);
  37. }
  38. }
  39. class CompressibleRenderer {
  40. constructor(_compressedTreeNodeProvider, renderer) {
  41. this._compressedTreeNodeProvider = _compressedTreeNodeProvider;
  42. this.renderer = renderer;
  43. this.templateId = renderer.templateId;
  44. if (renderer.onDidChangeTwistieState) {
  45. this.onDidChangeTwistieState = renderer.onDidChangeTwistieState;
  46. }
  47. }
  48. get compressedTreeNodeProvider() {
  49. return this._compressedTreeNodeProvider();
  50. }
  51. renderTemplate(container) {
  52. const data = this.renderer.renderTemplate(container);
  53. return { compressedTreeNode: undefined, data };
  54. }
  55. renderElement(node, index, templateData, height) {
  56. const compressedTreeNode = this.compressedTreeNodeProvider.getCompressedTreeNode(node.element);
  57. if (compressedTreeNode.element.elements.length === 1) {
  58. templateData.compressedTreeNode = undefined;
  59. this.renderer.renderElement(node, index, templateData.data, height);
  60. }
  61. else {
  62. templateData.compressedTreeNode = compressedTreeNode;
  63. this.renderer.renderCompressedElements(compressedTreeNode, index, templateData.data, height);
  64. }
  65. }
  66. disposeElement(node, index, templateData, height) {
  67. var _a, _b, _c, _d;
  68. if (templateData.compressedTreeNode) {
  69. (_b = (_a = this.renderer).disposeCompressedElements) === null || _b === void 0 ? void 0 : _b.call(_a, templateData.compressedTreeNode, index, templateData.data, height);
  70. }
  71. else {
  72. (_d = (_c = this.renderer).disposeElement) === null || _d === void 0 ? void 0 : _d.call(_c, node, index, templateData.data, height);
  73. }
  74. }
  75. disposeTemplate(templateData) {
  76. this.renderer.disposeTemplate(templateData.data);
  77. }
  78. renderTwistie(element, twistieElement) {
  79. if (this.renderer.renderTwistie) {
  80. return this.renderer.renderTwistie(element, twistieElement);
  81. }
  82. return false;
  83. }
  84. }
  85. __decorate([
  86. memoize
  87. ], CompressibleRenderer.prototype, "compressedTreeNodeProvider", null);
  88. function asObjectTreeOptions(compressedTreeNodeProvider, options) {
  89. return options && Object.assign(Object.assign({}, options), { keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && {
  90. getKeyboardNavigationLabel(e) {
  91. let compressedTreeNode;
  92. try {
  93. compressedTreeNode = compressedTreeNodeProvider().getCompressedTreeNode(e);
  94. }
  95. catch (_a) {
  96. return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e);
  97. }
  98. if (compressedTreeNode.element.elements.length === 1) {
  99. return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e);
  100. }
  101. else {
  102. return options.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(compressedTreeNode.element.elements);
  103. }
  104. }
  105. } });
  106. }
  107. export class CompressibleObjectTree extends ObjectTree {
  108. constructor(user, container, delegate, renderers, options = {}) {
  109. const compressedTreeNodeProvider = () => this;
  110. const compressibleRenderers = renderers.map(r => new CompressibleRenderer(compressedTreeNodeProvider, r));
  111. super(user, container, delegate, compressibleRenderers, asObjectTreeOptions(compressedTreeNodeProvider, options));
  112. }
  113. setChildren(element, children = Iterable.empty(), options) {
  114. this.model.setChildren(element, children, options);
  115. }
  116. createModel(user, view, options) {
  117. return new CompressibleObjectTreeModel(user, view, options);
  118. }
  119. updateOptions(optionsUpdate = {}) {
  120. super.updateOptions(optionsUpdate);
  121. if (typeof optionsUpdate.compressionEnabled !== 'undefined') {
  122. this.model.setCompressionEnabled(optionsUpdate.compressionEnabled);
  123. }
  124. }
  125. getCompressedTreeNode(element = null) {
  126. return this.model.getCompressedTreeNode(element);
  127. }
  128. }