Skip to content

Commit 51326eb

Browse files
committedJun 12, 2023
fix: regression in setting breakpoints on folded lines
1 parent 866fdde commit 51326eb

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed
 

‎src/layer/gutter.js

+9-9
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,6 @@ class Gutter{
316316
className += decorations[row];
317317
if (this.$annotations[row] && row !== foldStart)
318318
className += this.$annotations[row].className;
319-
if (element.className != className)
320-
element.className = className;
321319

322320
if (foldWidgets) {
323321
var c = foldWidgets[row];
@@ -327,10 +325,10 @@ class Gutter{
327325
}
328326

329327
if (c) {
330-
var className = "ace_fold-widget ace_" + c;
328+
var foldClass = "ace_fold-widget ace_" + c;
331329
if (c == "start" && row == foldStart && row < fold.end.row){
332-
className += " ace_closed";
333-
var foldAnnotationClass;
330+
foldClass += " ace_closed";
331+
var foldAnnotationClass = '';
334332
var annotationInFold = false;
335333

336334
for (var i = row + 1; i <= fold.end.row; i++){
@@ -349,12 +347,12 @@ class Gutter{
349347
}
350348
}
351349

352-
element.className += foldAnnotationClass;
350+
className += foldAnnotationClass;
353351
}
354352
else
355-
className += " ace_open";
356-
if (foldWidget.className != className)
357-
foldWidget.className = className;
353+
foldClass += " ace_open";
354+
if (foldWidget.className != foldClass)
355+
foldWidget.className = foldClass;
358356

359357
dom.setStyle(foldWidget.style, "height", lineHeight);
360358
dom.setStyle(foldWidget.style, "display", "inline-block");
@@ -418,6 +416,8 @@ class Gutter{
418416
textNode.data = rowText;
419417
}
420418

419+
if (element.className != className)
420+
element.className = className;
421421
dom.setStyle(cell.element.style, "height", this.$lines.computeLineHeight(row, config, session) + "px");
422422
dom.setStyle(cell.element.style, "top", this.$lines.computeLineTop(row, config, session) + "px");
423423

‎src/virtual_renderer_test.js

+23
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ module.exports = {
2525
require("./config").setLoader(function(moduleName, cb) {
2626
if (moduleName == "ace/ext/error_marker")
2727
return cb(null, require("./ext/error_marker"));
28+
if (moduleName == "ace/mode/javascript")
29+
return cb(null, require("./mode/javascript"));
30+
throw new Error("module not configured " + moduleName);
2831
});
2932

3033
if (editor)
@@ -397,6 +400,26 @@ module.exports = {
397400
scrollDelta >= leftBoundPixelPos && scrollDelta < rightBoundPixelPos,
398401
"Expected content to have been scrolled two characters beyond the cursor"
399402
);
403+
},
404+
"test: set gutter class": function(done) {
405+
editor.session.setMode("ace/mode/javascript", function() {
406+
editor.session.setValue("x = {\n foo: 1\n}");
407+
editor.execCommand("toggleFoldWidget");
408+
editor.renderer.$loop._flush();
409+
assert.equal(editor.renderer.$loop.changes, 0);
410+
var cell = editor.renderer.$gutterLayer.$lines.cells[0];
411+
assert.equal(cell.element.children[0].className, "ace_fold-widget ace_start ace_closed");
412+
assert.equal(cell.element.className.trim(), "ace_gutter-cell ace_gutter-active-line");
413+
414+
editor.session.setBreakpoint(0, "hello");
415+
assert.notEqual(editor.renderer.$loop.changes, 0);
416+
editor.renderer.$loop._flush();
417+
418+
cell = editor.renderer.$gutterLayer.$lines.cells[0];
419+
assert.equal(editor.renderer.$loop.changes, 0);
420+
assert.equal(cell.element.className, "ace_gutter-cell ace_gutter-active-line hello");
421+
done()
422+
});
400423
}
401424

402425
// change tab size after setDocument (for text layer)

0 commit comments

Comments
 (0)
Please sign in to comment.