From 67e7fccb78a90be6e7ad84e5a6e877ee92f88ff3 Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Thu, 6 Apr 2023 13:25:49 +0200 Subject: [PATCH 01/23] fix: gutter tooltip anchoring --- src/mouse/default_gutter_handler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mouse/default_gutter_handler.js b/src/mouse/default_gutter_handler.js index d53d5543aab..4e43712e9c8 100644 --- a/src/mouse/default_gutter_handler.js +++ b/src/mouse/default_gutter_handler.js @@ -94,7 +94,7 @@ function GutterHandler(mouseHandler) { if (mouseHandler.$tooltipFollowsMouse) { moveTooltip(mouseEvent); } else { - var gutterElement = mouseEvent.domEvent.target; + var gutterElement = gutter.$lines.cells[row].element var rect = gutterElement.getBoundingClientRect(); var style = tooltip.getElement().style; style.left = rect.right + "px"; From 8109ed85384d2a825ced5314886f21d9bdc4b2df Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Thu, 6 Apr 2023 13:30:24 +0200 Subject: [PATCH 02/23] add semicolon --- src/mouse/default_gutter_handler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mouse/default_gutter_handler.js b/src/mouse/default_gutter_handler.js index 4e43712e9c8..cede605f052 100644 --- a/src/mouse/default_gutter_handler.js +++ b/src/mouse/default_gutter_handler.js @@ -94,7 +94,7 @@ function GutterHandler(mouseHandler) { if (mouseHandler.$tooltipFollowsMouse) { moveTooltip(mouseEvent); } else { - var gutterElement = gutter.$lines.cells[row].element + var gutterElement = gutter.$lines.cells[row].element; var rect = gutterElement.getBoundingClientRect(); var style = tooltip.getElement().style; style.left = rect.right + "px"; From 89841a59b8e58048f2942750c126b229c2ea7c52 Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Thu, 6 Apr 2023 17:04:34 +0200 Subject: [PATCH 03/23] Change anchor point to be on icon --- src/css/editor.css.js | 11 ++++++----- src/layer/gutter.js | 20 +++++++++++--------- src/mouse/default_gutter_handler.js | 2 +- src/mouse/mouse_handler.js | 2 +- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/css/editor.css.js b/src/css/editor.css.js index c62630005c2..5236a5eb7d7 100644 --- a/src/css/editor.css.js +++ b/src/css/editor.css.js @@ -120,24 +120,24 @@ module.exports = ` float: left; } -.ace_gutter-cell.ace_error, .ace_icon.ace_error { +.ace_gutter-cell.ace_error, .ace_gutter-tooltip .ace_icon.ace_error { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg=="); background-repeat: no-repeat; background-position: 2px center; } -.ace_gutter-cell.ace_warning, .ace_icon.ace_warning { +.ace_gutter-cell.ace_warning, .ace_gutter-tooltip .ace_icon.ace_warning { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg=="); background-repeat: no-repeat; background-position: 2px center; } -.ace_gutter-cell.ace_info, .ace_icon.ace_info { +.ace_gutter-cell.ace_info, .ace_gutter-tooltip .ace_icon.ace_info { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII="); background-repeat: no-repeat; background-position: 2px center; } -.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info { +.ace_dark .ace_gutter-cell.ace_info, .ace_gutter-tooltip .ace_dark .ace_icon.ace_info { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC"); } @@ -450,9 +450,10 @@ module.exports = ` padding-top: 5px; } -.ace_gutter-tooltip .ace_icon { +.ace_icon { display: inline-block; width: 18px; + vertical-align: top; } .ace_icon_svg { diff --git a/src/layer/gutter.js b/src/layer/gutter.js index 2f1bdbc73ae..084adb7dbfd 100644 --- a/src/layer/gutter.js +++ b/src/layer/gutter.js @@ -291,21 +291,23 @@ class Gutter{ var lineHeight = config.lineHeight + "px"; var className; + var iconClassName; if (this.$useSvgGutterIcons){ className = "ace_gutter-cell_svg-icons "; + iconClassName = "ace_icon_svg"; + } + else { + className = "ace_gutter-cell "; + iconClassName = "ace_icon"; + } - if (this.$annotations[row]){ - annotationNode.className = "ace_icon_svg" + this.$annotations[row].className; + if (this.$annotations[row]){ + annotationNode.className = iconClassName + this.$annotations[row].className; - dom.setStyle(annotationNode.style, "height", lineHeight); - dom.setStyle(annotationNode.style, "display", "block"); - } - else { - dom.setStyle(annotationNode.style, "display", "none"); - } + dom.setStyle(annotationNode.style, "height", lineHeight); + dom.setStyle(annotationNode.style, "display", "block"); } else { - className = "ace_gutter-cell "; dom.setStyle(annotationNode.style, "display", "none"); } diff --git a/src/mouse/default_gutter_handler.js b/src/mouse/default_gutter_handler.js index cede605f052..85b148b2259 100644 --- a/src/mouse/default_gutter_handler.js +++ b/src/mouse/default_gutter_handler.js @@ -94,7 +94,7 @@ function GutterHandler(mouseHandler) { if (mouseHandler.$tooltipFollowsMouse) { moveTooltip(mouseEvent); } else { - var gutterElement = gutter.$lines.cells[row].element; + var gutterElement = gutter.$lines.cells[row].element.children[1]; var rect = gutterElement.getBoundingClientRect(); var style = tooltip.getElement().style; style.left = rect.right + "px"; diff --git a/src/mouse/mouse_handler.js b/src/mouse/mouse_handler.js index 35cca30d300..7dcc2bf643a 100644 --- a/src/mouse/mouse_handler.js +++ b/src/mouse/mouse_handler.js @@ -190,7 +190,7 @@ config.defineOptions(MouseHandler.prototype, "mouseHandler", { dragDelay: {initialValue: (useragent.isMac ? 150 : 0)}, dragEnabled: {initialValue: true}, focusTimeout: {initialValue: 0}, - tooltipFollowsMouse: {initialValue: true} + tooltipFollowsMouse: {initialValue: false} }); From 33facc423c59658af7d90eee44e3482a7294e716 Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Thu, 6 Apr 2023 17:08:46 +0200 Subject: [PATCH 04/23] set tooltipFollowsMouse back to true by default --- src/mouse/mouse_handler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mouse/mouse_handler.js b/src/mouse/mouse_handler.js index 7dcc2bf643a..35cca30d300 100644 --- a/src/mouse/mouse_handler.js +++ b/src/mouse/mouse_handler.js @@ -190,7 +190,7 @@ config.defineOptions(MouseHandler.prototype, "mouseHandler", { dragDelay: {initialValue: (useragent.isMac ? 150 : 0)}, dragEnabled: {initialValue: true}, focusTimeout: {initialValue: 0}, - tooltipFollowsMouse: {initialValue: false} + tooltipFollowsMouse: {initialValue: true} }); From 9acd13c1ea5fe82c2552e0bb073a9e1f2c798a5d Mon Sep 17 00:00:00 2001 From: Alice Date: Thu, 6 Apr 2023 19:29:39 +0200 Subject: [PATCH 05/23] small css change --- src/css/editor.css.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/css/editor.css.js b/src/css/editor.css.js index 5236a5eb7d7..49d0a513c4d 100644 --- a/src/css/editor.css.js +++ b/src/css/editor.css.js @@ -120,6 +120,11 @@ module.exports = ` float: left; } +.ace_gutter-cell .ace_icon{ + margin-left: -18px; + float: left; +} + .ace_gutter-cell.ace_error, .ace_gutter-tooltip .ace_icon.ace_error { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg=="); background-repeat: no-repeat; From 598ca4a2dc206b29cc92282d1d13f57ad5c919b0 Mon Sep 17 00:00:00 2001 From: Alice Date: Thu, 6 Apr 2023 20:44:54 +0200 Subject: [PATCH 06/23] whitespace fix --- src/css/editor.css.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/css/editor.css.js b/src/css/editor.css.js index 49d0a513c4d..dff183b7d36 100644 --- a/src/css/editor.css.js +++ b/src/css/editor.css.js @@ -105,7 +105,7 @@ module.exports = ` pointer-events: none; } -.ace_gutter-cell, .ace_gutter-cell_svg-icons { +.ace_gutter-cell, .ace_gutter-cell_svg-icons { position: absolute; top: 0; left: 0; @@ -115,12 +115,12 @@ module.exports = ` background-repeat: no-repeat; } -.ace_gutter-cell_svg-icons .ace_icon_svg{ +.ace_gutter-cell_svg-icons .ace_icon_svg { margin-left: -14px; float: left; } -.ace_gutter-cell .ace_icon{ +.ace_gutter-cell .ace_icon { margin-left: -18px; float: left; } From 319013191814f99896f3a716eabeaa64e967ca0e Mon Sep 17 00:00:00 2001 From: Alice Date: Mon, 10 Apr 2023 15:37:46 +0200 Subject: [PATCH 07/23] Refactoring --- src/css/editor.css.js | 8 ++++---- src/layer/gutter.js | 18 +++++++----------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/css/editor.css.js b/src/css/editor.css.js index dff183b7d36..016bb801e0f 100644 --- a/src/css/editor.css.js +++ b/src/css/editor.css.js @@ -125,24 +125,24 @@ module.exports = ` float: left; } -.ace_gutter-cell.ace_error, .ace_gutter-tooltip .ace_icon.ace_error { +.ace_gutter-cell.ace_error, .ace_icon.ace_error { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg=="); background-repeat: no-repeat; background-position: 2px center; } -.ace_gutter-cell.ace_warning, .ace_gutter-tooltip .ace_icon.ace_warning { +.ace_gutter-cell.ace_warning, .ace_icon.ace_warning { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg=="); background-repeat: no-repeat; background-position: 2px center; } -.ace_gutter-cell.ace_info, .ace_gutter-tooltip .ace_icon.ace_info { +.ace_gutter-cell.ace_info, .ace_icon.ace_info { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII="); background-repeat: no-repeat; background-position: 2px center; } -.ace_dark .ace_gutter-cell.ace_info, .ace_gutter-tooltip .ace_dark .ace_icon.ace_info { +.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC"); } diff --git a/src/layer/gutter.js b/src/layer/gutter.js index 084adb7dbfd..b725326e47c 100644 --- a/src/layer/gutter.js +++ b/src/layer/gutter.js @@ -290,19 +290,15 @@ class Gutter{ var lineHeight = config.lineHeight + "px"; - var className; - var iconClassName; - if (this.$useSvgGutterIcons){ - className = "ace_gutter-cell_svg-icons "; - iconClassName = "ace_icon_svg"; - } - else { - className = "ace_gutter-cell "; - iconClassName = "ace_icon"; - } + var className = this.$useSvgGutterIcons ? "ace_gutter-cell_svg-icons " : "ace_gutter-cell "; + var iconClassName = this.$useSvgGutterIcons ? "ace_icon_svg" : "ace_icon"; + if (this.$annotations[row]){ - annotationNode.className = iconClassName + this.$annotations[row].className; + annotationNode.className = iconClassName; + + if (this.$useSvgGutterIcons) + annotationNode.className += this.$annotations[row].className; dom.setStyle(annotationNode.style, "height", lineHeight); dom.setStyle(annotationNode.style, "display", "block"); From b308c0aab9aa01ba42a0e80b8f3abef18750f742 Mon Sep 17 00:00:00 2001 From: Alice Date: Fri, 14 Apr 2023 23:41:59 +0200 Subject: [PATCH 08/23] add summary of annotations in folded code --- src/css/editor.css.js | 28 ++++---- src/layer/gutter.js | 62 ++++++++++++----- src/mouse/default_gutter_handler.js | 101 ++++++++++++++++++++-------- 3 files changed, 135 insertions(+), 56 deletions(-) diff --git a/src/css/editor.css.js b/src/css/editor.css.js index f4614f4632d..56bafdf9f68 100644 --- a/src/css/editor.css.js +++ b/src/css/editor.css.js @@ -130,24 +130,24 @@ module.exports = ` float: left; } -.ace_gutter-cell.ace_error, .ace_icon.ace_error { +.ace_gutter-cell.ace_error, .ace_icon.ace_error, .ace_icon.ace_error_fold { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg=="); background-repeat: no-repeat; background-position: 2px center; } -.ace_gutter-cell.ace_warning, .ace_icon.ace_warning { +.ace_gutter-cell.ace_warning, .ace_icon.ace_warning, .ace_icon.ace_warning_fold { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg=="); background-repeat: no-repeat; background-position: 2px center; } -.ace_gutter-cell.ace_info, .ace_icon.ace_info { +.ace_gutter-cell.ace_info, .ace_icon.ace_info, .ace_icon.ace_info_fold { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII="); background-repeat: no-repeat; background-position: 2px center; } -.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info { +.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info, .ace_dark .ace_icon.ace_info_fold { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC"); } @@ -164,6 +164,18 @@ module.exports = ` background-color: royalblue; } +.ace_icon_svg.ace_error_fold { + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+"); + background-color: crimson; +} +.ace_icon_svg.ace_warning_fold { + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg=="); + background-color: darkorange; +} +.ace_icon_svg.ace_info_fold { + display: none; +} + .ace_scrollbar { contain: strict; position: absolute; @@ -452,14 +464,6 @@ module.exports = ` outline: 1px solid black; } -.ace_gutter-tooltip_header { - font-weight: bold; -} - -.ace_gutter-tooltip_body { - padding-top: 5px; -} - .ace_icon { display: inline-block; width: 18px; diff --git a/src/layer/gutter.js b/src/layer/gutter.js index b725326e47c..7bad07edba6 100644 --- a/src/layer/gutter.js +++ b/src/layer/gutter.js @@ -293,20 +293,6 @@ class Gutter{ var className = this.$useSvgGutterIcons ? "ace_gutter-cell_svg-icons " : "ace_gutter-cell "; var iconClassName = this.$useSvgGutterIcons ? "ace_icon_svg" : "ace_icon"; - - if (this.$annotations[row]){ - annotationNode.className = iconClassName; - - if (this.$useSvgGutterIcons) - annotationNode.className += this.$annotations[row].className; - - dom.setStyle(annotationNode.style, "height", lineHeight); - dom.setStyle(annotationNode.style, "display", "block"); - } - else { - dom.setStyle(annotationNode.style, "display", "none"); - } - if (this.$highlightGutterLine) { if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) { className += "ace_gutter-active-line "; @@ -322,7 +308,7 @@ class Gutter{ className += breakpoints[row]; if (decorations[row]) className += decorations[row]; - if (this.$annotations[row]) + if (this.$annotations[row] && row !== foldStart) className += this.$annotations[row].className; if (element.className != className) element.className = className; @@ -336,8 +322,32 @@ class Gutter{ if (c) { var className = "ace_fold-widget ace_" + c; - if (c == "start" && row == foldStart && row < fold.end.row) + if (c == "start" && row == foldStart && row < fold.end.row){ className += " ace_closed"; + var foldAnnotationClass; + var annotationInFold = false; + + for (var i = row; i <= fold.end.row; i++){ + if (!this.$annotations[i]) + continue; + + if (!annotationInFold) + annotationInFold = true; + + if (this.$annotations[i].className === " ace_error"){ + foldAnnotationClass = " ace_error_fold"; + break; + } + if (this.$annotations[i].className === " ace_warning"){ + foldAnnotationClass = " ace_warning_fold"; + continue; + } + + foldAnnotationClass = " ace_info_fold"; + } + + element.className += foldAnnotationClass; + } else className += " ace_open"; if (foldWidget.className != className) @@ -350,6 +360,26 @@ class Gutter{ dom.setStyle(foldWidget.style, "display", "none"); } } + + if (annotationInFold){ + annotationNode.className = iconClassName; + annotationNode.className += foldAnnotationClass; + + dom.setStyle(annotationNode.style, "height", lineHeight); + dom.setStyle(annotationNode.style, "display", "block"); + } + else if (this.$annotations[row]){ + annotationNode.className = iconClassName; + + if (this.$useSvgGutterIcons) + annotationNode.className += this.$annotations[row].className; + + dom.setStyle(annotationNode.style, "height", lineHeight); + dom.setStyle(annotationNode.style, "display", "block"); + } + else { + dom.setStyle(annotationNode.style, "display", "none"); + } var text = (gutterRenderer ? gutterRenderer.getText(session, row) diff --git a/src/mouse/default_gutter_handler.js b/src/mouse/default_gutter_handler.js index 85b148b2259..f76157774a2 100644 --- a/src/mouse/default_gutter_handler.js +++ b/src/mouse/default_gutter_handler.js @@ -36,11 +36,65 @@ function GutterHandler(mouseHandler) { var tooltipTimeout, mouseEvent, tooltipAnnotation; + var annotationLabels = { + error: {singular: "error", plural: "errors"}, + warning: {singular: "warning", plural: "warnings"}, + info: {singular: "information message", plural: "information messages"} + }; + function showTooltip() { var row = mouseEvent.getDocumentPosition().row; - var annotation = gutter.$annotations[row]; - if (!annotation) + var rowAnnotation = gutter.$annotations[row]; + var annotation; + + if (rowAnnotation) + annotation = {text: [...rowAnnotation.text], type: [...rowAnnotation.type]}; + + // If the tooltip is for a row which has a closed fold, check whether there are + // annotations in the folded lines. If so, add a summary to the list of annotations. + var fold = gutter.session.getNextFoldLine(row); + if (fold){ + var foldedAnnotationMessages = {error: [], warning: [], info: []}; + var mostSevereFoldedAnnotationType; + + for (var i = row + 1; i <= fold.end.row; i++){ + if (!gutter.$annotations[i]) + continue; + + for (var j = 0; j < gutter.$annotations[i].text.length; j++) { + var annotationType = gutter.$annotations[i].type[j]; + foldedAnnotationMessages[annotationType].push(gutter.$annotations[i].text[j]); + + if (!mostSevereFoldedAnnotationType){ + mostSevereFoldedAnnotationType = annotationType; + continue; + } + + if (annotationType == "error"){ + mostSevereFoldedAnnotationType = annotationType; + continue; + } + + if (annotationType == "warning" && mostSevereFoldedAnnotationType == "info"){ + mostSevereFoldedAnnotationType = annotationType; + continue; + } + } + } + var summaryFoldedAnnotations = `${annotationsToSummaryString(foldedAnnotationMessages)} in folded code.`; + + if (mostSevereFoldedAnnotationType == "error" || mostSevereFoldedAnnotationType == "warning"){ + if (!annotation) + annotation = {text: [], type: []}; + + annotation.text.push(summaryFoldedAnnotations); + annotation.type.push(mostSevereFoldedAnnotationType); + } + } + + if (!annotation || annotation.text == 0){ return hideTooltip(); + } var maxRow = editor.session.getLength(); if (row == maxRow) { @@ -51,38 +105,15 @@ function GutterHandler(mouseHandler) { } var annotationMessages = {error: [], warning: [], info: []}; - var annotationLabels = { - error: {singular: "error", plural: "errors"}, - warning: {singular: "warning", plural: "warnings"}, - info: {singular: "information message", plural: "information messages"} - }; - var iconClassName = gutter.$useSvgGutterIcons ? "ace_icon_svg" : "ace_icon"; - // Construct the body of the tooltip. + // Construct the contents of the tooltip. for (var i = 0; i < annotation.text.length; i++) { var line = ` ${annotation.text[i]}`; annotationMessages[annotation.type[i]].push(line); } - var tooltipBody = "
"; - tooltipBody += [].concat(annotationMessages.error, annotationMessages.warning, annotationMessages.info).join("
"); - tooltipBody += '
'; - - // Construct the header of the tooltip. - var isMoreThanOneAnnotationType = false; - var tooltipHeader = "
"; - for (var i = 0; i < 3; i++){ - var annotationType = ['error', 'warning', 'info'][i]; - if (annotationMessages[annotationType].length > 0){ - var label = annotationMessages[annotationType].length === 1 ? annotationLabels[annotationType].singular : annotationLabels[annotationType].plural; - tooltipHeader += `${isMoreThanOneAnnotationType ? ', ' : ''}${annotationMessages[annotationType].length} ${label}`; - isMoreThanOneAnnotationType = true; - } - } - tooltipHeader += "
"; - - tooltipAnnotation = tooltipHeader + tooltipBody; - + tooltipAnnotation = [].concat(annotationMessages.error, annotationMessages.warning, annotationMessages.info).join("
"); + tooltip.setHtml(tooltipAnnotation); tooltip.setClassName("ace_gutter-tooltip"); tooltip.$element.setAttribute("aria-live", "polite"); @@ -113,6 +144,20 @@ function GutterHandler(mouseHandler) { } } + function annotationsToSummaryString(annotations) { + var isMoreThanOneAnnotationType = false; + var summaryString = ""; + for (var i = 0; i < 3; i++){ + var annotationType = ['error', 'warning', 'info'][i]; + if (annotations[annotationType].length > 0){ + var label = annotations[annotationType].length === 1 ? annotationLabels[annotationType].singular : annotationLabels[annotationType].plural; + summaryString += `${isMoreThanOneAnnotationType ? ', ' : ''}${annotations[annotationType].length} ${label}`; + isMoreThanOneAnnotationType = true; + } + } + return summaryString; + } + function moveTooltip(e) { tooltip.setPosition(e.x, e.y); } From 27d61972d6c70c37abedac67333b4b24b2674427 Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Sat, 15 Apr 2023 11:55:22 +0200 Subject: [PATCH 09/23] add SVG icons for lines with folded annotations --- src/css/editor.css.js | 11 ++++------- src/layer/gutter.js | 7 ++----- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/css/editor.css.js b/src/css/editor.css.js index 56bafdf9f68..98b1dce184b 100644 --- a/src/css/editor.css.js +++ b/src/css/editor.css.js @@ -142,12 +142,12 @@ module.exports = ` background-position: 2px center; } -.ace_gutter-cell.ace_info, .ace_icon.ace_info, .ace_icon.ace_info_fold { +.ace_gutter-cell.ace_info, .ace_icon.ace_info { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII="); background-repeat: no-repeat; background-position: 2px center; } -.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info, .ace_dark .ace_icon.ace_info_fold { +.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC"); } @@ -165,16 +165,13 @@ module.exports = ` } .ace_icon_svg.ace_error_fold { - -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+"); + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xOS4wNDkyIDcuMTUyMzdDMTkuMTgxNCAxMi44NzcgMTMuMzM3NSAxNC4xNzgxIDEyLjI5NDQgMTQuMTc4MUMxMC4zOTA5IDE0LjA2MTggMTYuOTE3MiAxNC40OTk5IDE2Ljg1NzYgNy4wNjkwN0MxNi4zMTE0IC0wLjE2MDkyMSAxMC40NjQ3IDAuMjM3MzAzIDEyLjQ3IDAuMzU3MTkyQzEzLjkyMDcgMC4yNTMxODQgMTguNzAwNSAxLjQ5NzY1IDE5LjA0OTIgNy4xNTIzN1oiIGZpbGw9IiNEOTE1MTUiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjgzOTg0IDEuODczODNDMTAuODM2IDEuODczODMgMTMuMjY0OCA0LjMwMjY4IDEzLjI2NDggNy4yOTg4M0MxMy4yNjQ4IDEwLjI5NSAxMC44MzYgMTIuNzIzOCA3LjgzOTg0IDEyLjcyMzhDNC44NDM3IDEyLjcyMzggMi40MTQ4NCAxMC4yOTUgMi40MTQ4NCA3LjI5ODgzQzIuNDE5NjYgNC4zMDQ2OCA0Ljg0NTcgMS44Nzg2NSA3LjgzOTg0IDEuODczODNaTTcuODM5ODQgMC4yOTg4MjhDMy45NzM4NSAwLjI5ODgyOCAwLjgzOTg0NCAzLjQzMjgzIDAuODM5ODQ0IDcuMjk4ODNDMC44Mzk4NDQgMTEuMTY0OCAzLjk3Mzg1IDE0LjI5ODggNy44Mzk4NCAxNC4yOTg4QzExLjcwNTggMTQuMjk4OCAxNC44Mzk4IDExLjE2NDggMTQuODM5OCA3LjI5ODgzQzE0LjgzOTggNS40NDIzMSAxNC4xMDIzIDMuNjYxODQgMTIuNzg5NiAyLjM0OTA4QzExLjQ3NjggMS4wMzYzMyA5LjY5NjM2IDAuMjk4ODI4IDcuODM5ODQgMC4yOTg4MjhaTTYuNzg2NjMgNy40ODgxNkw0Ljc1OTg0IDkuNTI1MzlMNS45NTU3NSAxMC43ODc0TDguMDIwNzcgOC43MjIzM0wxMC4wODU4IDEwLjc4NzRMMTEuMjgxNyA5LjUyNTM5TDkuMjU0OTEgNy40ODgxNkwxMS4yODE3IDUuNDYxMzNMMTAuMDM5MiA0LjIxODgzTDguMDIwNzcgNi4yNDc2Nkw2LjAwMjM0IDQuMjE4ODNMNC43NTk4NCA1LjQ2MTMzTDYuNzg2NjMgNy40ODgxNloiIGZpbGw9IiNEMTMyMTIiLz4KPC9zdmc+"); background-color: crimson; } .ace_icon_svg.ace_warning_fold { - -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg=="); + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC43NzY5IDE0LjczMzdMOC42NTE5MiAyLjQ4MzY5QzguMzI5NDYgMS44Mzg3NyA3LjQwOTEzIDEuODM4NzcgNy4wODY2NyAyLjQ4MzY5TDAuOTYxNjY5IDE0LjczMzdDMC42NzA3NzUgMTUuMzE1NSAxLjA5MzgzIDE2IDEuNzQ0MjkgMTZIMTMuOTk0M0MxNC42NDQ4IDE2IDE1LjA2NzggMTUuMzE1NSAxNC43NzY5IDE0LjczMzdaTTMuMTYwMDcgMTQuMjVMNy44NjkyOSA0LjgzMTU2TDEyLjU3ODUgMTQuMjVIMy4xNjAwN1pNOC43NDQyOSAxMS42MjVWMTMuMzc1SDYuOTk0MjlWMTEuNjI1SDguNzQ0MjlaTTYuOTk0MjkgMTAuNzVWNy4yNUg4Ljc0NDI5VjEwLjc1SDYuOTk0MjlaIiBmaWxsPSIjRUM3MjExIi8+CjxwYXRoIGQ9Ik0xMS4xOTkxIDIuOTUyMzhDMTAuODgwOSAyLjMxNDY3IDEwLjM1MzcgMS44MDUyNiA5LjcwNTUgMS41MDlMMTEuMDQxIDEuMDY5NzhDMTEuNjg4MyAwLjk0OTgxNCAxMi4zMzcgMS4yNzI2MyAxMi42MzE3IDEuODYxNDFMMTcuNjEzNiAxMS44MTYxQzE4LjM1MjcgMTMuMjkyOSAxNy41OTM4IDE1LjA4MDQgMTYuMDE4IDE1LjU3NDVDMTYuNDA0NCAxNC40NTA3IDE2LjMyMzEgMTMuMjE4OCAxNS43OTI0IDEyLjE1NTVMMTEuMTk5MSAyLjk1MjM4WiIgZmlsbD0iI0VDNzIxMSIvPgo8L3N2Zz4="); background-color: darkorange; } -.ace_icon_svg.ace_info_fold { - display: none; -} .ace_scrollbar { contain: strict; diff --git a/src/layer/gutter.js b/src/layer/gutter.js index 7bad07edba6..e901b85020f 100644 --- a/src/layer/gutter.js +++ b/src/layer/gutter.js @@ -331,19 +331,16 @@ class Gutter{ if (!this.$annotations[i]) continue; - if (!annotationInFold) - annotationInFold = true; - if (this.$annotations[i].className === " ace_error"){ + annotationInFold = true; foldAnnotationClass = " ace_error_fold"; break; } if (this.$annotations[i].className === " ace_warning"){ + annotationInFold = true; foldAnnotationClass = " ace_warning_fold"; continue; } - - foldAnnotationClass = " ace_info_fold"; } element.className += foldAnnotationClass; From 0153067a420563023c352348da5cd6c0ad9bcf42 Mon Sep 17 00:00:00 2001 From: Alice Date: Sat, 15 Apr 2023 23:39:09 +0200 Subject: [PATCH 10/23] fix icon positioning --- src/css/editor.css.js | 2 +- src/mouse/default_gutter_handler.js | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/css/editor.css.js b/src/css/editor.css.js index 98b1dce184b..4c8fa949854 100644 --- a/src/css/editor.css.js +++ b/src/css/editor.css.js @@ -165,7 +165,7 @@ module.exports = ` } .ace_icon_svg.ace_error_fold { - -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xOS4wNDkyIDcuMTUyMzdDMTkuMTgxNCAxMi44NzcgMTMuMzM3NSAxNC4xNzgxIDEyLjI5NDQgMTQuMTc4MUMxMC4zOTA5IDE0LjA2MTggMTYuOTE3MiAxNC40OTk5IDE2Ljg1NzYgNy4wNjkwN0MxNi4zMTE0IC0wLjE2MDkyMSAxMC40NjQ3IDAuMjM3MzAzIDEyLjQ3IDAuMzU3MTkyQzEzLjkyMDcgMC4yNTMxODQgMTguNzAwNSAxLjQ5NzY1IDE5LjA0OTIgNy4xNTIzN1oiIGZpbGw9IiNEOTE1MTUiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjgzOTg0IDEuODczODNDMTAuODM2IDEuODczODMgMTMuMjY0OCA0LjMwMjY4IDEzLjI2NDggNy4yOTg4M0MxMy4yNjQ4IDEwLjI5NSAxMC44MzYgMTIuNzIzOCA3LjgzOTg0IDEyLjcyMzhDNC44NDM3IDEyLjcyMzggMi40MTQ4NCAxMC4yOTUgMi40MTQ4NCA3LjI5ODgzQzIuNDE5NjYgNC4zMDQ2OCA0Ljg0NTcgMS44Nzg2NSA3LjgzOTg0IDEuODczODNaTTcuODM5ODQgMC4yOTg4MjhDMy45NzM4NSAwLjI5ODgyOCAwLjgzOTg0NCAzLjQzMjgzIDAuODM5ODQ0IDcuMjk4ODNDMC44Mzk4NDQgMTEuMTY0OCAzLjk3Mzg1IDE0LjI5ODggNy44Mzk4NCAxNC4yOTg4QzExLjcwNTggMTQuMjk4OCAxNC44Mzk4IDExLjE2NDggMTQuODM5OCA3LjI5ODgzQzE0LjgzOTggNS40NDIzMSAxNC4xMDIzIDMuNjYxODQgMTIuNzg5NiAyLjM0OTA4QzExLjQ3NjggMS4wMzYzMyA5LjY5NjM2IDAuMjk4ODI4IDcuODM5ODQgMC4yOTg4MjhaTTYuNzg2NjMgNy40ODgxNkw0Ljc1OTg0IDkuNTI1MzlMNS45NTU3NSAxMC43ODc0TDguMDIwNzcgOC43MjIzM0wxMC4wODU4IDEwLjc4NzRMMTEuMjgxNyA5LjUyNTM5TDkuMjU0OTEgNy40ODgxNkwxMS4yODE3IDUuNDYxMzNMMTAuMDM5MiA0LjIxODgzTDguMDIwNzcgNi4yNDc2Nkw2LjAwMjM0IDQuMjE4ODNMNC43NTk4NCA1LjQ2MTMzTDYuNzg2NjMgNy40ODgxNloiIGZpbGw9IiNEMTMyMTIiLz4KPC9zdmc+"); + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSI+CiAgPHBhdGggZD0ibSAxOC45Mjk4NTEsNy44Mjk4MDc2IGMgMC4xNDYzNTMsNi4zMzc0NjA0IC02LjMyMzE0Nyw3Ljc3Nzg0NDQgLTcuNDc3OTEyLDcuNzc3ODQ0NCAtMi4xMDcyNzI2LC0wLjEyODc1IDUuMTE3Njc4LDAuMzU2MjQ5IDUuMDUxNjk4LC03Ljg3MDA2MTggLTAuNjA0NjcyLC04LjAwMzk3MzQ5IC03LjA3NzI3MDYsLTcuNTYzMTE4OSAtNC44NTczLC03LjQzMDM5NTU2IDEuNjA2LC0wLjExNTE0MjI1IDYuODk3NDg1LDEuMjYyNTQ1OTYgNy4yODM1MTQsNy41MjI2MTI5NiB6IiBmaWxsPSJjcmltc29uIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0ibSA4LjExNDc1NjIsMi4wNTI5ODI4IGMgMy4zNDkxNjk4LDAgNi4wNjQxMzI4LDIuNjc2ODYyNyA2LjA2NDEzMjgsNS45Nzg5NTMgMCwzLjMwMjExMjIgLTIuNzE0OTYzLDUuOTc4OTIwMiAtNi4wNjQxMzI4LDUuOTc4OTIwMiAtMy4zNDkxNDczLDAgLTYuMDY0MTc3MiwtMi42NzY4MDggLTYuMDY0MTc3MiwtNS45Nzg5MjAyIDAuMDA1MzksLTMuMjk5ODg2MSAyLjcxNzI2NTYsLTUuOTczNjQwOCA2LjA2NDE3NzIsLTUuOTc4OTUzIHogbSAwLC0xLjczNTgyNzE5IGMgLTQuMzIxNDgzNiwwIC03LjgyNDc0MDM4LDMuNDU0MDE4NDkgLTcuODI0NzQwMzgsNy43MTQ3ODAxOSAwLDQuMjYwNzI4MiAzLjUwMzI1Njc4LDcuNzE0NzQ1MiA3LjgyNDc0MDM4LDcuNzE0NzQ1MiA0LjMyMTQ0OTgsMCA3LjgyNDY5OTgsLTMuNDU0MDE3IDcuODI0Njk5OCwtNy43MTQ3NDUyIDAsLTIuMDQ2MDkxNCAtMC44MjQzOTIsLTQuMDA4MzY3MiAtMi4yOTE3NTYsLTUuNDU1MTc0NiBDIDEyLjE4MDIyNSwxLjEyOTk2NDggMTAuMTkwMDEzLDAuMzE3MTU1NjEgOC4xMTQ3NTYyLDAuMzE3MTU1NjEgWiBNIDYuOTM3NDU2Myw4LjI0MDU5ODUgNC42NzE4Njg1LDEwLjQ4NTg1MiA2LjAwODY4MTQsMTEuODc2NzI4IDguMzE3MDAzNSw5LjYwMDc5MTEgMTAuNjI1MzM3LDExLjg3NjcyOCAxMS45NjIxMzgsMTAuNDg1ODUyIDkuNjk2NTUwOCw4LjI0MDU5ODUgMTEuOTYyMTM4LDYuMDA2ODA2NiAxMC41NzMyNDYsNC42Mzc0MzM1IDguMzE3MDAzNSw2Ljg3MzQyOTcgNi4wNjA3NjA3LDQuNjM3NDMzNSA0LjY3MTg2ODUsNi4wMDY4MDY2IFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4="); background-color: crimson; } .ace_icon_svg.ace_warning_fold { diff --git a/src/mouse/default_gutter_handler.js b/src/mouse/default_gutter_handler.js index f76157774a2..2d12371e880 100644 --- a/src/mouse/default_gutter_handler.js +++ b/src/mouse/default_gutter_handler.js @@ -66,24 +66,24 @@ function GutterHandler(mouseHandler) { foldedAnnotationMessages[annotationType].push(gutter.$annotations[i].text[j]); if (!mostSevereFoldedAnnotationType){ - mostSevereFoldedAnnotationType = annotationType; + mostSevereFoldedAnnotationType = `${annotationType}_fold`; continue; } if (annotationType == "error"){ - mostSevereFoldedAnnotationType = annotationType; + mostSevereFoldedAnnotationType = "error_fold"; continue; } if (annotationType == "warning" && mostSevereFoldedAnnotationType == "info"){ - mostSevereFoldedAnnotationType = annotationType; + mostSevereFoldedAnnotationType = "warning_fold"; continue; } } } var summaryFoldedAnnotations = `${annotationsToSummaryString(foldedAnnotationMessages)} in folded code.`; - if (mostSevereFoldedAnnotationType == "error" || mostSevereFoldedAnnotationType == "warning"){ + if (mostSevereFoldedAnnotationType == "error_fold" || mostSevereFoldedAnnotationType == "warning_fold"){ if (!annotation) annotation = {text: [], type: []}; @@ -109,8 +109,8 @@ function GutterHandler(mouseHandler) { // Construct the contents of the tooltip. for (var i = 0; i < annotation.text.length; i++) { - var line = ` ${annotation.text[i]}`; - annotationMessages[annotation.type[i]].push(line); + var line = ` ${annotation.text[i]}`; + annotationMessages[annotation.type[i].replace("_fold","")].push(line); } tooltipAnnotation = [].concat(annotationMessages.error, annotationMessages.warning, annotationMessages.info).join("
"); From 4e8a3c02fc4363185e827954e44136018d0b0fd4 Mon Sep 17 00:00:00 2001 From: Alice Date: Sun, 16 Apr 2023 00:31:53 +0200 Subject: [PATCH 11/23] fix failing tests --- src/layer/gutter.js | 1 - src/mouse/default_gutter_handler.js | 3 +-- src/mouse/default_gutter_handler_test.js | 18 ++++++------------ 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/layer/gutter.js b/src/layer/gutter.js index e901b85020f..f13e2a9f0fd 100644 --- a/src/layer/gutter.js +++ b/src/layer/gutter.js @@ -397,7 +397,6 @@ class Gutter{ this.$highlightGutterLine = highlightGutterLine; } - setShowLineNumbers(show) { this.$renderer = !show && { getWidth: function() {return 0;}, diff --git a/src/mouse/default_gutter_handler.js b/src/mouse/default_gutter_handler.js index 2d12371e880..ec7b7d1c01a 100644 --- a/src/mouse/default_gutter_handler.js +++ b/src/mouse/default_gutter_handler.js @@ -92,9 +92,8 @@ function GutterHandler(mouseHandler) { } } - if (!annotation || annotation.text == 0){ + if (!annotation || annotation.text == 0) return hideTooltip(); - } var maxRow = editor.session.getLength(); if (row == maxRow) { diff --git a/src/mouse/default_gutter_handler_test.js b/src/mouse/default_gutter_handler_test.js index 59e2f823b90..4e0b2ea00ad 100644 --- a/src/mouse/default_gutter_handler_test.js +++ b/src/mouse/default_gutter_handler_test.js @@ -56,10 +56,8 @@ module.exports = { // Wait for the tooltip to appear after its timeout. setTimeout(function() { editor.renderer.$loop._flush(); - var tooltipHeader = editor.container.querySelector(".ace_gutter-tooltip_header"); - var tooltipBody = editor.container.querySelector(".ace_gutter-tooltip_body"); - assert.ok(/1 error/.test(tooltipHeader.textContent)); - assert.ok(/error test/.test(tooltipBody.textContent)); + var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + assert.ok(/error test/.test(tooltip.textContent)); }, 100); }, "test: gutter warning tooltip" : function() { @@ -81,10 +79,8 @@ module.exports = { // Wait for the tooltip to appear after its timeout. setTimeout(function() { editor.renderer.$loop._flush(); - var tooltipHeader = editor.container.querySelector(".ace_gutter-tooltip_header"); - var tooltipBody = editor.container.querySelector(".ace_gutter-tooltip_body"); - assert.ok(/1 warning/.test(tooltipHeader.textContent)); - assert.ok(/warning test/.test(tooltipBody.textContent)); + var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + assert.ok(/warning test/.test(tooltip.textContent)); }, 100); }, "test: gutter info tooltip" : function() { @@ -106,10 +102,8 @@ module.exports = { // Wait for the tooltip to appear after its timeout. setTimeout(function() { editor.renderer.$loop._flush(); - var tooltipHeader = editor.container.querySelector(".ace_gutter-tooltip_header"); - var tooltipBody = editor.container.querySelector(".ace_gutter-tooltip_body"); - assert.ok(/1 information message/.test(tooltipHeader.textContent)); - assert.ok(/info test/.test(tooltipBody.textContent)); + var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + assert.ok(/info test/.test(tooltip.textContent)); }, 100); }, "test: gutter svg icons" : function() { From 4a4ca09c7d119283190262a4c8ea0c71df11a4dd Mon Sep 17 00:00:00 2001 From: Alice Date: Sun, 16 Apr 2023 10:59:09 +0200 Subject: [PATCH 12/23] add test --- src/mouse/default_gutter_handler_test.js | 77 +++++++++++++++++++++++- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/src/mouse/default_gutter_handler_test.js b/src/mouse/default_gutter_handler_test.js index 4e0b2ea00ad..b670f96f86e 100644 --- a/src/mouse/default_gutter_handler_test.js +++ b/src/mouse/default_gutter_handler_test.js @@ -36,7 +36,7 @@ module.exports = { editor = this.editor; next(); }, - + "test: gutter error tooltip" : function() { var editor = this.editor; var value = ""; @@ -123,8 +123,79 @@ module.exports = { var annotation = line.children[2]; assert.ok(/ace_icon_svg/.test(annotation.className)); }, - - + "test: error in fold" : function() { + var editor = this.editor; + var value = "x {" + "\n".repeat(50) + "}"; + value = value.repeat(50); + editor.session.setMode(new Mode()); + editor.setValue(value, -1); + editor.session.setAnnotations([{row: 1, column: 0, type: "error", text: "error test"}]); + editor.renderer.$loop._flush(); + + // Fold the line containing the annotation. + var lines = editor.renderer.$gutterLayer.$lines; + assert.equal(lines.cells[1].element.textContent, "2"); + var toggler = lines.cells[0].element.children[1]; + var rect = toggler.getBoundingClientRect(); + if (!rect.left) rect.left = 100; // for mockdom + toggler.dispatchEvent(MouseEvent("down", {x: rect.left, y: rect.top})); + toggler.dispatchEvent(MouseEvent("up", {x: rect.left, y: rect.top})); + toggler.dispatchEvent(MouseEvent("click", {x: rect.left, y: rect.top})); + editor.renderer.$loop._flush(); + assert.ok(/ace_closed/.test(toggler.className)); + assert.equal(lines.cells[1].element.textContent, "51"); + + // Annotation node should have fold class. + var annotation = lines.cells[0].element.children[2]; + assert.ok(/ace_error_fold/.test(annotation.className)); + + var rect = annotation.getBoundingClientRect(); + annotation.dispatchEvent(new MouseEvent("move", {clientX: rect.left, clientY: rect.top})); + + // Wait for the tooltip to appear after its timeout. + setTimeout(function() { + editor.renderer.$loop._flush(); + var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + assert.ok(/error in folded code/.test(tooltip.textContent)); + }, 100); + }, + "test: warning in fold" : function() { + var editor = this.editor; + var value = "x {" + "\n".repeat(50) + "}"; + value = value.repeat(50); + editor.session.setMode(new Mode()); + editor.setValue(value, -1); + editor.session.setAnnotations([{row: 1, column: 0, type: "warning", text: "warning test"}]); + editor.renderer.$loop._flush(); + + // Fold the line containing the annotation. + var lines = editor.renderer.$gutterLayer.$lines; + assert.equal(lines.cells[1].element.textContent, "2"); + var toggler = lines.cells[0].element.children[1]; + var rect = toggler.getBoundingClientRect(); + if (!rect.left) rect.left = 100; // for mockdom + toggler.dispatchEvent(MouseEvent("down", {x: rect.left, y: rect.top})); + toggler.dispatchEvent(MouseEvent("up", {x: rect.left, y: rect.top})); + toggler.dispatchEvent(MouseEvent("click", {x: rect.left, y: rect.top})); + editor.renderer.$loop._flush(); + assert.ok(/ace_closed/.test(toggler.className)); + assert.equal(lines.cells[1].element.textContent, "51"); + + // Annotation node should have fold class. + var annotation = lines.cells[0].element.children[2]; + assert.ok(/ace_warning_fold/.test(annotation.className)); + + var rect = annotation.getBoundingClientRect(); + annotation.dispatchEvent(new MouseEvent("move", {clientX: rect.left, clientY: rect.top})); + + // Wait for the tooltip to appear after its timeout. + setTimeout(function() { + editor.renderer.$loop._flush(); + var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + assert.ok(/warning in folded code/.test(tooltip.textContent)); + }, 100); + }, + tearDown : function() { this.editor.destroy(); document.body.removeChild(this.editor.container); From 78b2f81aa3a178d164e3f71251facec8ce7fa83a Mon Sep 17 00:00:00 2001 From: Alice Date: Sun, 16 Apr 2023 22:18:30 +0200 Subject: [PATCH 13/23] tweak new tests --- src/mouse/default_gutter_handler_test.js | 44 ++++++++++++------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/mouse/default_gutter_handler_test.js b/src/mouse/default_gutter_handler_test.js index b670f96f86e..4df84a83dba 100644 --- a/src/mouse/default_gutter_handler_test.js +++ b/src/mouse/default_gutter_handler_test.js @@ -138,8 +138,6 @@ module.exports = { var toggler = lines.cells[0].element.children[1]; var rect = toggler.getBoundingClientRect(); if (!rect.left) rect.left = 100; // for mockdom - toggler.dispatchEvent(MouseEvent("down", {x: rect.left, y: rect.top})); - toggler.dispatchEvent(MouseEvent("up", {x: rect.left, y: rect.top})); toggler.dispatchEvent(MouseEvent("click", {x: rect.left, y: rect.top})); editor.renderer.$loop._flush(); assert.ok(/ace_closed/.test(toggler.className)); @@ -148,16 +146,6 @@ module.exports = { // Annotation node should have fold class. var annotation = lines.cells[0].element.children[2]; assert.ok(/ace_error_fold/.test(annotation.className)); - - var rect = annotation.getBoundingClientRect(); - annotation.dispatchEvent(new MouseEvent("move", {clientX: rect.left, clientY: rect.top})); - - // Wait for the tooltip to appear after its timeout. - setTimeout(function() { - editor.renderer.$loop._flush(); - var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); - assert.ok(/error in folded code/.test(tooltip.textContent)); - }, 100); }, "test: warning in fold" : function() { var editor = this.editor; @@ -174,8 +162,6 @@ module.exports = { var toggler = lines.cells[0].element.children[1]; var rect = toggler.getBoundingClientRect(); if (!rect.left) rect.left = 100; // for mockdom - toggler.dispatchEvent(MouseEvent("down", {x: rect.left, y: rect.top})); - toggler.dispatchEvent(MouseEvent("up", {x: rect.left, y: rect.top})); toggler.dispatchEvent(MouseEvent("click", {x: rect.left, y: rect.top})); editor.renderer.$loop._flush(); assert.ok(/ace_closed/.test(toggler.className)); @@ -184,16 +170,30 @@ module.exports = { // Annotation node should have fold class. var annotation = lines.cells[0].element.children[2]; assert.ok(/ace_warning_fold/.test(annotation.className)); + }, + "test: not info in fold" : function() { + var editor = this.editor; + var value = "x {" + "\n".repeat(50) + "}"; + value = value.repeat(50); + editor.session.setMode(new Mode()); + editor.setValue(value, -1); + editor.session.setAnnotations([{row: 1, column: 0, type: "info", text: "info test"}]); + editor.renderer.$loop._flush(); - var rect = annotation.getBoundingClientRect(); - annotation.dispatchEvent(new MouseEvent("move", {clientX: rect.left, clientY: rect.top})); + // Fold the line containing the annotation. + var lines = editor.renderer.$gutterLayer.$lines; + assert.equal(lines.cells[1].element.textContent, "2"); + var toggler = lines.cells[0].element.children[1]; + var rect = toggler.getBoundingClientRect(); + if (!rect.left) rect.left = 100; // for mockdom + toggler.dispatchEvent(MouseEvent("click", {x: rect.left, y: rect.top})); + editor.renderer.$loop._flush(); + assert.ok(/ace_closed/.test(toggler.className)); + assert.equal(lines.cells[1].element.textContent, "51"); - // Wait for the tooltip to appear after its timeout. - setTimeout(function() { - editor.renderer.$loop._flush(); - var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); - assert.ok(/warning in folded code/.test(tooltip.textContent)); - }, 100); + // Annotation node should NOT have fold class. + var annotation = lines.cells[0].element.children[2]; + assert.notOk(/fold/.test(annotation.className)); }, tearDown : function() { From 3a266606fb80c66dbf0d58e5b29ae710f2c2054e Mon Sep 17 00:00:00 2001 From: Alice Date: Sun, 16 Apr 2023 23:06:56 +0200 Subject: [PATCH 14/23] add annotations in fold as optional --- ace.d.ts | 1 + src/editor.js | 1 + src/ext/options.js | 3 +++ src/layer/gutter.js | 6 ++++-- src/mouse/default_gutter_handler.js | 2 +- src/mouse/default_gutter_handler_test.js | 9 ++++++--- src/virtual_renderer.js | 6 ++++++ 7 files changed, 22 insertions(+), 6 deletions(-) diff --git a/ace.d.ts b/ace.d.ts index 7ed46b6f7b6..3b58401ba77 100644 --- a/ace.d.ts +++ b/ace.d.ts @@ -195,6 +195,7 @@ export namespace Ace { hasCssTransforms: boolean; maxPixelHeight: number; useSvgGutterIcons: boolean; + showFoldedAnnotations: boolean; } export interface MouseHandlerOptions { diff --git a/src/editor.js b/src/editor.js index 474e8448b24..80f89a3870d 100644 --- a/src/editor.js +++ b/src/editor.js @@ -2932,6 +2932,7 @@ config.defineOptions(Editor.prototype, "editor", { useTextareaForIME: "renderer", useResizeObserver: "renderer", useSvgGutterIcons: "renderer", + showFoldedAnnotations: "renderer", scrollSpeed: "$mouseHandler", dragDelay: "$mouseHandler", diff --git a/src/ext/options.js b/src/ext/options.js index 471635fe182..b09e31524f3 100644 --- a/src/ext/options.js +++ b/src/ext/options.js @@ -198,6 +198,9 @@ var optionGroups = { "Use SVG gutter icons": { path: "useSvgGutterIcons" }, + "Show annotations folded lines": { + path: "showFoldedAnnotations" + }, "Keyboard Accessibility Mode": { path: "enableKeyboardAccessibility" } diff --git a/src/layer/gutter.js b/src/layer/gutter.js index f13e2a9f0fd..44a153b939d 100644 --- a/src/layer/gutter.js +++ b/src/layer/gutter.js @@ -327,7 +327,7 @@ class Gutter{ var foldAnnotationClass; var annotationInFold = false; - for (var i = row; i <= fold.end.row; i++){ + for (var i = row + 1; i <= fold.end.row; i++){ if (!this.$annotations[i]) continue; @@ -358,7 +358,7 @@ class Gutter{ } } - if (annotationInFold){ + if (annotationInFold && this.$showFoldedAnnotations){ annotationNode.className = iconClassName; annotationNode.className += foldAnnotationClass; @@ -370,6 +370,8 @@ class Gutter{ if (this.$useSvgGutterIcons) annotationNode.className += this.$annotations[row].className; + else + element.classList.add(this.$annotations[row].className.replace(" ", "")); dom.setStyle(annotationNode.style, "height", lineHeight); dom.setStyle(annotationNode.style, "display", "block"); diff --git a/src/mouse/default_gutter_handler.js b/src/mouse/default_gutter_handler.js index ec7b7d1c01a..9eb7a05c122 100644 --- a/src/mouse/default_gutter_handler.js +++ b/src/mouse/default_gutter_handler.js @@ -53,7 +53,7 @@ function GutterHandler(mouseHandler) { // If the tooltip is for a row which has a closed fold, check whether there are // annotations in the folded lines. If so, add a summary to the list of annotations. var fold = gutter.session.getNextFoldLine(row); - if (fold){ + if (fold && gutter.$showFoldedAnnotations){ var foldedAnnotationMessages = {error: [], warning: [], info: []}; var mostSevereFoldedAnnotationType; diff --git a/src/mouse/default_gutter_handler_test.js b/src/mouse/default_gutter_handler_test.js index 4df84a83dba..be28a8836b5 100644 --- a/src/mouse/default_gutter_handler_test.js +++ b/src/mouse/default_gutter_handler_test.js @@ -123,11 +123,12 @@ module.exports = { var annotation = line.children[2]; assert.ok(/ace_icon_svg/.test(annotation.className)); }, - "test: error in fold" : function() { + "test: error show up in fold" : function() { var editor = this.editor; var value = "x {" + "\n".repeat(50) + "}"; value = value.repeat(50); editor.session.setMode(new Mode()); + editor.setOption("showFoldedAnnotations", true); editor.setValue(value, -1); editor.session.setAnnotations([{row: 1, column: 0, type: "error", text: "error test"}]); editor.renderer.$loop._flush(); @@ -147,11 +148,12 @@ module.exports = { var annotation = lines.cells[0].element.children[2]; assert.ok(/ace_error_fold/.test(annotation.className)); }, - "test: warning in fold" : function() { + "test: warning show up in fold" : function() { var editor = this.editor; var value = "x {" + "\n".repeat(50) + "}"; value = value.repeat(50); editor.session.setMode(new Mode()); + editor.setOption("showFoldedAnnotations", true); editor.setValue(value, -1); editor.session.setAnnotations([{row: 1, column: 0, type: "warning", text: "warning test"}]); editor.renderer.$loop._flush(); @@ -171,11 +173,12 @@ module.exports = { var annotation = lines.cells[0].element.children[2]; assert.ok(/ace_warning_fold/.test(annotation.className)); }, - "test: not info in fold" : function() { + "test: info not show up in fold" : function() { var editor = this.editor; var value = "x {" + "\n".repeat(50) + "}"; value = value.repeat(50); editor.session.setMode(new Mode()); + editor.setOption("showFoldedAnnotations", true); editor.setValue(value, -1); editor.session.setAnnotations([{row: 1, column: 0, type: "info", text: "info test"}]); editor.renderer.$loop._flush(); diff --git a/src/virtual_renderer.js b/src/virtual_renderer.js index 18d33bb1415..d86c4000777 100644 --- a/src/virtual_renderer.js +++ b/src/virtual_renderer.js @@ -1908,6 +1908,12 @@ config.defineOptions(VirtualRenderer.prototype, "renderer", { }, initialValue: false }, + showFoldedAnnotations: { + set: function(value){ + this.$gutterLayer.$showFoldedAnnotations = value; + }, + initialValue: false + }, fadeFoldWidgets: { set: function(show) { dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show); From 448fd2cbb6eb50eb7c91b23f909b7833e681e0dd Mon Sep 17 00:00:00 2001 From: Alice Date: Tue, 18 Apr 2023 20:18:31 +0200 Subject: [PATCH 15/23] add tooltip check to tests --- src/mouse/default_gutter_handler_test.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/mouse/default_gutter_handler_test.js b/src/mouse/default_gutter_handler_test.js index be28a8836b5..3bf117f49ac 100644 --- a/src/mouse/default_gutter_handler_test.js +++ b/src/mouse/default_gutter_handler_test.js @@ -147,6 +147,16 @@ module.exports = { // Annotation node should have fold class. var annotation = lines.cells[0].element.children[2]; assert.ok(/ace_error_fold/.test(annotation.className)); + + var rect = annotation.getBoundingClientRect(); + annotation.dispatchEvent(new MouseEvent("move", {x: rect.left, y: rect.top})); + + // Wait for the tooltip to appear after its timeout. + setTimeout(function() { + editor.renderer.$loop._flush(); + var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + assert.ok(/error in folded/.test(tooltip.textContent)); + }, 100); }, "test: warning show up in fold" : function() { var editor = this.editor; @@ -172,6 +182,16 @@ module.exports = { // Annotation node should have fold class. var annotation = lines.cells[0].element.children[2]; assert.ok(/ace_warning_fold/.test(annotation.className)); + + var rect = annotation.getBoundingClientRect(); + annotation.dispatchEvent(new MouseEvent("move", {x: rect.left, y: rect.top})); + + // Wait for the tooltip to appear after its timeout. + setTimeout(function() { + editor.renderer.$loop._flush(); + var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + assert.ok(/warning in folded/.test(tooltip.textContent)); + }, 100); }, "test: info not show up in fold" : function() { var editor = this.editor; @@ -205,7 +225,6 @@ module.exports = { } }; - if (typeof module !== "undefined" && module === require.main) { require("asyncjs").test.testcase(module.exports).exec(); } From 095bf2b1485fcdd4273f7d9eb5dd4ffce2e79cc3 Mon Sep 17 00:00:00 2001 From: Alice Date: Tue, 18 Apr 2023 21:02:20 +0200 Subject: [PATCH 16/23] refactor and cleanup --- src/mouse/default_gutter_handler.js | 51 +++++++++++++---------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/src/mouse/default_gutter_handler.js b/src/mouse/default_gutter_handler.js index 9eb7a05c122..ed73571884b 100644 --- a/src/mouse/default_gutter_handler.js +++ b/src/mouse/default_gutter_handler.js @@ -34,7 +34,7 @@ function GutterHandler(mouseHandler) { }); - var tooltipTimeout, mouseEvent, tooltipAnnotation; + var tooltipTimeout, mouseEvent, tooltipContent; var annotationLabels = { error: {singular: "error", plural: "errors"}, @@ -44,18 +44,20 @@ function GutterHandler(mouseHandler) { function showTooltip() { var row = mouseEvent.getDocumentPosition().row; - var rowAnnotation = gutter.$annotations[row]; + var annotationsInRow = gutter.$annotations[row]; var annotation; - if (rowAnnotation) - annotation = {text: [...rowAnnotation.text], type: [...rowAnnotation.type]}; + if (annotationsInRow) + annotation = {text: [...annotationsInRow.text], type: [...annotationsInRow.type]}; + else + annotation = {text: [], type: []}; // If the tooltip is for a row which has a closed fold, check whether there are // annotations in the folded lines. If so, add a summary to the list of annotations. var fold = gutter.session.getNextFoldLine(row); if (fold && gutter.$showFoldedAnnotations){ - var foldedAnnotationMessages = {error: [], warning: [], info: []}; - var mostSevereFoldedAnnotationType; + var annotationsInFold = {error: [], warning: [], info: []}; + var typeMostSevereAnnotationInFold; for (var i = row + 1; i <= fold.end.row; i++){ if (!gutter.$annotations[i]) @@ -63,36 +65,29 @@ function GutterHandler(mouseHandler) { for (var j = 0; j < gutter.$annotations[i].text.length; j++) { var annotationType = gutter.$annotations[i].type[j]; - foldedAnnotationMessages[annotationType].push(gutter.$annotations[i].text[j]); - - if (!mostSevereFoldedAnnotationType){ - mostSevereFoldedAnnotationType = `${annotationType}_fold`; - continue; - } + annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]); if (annotationType == "error"){ - mostSevereFoldedAnnotationType = "error_fold"; + typeMostSevereAnnotationInFold = "error_fold"; continue; } - if (annotationType == "warning" && mostSevereFoldedAnnotationType == "info"){ - mostSevereFoldedAnnotationType = "warning_fold"; + if (annotationType == "warning"){ + typeMostSevereAnnotationInFold = "warning_fold"; continue; } } } - var summaryFoldedAnnotations = `${annotationsToSummaryString(foldedAnnotationMessages)} in folded code.`; - - if (mostSevereFoldedAnnotationType == "error_fold" || mostSevereFoldedAnnotationType == "warning_fold"){ - if (!annotation) - annotation = {text: [], type: []}; + + if (typeMostSevereAnnotationInFold == "error_fold" || typeMostSevereAnnotationInFold == "warning_fold"){ + var summaryFoldedAnnotations = `${annotationsToSummaryString(annotationsInFold)} in folded code.`; annotation.text.push(summaryFoldedAnnotations); - annotation.type.push(mostSevereFoldedAnnotationType); + annotation.type.push(typeMostSevereAnnotationInFold); } } - if (!annotation || annotation.text == 0) + if (annotation.text.length == 0) return hideTooltip(); var maxRow = editor.session.getLength(); @@ -111,9 +106,9 @@ function GutterHandler(mouseHandler) { var line = ` ${annotation.text[i]}`; annotationMessages[annotation.type[i].replace("_fold","")].push(line); } - tooltipAnnotation = [].concat(annotationMessages.error, annotationMessages.warning, annotationMessages.info).join("
"); + tooltipContent = [].concat(annotationMessages.error, annotationMessages.warning, annotationMessages.info).join("
"); - tooltip.setHtml(tooltipAnnotation); + tooltip.setHtml(tooltipContent); tooltip.setClassName("ace_gutter-tooltip"); tooltip.$element.setAttribute("aria-live", "polite"); @@ -135,9 +130,9 @@ function GutterHandler(mouseHandler) { function hideTooltip() { if (tooltipTimeout) tooltipTimeout = clearTimeout(tooltipTimeout); - if (tooltipAnnotation) { + if (tooltipContent) { tooltip.hide(); - tooltipAnnotation = null; + tooltipContent = null; editor._signal("hideGutterTooltip", tooltip); editor.off("mousewheel", hideTooltip); } @@ -166,7 +161,7 @@ function GutterHandler(mouseHandler) { if (dom.hasCssClass(target, "ace_fold-widget")) return hideTooltip(); - if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse) + if (tooltipContent && mouseHandler.$tooltipFollowsMouse) moveTooltip(e); mouseEvent = e; @@ -183,7 +178,7 @@ function GutterHandler(mouseHandler) { event.addListener(editor.renderer.$gutter, "mouseout", function(e) { mouseEvent = null; - if (!tooltipAnnotation || tooltipTimeout) + if (!tooltipContent || tooltipTimeout) return; tooltipTimeout = setTimeout(function() { From 9dcf632af823adaf4bf5586259be1e855936e5af Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Wed, 19 Apr 2023 13:46:52 +0200 Subject: [PATCH 17/23] refactoring --- src/mouse/default_gutter_handler.js | 35 +++++++++++++---------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/mouse/default_gutter_handler.js b/src/mouse/default_gutter_handler.js index ed73571884b..a28d20b4a16 100644 --- a/src/mouse/default_gutter_handler.js +++ b/src/mouse/default_gutter_handler.js @@ -57,7 +57,7 @@ function GutterHandler(mouseHandler) { var fold = gutter.session.getNextFoldLine(row); if (fold && gutter.$showFoldedAnnotations){ var annotationsInFold = {error: [], warning: [], info: []}; - var typeMostSevereAnnotationInFold; + var mostSevereAnnotationInFoldType; for (var i = row + 1; i <= fold.end.row; i++){ if (!gutter.$annotations[i]) @@ -67,27 +67,27 @@ function GutterHandler(mouseHandler) { var annotationType = gutter.$annotations[i].type[j]; annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]); - if (annotationType == "error"){ - typeMostSevereAnnotationInFold = "error_fold"; + if (annotationType === "error"){ + mostSevereAnnotationInFoldType = "error_fold"; continue; } - if (annotationType == "warning"){ - typeMostSevereAnnotationInFold = "warning_fold"; + if (annotationType === "warning"){ + mostSevereAnnotationInFoldType = "warning_fold"; continue; } } } - if (typeMostSevereAnnotationInFold == "error_fold" || typeMostSevereAnnotationInFold == "warning_fold"){ + if (mostSevereAnnotationInFoldType === "error_fold" || mostSevereAnnotationInFoldType === "warning_fold"){ var summaryFoldedAnnotations = `${annotationsToSummaryString(annotationsInFold)} in folded code.`; annotation.text.push(summaryFoldedAnnotations); - annotation.type.push(typeMostSevereAnnotationInFold); + annotation.type.push(mostSevereAnnotationInFoldType); } } - if (annotation.text.length == 0) + if (annotation.text.length === 0) return hideTooltip(); var maxRow = editor.session.getLength(); @@ -119,7 +119,7 @@ function GutterHandler(mouseHandler) { if (mouseHandler.$tooltipFollowsMouse) { moveTooltip(mouseEvent); } else { - var gutterElement = gutter.$lines.cells[row].element.children[1]; + var gutterElement = gutter.$lines.cells[row].element.querySelector("[class*=ace_icon]"); var rect = gutterElement.getBoundingClientRect(); var style = tooltip.getElement().style; style.left = rect.right + "px"; @@ -139,17 +139,14 @@ function GutterHandler(mouseHandler) { } function annotationsToSummaryString(annotations) { - var isMoreThanOneAnnotationType = false; - var summaryString = ""; - for (var i = 0; i < 3; i++){ - var annotationType = ['error', 'warning', 'info'][i]; - if (annotations[annotationType].length > 0){ - var label = annotations[annotationType].length === 1 ? annotationLabels[annotationType].singular : annotationLabels[annotationType].plural; - summaryString += `${isMoreThanOneAnnotationType ? ', ' : ''}${annotations[annotationType].length} ${label}`; - isMoreThanOneAnnotationType = true; - } + const summary = []; + const annotationTypes = ['error', 'warning', 'info']; + for (const annotationType of annotationTypes) { + if (!annotations[annotationType].length) continue; + const label = annotations[annotationType].length === 1 ? annotationLabels[annotationType].singular : annotationLabels[annotationType].plural; + summary.push(`${annotations[annotationType].length} ${label}`); } - return summaryString; + return summary.join(", "); } function moveTooltip(e) { From 6083beba026d13d25f9022b32e4a189a738d5c52 Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Wed, 19 Apr 2023 14:22:14 +0200 Subject: [PATCH 18/23] Change name kitchen-sink option --- src/ext/options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ext/options.js b/src/ext/options.js index b09e31524f3..2e2beb36f0d 100644 --- a/src/ext/options.js +++ b/src/ext/options.js @@ -198,7 +198,7 @@ var optionGroups = { "Use SVG gutter icons": { path: "useSvgGutterIcons" }, - "Show annotations folded lines": { + "Annotations for folded lines": { path: "showFoldedAnnotations" }, "Keyboard Accessibility Mode": { From a4a265261a067e95f806db3bf96a5ac37440bdc9 Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Thu, 20 Apr 2023 10:45:00 +0200 Subject: [PATCH 19/23] make svg viewbox size consistent --- src/css/editor.css.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/css/editor.css.js b/src/css/editor.css.js index 4c8fa949854..93d86ceda9f 100644 --- a/src/css/editor.css.js +++ b/src/css/editor.css.js @@ -152,15 +152,15 @@ module.exports = ` } .ace_icon_svg.ace_error { - -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+"); + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+"); background-color: crimson; } .ace_icon_svg.ace_warning { - -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg=="); + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg=="); background-color: darkorange; } .ace_icon_svg.ace_info { - -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJibHVlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjgiIGN5PSI4IiByPSI3IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjxwb2x5bGluZSBwb2ludHM9IjggMTEgOCA4Ii8+Cjxwb2x5bGluZSBwb2ludHM9IjkgOCA2IDgiLz4KPGxpbmUgeDE9IjEwIiB5MT0iMTEiIHgyPSI2IiB5Mj0iMTEiLz4KPHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjAuMDEiIGhlaWdodD0iMC4wMSIvPgo8L2c+Cjwvc3ZnPg=="); + -webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJibHVlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjgiIGN5PSI4IiByPSI3IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjxwb2x5bGluZSBwb2ludHM9IjggMTEgOCA4Ii8+Cjxwb2x5bGluZSBwb2ludHM9IjkgOCA2IDgiLz4KPGxpbmUgeDE9IjEwIiB5MT0iMTEiIHgyPSI2IiB5Mj0iMTEiLz4KPHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjAuMDEiIGhlaWdodD0iMC4wMSIvPgo8L2c+Cjwvc3ZnPg=="); background-color: royalblue; } From 15bd2d0f6678e6e0d0570e08612ae2e55fb83626 Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Thu, 20 Apr 2023 10:51:47 +0200 Subject: [PATCH 20/23] test tweak --- src/mouse/default_gutter_handler_test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mouse/default_gutter_handler_test.js b/src/mouse/default_gutter_handler_test.js index 3bf117f49ac..4f619b11555 100644 --- a/src/mouse/default_gutter_handler_test.js +++ b/src/mouse/default_gutter_handler_test.js @@ -51,7 +51,7 @@ module.exports = { assert.ok(/ace_error/.test(annotation.className)); var rect = annotation.getBoundingClientRect(); - annotation.dispatchEvent(new MouseEvent("move", {clientX: rect.left, clientY: rect.top})); + annotation.dispatchEvent(new MouseEvent("move", {x: rect.left, y: rect.top})); // Wait for the tooltip to appear after its timeout. setTimeout(function() { @@ -74,7 +74,7 @@ module.exports = { assert.ok(/ace_warning/.test(annotation.className)); var rect = annotation.getBoundingClientRect(); - annotation.dispatchEvent(new MouseEvent("move", {clientX: rect.left, clientY: rect.top})); + annotation.dispatchEvent(new MouseEvent("move", {x: rect.left, y: rect.top})); // Wait for the tooltip to appear after its timeout. setTimeout(function() { @@ -97,7 +97,7 @@ module.exports = { assert.ok(/ace_info/.test(annotation.className)); var rect = annotation.getBoundingClientRect(); - annotation.dispatchEvent(new MouseEvent("move", {clientX: rect.left, clientY: rect.top})); + annotation.dispatchEvent(new MouseEvent("move", {x: rect.left, y: rect.top})); // Wait for the tooltip to appear after its timeout. setTimeout(function() { From 0c0727b936f88f993d8aa69fc17d50f57ad6bded Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Thu, 20 Apr 2023 11:24:59 +0200 Subject: [PATCH 21/23] change array copy to use Array.from --- src/mouse/default_gutter_handler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mouse/default_gutter_handler.js b/src/mouse/default_gutter_handler.js index c875492c7bc..677ef1afa6d 100644 --- a/src/mouse/default_gutter_handler.js +++ b/src/mouse/default_gutter_handler.js @@ -48,7 +48,7 @@ function GutterHandler(mouseHandler) { var annotation; if (annotationsInRow) - annotation = {text: [...annotationsInRow.text], type: [...annotationsInRow.type]}; + annotation = {text: Array.from(annotationsInRow.text), type: Array.from(annotationsInRow.type)}; else annotation = {text: [], type: []}; From 99f9d3641aebf398c3a470a66dbd592f872003ec Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Thu, 20 Apr 2023 14:36:30 +0200 Subject: [PATCH 22/23] test fix --- src/mouse/default_gutter_handler_test.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/mouse/default_gutter_handler_test.js b/src/mouse/default_gutter_handler_test.js index 4f619b11555..f170b1e25de 100644 --- a/src/mouse/default_gutter_handler_test.js +++ b/src/mouse/default_gutter_handler_test.js @@ -56,7 +56,7 @@ module.exports = { // Wait for the tooltip to appear after its timeout. setTimeout(function() { editor.renderer.$loop._flush(); - var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + var tooltip = editor.container.querySelector(".ace_tooltip"); assert.ok(/error test/.test(tooltip.textContent)); }, 100); }, @@ -79,7 +79,7 @@ module.exports = { // Wait for the tooltip to appear after its timeout. setTimeout(function() { editor.renderer.$loop._flush(); - var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + var tooltip = editor.container.querySelector(".ace_tooltip"); assert.ok(/warning test/.test(tooltip.textContent)); }, 100); }, @@ -102,7 +102,7 @@ module.exports = { // Wait for the tooltip to appear after its timeout. setTimeout(function() { editor.renderer.$loop._flush(); - var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + var tooltip = editor.container.querySelector(".ace_tooltip"); assert.ok(/info test/.test(tooltip.textContent)); }, 100); }, @@ -154,7 +154,7 @@ module.exports = { // Wait for the tooltip to appear after its timeout. setTimeout(function() { editor.renderer.$loop._flush(); - var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + var tooltip = editor.container.querySelector(".ace_tooltip"); assert.ok(/error in folded/.test(tooltip.textContent)); }, 100); }, @@ -189,7 +189,7 @@ module.exports = { // Wait for the tooltip to appear after its timeout. setTimeout(function() { editor.renderer.$loop._flush(); - var tooltip = editor.container.querySelector(".ace_gutter-tooltip"); + var tooltip = editor.container.querySelector(".ace_tooltip"); assert.ok(/warning in folded/.test(tooltip.textContent)); }, 100); }, From 3b180cbf865d12d8ce7c6823df23ab10f89c56ba Mon Sep 17 00:00:00 2001 From: Alice Koreman Date: Thu, 20 Apr 2023 14:51:50 +0200 Subject: [PATCH 23/23] tweak --- src/mouse/default_gutter_handler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mouse/default_gutter_handler.js b/src/mouse/default_gutter_handler.js index 677ef1afa6d..d8b1324f7a9 100644 --- a/src/mouse/default_gutter_handler.js +++ b/src/mouse/default_gutter_handler.js @@ -54,7 +54,7 @@ function GutterHandler(mouseHandler) { // If the tooltip is for a row which has a closed fold, check whether there are // annotations in the folded lines. If so, add a summary to the list of annotations. - var fold = gutter.session.getNextFoldLine(row); + var fold = gutter.session.getFoldLine(row); if (fold && gutter.$showFoldedAnnotations){ var annotationsInFold = {error: [], warning: [], info: []}; var mostSevereAnnotationInFoldType;