Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: ajaxorg/ace-builds
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.17.0
Choose a base ref
...
head repository: ajaxorg/ace-builds
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.18.0
Choose a head ref
  • 1 commit
  • 59 files changed
  • 1 contributor

Commits on Apr 21, 2023

  1. package 21.04.23

    Zakhar Kozlov committed Apr 21, 2023
    Copy the full SHA
    d37df56 View commit details
Showing with 1,396 additions and 350 deletions.
  1. +8 −0 CHANGELOG.md
  2. +14 −0 ace.d.ts
  3. +36 −25 css/ace.css
  4. BIN css/main-11.png
  5. BIN css/main-12.png
  6. BIN css/main-13.png
  7. BIN css/main-14.png
  8. BIN css/main-15.png
  9. BIN css/main-16.png
  10. BIN css/main-17.png
  11. BIN css/main-18.png
  12. BIN css/main-19.png
  13. BIN css/main-20.png
  14. BIN css/main-21.png
  15. BIN css/main-22.png
  16. +1 −1 css/main-5.svg
  17. +1 −1 css/main-6.svg
  18. +1 −1 css/main-7.svg
  19. +4 −0 css/main-8.svg
  20. +4 −0 css/main-9.svg
  21. +206 −3 demo/kitchen-sink/demo.js
  22. +32 −0 demo/kitchen-sink/styles.css
  23. +1 −1 package.json
  24. +1 −1 src-min-noconflict/ace.js
  25. +1 −1 src-min-noconflict/ext-inline_autocomplete.js
  26. +1 −1 src-min-noconflict/ext-language_tools.js
  27. +1 −1 src-min-noconflict/ext-options.js
  28. +1 −1 src-min-noconflict/ext-prompt.js
  29. +1 −1 src-min-noconflict/ext-searchbox.js
  30. +1 −1 src-min-noconflict/ext-settings_menu.js
  31. +1 −1 src-min-noconflict/keybinding-vim.js
  32. +1 −1 src-min-noconflict/mode-mysql.js
  33. +1 −1 src-min/ace.js
  34. +1 −1 src-min/ext-inline_autocomplete.js
  35. +1 −1 src-min/ext-language_tools.js
  36. +1 −1 src-min/ext-options.js
  37. +1 −1 src-min/ext-prompt.js
  38. +1 −1 src-min/ext-searchbox.js
  39. +1 −1 src-min/ext-settings_menu.js
  40. +1 −1 src-min/keybinding-vim.js
  41. +1 −1 src-min/mode-mysql.js
  42. +412 −53 src-noconflict/ace.js
  43. +3 −1 src-noconflict/ext-inline_autocomplete.js
  44. +3 −1 src-noconflict/ext-language_tools.js
  45. +3 −0 src-noconflict/ext-options.js
  46. +3 −1 src-noconflict/ext-prompt.js
  47. +88 −86 src-noconflict/ext-searchbox.js
  48. +3 −0 src-noconflict/ext-settings_menu.js
  49. +13 −5 src-noconflict/keybinding-vim.js
  50. +7 −3 src-noconflict/mode-mysql.js
  51. +412 −53 src/ace.js
  52. +3 −1 src/ext-inline_autocomplete.js
  53. +3 −1 src/ext-language_tools.js
  54. +3 −0 src/ext-options.js
  55. +3 −1 src/ext-prompt.js
  56. +88 −86 src/ext-searchbox.js
  57. +3 −0 src/ext-settings_menu.js
  58. +13 −5 src/keybinding-vim.js
  59. +7 −3 src/mode-mysql.js
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -2,6 +2,14 @@

All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.

## [1.18.0](https://github.com/ajaxorg/ace/compare/v1.17.0...v1.18.0) (2023-04-21)


### Features

