@douyinfe/semi-json-viewer-core 2.72.2-alpha.0 → 2.72.2-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/index.js +63 -17
  2. package/package.json +2 -2
package/lib/index.js CHANGED
@@ -754,6 +754,7 @@ var HiddenRangeModel = class {
754
754
  constructor(foldingModel) {
755
755
  this._hiddenRanges = [];
756
756
  this._hasLineChanged = false;
757
+ this.emitter = getEmitter();
757
758
  this._foldingModel = foldingModel;
758
759
  if (this._foldingModel.regions.length) {
759
760
  this.updateHiddenRanges();
@@ -793,6 +794,7 @@ var HiddenRangeModel = class {
793
794
  applyHiddenRanges(newHiddenAreas) {
794
795
  this._hasLineChanged = false;
795
796
  this._hiddenRanges = newHiddenAreas;
797
+ this.emitter.emit("forceRender", void 0);
796
798
  }
797
799
  get hiddenRanges() {
798
800
  return this._hiddenRanges;
@@ -816,14 +818,12 @@ var HiddenRangeModel = class {
816
818
  }
817
819
  notifyChangeModelContent(e) {
818
820
  if (this._hiddenRanges.length && !this._hasLineChanged) {
819
- console.log("notifyChangeModelContent", e);
820
821
  if (Array.isArray(e)) {
821
822
  this._hasLineChanged = e.some((change) => {
822
823
  return change.range.endLineNumber !== change.range.startLineNumber || countEOL(change.newText)[0] !== 0 || countEOL(change.oldText)[0] !== 0;
823
824
  });
824
825
  } else {
825
826
  this._hasLineChanged = e.range.endLineNumber !== e.range.startLineNumber || countEOL(e.newText)[0] !== 0 || countEOL(e.oldText)[0] !== 0;
826
- console.log("notifyChangeModelContent", this._hasLineChanged);
827
827
  }
828
828
  }
829
829
  }
@@ -837,6 +837,9 @@ var FoldingModel = class {
837
837
  this.emitter = getEmitter();
838
838
  this._jsonModel = jsonModel;
839
839
  this.updateFoldingRanges();
840
+ this.emitter.on("contentChanged", (e) => {
841
+ this._hiddenRangeModel.notifyChangeModelContent(e);
842
+ });
840
843
  this.emitter.on("problemsChanged", (e) => {
841
844
  this._jsonWorkerManager.foldRange().then((ranges) => {
842
845
  const newRegions = FoldingRegions.fromFoldRanges(ranges);
@@ -855,7 +858,7 @@ var FoldingModel = class {
855
858
  });
856
859
  }
857
860
  update(newRegions, blockedLineNumers = []) {
858
- const foldedOrManualRanges = this._currentFoldedOrManualRanges(blockedLineNumers);
861
+ const foldedOrManualRanges = this._currentFoldedOrManualRanges(blockedLineNumers, newRegions);
859
862
  const newRanges = FoldingRegions.sanitizeAndMerge(
860
863
  newRegions,
861
864
  foldedOrManualRanges,
@@ -863,17 +866,35 @@ var FoldingModel = class {
863
866
  );
864
867
  this._regions = FoldingRegions.fromFoldRanges(newRanges);
865
868
  }
866
- _currentFoldedOrManualRanges(blockedLineNumers = []) {
869
+ _currentFoldedOrManualRanges(blockedLineNumers = [], newRegions) {
870
+ const isBlocked = (startLineNumber, endLineNumber) => {
871
+ if (newRegions) {
872
+ const index = newRegions.findRange(startLineNumber);
873
+ if (index === -1) return true;
874
+ const region = newRegions.toRegion(index);
875
+ if (!region || region.endLineNumber !== endLineNumber) return true;
876
+ }
877
+ for (const blockedLineNumber of blockedLineNumers) {
878
+ if (startLineNumber < blockedLineNumber && blockedLineNumber <= endLineNumber) {
879
+ return true;
880
+ }
881
+ }
882
+ return false;
883
+ };
867
884
  const foldedRanges = [];
868
885
  for (let i = 0; i < this._regions.length; i++) {
869
886
  if (this._regions.isCollapsed(i)) {
870
- foldedRanges.push({
871
- startLineNumber: this._regions.getStartLineNumber(i),
872
- endLineNumber: this._regions.getEndLineNumber(i),
873
- isCollapsed: true,
874
- source: 0 /* provider */,
875
- type: this._regions.getType(i)
876
- });
887
+ const startLineNumber = this._regions.getStartLineNumber(i);
888
+ const endLineNumber = this._regions.getEndLineNumber(i);
889
+ if (!isBlocked(startLineNumber, endLineNumber)) {
890
+ foldedRanges.push({
891
+ startLineNumber,
892
+ endLineNumber,
893
+ isCollapsed: true,
894
+ source: 0 /* provider */,
895
+ type: this._regions.getType(i)
896
+ });
897
+ }
877
898
  }
878
899
  }
879
900
  return foldedRanges;
@@ -912,6 +933,29 @@ var FoldingModel = class {
912
933
  if (!this._regions || !this._hiddenRangeModel) return this._jsonModel.getLineCount();
913
934
  return this._jsonModel.getLineCount() - this._hiddenRangeModel.getHiddenLineCount();
914
935
  }
936
+ getActualLineNumber(visibleLineNumber) {
937
+ if (!this._regions || !this._hiddenRangeModel) return visibleLineNumber;
938
+ let actualLine = visibleLineNumber;
939
+ const hiddenRanges = this._hiddenRangeModel.hiddenRanges;
940
+ for (const range of hiddenRanges) {
941
+ if (range.startLineNumber <= actualLine) {
942
+ actualLine += range.endLineNumber - range.startLineNumber + 1;
943
+ } else {
944
+ break;
945
+ }
946
+ }
947
+ return actualLine;
948
+ }
949
+ getNextVisibleLine(actualLineNumber) {
950
+ if (!this._regions || !this._hiddenRangeModel) return actualLineNumber + 1;
951
+ let nextLine = actualLineNumber + 1;
952
+ const hiddenRanges = this._hiddenRangeModel.hiddenRanges;
953
+ const containingRange = this._hiddenRangeModel.findRange(nextLine, hiddenRanges);
954
+ if (containingRange) {
955
+ return containingRange.endLineNumber + 1;
956
+ }
957
+ return nextLine;
958
+ }
915
959
  getRegionAtLine(lineNumber) {
916
960
  if (this._regions) {
917
961
  const index = this._regions.findRange(lineNumber);
@@ -1499,7 +1543,6 @@ var EditWidget = class {
1499
1543
  }
1500
1544
  _copyHandler() {
1501
1545
  const op = this.buildBaseOperation("replace");
1502
- console.log(op);
1503
1546
  navigator.clipboard.writeText(op.oldText);
1504
1547
  }
1505
1548
  };
@@ -3906,13 +3949,16 @@ var View = class {
3906
3949
  this.emitter.on("contentChanged", () => {
3907
3950
  this.resetScalingManagerConfigAndCell(0);
3908
3951
  if (this._jsonModel.lastChangeBufferPos.lineNumber >= this.visibleLineCount + this.startLineNumber) {
3909
- this.scrollToLine(
3910
- this._jsonModel.lastChangeBufferPos.lineNumber - this.visibleLineCount + 1
3911
- );
3952
+ this.scrollToLine(this._jsonModel.lastChangeBufferPos.lineNumber - this.visibleLineCount + 1);
3912
3953
  return;
3913
3954
  }
3914
3955
  this.layout();
3915
3956
  });
3957
+ this.emitter.on("forceRender", () => {
3958
+ this.resetScalingManagerConfigAndCell(0);
3959
+ this.layout();
3960
+ this._errorWidget.renderErrorLine();
3961
+ });
3916
3962
  }
3917
3963
  getLineElement(lineNumber) {
3918
3964
  return this.scrollDom.querySelector(`[data-line-number="${lineNumber}"]`);
@@ -4102,14 +4148,14 @@ var View = class {
4102
4148
  }
4103
4149
  renderVisibleLines(startVisibleLine, endVisibleLine) {
4104
4150
  this._tokenizationJsonModelPart.forceTokenize(endVisibleLine + 1);
4105
- let actualLineNumber = startVisibleLine + 1;
4151
+ let actualLineNumber = this._foldingModel.getActualLineNumber(startVisibleLine + 1);
4106
4152
  let visibleLineNumber = startVisibleLine;
4107
4153
  while (visibleLineNumber <= endVisibleLine && actualLineNumber <= this._jsonModel.getLineCount()) {
4108
4154
  if (!this._foldingModel.isLineCollapsed(actualLineNumber)) {
4109
4155
  this.renderLine(actualLineNumber, visibleLineNumber);
4110
4156
  visibleLineNumber++;
4111
4157
  }
4112
- actualLineNumber++;
4158
+ actualLineNumber = this._foldingModel.getNextVisibleLine(actualLineNumber);
4113
4159
  }
4114
4160
  }
4115
4161
  renderLine(actualLineNumber, visibleLineNumber) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@douyinfe/semi-json-viewer-core",
3
- "version": "2.72.2-alpha.0",
3
+ "version": "2.72.2-alpha.2",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/index.js",
@@ -53,5 +53,5 @@
53
53
  ],
54
54
  "author": "",
55
55
  "license": "MIT",
56
- "gitHead": "99c0a782670dd4decf43c29308a8f7ace14125ea"
56
+ "gitHead": "49ecf64970618ad594ae216fccf6d35b507bc52f"
57
57
  }