* marker groups ([#5113](https://github.com/ajaxorg/ace/issues/5113)) ([01d4605](https://github.com/ajaxorg/ace/commit/01d4605c0dcf7bcbb4f1a09a243f7ef6d16d7d43))
* summary of annotations in folded lines ([#5117](https://github.com/ajaxorg/ace/issues/5117)) ([dc63ba9](https://github.com/ajaxorg/ace/commit/dc63ba900d3641284d7d11cbb5ccad7c3039f3a4))

## [1.17.0](https://github.com/ajaxorg/ace/compare/v1.16.0...v1.17.0) (2023-04-12)


14 changes: 14 additions & 0 deletions ace.d.ts
Original file line number Diff line number Diff line change
@@ -196,6 +196,7 @@ export namespace Ace {
hasCssTransforms: boolean;
maxPixelHeight: number;
useSvgGutterIcons: boolean;
showFoldedAnnotations: boolean;
}

export interface MouseHandlerOptions {
@@ -228,6 +229,7 @@ export namespace Ace {
value: string;
session: EditSession;
relativeLineNumbers: boolean;
enableMultiselect: boolean;
enableKeyboardAccessibility: boolean;
}

@@ -276,6 +278,18 @@ export namespace Ace {
type: string;
}

export interface MarkerGroupItem {
range: Range;
className: string;
}

export class MarkerGroup {
constructor(session: EditSession);
setMarkers: (markers: MarkerGroupItem[]) => void;
getMarkerAtPosition: (pos: Position) => MarkerGroupItem;
}


export interface Command {
name?: string;
bindKey?: string | { mac?: string, win?: string };
61 changes: 36 additions & 25 deletions css/ace.css
Original file line number Diff line number Diff line change
@@ -129,7 +129,7 @@ left: 0;
box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;
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;
@@ -138,16 +138,20 @@ padding-left: 19px;
padding-right: 6px;
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_error, .ace_icon.ace_error {
.ace_gutter-cell .ace_icon {
margin-left: -18px;
float: left;
}
.ace_gutter-cell.ace_error, .ace_icon.ace_error, .ace_icon.ace_error_fold {
background-image: url("./main-1.png");
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("./main-2.png");
background-repeat: no-repeat;
background-position: 2px center;
@@ -172,6 +176,14 @@ background-color: darkorange;
-webkit-mask-image: url("./main-7.svg");
background-color: royalblue;
}
.ace_icon_svg.ace_error_fold {
-webkit-mask-image: url("./main-8.svg");
background-color: crimson;
}
.ace_icon_svg.ace_warning_fold {
-webkit-mask-image: url("./main-9.svg");
background-color: darkorange;
}
.ace_scrollbar {
contain: strict;
position: absolute;
@@ -380,8 +392,8 @@ height: 11px;
margin-top: -2px;
vertical-align: middle;
background-image:
url("./main-8.png"),
url("./main-9.png");
url("./main-10.png"),
url("./main-11.png");
background-repeat: no-repeat, repeat-x;
background-position: center center, top left;
color: transparent;
@@ -394,8 +406,8 @@ pointer-events: auto;
}
.ace_fold:hover{
background-image:
url("./main-10.png"),
url("./main-11.png");
url("./main-12.png"),
url("./main-13.png");
}
.ace_tooltip {
background-color: #f5f5f5;
@@ -417,18 +429,17 @@ font-weight: normal;
letter-spacing: normal;
pointer-events: none;
}
.ace_tooltip:focus {
outline: 1px solid black;
.ace_tooltip.ace_dark {
background-color: #636363;
color: #fff;
}
.ace_gutter-tooltip_header {
font-weight: bold;
}
.ace_gutter-tooltip_body {
padding-top: 5px;
.ace_tooltip:focus {
outline: 1px solid #5E9ED6;
}
.ace_gutter-tooltip .ace_icon {
.ace_icon {
display: inline-block;
width: 18px;
vertical-align: top;
}
.ace_icon_svg {
display: inline-block;
@@ -447,7 +458,7 @@ margin: 0 -12px 0 1px;
display: none;
width: 11px;
vertical-align: top;
background-image: url("./main-12.png");
background-image: url("./main-14.png");
background-repeat: no-repeat;
background-position: center;
border-radius: 3px;
@@ -458,10 +469,10 @@ cursor: pointer;
display: inline-block;
}
.ace_fold-widget.ace_end {
background-image: url("./main-13.png");
background-image: url("./main-15.png");
}
.ace_fold-widget.ace_closed {
background-image: url("./main-14.png");
background-image: url("./main-16.png");
}
.ace_fold-widget:hover {
border: 1px solid rgba(0, 0, 0, 0.3);
@@ -477,13 +488,13 @@ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);
* Dark version for fold widgets
*/
.ace_dark .ace_fold-widget {
background-image: url("./main-15.png");
background-image: url("./main-17.png");
}
.ace_dark .ace_fold-widget.ace_end {
background-image: url("./main-16.png");
background-image: url("./main-18.png");
}
.ace_dark .ace_fold-widget.ace_closed {
background-image: url("./main-17.png");
background-image: url("./main-19.png");
}
.ace_dark .ace_fold-widget:hover {
box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);
@@ -702,10 +713,10 @@ background: rgb(250, 250, 255);
border: 1px solid rgb(200, 200, 250);
}
.ace-tm .ace_indent-guide {
background: url("./main-18.png") right repeat-y;
background: url("./main-20.png") right repeat-y;
}
.ace-tm .ace_indent-guide-active {
background: url("./main-19.png") right repeat-y;
background: url("./main-21.png") right repeat-y;
}
/*error_marker.css*/
.error_widget_wrapper {
@@ -1017,7 +1028,7 @@ transform: rotate(-45deg);
border-width: 0 2px 2px 0 ;
}
.ace_searchbtn_close {
background: url("./main-20.png") no-repeat 50% 0;
background: url("./main-22.png") no-repeat 50% 0;
border-radius: 50%;
border: 0 none;
color: #656565;
Binary file modified css/main-11.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified css/main-12.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified css/main-13.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified css/main-14.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified css/main-15.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified css/main-16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified css/main-17.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified css/main-18.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified css/main-19.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified css/main-20.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added css/main-21.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added css/main-22.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion css/main-5.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion css/main-6.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion css/main-7.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions css/main-8.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions css/main-9.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
209 changes: 206 additions & 3 deletions demo/kitchen-sink/demo.js
Original file line number Diff line number Diff line change
@@ -3410,6 +3410,9 @@ class TokenTooltip extends Tooltip {
this.height = this.getHeight();
this.tokenText = tokenText;
}
if (!this.isOpen) {
this.setTheme(r.theme);
}

this.show(null, this.x, this.y);

@@ -3460,6 +3463,76 @@ exports.TokenTooltip = TokenTooltip;

});

define("ace/marker_group",["require","exports","module"], function(require, exports, module){"use strict";
var MarkerGroup = /** @class */ (function () {
function MarkerGroup(session) {
this.markers = [];
this.session = session;
session.addDynamicMarker(this);
}
MarkerGroup.prototype.getMarkerAtPosition = function (pos) {
return this.markers.find(function (marker) {
return marker.range.contains(pos.row, pos.column);
});
};
MarkerGroup.prototype.markersComparator = function (a, b) {
return a.range.start.row - b.range.start.row;
};
MarkerGroup.prototype.setMarkers = function (markers) {
this.markers = markers.sort(this.markersComparator).slice(0, this.MAX_MARKERS);
this.session._signal("changeBackMarker");
};
MarkerGroup.prototype.update = function (html, markerLayer, session, config) {
if (!this.markers || !this.markers.length)
return;
var visibleRangeStartRow = config.firstRow, visibleRangeEndRow = config.lastRow;
var foldLine;
var markersOnOneLine = 0;
var lastRow = 0;
for (var i = 0; i < this.markers.length; i++) {
var marker = this.markers[i];
if (marker.range.end.row < visibleRangeStartRow)
continue;
if (marker.range.start.row > visibleRangeEndRow)
continue;
if (marker.range.start.row === lastRow) {
markersOnOneLine++;
}
else {
lastRow = marker.range.start.row;
markersOnOneLine = 0;
}
if (markersOnOneLine > 200) {
continue;
}
var markerVisibleRange = marker.range.clipRows(visibleRangeStartRow, visibleRangeEndRow);
if (markerVisibleRange.start.row === markerVisibleRange.end.row
&& markerVisibleRange.start.column === markerVisibleRange.end.column) {
continue; // visible range is empty
}
var screenRange = markerVisibleRange.toScreenRange(session);
if (screenRange.isEmpty()) {
foldLine = session.getNextFoldLine(markerVisibleRange.end.row, foldLine);
if (foldLine && foldLine.end.row > markerVisibleRange.end.row) {
visibleRangeStartRow = foldLine.end.row;
}
continue;
}
if (screenRange.isMultiLine()) {
markerLayer.drawTextMarker(html, screenRange, marker.className, config);
}
else {
markerLayer.drawSingleLineMarker(html, screenRange, marker.className, config);
}
}
};
return MarkerGroup;
}());
MarkerGroup.prototype.MAX_MARKERS = 10000;
exports.MarkerGroup = MarkerGroup;

});

define("ace/split",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/editor","ace/virtual_renderer","ace/edit_session"], function(require, exports, module){"use strict";
var oop = require("./lib/oop");
var lang = require("./lib/lang");
@@ -3952,6 +4025,9 @@ var optionGroups = {
"Use SVG gutter icons": {
path: "useSvgGutterIcons"
},
"Annotations for folded lines": {
path: "showFoldedAnnotations"
},
"Keyboard Accessibility Mode": {
path: "enableKeyboardAccessibility"
}
@@ -5809,13 +5885,15 @@ var Autocomplete = /** @class */ (function () {
Autocomplete.prototype.showDocTooltip = function (item) {
if (!this.tooltipNode) {
this.tooltipNode = dom.createElement("div");
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip";
this.tooltipNode.style.margin = 0;
this.tooltipNode.style.pointerEvents = "auto";
this.tooltipNode.tabIndex = -1;
this.tooltipNode.onblur = this.blurListener.bind(this);
this.tooltipNode.onclick = this.onTooltipClick.bind(this);
}
var theme = this.editor.renderer.theme;
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " +
(theme.isDark ? "ace_dark " : "") + (theme.cssClass || "");
var tooltipNode = this.tooltipNode;
if (item.docHTML) {
tooltipNode.innerHTML = item.docHTML;
@@ -7519,7 +7597,7 @@ exports.commands = [{

});

define("kitchen-sink/demo",["require","exports","module","ace/ext/rtl","ace/multi_select","kitchen-sink/inline_editor","kitchen-sink/dev_util","kitchen-sink/file_drop","ace/config","ace/lib/dom","ace/lib/net","ace/lib/lang","ace/lib/event","ace/theme/textmate","ace/edit_session","ace/undomanager","ace/keyboard/hash_handler","ace/virtual_renderer","ace/editor","ace/ext/whitespace","kitchen-sink/doclist","kitchen-sink/layout","kitchen-sink/util","ace/ext/elastic_tabstops_lite","ace/incremental_search","kitchen-sink/token_tooltip","ace/config","ace/worker/worker_client","ace/split","ace/ext/options","ace/autocomplete","ace/ext/statusbar","ace/ext/emmet","ace/placeholder","ace/snippets","ace/ext/language_tools","ace/ext/inline_autocomplete","ace/ext/beautify","ace/keyboard/keybinding","ace/commands/command_manager"], function(require, exports, module) {"use strict";
define("kitchen-sink/demo",["require","exports","module","ace/ext/rtl","ace/multi_select","kitchen-sink/inline_editor","kitchen-sink/dev_util","kitchen-sink/file_drop","ace/config","ace/lib/dom","ace/lib/net","ace/lib/lang","ace/lib/event","ace/theme/textmate","ace/edit_session","ace/undomanager","ace/keyboard/hash_handler","ace/virtual_renderer","ace/editor","ace/range","ace/ext/whitespace","kitchen-sink/doclist","kitchen-sink/layout","kitchen-sink/util","ace/ext/elastic_tabstops_lite","ace/incremental_search","kitchen-sink/token_tooltip","ace/config","ace/config","ace/tooltip","ace/marker_group","ace/worker/worker_client","ace/split","ace/ext/options","ace/autocomplete","ace/ext/statusbar","ace/ext/emmet","ace/placeholder","ace/snippets","ace/ext/language_tools","ace/ext/inline_autocomplete","ace/ext/beautify","ace/keyboard/keybinding","ace/commands/command_manager"], function(require, exports, module) {"use strict";

require("ace/ext/rtl");

@@ -7550,6 +7628,7 @@ var HashHandler = require("ace/keyboard/hash_handler").HashHandler;

var Renderer = require("ace/virtual_renderer").VirtualRenderer;
var Editor = require("ace/editor").Editor;
var Range = require("ace/range").Range;

var whitespace = require("ace/ext/whitespace");

@@ -7565,7 +7644,6 @@ var ElasticTabstopsLite = require("ace/ext/elastic_tabstops_lite").ElasticTabsto

var IncrementalSearch = require("ace/incremental_search").IncrementalSearch;


var TokenTooltip = require("./token_tooltip").TokenTooltip;
require("ace/config").defineOptions(Editor.prototype, "editor", {
showTokenInfo: {
@@ -7585,6 +7663,127 @@ require("ace/config").defineOptions(Editor.prototype, "editor", {
}
});

require("ace/config").defineOptions(Editor.prototype, "editor", {
useAceLinters: {
set: function(val) {
if (val && !window.languageProvider) {
loadLanguageProvider(editor);
}
else if (val) {
window.languageProvider.registerEditor(this);
} else {
}
}
}
});

var {HoverTooltip} = require("ace/tooltip");
var MarkerGroup = require("ace/marker_group").MarkerGroup;
var docTooltip = new HoverTooltip();
function loadLanguageProvider(editor) {
require([
"https://www.unpkg.com/ace-linters/build/ace-linters.js"
], function(m) {
var languageProvider = m.LanguageProvider.fromCdn("https://www.unpkg.com/ace-linters/build", {
functionality: {
hover: true,
completion: {
overwriteCompleters: true
},
completionResolve: true,
format: true,
documentHighlights: true,
signatureHelp: false
}
});
window.languageProvider = languageProvider;
languageProvider.registerEditor(editor);
if (languageProvider.$descriptionTooltip)
editor.off("mousemove", languageProvider.$descriptionTooltip.onMouseMove);
languageProvider.$messageController.$worker.addEventListener("message", function(e) {
var id = e.data.sessionId.split(".")[0];
var session = languageProvider.$getSessionLanguageProvider({id: id})?.session;
if (e.data.type == 6) {
e.stopPropagation();
if (session) {
showAnnotations(session, e.data.value);
}
} else if (e.data.type == 13) {
if (session) showOccurrenceMarkers(session, e.data.value);
}
}, true);
function showOccurrenceMarkers(session, positions) {
if (!session.state.occurrenceMarkers) {
session.state.occurrenceMarkers = new MarkerGroup(session);
}
session.state.occurrenceMarkers.setMarkers(positions.map(function(el) {
var r = el.range;
return {
range: new Range(r.start.line, r.start.character, r.end.line, r.end.character),
className: el.kind == 2
? "language_highlight_read"
: el.kind == 3
? "language_highlight_write"
: "language_highlight_text"
};
}));
}
function showAnnotations(session, diagnostics) {
session.clearAnnotations();
let annotations = diagnostics.map((el) => {
console.log(el.severity, el)
return {
row: el.range.start.line,
column: el.range.start.character,
text: el.message,
type: el.severity === 1 ? "error" : el.severity === 2 ? "warning" : "info"
};
});
if (annotations && annotations.length > 0) {
session.setAnnotations(annotations);
}

if (!session.state) session.state = {}
if (!session.state.diagnosticMarkers) {
session.state.diagnosticMarkers = new MarkerGroup(session);
}
session.state.diagnosticMarkers.setMarkers(diagnostics.map(function(el) {
var r = el.range;
return {
range: new Range(r.start.line, r.start.character, r.end.line, r.end.character),
tooltipText: el.message,
className: "language_highlight_error"
};
}));
};

docTooltip.setDataProvider(function(e, editor) {
let session = editor.session;
let docPos = e.getDocumentPosition();

languageProvider.doHover(session, docPos, function(hover) {
var errorMarker = session.state?.diagnosticMarkers.getMarkerAtPosition(docPos);
var range = hover?.range || errorMarker?.range;
if (!range) return;
var hoverNode = hover && dom.buildDom(["div", {}])
if (hoverNode) {
hover.content.text = hover.content.text.replace(/(?!^)`{3}/gm, "\n$&");
hoverNode.innerHTML = languageProvider.getTooltipText(hover);
};

var domNode = dom.buildDom(["div", {},
errorMarker && ["div", {}, errorMarker.tooltipText.trim()],
hoverNode
]);
docTooltip.showForRange(editor, range, domNode, e);
});
});

docTooltip.addToEditor(editor)
});
}



var workerModule = require("ace/worker/worker_client");
if (location.href.indexOf("noworker") !== -1) {
@@ -7901,6 +8100,10 @@ optionsPanel.add({
return !!originalAutocompleteCommand;
}
},
"Use Ace Linters": {
position: 3000,
path: "useAceLinters"
},
"Show Textarea Position": devUtil.textPositionDebugger,
"Text Input Debugger": devUtil.textInputDebugger,
}
32 changes: 32 additions & 0 deletions demo/kitchen-sink/styles.css
Original file line number Diff line number Diff line change
@@ -92,4 +92,36 @@ body {
z-index: 1000!important;
opacity: 1!important;
font-size: 1em!important;
}


.language_highlight_error {
position: absolute;
border-bottom: dotted 1px #e00404;
z-index: 2000;
border-radius: 0;
}
.language_highlight_warning {
position: absolute;
border-bottom: solid 1px #DDC50F;
z-index: 2000;
border-radius: 0;
}
.language_highlight_info {
position: absolute;
border-bottom: dotted 1px #999;
z-index: 2000;
border-radius: 0;
}
.language_highlight_text, .language_highlight_read, .language_highlight_write {
position: absolute;
box-sizing: border-box;
border: solid 1px #888;
z-index: 2000;
}
.language_highlight_write {
border: solid 1px #F88;
}
.ace_tooltip pre {
margin: 0;
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@
"name": "ace-builds",
"main": "./src-noconflict/ace.js",
"typings": "ace.d.ts",
"version": "1.17.0",
"version": "1.18.0",
"description": "Ace (Ajax.org Cloud9 Editor)",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
2 changes: 1 addition & 1 deletion src-min-noconflict/ace.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min-noconflict/ext-inline_autocomplete.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min-noconflict/ext-language_tools.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min-noconflict/ext-options.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min-noconflict/ext-prompt.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min-noconflict/ext-searchbox.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min-noconflict/ext-settings_menu.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min-noconflict/keybinding-vim.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min-noconflict/mode-mysql.js
2 changes: 1 addition & 1 deletion src-min/ace.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min/ext-inline_autocomplete.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min/ext-language_tools.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min/ext-options.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min/ext-prompt.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min/ext-searchbox.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min/ext-settings_menu.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min/keybinding-vim.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src-min/mode-mysql.js
465 changes: 412 additions & 53 deletions src-noconflict/ace.js

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion src-noconflict/ext-inline_autocomplete.js
Original file line number Diff line number Diff line change
@@ -1681,13 +1681,15 @@ var Autocomplete = /** @class */ (function () {
Autocomplete.prototype.showDocTooltip = function (item) {
if (!this.tooltipNode) {
this.tooltipNode = dom.createElement("div");
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip";
this.tooltipNode.style.margin = 0;
this.tooltipNode.style.pointerEvents = "auto";
this.tooltipNode.tabIndex = -1;
this.tooltipNode.onblur = this.blurListener.bind(this);
this.tooltipNode.onclick = this.onTooltipClick.bind(this);
}
var theme = this.editor.renderer.theme;
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " +
(theme.isDark ? "ace_dark " : "") + (theme.cssClass || "");
var tooltipNode = this.tooltipNode;
if (item.docHTML) {
tooltipNode.innerHTML = item.docHTML;
4 changes: 3 additions & 1 deletion src-noconflict/ext-language_tools.js
Original file line number Diff line number Diff line change
@@ -1681,13 +1681,15 @@ var Autocomplete = /** @class */ (function () {
Autocomplete.prototype.showDocTooltip = function (item) {
if (!this.tooltipNode) {
this.tooltipNode = dom.createElement("div");
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip";
this.tooltipNode.style.margin = 0;
this.tooltipNode.style.pointerEvents = "auto";
this.tooltipNode.tabIndex = -1;
this.tooltipNode.onblur = this.blurListener.bind(this);
this.tooltipNode.onclick = this.onTooltipClick.bind(this);
}
var theme = this.editor.renderer.theme;
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " +
(theme.isDark ? "ace_dark " : "") + (theme.cssClass || "");
var tooltipNode = this.tooltipNode;
if (item.docHTML) {
tooltipNode.innerHTML = item.docHTML;
3 changes: 3 additions & 0 deletions src-noconflict/ext-options.js
Original file line number Diff line number Diff line change
@@ -565,6 +565,9 @@ var optionGroups = {
"Use SVG gutter icons": {
path: "useSvgGutterIcons"
},
"Annotations for folded lines": {
path: "showFoldedAnnotations"
},
"Keyboard Accessibility Mode": {
path: "enableKeyboardAccessibility"
}
4 changes: 3 additions & 1 deletion src-noconflict/ext-prompt.js
Original file line number Diff line number Diff line change
@@ -1713,13 +1713,15 @@ var Autocomplete = /** @class */ (function () {
Autocomplete.prototype.showDocTooltip = function (item) {
if (!this.tooltipNode) {
this.tooltipNode = dom.createElement("div");
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip";
this.tooltipNode.style.margin = 0;
this.tooltipNode.style.pointerEvents = "auto";
this.tooltipNode.tabIndex = -1;
this.tooltipNode.onblur = this.blurListener.bind(this);
this.tooltipNode.onclick = this.onTooltipClick.bind(this);
}
var theme = this.editor.renderer.theme;
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " +
(theme.isDark ? "ace_dark " : "") + (theme.cssClass || "");
var tooltipNode = this.tooltipNode;
if (item.docHTML) {
tooltipNode.innerHTML = item.docHTML;
174 changes: 88 additions & 86 deletions src-noconflict/ext-searchbox.js
Original file line number Diff line number Diff line change
@@ -42,92 +42,6 @@ var SearchBox = /** @class */ (function () {
this.$init();
this.setEditor(editor);
dom.importCssString(searchboxCss, "ace_searchbox", editor.container);
this.$searchBarKb = new HashHandler();
this.$searchBarKb.bindKeys({
"Ctrl-f|Command-f": function (sb) {
var isReplace = sb.isReplace = !sb.isReplace;
sb.replaceBox.style.display = isReplace ? "" : "none";
sb.replaceOption.checked = false;
sb.$syncOptions();
sb.searchInput.focus();
},
"Ctrl-H|Command-Option-F": function (sb) {
if (sb.editor.getReadOnly())
return;
sb.replaceOption.checked = true;
sb.$syncOptions();
sb.replaceInput.focus();
},
"Ctrl-G|Command-G": function (sb) {
sb.findNext();
},
"Ctrl-Shift-G|Command-Shift-G": function (sb) {
sb.findPrev();
},
"esc": function (sb) {
setTimeout(function () { sb.hide(); });
},
"Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replace();
sb.findNext();
},
"Shift-Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replace();
sb.findPrev();
},
"Alt-Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replaceAll();
sb.findAll();
},
"Tab": function (sb) {
(sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();
}
});
this.$searchBarKb.addCommands([{
name: "toggleRegexpMode",
bindKey: { win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/" },
exec: function (sb) {
sb.regExpOption.checked = !sb.regExpOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleCaseSensitive",
bindKey: { win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I" },
exec: function (sb) {
sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleWholeWords",
bindKey: { win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W" },
exec: function (sb) {
sb.wholeWordOption.checked = !sb.wholeWordOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleReplace",
exec: function (sb) {
sb.replaceOption.checked = !sb.replaceOption.checked;
sb.$syncOptions();
}
}, {
name: "searchInSelection",
exec: function (sb) {
sb.searchOption.checked = !sb.searchRange;
sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());
sb.$syncOptions();
}
}]);
this.$closeSearchBarKb = new HashHandler([{
bindKey: "Esc",
name: "closeSearchBar",
exec: function (editor) {
editor.searchBox.hide();
}
}]);
}
SearchBox.prototype.setEditor = function (editor) {
editor.searchBox = this;
@@ -323,6 +237,94 @@ var SearchBox = /** @class */ (function () {
};
return SearchBox;
}());
var $searchBarKb = new HashHandler();
$searchBarKb.bindKeys({
"Ctrl-f|Command-f": function (sb) {
var isReplace = sb.isReplace = !sb.isReplace;
sb.replaceBox.style.display = isReplace ? "" : "none";
sb.replaceOption.checked = false;
sb.$syncOptions();
sb.searchInput.focus();
},
"Ctrl-H|Command-Option-F": function (sb) {
if (sb.editor.getReadOnly())
return;
sb.replaceOption.checked = true;
sb.$syncOptions();
sb.replaceInput.focus();
},
"Ctrl-G|Command-G": function (sb) {
sb.findNext();
},
"Ctrl-Shift-G|Command-Shift-G": function (sb) {
sb.findPrev();
},
"esc": function (sb) {
setTimeout(function () { sb.hide(); });
},
"Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replace();
sb.findNext();
},
"Shift-Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replace();
sb.findPrev();
},
"Alt-Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replaceAll();
sb.findAll();
},
"Tab": function (sb) {
(sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();
}
});
$searchBarKb.addCommands([{
name: "toggleRegexpMode",
bindKey: { win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/" },
exec: function (sb) {
sb.regExpOption.checked = !sb.regExpOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleCaseSensitive",
bindKey: { win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I" },
exec: function (sb) {
sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleWholeWords",
bindKey: { win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W" },
exec: function (sb) {
sb.wholeWordOption.checked = !sb.wholeWordOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleReplace",
exec: function (sb) {
sb.replaceOption.checked = !sb.replaceOption.checked;
sb.$syncOptions();
}
}, {
name: "searchInSelection",
exec: function (sb) {
sb.searchOption.checked = !sb.searchRange;
sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());
sb.$syncOptions();
}
}]);
var $closeSearchBarKb = new HashHandler([{
bindKey: "Esc",
name: "closeSearchBar",
exec: function (editor) {
editor.searchBox.hide();
}
}]);
SearchBox.prototype.$searchBarKb = $searchBarKb;
SearchBox.prototype.$closeSearchBarKb = $closeSearchBarKb;
exports.SearchBox = SearchBox;
exports.Search = function (editor, isReplace) {
var sb = editor.searchBox || new SearchBox(editor);
3 changes: 3 additions & 0 deletions src-noconflict/ext-settings_menu.js
Original file line number Diff line number Diff line change
@@ -565,6 +565,9 @@ var optionGroups = {
"Use SVG gutter icons": {
path: "useSvgGutterIcons"
},
"Annotations for folded lines": {
path: "showFoldedAnnotations"
},
"Keyboard Accessibility Mode": {
path: "enableKeyboardAccessibility"
}
18 changes: 13 additions & 5 deletions src-noconflict/keybinding-vim.js
Original file line number Diff line number Diff line change
@@ -1996,7 +1996,9 @@ RegisterController.prototype = {
else {
register.setText(text, linewise, blockwise);
}
if (registerName === '+') {
if (registerName === '+' && typeof navigator !== 'undefined' &&
typeof navigator.clipboard !== 'undefined' &&
typeof navigator.clipboard.readText === 'function') {
navigator.clipboard.writeText(text);
}
this.unnamedRegister.setText(register.toString(), linewise);
@@ -3431,14 +3433,20 @@ var actions = {
paste: function (cm, actionArgs, vim) {
var _this = this;
var register = vimGlobalState.registerController.getRegister(actionArgs.registerName);
if (actionArgs.registerName === '+') {
var fallback = function () {
var text = register.toString();
_this.continuePaste(cm, actionArgs, vim, text, register);
};
if (actionArgs.registerName === '+' &&
typeof navigator !== 'undefined' &&
typeof navigator.clipboard !== 'undefined' &&
typeof navigator.clipboard.readText === 'function') {
navigator.clipboard.readText().then(function (value) {
_this.continuePaste(cm, actionArgs, vim, value, register);
});
}, function () { fallback(); });
}
else {
var text = register.toString();
this.continuePaste(cm, actionArgs, vim, text, register);
fallback();
}
},
continuePaste: function (cm, actionArgs, vim, text, register) {
10 changes: 7 additions & 3 deletions src-noconflict/mode-mysql.js
Original file line number Diff line number Diff line change
@@ -44,13 +44,17 @@ var lang = require("../lib/lang");
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
var MysqlHighlightRules = function () {
var mySqlKeywords = /*sql*/ "alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|lateral|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where" + "|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|by|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat";
var builtins = "ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl|date|time|timestamp";
var mySqlKeywords = /*sql*/ "alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|lateral|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where" + "|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|by|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat";
var builtins = "rank|coalesce|ifnull|isnull|nvl";
var variable = "charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee";
var datetimeFunctions = 'adddate|addtime|convert_tz|curdate|current_date|current_time|current_timestamp|curtime|date|date_add|date_format|date_sub|datediff|day|dayname|dayofmonth|dayofweek|dayofyear|extract|from_days|from_unixtime|get_format|hour|last_day|localtime|localtimestamp|makedate|maketime|microsecond|minute|month|monthname|now|period_add|period_diff|quarter|sec_to_time|second|str_to_date|subdate|subtime|sysdate|time|time_format|time_to_sec|timediff|timestamp|timestampadd|timestampdiff|to_days|to_seconds|unix_timestamp|utc_date|utc_time|utc_timestamp|week|weekday|weekofyear|year|yearweek';
var encryptionFunctions = 'aes_decrypt|aes_encrypt|compress|md|random_bytes|sha|sha|statement_digest|statement_digest_text|uncompress|uncompressed_length|validate_password_strength';
var mathFunctions = 'abs|acos|asin|atan|atan|ceil|ceiling|conv|cos|cot|crc|degrees|div|exp|floor|ln|log|log10|log2|mod|pi|pow|power|radians|rand|round|sign|sin|sqrt|tan|truncate';
var stringFunctions = 'ascii|bin|bit_length|char|char_length|character_length|concat|concat_ws|elt|export_set|field|find_in_set|format|from_base|hex|insert|instr|lcase|left|length|like|load_file|locate|lower|lpad|ltrim|make_set|match|mid|not|not|oct|octet_length|ord|position|quote|regexp|regexp_instr|regexp_like|regexp_replace|regexp_substr|repeat|replace|reverse|right|rlike|rpad|rtrim|soundex|sounds|space|strcmp|substr|substring|substring_index|to_base|trim|ucase|unhex|upper|weight_string';
var dataTypes = ("bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|" +
"bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric");
var keywordMapper = this.createKeywordMapper({
"support.function": builtins,
"support.function": [builtins, datetimeFunctions, encryptionFunctions, mathFunctions, stringFunctions].join('|'),
"keyword": mySqlKeywords,
"storage.type": dataTypes,
"constant": "false|true|null|unknown|ODBCdotTable|zerolessFloat",
465 changes: 412 additions & 53 deletions src/ace.js

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion src/ext-inline_autocomplete.js
Original file line number Diff line number Diff line change
@@ -1681,13 +1681,15 @@ var Autocomplete = /** @class */ (function () {
Autocomplete.prototype.showDocTooltip = function (item) {
if (!this.tooltipNode) {
this.tooltipNode = dom.createElement("div");
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip";
this.tooltipNode.style.margin = 0;
this.tooltipNode.style.pointerEvents = "auto";
this.tooltipNode.tabIndex = -1;
this.tooltipNode.onblur = this.blurListener.bind(this);
this.tooltipNode.onclick = this.onTooltipClick.bind(this);
}
var theme = this.editor.renderer.theme;
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " +
(theme.isDark ? "ace_dark " : "") + (theme.cssClass || "");
var tooltipNode = this.tooltipNode;
if (item.docHTML) {
tooltipNode.innerHTML = item.docHTML;
4 changes: 3 additions & 1 deletion src/ext-language_tools.js
Original file line number Diff line number Diff line change
@@ -1681,13 +1681,15 @@ var Autocomplete = /** @class */ (function () {
Autocomplete.prototype.showDocTooltip = function (item) {
if (!this.tooltipNode) {
this.tooltipNode = dom.createElement("div");
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip";
this.tooltipNode.style.margin = 0;
this.tooltipNode.style.pointerEvents = "auto";
this.tooltipNode.tabIndex = -1;
this.tooltipNode.onblur = this.blurListener.bind(this);
this.tooltipNode.onclick = this.onTooltipClick.bind(this);
}
var theme = this.editor.renderer.theme;
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " +
(theme.isDark ? "ace_dark " : "") + (theme.cssClass || "");
var tooltipNode = this.tooltipNode;
if (item.docHTML) {
tooltipNode.innerHTML = item.docHTML;
3 changes: 3 additions & 0 deletions src/ext-options.js
Original file line number Diff line number Diff line change
@@ -565,6 +565,9 @@ var optionGroups = {
"Use SVG gutter icons": {
path: "useSvgGutterIcons"
},
"Annotations for folded lines": {
path: "showFoldedAnnotations"
},
"Keyboard Accessibility Mode": {
path: "enableKeyboardAccessibility"
}
4 changes: 3 additions & 1 deletion src/ext-prompt.js
Original file line number Diff line number Diff line change
@@ -1713,13 +1713,15 @@ var Autocomplete = /** @class */ (function () {
Autocomplete.prototype.showDocTooltip = function (item) {
if (!this.tooltipNode) {
this.tooltipNode = dom.createElement("div");
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip";
this.tooltipNode.style.margin = 0;
this.tooltipNode.style.pointerEvents = "auto";
this.tooltipNode.tabIndex = -1;
this.tooltipNode.onblur = this.blurListener.bind(this);
this.tooltipNode.onclick = this.onTooltipClick.bind(this);
}
var theme = this.editor.renderer.theme;
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " +
(theme.isDark ? "ace_dark " : "") + (theme.cssClass || "");
var tooltipNode = this.tooltipNode;
if (item.docHTML) {
tooltipNode.innerHTML = item.docHTML;
174 changes: 88 additions & 86 deletions src/ext-searchbox.js
Original file line number Diff line number Diff line change
@@ -42,92 +42,6 @@ var SearchBox = /** @class */ (function () {
this.$init();
this.setEditor(editor);
dom.importCssString(searchboxCss, "ace_searchbox", editor.container);
this.$searchBarKb = new HashHandler();
this.$searchBarKb.bindKeys({
"Ctrl-f|Command-f": function (sb) {
var isReplace = sb.isReplace = !sb.isReplace;
sb.replaceBox.style.display = isReplace ? "" : "none";
sb.replaceOption.checked = false;
sb.$syncOptions();
sb.searchInput.focus();
},
"Ctrl-H|Command-Option-F": function (sb) {
if (sb.editor.getReadOnly())
return;
sb.replaceOption.checked = true;
sb.$syncOptions();
sb.replaceInput.focus();
},
"Ctrl-G|Command-G": function (sb) {
sb.findNext();
},
"Ctrl-Shift-G|Command-Shift-G": function (sb) {
sb.findPrev();
},
"esc": function (sb) {
setTimeout(function () { sb.hide(); });
},
"Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replace();
sb.findNext();
},
"Shift-Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replace();
sb.findPrev();
},
"Alt-Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replaceAll();
sb.findAll();
},
"Tab": function (sb) {
(sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();
}
});
this.$searchBarKb.addCommands([{
name: "toggleRegexpMode",
bindKey: { win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/" },
exec: function (sb) {
sb.regExpOption.checked = !sb.regExpOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleCaseSensitive",
bindKey: { win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I" },
exec: function (sb) {
sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleWholeWords",
bindKey: { win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W" },
exec: function (sb) {
sb.wholeWordOption.checked = !sb.wholeWordOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleReplace",
exec: function (sb) {
sb.replaceOption.checked = !sb.replaceOption.checked;
sb.$syncOptions();
}
}, {
name: "searchInSelection",
exec: function (sb) {
sb.searchOption.checked = !sb.searchRange;
sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());
sb.$syncOptions();
}
}]);
this.$closeSearchBarKb = new HashHandler([{
bindKey: "Esc",
name: "closeSearchBar",
exec: function (editor) {
editor.searchBox.hide();
}
}]);
}
SearchBox.prototype.setEditor = function (editor) {
editor.searchBox = this;
@@ -323,6 +237,94 @@ var SearchBox = /** @class */ (function () {
};
return SearchBox;
}());
var $searchBarKb = new HashHandler();
$searchBarKb.bindKeys({
"Ctrl-f|Command-f": function (sb) {
var isReplace = sb.isReplace = !sb.isReplace;
sb.replaceBox.style.display = isReplace ? "" : "none";
sb.replaceOption.checked = false;
sb.$syncOptions();
sb.searchInput.focus();
},
"Ctrl-H|Command-Option-F": function (sb) {
if (sb.editor.getReadOnly())
return;
sb.replaceOption.checked = true;
sb.$syncOptions();
sb.replaceInput.focus();
},
"Ctrl-G|Command-G": function (sb) {
sb.findNext();
},
"Ctrl-Shift-G|Command-Shift-G": function (sb) {
sb.findPrev();
},
"esc": function (sb) {
setTimeout(function () { sb.hide(); });
},
"Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replace();
sb.findNext();
},
"Shift-Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replace();
sb.findPrev();
},
"Alt-Return": function (sb) {
if (sb.activeInput == sb.replaceInput)
sb.replaceAll();
sb.findAll();
},
"Tab": function (sb) {
(sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();
}
});
$searchBarKb.addCommands([{
name: "toggleRegexpMode",
bindKey: { win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/" },
exec: function (sb) {
sb.regExpOption.checked = !sb.regExpOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleCaseSensitive",
bindKey: { win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I" },
exec: function (sb) {
sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleWholeWords",
bindKey: { win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W" },
exec: function (sb) {
sb.wholeWordOption.checked = !sb.wholeWordOption.checked;
sb.$syncOptions();
}
}, {
name: "toggleReplace",
exec: function (sb) {
sb.replaceOption.checked = !sb.replaceOption.checked;
sb.$syncOptions();
}
}, {
name: "searchInSelection",
exec: function (sb) {
sb.searchOption.checked = !sb.searchRange;
sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());
sb.$syncOptions();
}
}]);
var $closeSearchBarKb = new HashHandler([{
bindKey: "Esc",
name: "closeSearchBar",
exec: function (editor) {
editor.searchBox.hide();
}
}]);
SearchBox.prototype.$searchBarKb = $searchBarKb;
SearchBox.prototype.$closeSearchBarKb = $closeSearchBarKb;
exports.SearchBox = SearchBox;
exports.Search = function (editor, isReplace) {
var sb = editor.searchBox || new SearchBox(editor);
3 changes: 3 additions & 0 deletions src/ext-settings_menu.js
Original file line number Diff line number Diff line change
@@ -565,6 +565,9 @@ var optionGroups = {
"Use SVG gutter icons": {
path: "useSvgGutterIcons"
},
"Annotations for folded lines": {
path: "showFoldedAnnotations"
},
"Keyboard Accessibility Mode": {
path: "enableKeyboardAccessibility"
}
18 changes: 13 additions & 5 deletions src/keybinding-vim.js
Original file line number Diff line number Diff line change
@@ -1996,7 +1996,9 @@ RegisterController.prototype = {
else {
register.setText(text, linewise, blockwise);
}
if (registerName === '+') {
if (registerName === '+' && typeof navigator !== 'undefined' &&
typeof navigator.clipboard !== 'undefined' &&
typeof navigator.clipboard.readText === 'function') {
navigator.clipboard.writeText(text);
}
this.unnamedRegister.setText(register.toString(), linewise);
@@ -3431,14 +3433,20 @@ var actions = {
paste: function (cm, actionArgs, vim) {
var _this = this;
var register = vimGlobalState.registerController.getRegister(actionArgs.registerName);
if (actionArgs.registerName === '+') {
var fallback = function () {
var text = register.toString();
_this.continuePaste(cm, actionArgs, vim, text, register);
};
if (actionArgs.registerName === '+' &&
typeof navigator !== 'undefined' &&
typeof navigator.clipboard !== 'undefined' &&
typeof navigator.clipboard.readText === 'function') {
navigator.clipboard.readText().then(function (value) {
_this.continuePaste(cm, actionArgs, vim, value, register);
});
}, function () { fallback(); });
}
else {
var text = register.toString();
this.continuePaste(cm, actionArgs, vim, text, register);
fallback();
}
},
continuePaste: function (cm, actionArgs, vim, text, register) {
10 changes: 7 additions & 3 deletions src/mode-mysql.js
Original file line number Diff line number Diff line change
@@ -44,13 +44,17 @@ var lang = require("../lib/lang");
var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
var MysqlHighlightRules = function () {
var mySqlKeywords = /*sql*/ "alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|lateral|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where" + "|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|by|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat";
var builtins = "ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl|date|time|timestamp";
var mySqlKeywords = /*sql*/ "alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|lateral|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where" + "|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|by|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat";
var builtins = "rank|coalesce|ifnull|isnull|nvl";
var variable = "charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee";
var datetimeFunctions = 'adddate|addtime|convert_tz|curdate|current_date|current_time|current_timestamp|curtime|date|date_add|date_format|date_sub|datediff|day|dayname|dayofmonth|dayofweek|dayofyear|extract|from_days|from_unixtime|get_format|hour|last_day|localtime|localtimestamp|makedate|maketime|microsecond|minute|month|monthname|now|period_add|period_diff|quarter|sec_to_time|second|str_to_date|subdate|subtime|sysdate|time|time_format|time_to_sec|timediff|timestamp|timestampadd|timestampdiff|to_days|to_seconds|unix_timestamp|utc_date|utc_time|utc_timestamp|week|weekday|weekofyear|year|yearweek';
var encryptionFunctions = 'aes_decrypt|aes_encrypt|compress|md|random_bytes|sha|sha|statement_digest|statement_digest_text|uncompress|uncompressed_length|validate_password_strength';
var mathFunctions = 'abs|acos|asin|atan|atan|ceil|ceiling|conv|cos|cot|crc|degrees|div|exp|floor|ln|log|log10|log2|mod|pi|pow|power|radians|rand|round|sign|sin|sqrt|tan|truncate';
var stringFunctions = 'ascii|bin|bit_length|char|char_length|character_length|concat|concat_ws|elt|export_set|field|find_in_set|format|from_base|hex|insert|instr|lcase|left|length|like|load_file|locate|lower|lpad|ltrim|make_set|match|mid|not|not|oct|octet_length|ord|position|quote|regexp|regexp_instr|regexp_like|regexp_replace|regexp_substr|repeat|replace|reverse|right|rlike|rpad|rtrim|soundex|sounds|space|strcmp|substr|substring|substring_index|to_base|trim|ucase|unhex|upper|weight_string';
var dataTypes = ("bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|" +
"bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric");
var keywordMapper = this.createKeywordMapper({
"support.function": builtins,
"support.function": [builtins, datetimeFunctions, encryptionFunctions, mathFunctions, stringFunctions].join('|'),
"keyword": mySqlKeywords,
"storage.type": dataTypes,
"constant": "false|true|null|unknown|ODBCdotTable|zerolessFloat",