ace-rails-ap 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ace/rails/version.rb +1 -1
- data/vendor/assets/javascripts/ace/ace.js +993 -613
- data/vendor/assets/javascripts/ace/ext-chromevox.js +3 -4
- data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +5 -6
- data/vendor/assets/javascripts/ace/ext-emmet.js +50 -21
- data/vendor/assets/javascripts/ace/ext-language_tools.js +21 -19
- data/vendor/assets/javascripts/ace/ext-modelist.js +11 -6
- data/vendor/assets/javascripts/ace/ext-old_ie.js +12 -5
- data/vendor/assets/javascripts/ace/ext-searchbox.js +12 -5
- data/vendor/assets/javascripts/ace/ext-settings_menu.js +14 -7
- data/vendor/assets/javascripts/ace/ext-static_highlight.js +5 -5
- data/vendor/assets/javascripts/ace/ext-statusbar.js +14 -12
- data/vendor/assets/javascripts/ace/ext-textarea.js +1 -2
- data/vendor/assets/javascripts/ace/ext-themelist.js +2 -0
- data/vendor/assets/javascripts/ace/ext-whitespace.js +17 -13
- data/vendor/assets/javascripts/ace/keybinding-emacs.js +76 -78
- data/vendor/assets/javascripts/ace/keybinding-vim.js +221 -80
- data/vendor/assets/javascripts/ace/mode-abc.js +2 -3
- data/vendor/assets/javascripts/ace/mode-actionscript.js +2 -3
- data/vendor/assets/javascripts/ace/mode-apache_conf.js +2 -3
- data/vendor/assets/javascripts/ace/mode-applescript.js +2 -3
- data/vendor/assets/javascripts/ace/mode-autohotkey.js +2 -3
- data/vendor/assets/javascripts/ace/mode-batchfile.js +2 -3
- data/vendor/assets/javascripts/ace/mode-c_cpp.js +8 -5
- data/vendor/assets/javascripts/ace/mode-coffee.js +1 -1
- data/vendor/assets/javascripts/ace/mode-coldfusion.js +533 -139
- data/vendor/assets/javascripts/ace/mode-csharp.js +4 -5
- data/vendor/assets/javascripts/ace/mode-css.js +185 -6
- data/vendor/assets/javascripts/ace/mode-curly.js +495 -138
- data/vendor/assets/javascripts/ace/mode-d.js +2 -3
- data/vendor/assets/javascripts/ace/mode-dart.js +8 -5
- data/vendor/assets/javascripts/ace/mode-django.js +495 -138
- data/vendor/assets/javascripts/ace/mode-dockerfile.js +59 -14
- data/vendor/assets/javascripts/ace/mode-dot.js +2 -3
- data/vendor/assets/javascripts/ace/mode-ejs.js +497 -152
- data/vendor/assets/javascripts/ace/mode-elm.js +6 -4
- data/vendor/assets/javascripts/ace/mode-erlang.js +3 -4
- data/vendor/assets/javascripts/ace/mode-forth.js +3 -4
- data/vendor/assets/javascripts/ace/mode-ftl.js +145 -17
- data/vendor/assets/javascripts/ace/mode-gherkin.js +58 -25
- data/vendor/assets/javascripts/ace/mode-glsl.js +8 -5
- data/vendor/assets/javascripts/ace/mode-golang.js +36 -25
- data/vendor/assets/javascripts/ace/mode-groovy.js +145 -17
- data/vendor/assets/javascripts/ace/mode-handlebars.js +496 -140
- data/vendor/assets/javascripts/ace/mode-haskell.js +3 -4
- data/vendor/assets/javascripts/ace/mode-haxe.js +4 -5
- data/vendor/assets/javascripts/ace/mode-html.js +495 -138
- data/vendor/assets/javascripts/ace/mode-html_elixir.js +3372 -0
- data/vendor/assets/javascripts/ace/mode-html_ruby.js +495 -138
- data/vendor/assets/javascripts/ace/mode-ini.js +1 -1
- data/vendor/assets/javascripts/ace/mode-io.js +2 -3
- data/vendor/assets/javascripts/ace/mode-jack.js +4 -5
- data/vendor/assets/javascripts/ace/mode-jade.js +155 -25
- data/vendor/assets/javascripts/ace/mode-java.js +145 -17
- data/vendor/assets/javascripts/ace/mode-javascript.js +145 -17
- data/vendor/assets/javascripts/ace/mode-json.js +4 -5
- data/vendor/assets/javascripts/ace/mode-jsoniq.js +4 -5
- data/vendor/assets/javascripts/ace/mode-jsp.js +150 -23
- data/vendor/assets/javascripts/ace/mode-jsx.js +4 -5
- data/vendor/assets/javascripts/ace/mode-julia.js +2 -3
- data/vendor/assets/javascripts/ace/mode-less.js +5 -6
- data/vendor/assets/javascripts/ace/mode-liquid.js +145 -17
- data/vendor/assets/javascripts/ace/mode-logiql.js +2 -2
- data/vendor/assets/javascripts/ace/mode-lsl.js +8 -10
- data/vendor/assets/javascripts/ace/mode-lua.js +2 -2
- data/vendor/assets/javascripts/ace/mode-luapage.js +497 -140
- data/vendor/assets/javascripts/ace/mode-makefile.js +54 -8
- data/vendor/assets/javascripts/ace/mode-markdown.js +497 -139
- data/vendor/assets/javascripts/ace/mode-mask.js +150 -22
- data/vendor/assets/javascripts/ace/mode-maze.js +283 -0
- data/vendor/assets/javascripts/ace/mode-mel.js +4 -5
- data/vendor/assets/javascripts/ace/mode-mushcode.js +0 -1
- data/vendor/assets/javascripts/ace/mode-mysql.js +1 -1
- data/vendor/assets/javascripts/ace/mode-nix.js +8 -5
- data/vendor/assets/javascripts/ace/mode-objectivec.js +6 -3
- data/vendor/assets/javascripts/ace/mode-perl.js +4 -5
- data/vendor/assets/javascripts/ace/mode-pgsql.js +141 -12
- data/vendor/assets/javascripts/ace/mode-php.js +9872 -143
- data/vendor/assets/javascripts/ace/mode-powershell.js +4 -5
- data/vendor/assets/javascripts/ace/mode-praat.js +18 -14
- data/vendor/assets/javascripts/ace/mode-prolog.js +2 -3
- data/vendor/assets/javascripts/ace/mode-protobuf.js +8 -5
- data/vendor/assets/javascripts/ace/mode-rhtml.js +495 -138
- data/vendor/assets/javascripts/ace/mode-ruby.js +2 -2
- data/vendor/assets/javascripts/ace/mode-rust.js +32 -39
- data/vendor/assets/javascripts/ace/mode-scad.js +4 -5
- data/vendor/assets/javascripts/ace/mode-scala.js +158 -21
- data/vendor/assets/javascripts/ace/mode-scheme.js +118 -1
- data/vendor/assets/javascripts/ace/mode-scss.js +4 -5
- data/vendor/assets/javascripts/ace/mode-sh.js +58 -13
- data/vendor/assets/javascripts/ace/mode-sjs.js +145 -17
- data/vendor/assets/javascripts/ace/mode-smarty.js +495 -138
- data/vendor/assets/javascripts/ace/mode-soy_template.js +496 -140
- data/vendor/assets/javascripts/ace/mode-sql.js +12 -4
- data/vendor/assets/javascripts/ace/mode-sqlserver.js +437 -0
- data/vendor/assets/javascripts/ace/mode-svg.js +147 -20
- data/vendor/assets/javascripts/ace/mode-swift.js +738 -0
- data/vendor/assets/javascripts/ace/mode-swig.js +1099 -0
- data/vendor/assets/javascripts/ace/mode-tcl.js +2 -3
- data/vendor/assets/javascripts/ace/mode-tex.js +1 -0
- data/vendor/assets/javascripts/ace/mode-toml.js +4 -0
- data/vendor/assets/javascripts/ace/mode-twig.js +495 -138
- data/vendor/assets/javascripts/ace/mode-typescript.js +147 -19
- data/vendor/assets/javascripts/ace/mode-vala.js +4 -5
- data/vendor/assets/javascripts/ace/mode-vbscript.js +26 -13
- data/vendor/assets/javascripts/ace/mode-velocity.js +495 -138
- data/vendor/assets/javascripts/ace/mode-verilog.js +8 -0
- data/vendor/assets/javascripts/ace/mode-xml.js +2 -3
- data/vendor/assets/javascripts/ace/mode-xquery.js +4 -5
- data/vendor/assets/javascripts/ace/snippets/actionscript.js +5 -0
- data/vendor/assets/javascripts/ace/snippets/html_elixir.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/java.js +6 -0
- data/vendor/assets/javascripts/ace/snippets/javascript.js +13 -0
- data/vendor/assets/javascripts/ace/snippets/lsl.js +166 -0
- data/vendor/assets/javascripts/ace/snippets/maze.js +16 -0
- data/vendor/assets/javascripts/ace/snippets/php.js +105 -4
- data/vendor/assets/javascripts/ace/snippets/sqlserver.js +76 -0
- data/vendor/assets/javascripts/ace/snippets/swift.js +7 -0
- data/vendor/assets/javascripts/ace/snippets/swig.js +7 -0
- data/vendor/assets/javascripts/ace/theme-clouds.js +0 -1
- data/vendor/assets/javascripts/ace/theme-clouds_midnight.js +0 -1
- data/vendor/assets/javascripts/ace/theme-cobalt.js +3 -3
- data/vendor/assets/javascripts/ace/theme-dawn.js +0 -1
- data/vendor/assets/javascripts/ace/theme-github.js +0 -1
- data/vendor/assets/javascripts/ace/theme-idle_fingers.js +0 -1
- data/vendor/assets/javascripts/ace/theme-iplastic.js +121 -0
- data/vendor/assets/javascripts/ace/theme-katzenmilch.js +1 -2
- data/vendor/assets/javascripts/ace/theme-kr_theme.js +0 -1
- data/vendor/assets/javascripts/ace/theme-kuroir.js +0 -1
- data/vendor/assets/javascripts/ace/theme-merbivore.js +0 -1
- data/vendor/assets/javascripts/ace/theme-merbivore_soft.js +0 -1
- data/vendor/assets/javascripts/ace/theme-mono_industrial.js +0 -1
- data/vendor/assets/javascripts/ace/theme-monokai.js +0 -1
- data/vendor/assets/javascripts/ace/theme-pastel_on_dark.js +0 -1
- data/vendor/assets/javascripts/ace/theme-solarized_dark.js +0 -1
- data/vendor/assets/javascripts/ace/theme-solarized_light.js +0 -1
- data/vendor/assets/javascripts/ace/theme-sqlserver.js +138 -0
- data/vendor/assets/javascripts/ace/theme-terminal.js +0 -1
- data/vendor/assets/javascripts/ace/theme-textmate.js +0 -1
- data/vendor/assets/javascripts/ace/theme-tomorrow.js +0 -1
- data/vendor/assets/javascripts/ace/theme-tomorrow_night.js +0 -1
- data/vendor/assets/javascripts/ace/theme-tomorrow_night_blue.js +0 -1
- data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +0 -1
- data/vendor/assets/javascripts/ace/theme-tomorrow_night_eighties.js +0 -1
- data/vendor/assets/javascripts/ace/theme-twilight.js +0 -1
- data/vendor/assets/javascripts/ace/theme-vibrant_ink.js +0 -1
- data/vendor/assets/javascripts/ace/theme-xcode.js +0 -1
- data/vendor/assets/javascripts/ace/worker-coffee.js +576 -6015
- data/vendor/assets/javascripts/ace/worker-css.js +529 -449
- data/vendor/assets/javascripts/ace/worker-html.js +528 -448
- data/vendor/assets/javascripts/ace/worker-javascript.js +8719 -7656
- data/vendor/assets/javascripts/ace/worker-json.js +530 -450
- data/vendor/assets/javascripts/ace/worker-lua.js +530 -450
- data/vendor/assets/javascripts/ace/worker-php.js +530 -450
- data/vendor/assets/javascripts/ace/worker-xml.js +530 -450
- data/vendor/assets/javascripts/ace/worker-xquery.js +529 -449
- metadata +14 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 28dce068cc2132409a6445f5fb148232533f89de
|
|
4
|
+
data.tar.gz: 632ed3cae729c07467d21eb223e2c02359ecc4ca
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4429069a802d350b6efaec8608a1f0657f26c5cfc91a7aec7e90293225f1074973198c636bacbac67171ede01c1a6ae3892f08ee4b9f0387b67d73d713a99892
|
|
7
|
+
data.tar.gz: fadb7628da20b7602623eba1b5bea2578f3f8cd05ae01178fd5cb4f9c3fc8c6ad9fd4ce6d569b7fb782b65b7c7cb9a87207941b52ee36580486e0d910d71954f
|
data/lib/ace/rails/version.rb
CHANGED
|
@@ -960,7 +960,7 @@ exports.getDocumentHead = function(doc) {
|
|
|
960
960
|
if (!doc)
|
|
961
961
|
doc = document;
|
|
962
962
|
return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement;
|
|
963
|
-
}
|
|
963
|
+
};
|
|
964
964
|
|
|
965
965
|
exports.createElement = function(tag, ns) {
|
|
966
966
|
return document.createElementNS ?
|
|
@@ -999,7 +999,7 @@ exports.toggleCssClass = function(el, name) {
|
|
|
999
999
|
add = false;
|
|
1000
1000
|
classes.splice(index, 1);
|
|
1001
1001
|
}
|
|
1002
|
-
if(add)
|
|
1002
|
+
if (add)
|
|
1003
1003
|
classes.push(name);
|
|
1004
1004
|
|
|
1005
1005
|
el.className = classes.join(" ");
|
|
@@ -1035,16 +1035,16 @@ exports.importCssString = function importCssString(cssText, id, doc) {
|
|
|
1035
1035
|
|
|
1036
1036
|
var style;
|
|
1037
1037
|
|
|
1038
|
+
if (id)
|
|
1039
|
+
cssText += "\n/*# sourceURL=ace/css/" + id + " */";
|
|
1040
|
+
|
|
1038
1041
|
if (doc.createStyleSheet) {
|
|
1039
1042
|
style = doc.createStyleSheet();
|
|
1040
1043
|
style.cssText = cssText;
|
|
1041
1044
|
if (id)
|
|
1042
1045
|
style.owningElement.id = id;
|
|
1043
1046
|
} else {
|
|
1044
|
-
style =
|
|
1045
|
-
? doc.createElementNS(XHTML_NS, "style")
|
|
1046
|
-
: doc.createElement("style");
|
|
1047
|
-
|
|
1047
|
+
style = exports.createElement("style");
|
|
1048
1048
|
style.appendChild(doc.createTextNode(cssText));
|
|
1049
1049
|
if (id)
|
|
1050
1050
|
style.id = id;
|
|
@@ -1081,42 +1081,6 @@ exports.getInnerHeight = function(element) {
|
|
|
1081
1081
|
);
|
|
1082
1082
|
};
|
|
1083
1083
|
|
|
1084
|
-
|
|
1085
|
-
if (typeof document == "undefined")
|
|
1086
|
-
return;
|
|
1087
|
-
|
|
1088
|
-
if (window.pageYOffset !== undefined) {
|
|
1089
|
-
exports.getPageScrollTop = function() {
|
|
1090
|
-
return window.pageYOffset;
|
|
1091
|
-
};
|
|
1092
|
-
|
|
1093
|
-
exports.getPageScrollLeft = function() {
|
|
1094
|
-
return window.pageXOffset;
|
|
1095
|
-
};
|
|
1096
|
-
}
|
|
1097
|
-
else {
|
|
1098
|
-
exports.getPageScrollTop = function() {
|
|
1099
|
-
return document.body.scrollTop;
|
|
1100
|
-
};
|
|
1101
|
-
|
|
1102
|
-
exports.getPageScrollLeft = function() {
|
|
1103
|
-
return document.body.scrollLeft;
|
|
1104
|
-
};
|
|
1105
|
-
}
|
|
1106
|
-
|
|
1107
|
-
if (window.getComputedStyle)
|
|
1108
|
-
exports.computedStyle = function(element, style) {
|
|
1109
|
-
if (style)
|
|
1110
|
-
return (window.getComputedStyle(element, "") || {})[style] || "";
|
|
1111
|
-
return window.getComputedStyle(element, "") || {};
|
|
1112
|
-
};
|
|
1113
|
-
else
|
|
1114
|
-
exports.computedStyle = function(element, style) {
|
|
1115
|
-
if (style)
|
|
1116
|
-
return element.currentStyle[style];
|
|
1117
|
-
return element.currentStyle;
|
|
1118
|
-
};
|
|
1119
|
-
|
|
1120
1084
|
exports.scrollbarWidth = function(document) {
|
|
1121
1085
|
var inner = exports.createElement("ace_inner");
|
|
1122
1086
|
inner.style.width = "100%";
|
|
@@ -1153,6 +1117,43 @@ exports.scrollbarWidth = function(document) {
|
|
|
1153
1117
|
|
|
1154
1118
|
return noScrollbar-withScrollbar;
|
|
1155
1119
|
};
|
|
1120
|
+
|
|
1121
|
+
if (typeof document == "undefined") {
|
|
1122
|
+
exports.importCssString = function() {};
|
|
1123
|
+
return;
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
if (window.pageYOffset !== undefined) {
|
|
1127
|
+
exports.getPageScrollTop = function() {
|
|
1128
|
+
return window.pageYOffset;
|
|
1129
|
+
};
|
|
1130
|
+
|
|
1131
|
+
exports.getPageScrollLeft = function() {
|
|
1132
|
+
return window.pageXOffset;
|
|
1133
|
+
};
|
|
1134
|
+
}
|
|
1135
|
+
else {
|
|
1136
|
+
exports.getPageScrollTop = function() {
|
|
1137
|
+
return document.body.scrollTop;
|
|
1138
|
+
};
|
|
1139
|
+
|
|
1140
|
+
exports.getPageScrollLeft = function() {
|
|
1141
|
+
return document.body.scrollLeft;
|
|
1142
|
+
};
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
if (window.getComputedStyle)
|
|
1146
|
+
exports.computedStyle = function(element, style) {
|
|
1147
|
+
if (style)
|
|
1148
|
+
return (window.getComputedStyle(element, "") || {})[style] || "";
|
|
1149
|
+
return window.getComputedStyle(element, "") || {};
|
|
1150
|
+
};
|
|
1151
|
+
else
|
|
1152
|
+
exports.computedStyle = function(element, style) {
|
|
1153
|
+
if (style)
|
|
1154
|
+
return element.currentStyle[style];
|
|
1155
|
+
return element.currentStyle;
|
|
1156
|
+
};
|
|
1156
1157
|
exports.setInnerHtml = function(el, innerHtml) {
|
|
1157
1158
|
var element = el.cloneNode(false);//document.createElement("div");
|
|
1158
1159
|
element.innerHTML = innerHtml;
|
|
@@ -1283,7 +1284,7 @@ var Keys = (function() {
|
|
|
1283
1284
|
80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',
|
|
1284
1285
|
87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',
|
|
1285
1286
|
186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',
|
|
1286
|
-
219: '[', 220: '\\',221: ']', 222: '
|
|
1287
|
+
219: '[', 220: '\\',221: ']', 222: "'", 111: '/', 106: '*'
|
|
1287
1288
|
}
|
|
1288
1289
|
};
|
|
1289
1290
|
var name, i;
|
|
@@ -1381,6 +1382,9 @@ define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/use
|
|
|
1381
1382
|
var keys = require("./keys");
|
|
1382
1383
|
var useragent = require("./useragent");
|
|
1383
1384
|
|
|
1385
|
+
var pressedKeys = null;
|
|
1386
|
+
var ts = 0;
|
|
1387
|
+
|
|
1384
1388
|
exports.addListener = function(elem, type, callback) {
|
|
1385
1389
|
if (elem.addEventListener) {
|
|
1386
1390
|
return elem.addEventListener(type, callback, false);
|
|
@@ -1451,6 +1455,29 @@ exports.capture = function(el, eventHandler, releaseCaptureHandler) {
|
|
|
1451
1455
|
return onMouseUp;
|
|
1452
1456
|
};
|
|
1453
1457
|
|
|
1458
|
+
exports.addTouchMoveListener = function (el, callback) {
|
|
1459
|
+
if ("ontouchmove" in el) {
|
|
1460
|
+
var startx, starty;
|
|
1461
|
+
exports.addListener(el, "touchstart", function (e) {
|
|
1462
|
+
var touchObj = e.changedTouches[0];
|
|
1463
|
+
startx = touchObj.clientX;
|
|
1464
|
+
starty = touchObj.clientY;
|
|
1465
|
+
});
|
|
1466
|
+
exports.addListener(el, "touchmove", function (e) {
|
|
1467
|
+
var factor = 1,
|
|
1468
|
+
touchObj = e.changedTouches[0];
|
|
1469
|
+
|
|
1470
|
+
e.wheelX = -(touchObj.clientX - startx) / factor;
|
|
1471
|
+
e.wheelY = -(touchObj.clientY - starty) / factor;
|
|
1472
|
+
|
|
1473
|
+
startx = touchObj.clientX;
|
|
1474
|
+
starty = touchObj.clientY;
|
|
1475
|
+
|
|
1476
|
+
callback(e);
|
|
1477
|
+
});
|
|
1478
|
+
}
|
|
1479
|
+
};
|
|
1480
|
+
|
|
1454
1481
|
exports.addMouseWheelListener = function(el, callback) {
|
|
1455
1482
|
if ("onmousewheel" in el) {
|
|
1456
1483
|
exports.addListener(el, "mousewheel", function(e) {
|
|
@@ -1566,7 +1593,7 @@ function normalizeCommandKeys(callback, e, keyCode) {
|
|
|
1566
1593
|
var hashId = getModifierHash(e);
|
|
1567
1594
|
|
|
1568
1595
|
if (!useragent.isMac && pressedKeys) {
|
|
1569
|
-
if (pressedKeys
|
|
1596
|
+
if (pressedKeys.OSKey)
|
|
1570
1597
|
hashId |= 8;
|
|
1571
1598
|
if (pressedKeys.altGr) {
|
|
1572
1599
|
if ((3 & hashId) != 3)
|
|
@@ -1580,7 +1607,7 @@ function normalizeCommandKeys(callback, e, keyCode) {
|
|
|
1580
1607
|
if (pressedKeys[keyCode] == 1)
|
|
1581
1608
|
ts = e.timeStamp;
|
|
1582
1609
|
} else if (keyCode === 18 && hashId === 3 && location === 2) {
|
|
1583
|
-
var dt = e.
|
|
1610
|
+
var dt = e.timeStamp - ts;
|
|
1584
1611
|
if (dt < 50)
|
|
1585
1612
|
pressedKeys.altGr = true;
|
|
1586
1613
|
}
|
|
@@ -1591,7 +1618,7 @@ function normalizeCommandKeys(callback, e, keyCode) {
|
|
|
1591
1618
|
keyCode = -1;
|
|
1592
1619
|
}
|
|
1593
1620
|
|
|
1594
|
-
if (hashId & 8 && (keyCode === 91 || keyCode ===
|
|
1621
|
+
if (hashId & 8 && (keyCode === 91 || keyCode === 92)) {
|
|
1595
1622
|
keyCode = -1;
|
|
1596
1623
|
}
|
|
1597
1624
|
|
|
@@ -1618,8 +1645,7 @@ function normalizeCommandKeys(callback, e, keyCode) {
|
|
|
1618
1645
|
return callback(e, hashId, keyCode);
|
|
1619
1646
|
}
|
|
1620
1647
|
|
|
1621
|
-
|
|
1622
|
-
var ts = 0;
|
|
1648
|
+
|
|
1623
1649
|
exports.addCommandKeyListener = function(el, callback) {
|
|
1624
1650
|
var addListener = exports.addListener;
|
|
1625
1651
|
if (useragent.isOldGecko || (useragent.isOpera && !("KeyboardEvent" in window))) {
|
|
@@ -1634,8 +1660,18 @@ exports.addCommandKeyListener = function(el, callback) {
|
|
|
1634
1660
|
var lastDefaultPrevented = null;
|
|
1635
1661
|
|
|
1636
1662
|
addListener(el, "keydown", function(e) {
|
|
1637
|
-
|
|
1638
|
-
|
|
1663
|
+
var keyCode = e.keyCode;
|
|
1664
|
+
pressedKeys[keyCode] = (pressedKeys[keyCode] || 0) + 1;
|
|
1665
|
+
if (keyCode == 91 || keyCode == 92) {
|
|
1666
|
+
pressedKeys.OSKey = true;
|
|
1667
|
+
} else if (pressedKeys.OSKey) {
|
|
1668
|
+
if (e.timeStamp - pressedKeys.lastT > 200 && pressedKeys.count == 1)
|
|
1669
|
+
resetPressedKeys();
|
|
1670
|
+
}
|
|
1671
|
+
if (pressedKeys[keyCode] == 1)
|
|
1672
|
+
pressedKeys.count++;
|
|
1673
|
+
pressedKeys.lastT = e.timeStamp;
|
|
1674
|
+
var result = normalizeCommandKeys(callback, e, keyCode);
|
|
1639
1675
|
lastDefaultPrevented = e.defaultPrevented;
|
|
1640
1676
|
return result;
|
|
1641
1677
|
});
|
|
@@ -1648,19 +1684,31 @@ exports.addCommandKeyListener = function(el, callback) {
|
|
|
1648
1684
|
});
|
|
1649
1685
|
|
|
1650
1686
|
addListener(el, "keyup", function(e) {
|
|
1651
|
-
|
|
1687
|
+
var keyCode = e.keyCode;
|
|
1688
|
+
if (!pressedKeys[keyCode]) {
|
|
1689
|
+
resetPressedKeys();
|
|
1690
|
+
} else {
|
|
1691
|
+
pressedKeys.count = Math.max(pressedKeys.count - 1, 0);
|
|
1692
|
+
}
|
|
1693
|
+
if (keyCode == 91 || keyCode == 92) {
|
|
1694
|
+
pressedKeys.OSKey = false;
|
|
1695
|
+
}
|
|
1696
|
+
pressedKeys[keyCode] = null;
|
|
1652
1697
|
});
|
|
1653
1698
|
|
|
1654
1699
|
if (!pressedKeys) {
|
|
1655
|
-
|
|
1656
|
-
addListener(window, "focus",
|
|
1657
|
-
pressedKeys = Object.create(null);
|
|
1658
|
-
});
|
|
1700
|
+
resetPressedKeys();
|
|
1701
|
+
addListener(window, "focus", resetPressedKeys);
|
|
1659
1702
|
}
|
|
1660
1703
|
}
|
|
1661
1704
|
};
|
|
1705
|
+
function resetPressedKeys() {
|
|
1706
|
+
pressedKeys = Object.create(null);
|
|
1707
|
+
pressedKeys.count = 0;
|
|
1708
|
+
pressedKeys.lastT = 0;
|
|
1709
|
+
}
|
|
1662
1710
|
|
|
1663
|
-
if (window.postMessage && !useragent.isOldIE) {
|
|
1711
|
+
if (typeof window == "object" && window.postMessage && !useragent.isOldIE) {
|
|
1664
1712
|
var postMessageId = 1;
|
|
1665
1713
|
exports.nextTick = function(callback, win) {
|
|
1666
1714
|
win = win || window;
|
|
@@ -1677,11 +1725,11 @@ if (window.postMessage && !useragent.isOldIE) {
|
|
|
1677
1725
|
}
|
|
1678
1726
|
|
|
1679
1727
|
|
|
1680
|
-
exports.nextFrame = window.requestAnimationFrame
|
|
1681
|
-
window.mozRequestAnimationFrame
|
|
1682
|
-
window.webkitRequestAnimationFrame
|
|
1683
|
-
window.msRequestAnimationFrame
|
|
1684
|
-
window.oRequestAnimationFrame;
|
|
1728
|
+
exports.nextFrame = typeof window == "object" && (window.requestAnimationFrame
|
|
1729
|
+
|| window.mozRequestAnimationFrame
|
|
1730
|
+
|| window.webkitRequestAnimationFrame
|
|
1731
|
+
|| window.msRequestAnimationFrame
|
|
1732
|
+
|| window.oRequestAnimationFrame);
|
|
1685
1733
|
|
|
1686
1734
|
if (exports.nextFrame)
|
|
1687
1735
|
exports.nextFrame = exports.nextFrame.bind(window);
|
|
@@ -1744,20 +1792,24 @@ exports.copyArray = function(array){
|
|
|
1744
1792
|
return copy;
|
|
1745
1793
|
};
|
|
1746
1794
|
|
|
1747
|
-
exports.deepCopy = function (obj) {
|
|
1795
|
+
exports.deepCopy = function deepCopy(obj) {
|
|
1748
1796
|
if (typeof obj !== "object" || !obj)
|
|
1749
1797
|
return obj;
|
|
1798
|
+
var copy;
|
|
1799
|
+
if (Array.isArray(obj)) {
|
|
1800
|
+
copy = [];
|
|
1801
|
+
for (var key = 0; key < obj.length; key++) {
|
|
1802
|
+
copy[key] = deepCopy(obj[key]);
|
|
1803
|
+
}
|
|
1804
|
+
return copy;
|
|
1805
|
+
}
|
|
1750
1806
|
var cons = obj.constructor;
|
|
1751
1807
|
if (cons === RegExp)
|
|
1752
1808
|
return obj;
|
|
1753
1809
|
|
|
1754
|
-
|
|
1810
|
+
copy = cons();
|
|
1755
1811
|
for (var key in obj) {
|
|
1756
|
-
|
|
1757
|
-
copy[key] = exports.deepCopy(obj[key]);
|
|
1758
|
-
} else {
|
|
1759
|
-
copy[key] = obj[key];
|
|
1760
|
-
}
|
|
1812
|
+
copy[key] = deepCopy(obj[key]);
|
|
1761
1813
|
}
|
|
1762
1814
|
return copy;
|
|
1763
1815
|
};
|
|
@@ -1923,14 +1975,19 @@ var TextInput = function(parentNode, host) {
|
|
|
1923
1975
|
});
|
|
1924
1976
|
this.focus = function() {
|
|
1925
1977
|
if (tempStyle) return text.focus();
|
|
1978
|
+
var top = text.style.top;
|
|
1926
1979
|
text.style.position = "fixed";
|
|
1927
1980
|
text.style.top = "-1000px";
|
|
1928
1981
|
text.focus();
|
|
1929
1982
|
setTimeout(function() {
|
|
1930
1983
|
text.style.position = "";
|
|
1984
|
+
if (text.style.top == "-1000px")
|
|
1985
|
+
text.style.top = top;
|
|
1931
1986
|
}, 0);
|
|
1932
1987
|
};
|
|
1933
|
-
this.blur = function() {
|
|
1988
|
+
this.blur = function() {
|
|
1989
|
+
text.blur();
|
|
1990
|
+
};
|
|
1934
1991
|
this.isFocused = function() {
|
|
1935
1992
|
return isFocused;
|
|
1936
1993
|
};
|
|
@@ -2135,7 +2192,7 @@ var TextInput = function(parentNode, host) {
|
|
|
2135
2192
|
var data = handleClipboardData(e);
|
|
2136
2193
|
if (typeof data == "string") {
|
|
2137
2194
|
if (data)
|
|
2138
|
-
host.onPaste(data);
|
|
2195
|
+
host.onPaste(data, e);
|
|
2139
2196
|
if (useragent.isIE)
|
|
2140
2197
|
setTimeout(resetSelection);
|
|
2141
2198
|
event.preventDefault(e);
|
|
@@ -2301,7 +2358,7 @@ var TextInput = function(parentNode, host) {
|
|
|
2301
2358
|
this.onContextMenuClose = onContextMenuClose;
|
|
2302
2359
|
var closeTimeout;
|
|
2303
2360
|
function onContextMenuClose() {
|
|
2304
|
-
clearTimeout(closeTimeout)
|
|
2361
|
+
clearTimeout(closeTimeout);
|
|
2305
2362
|
closeTimeout = setTimeout(function () {
|
|
2306
2363
|
if (tempStyle) {
|
|
2307
2364
|
text.style.cssText = tempStyle;
|
|
@@ -2343,6 +2400,7 @@ function DefaultHandlers(mouseHandler) {
|
|
|
2343
2400
|
editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(mouseHandler));
|
|
2344
2401
|
editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler));
|
|
2345
2402
|
editor.setDefaultHandler("mousewheel", this.onMouseWheel.bind(mouseHandler));
|
|
2403
|
+
editor.setDefaultHandler("touchmove", this.onTouchMove.bind(mouseHandler));
|
|
2346
2404
|
|
|
2347
2405
|
var exports = ["select", "startSelect", "selectEnd", "selectAllEnd", "selectByWordsEnd",
|
|
2348
2406
|
"selectByLinesEnd", "dragWait", "dragWaitEnd", "focusWait"];
|
|
@@ -2544,6 +2602,19 @@ function DefaultHandlers(mouseHandler) {
|
|
|
2544
2602
|
return ev.stop();
|
|
2545
2603
|
}
|
|
2546
2604
|
};
|
|
2605
|
+
|
|
2606
|
+
this.onTouchMove = function (ev) {
|
|
2607
|
+
var t = ev.domEvent.timeStamp;
|
|
2608
|
+
var dt = t - (this.$lastScrollTime || 0);
|
|
2609
|
+
|
|
2610
|
+
var editor = this.editor;
|
|
2611
|
+
var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
|
|
2612
|
+
if (isScrolable || dt < 200) {
|
|
2613
|
+
this.$lastScrollTime = t;
|
|
2614
|
+
editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
|
|
2615
|
+
return ev.stop();
|
|
2616
|
+
}
|
|
2617
|
+
};
|
|
2547
2618
|
|
|
2548
2619
|
}).call(DefaultHandlers.prototype);
|
|
2549
2620
|
|
|
@@ -2698,7 +2769,7 @@ function GutterHandler(mouseHandler) {
|
|
|
2698
2769
|
if (mouseHandler.$tooltipFollowsMouse) {
|
|
2699
2770
|
moveTooltip(mouseEvent);
|
|
2700
2771
|
} else {
|
|
2701
|
-
var gutterElement =
|
|
2772
|
+
var gutterElement = mouseEvent.domEvent.target;
|
|
2702
2773
|
var rect = gutterElement.getBoundingClientRect();
|
|
2703
2774
|
var style = tooltip.getElement().style;
|
|
2704
2775
|
style.left = rect.right + "px";
|
|
@@ -3538,7 +3609,7 @@ var AppConfig = require("./lib/app_config").AppConfig;
|
|
|
3538
3609
|
module.exports = exports = new AppConfig();
|
|
3539
3610
|
|
|
3540
3611
|
var global = (function() {
|
|
3541
|
-
return this;
|
|
3612
|
+
return this || typeof window != "undefined" && window;
|
|
3542
3613
|
})();
|
|
3543
3614
|
|
|
3544
3615
|
var options = {
|
|
@@ -3715,6 +3786,8 @@ var MouseHandler = function(editor) {
|
|
|
3715
3786
|
if (!document.hasFocus || !document.hasFocus())
|
|
3716
3787
|
window.focus();
|
|
3717
3788
|
editor.focus();
|
|
3789
|
+
if (!editor.isFocused())
|
|
3790
|
+
window.focus();
|
|
3718
3791
|
};
|
|
3719
3792
|
|
|
3720
3793
|
var mouseTarget = editor.renderer.getMouseEventTarget();
|
|
@@ -3730,6 +3803,7 @@ var MouseHandler = function(editor) {
|
|
|
3730
3803
|
}
|
|
3731
3804
|
}
|
|
3732
3805
|
event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel"));
|
|
3806
|
+
event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, "touchmove"));
|
|
3733
3807
|
|
|
3734
3808
|
var gutterEl = editor.renderer.$gutter;
|
|
3735
3809
|
event.addListener(gutterEl, "mousedown", this.onMouseEvent.bind(this, "guttermousedown"));
|
|
@@ -3781,6 +3855,14 @@ var MouseHandler = function(editor) {
|
|
|
3781
3855
|
|
|
3782
3856
|
this.editor._emit(name, mouseEvent);
|
|
3783
3857
|
};
|
|
3858
|
+
|
|
3859
|
+
this.onTouchMove = function (name, e) {
|
|
3860
|
+
var mouseEvent = new MouseEvent(e, this.editor);
|
|
3861
|
+
mouseEvent.speed = 1;//this.$scrollSpeed * 2;
|
|
3862
|
+
mouseEvent.wheelX = e.wheelX;
|
|
3863
|
+
mouseEvent.wheelY = e.wheelY;
|
|
3864
|
+
this.editor._emit(name, mouseEvent);
|
|
3865
|
+
};
|
|
3784
3866
|
|
|
3785
3867
|
this.setState = function(state) {
|
|
3786
3868
|
this.state = state;
|
|
@@ -4007,7 +4089,7 @@ var KeyBinding = function(editor) {
|
|
|
4007
4089
|
if (toExecute.command == "null") {
|
|
4008
4090
|
success = true;
|
|
4009
4091
|
} else {
|
|
4010
|
-
success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);
|
|
4092
|
+
success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);
|
|
4011
4093
|
}
|
|
4012
4094
|
if (success && e && hashId != -1 &&
|
|
4013
4095
|
toExecute.passEvent != true && toExecute.command.passEvent != true
|
|
@@ -4017,6 +4099,15 @@ var KeyBinding = function(editor) {
|
|
|
4017
4099
|
if (success)
|
|
4018
4100
|
break;
|
|
4019
4101
|
}
|
|
4102
|
+
|
|
4103
|
+
if (!success && hashId == -1) {
|
|
4104
|
+
toExecute = {command: "insertstring"};
|
|
4105
|
+
success = commands.exec("insertstring", this.$editor, keyString);
|
|
4106
|
+
}
|
|
4107
|
+
|
|
4108
|
+
if (success)
|
|
4109
|
+
this.$editor._signal("keyboardActivity", toExecute);
|
|
4110
|
+
|
|
4020
4111
|
return success;
|
|
4021
4112
|
};
|
|
4022
4113
|
|
|
@@ -4026,9 +4117,7 @@ var KeyBinding = function(editor) {
|
|
|
4026
4117
|
};
|
|
4027
4118
|
|
|
4028
4119
|
this.onTextInput = function(text) {
|
|
4029
|
-
|
|
4030
|
-
if (!success)
|
|
4031
|
-
this.$editor.commands.exec("insertstring", this.$editor, text);
|
|
4120
|
+
this.$callKeyboardHandlers(-1, text);
|
|
4032
4121
|
};
|
|
4033
4122
|
|
|
4034
4123
|
}).call(KeyBinding.prototype);
|
|
@@ -4852,7 +4941,7 @@ var Selection = function(session) {
|
|
|
4852
4941
|
this.toSingleRange(data[0]);
|
|
4853
4942
|
for (var i = data.length; i--; ) {
|
|
4854
4943
|
var r = Range.fromPoints(data[i].start, data[i].end);
|
|
4855
|
-
if (data.isBackwards)
|
|
4944
|
+
if (data[i].isBackwards)
|
|
4856
4945
|
r.cursor = r.start;
|
|
4857
4946
|
this.addRange(r, true);
|
|
4858
4947
|
}
|
|
@@ -5048,6 +5137,9 @@ var Tokenizer = function(rules) {
|
|
|
5048
5137
|
if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end)))
|
|
5049
5138
|
src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);
|
|
5050
5139
|
}
|
|
5140
|
+
if (src.charAt(0) != "^") src = "^" + src;
|
|
5141
|
+
if (src.charAt(src.length - 1) != "$") src += "$";
|
|
5142
|
+
|
|
5051
5143
|
return new RegExp(src, (flag||"").replace("g", ""));
|
|
5052
5144
|
};
|
|
5053
5145
|
this.getLineTokens = function(line, startState) {
|
|
@@ -5220,13 +5312,12 @@ var TextHighlightRules = function() {
|
|
|
5220
5312
|
for (var i = 0; i < state.length; i++) {
|
|
5221
5313
|
var rule = state[i];
|
|
5222
5314
|
if (rule.next || rule.onMatch) {
|
|
5223
|
-
if (typeof rule.next
|
|
5224
|
-
if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)
|
|
5225
|
-
rule.nextState = prefix + rule.nextState;
|
|
5226
|
-
} else {
|
|
5315
|
+
if (typeof rule.next == "string") {
|
|
5227
5316
|
if (rule.next.indexOf(prefix) !== 0)
|
|
5228
5317
|
rule.next = prefix + rule.next;
|
|
5229
5318
|
}
|
|
5319
|
+
if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)
|
|
5320
|
+
rule.nextState = prefix + rule.nextState;
|
|
5230
5321
|
}
|
|
5231
5322
|
}
|
|
5232
5323
|
this.$rules[prefix + key] = state;
|
|
@@ -5567,6 +5658,9 @@ var TokenIterator = function(session, initialRow, initialColumn) {
|
|
|
5567
5658
|
|
|
5568
5659
|
return column;
|
|
5569
5660
|
};
|
|
5661
|
+
this.getCurrentTokenPosition = function() {
|
|
5662
|
+
return {row: this.$row, column: this.getCurrentTokenColumn()};
|
|
5663
|
+
};
|
|
5570
5664
|
|
|
5571
5665
|
}).call(TokenIterator.prototype);
|
|
5572
5666
|
|
|
@@ -5926,6 +6020,71 @@ var Mode = function() {
|
|
|
5926
6020
|
exports.Mode = Mode;
|
|
5927
6021
|
});
|
|
5928
6022
|
|
|
6023
|
+
define("ace/apply_delta",["require","exports","module"], function(require, exports, module) {
|
|
6024
|
+
"use strict";
|
|
6025
|
+
|
|
6026
|
+
function throwDeltaError(delta, errorText){
|
|
6027
|
+
console.log("Invalid Delta:", delta);
|
|
6028
|
+
throw "Invalid Delta: " + errorText;
|
|
6029
|
+
}
|
|
6030
|
+
|
|
6031
|
+
function positionInDocument(docLines, position) {
|
|
6032
|
+
return position.row >= 0 && position.row < docLines.length &&
|
|
6033
|
+
position.column >= 0 && position.column <= docLines[position.row].length;
|
|
6034
|
+
}
|
|
6035
|
+
|
|
6036
|
+
function validateDelta(docLines, delta) {
|
|
6037
|
+
if (delta.action != "insert" && delta.action != "remove")
|
|
6038
|
+
throwDeltaError(delta, "delta.action must be 'insert' or 'remove'");
|
|
6039
|
+
if (!(delta.lines instanceof Array))
|
|
6040
|
+
throwDeltaError(delta, "delta.lines must be an Array");
|
|
6041
|
+
if (!delta.start || !delta.end)
|
|
6042
|
+
throwDeltaError(delta, "delta.start/end must be an present");
|
|
6043
|
+
var start = delta.start;
|
|
6044
|
+
if (!positionInDocument(docLines, delta.start))
|
|
6045
|
+
throwDeltaError(delta, "delta.start must be contained in document");
|
|
6046
|
+
var end = delta.end;
|
|
6047
|
+
if (delta.action == "remove" && !positionInDocument(docLines, end))
|
|
6048
|
+
throwDeltaError(delta, "delta.end must contained in document for 'remove' actions");
|
|
6049
|
+
var numRangeRows = end.row - start.row;
|
|
6050
|
+
var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));
|
|
6051
|
+
if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)
|
|
6052
|
+
throwDeltaError(delta, "delta.range must match delta lines");
|
|
6053
|
+
}
|
|
6054
|
+
|
|
6055
|
+
exports.applyDelta = function(docLines, delta, doNotValidate) {
|
|
6056
|
+
|
|
6057
|
+
var row = delta.start.row;
|
|
6058
|
+
var startColumn = delta.start.column;
|
|
6059
|
+
var line = docLines[row] || "";
|
|
6060
|
+
switch (delta.action) {
|
|
6061
|
+
case "insert":
|
|
6062
|
+
var lines = delta.lines;
|
|
6063
|
+
if (lines.length === 1) {
|
|
6064
|
+
docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);
|
|
6065
|
+
} else {
|
|
6066
|
+
var args = [row, 1].concat(delta.lines);
|
|
6067
|
+
docLines.splice.apply(docLines, args);
|
|
6068
|
+
docLines[row] = line.substring(0, startColumn) + docLines[row];
|
|
6069
|
+
docLines[row + delta.lines.length - 1] += line.substring(startColumn);
|
|
6070
|
+
}
|
|
6071
|
+
break;
|
|
6072
|
+
case "remove":
|
|
6073
|
+
var endColumn = delta.end.column;
|
|
6074
|
+
var endRow = delta.end.row;
|
|
6075
|
+
if (row === endRow) {
|
|
6076
|
+
docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);
|
|
6077
|
+
} else {
|
|
6078
|
+
docLines.splice(
|
|
6079
|
+
row, endRow - row + 1,
|
|
6080
|
+
line.substring(0, startColumn) + docLines[endRow].substring(endColumn)
|
|
6081
|
+
);
|
|
6082
|
+
}
|
|
6083
|
+
break;
|
|
6084
|
+
}
|
|
6085
|
+
}
|
|
6086
|
+
});
|
|
6087
|
+
|
|
5929
6088
|
define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) {
|
|
5930
6089
|
"use strict";
|
|
5931
6090
|
|
|
@@ -5952,70 +6111,46 @@ var Anchor = exports.Anchor = function(doc, row, column) {
|
|
|
5952
6111
|
return this.document;
|
|
5953
6112
|
};
|
|
5954
6113
|
this.$insertRight = false;
|
|
5955
|
-
this.onChange = function(
|
|
5956
|
-
|
|
5957
|
-
var range = delta.range;
|
|
5958
|
-
|
|
5959
|
-
if (range.start.row == range.end.row && range.start.row != this.row)
|
|
5960
|
-
return;
|
|
5961
|
-
|
|
5962
|
-
if (range.start.row > this.row)
|
|
6114
|
+
this.onChange = function(delta) {
|
|
6115
|
+
if (delta.start.row == delta.end.row && delta.start.row != this.row)
|
|
5963
6116
|
return;
|
|
5964
6117
|
|
|
5965
|
-
if (
|
|
6118
|
+
if (delta.start.row > this.row)
|
|
5966
6119
|
return;
|
|
5967
|
-
|
|
5968
|
-
var
|
|
5969
|
-
|
|
5970
|
-
var start = range.start;
|
|
5971
|
-
var end = range.end;
|
|
5972
|
-
|
|
5973
|
-
if (delta.action === "insertText") {
|
|
5974
|
-
if (start.row === row && start.column <= column) {
|
|
5975
|
-
if (start.column === column && this.$insertRight) {
|
|
5976
|
-
} else if (start.row === end.row) {
|
|
5977
|
-
column += end.column - start.column;
|
|
5978
|
-
} else {
|
|
5979
|
-
column -= start.column;
|
|
5980
|
-
row += end.row - start.row;
|
|
5981
|
-
}
|
|
5982
|
-
} else if (start.row !== end.row && start.row < row) {
|
|
5983
|
-
row += end.row - start.row;
|
|
5984
|
-
}
|
|
5985
|
-
} else if (delta.action === "insertLines") {
|
|
5986
|
-
if (start.row === row && column === 0 && this.$insertRight) {
|
|
5987
|
-
}
|
|
5988
|
-
else if (start.row <= row) {
|
|
5989
|
-
row += end.row - start.row;
|
|
5990
|
-
}
|
|
5991
|
-
} else if (delta.action === "removeText") {
|
|
5992
|
-
if (start.row === row && start.column < column) {
|
|
5993
|
-
if (end.column >= column)
|
|
5994
|
-
column = start.column;
|
|
5995
|
-
else
|
|
5996
|
-
column = Math.max(0, column - (end.column - start.column));
|
|
5997
|
-
|
|
5998
|
-
} else if (start.row !== end.row && start.row < row) {
|
|
5999
|
-
if (end.row === row)
|
|
6000
|
-
column = Math.max(0, column - end.column) + start.column;
|
|
6001
|
-
row -= (end.row - start.row);
|
|
6002
|
-
} else if (end.row === row) {
|
|
6003
|
-
row -= end.row - start.row;
|
|
6004
|
-
column = Math.max(0, column - end.column) + start.column;
|
|
6005
|
-
}
|
|
6006
|
-
} else if (delta.action == "removeLines") {
|
|
6007
|
-
if (start.row <= row) {
|
|
6008
|
-
if (end.row <= row)
|
|
6009
|
-
row -= end.row - start.row;
|
|
6010
|
-
else {
|
|
6011
|
-
row = start.row;
|
|
6012
|
-
column = 0;
|
|
6013
|
-
}
|
|
6014
|
-
}
|
|
6015
|
-
}
|
|
6016
|
-
|
|
6017
|
-
this.setPosition(row, column, true);
|
|
6120
|
+
|
|
6121
|
+
var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);
|
|
6122
|
+
this.setPosition(point.row, point.column, true);
|
|
6018
6123
|
};
|
|
6124
|
+
|
|
6125
|
+
function $pointsInOrder(point1, point2, equalPointsInOrder) {
|
|
6126
|
+
var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;
|
|
6127
|
+
return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);
|
|
6128
|
+
}
|
|
6129
|
+
|
|
6130
|
+
function $getTransformedPoint(delta, point, moveIfEqual) {
|
|
6131
|
+
var deltaIsInsert = delta.action == "insert";
|
|
6132
|
+
var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);
|
|
6133
|
+
var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);
|
|
6134
|
+
var deltaStart = delta.start;
|
|
6135
|
+
var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.
|
|
6136
|
+
if ($pointsInOrder(point, deltaStart, moveIfEqual)) {
|
|
6137
|
+
return {
|
|
6138
|
+
row: point.row,
|
|
6139
|
+
column: point.column
|
|
6140
|
+
};
|
|
6141
|
+
}
|
|
6142
|
+
if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {
|
|
6143
|
+
return {
|
|
6144
|
+
row: point.row + deltaRowShift,
|
|
6145
|
+
column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)
|
|
6146
|
+
};
|
|
6147
|
+
}
|
|
6148
|
+
|
|
6149
|
+
return {
|
|
6150
|
+
row: deltaStart.row,
|
|
6151
|
+
column: deltaStart.column
|
|
6152
|
+
};
|
|
6153
|
+
}
|
|
6019
6154
|
this.setPosition = function(row, column, noClip) {
|
|
6020
6155
|
var pos;
|
|
6021
6156
|
if (noClip) {
|
|
@@ -6075,22 +6210,23 @@ var Anchor = exports.Anchor = function(doc, row, column) {
|
|
|
6075
6210
|
|
|
6076
6211
|
});
|
|
6077
6212
|
|
|
6078
|
-
define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) {
|
|
6213
|
+
define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) {
|
|
6079
6214
|
"use strict";
|
|
6080
6215
|
|
|
6081
6216
|
var oop = require("./lib/oop");
|
|
6217
|
+
var applyDelta = require("./apply_delta").applyDelta;
|
|
6082
6218
|
var EventEmitter = require("./lib/event_emitter").EventEmitter;
|
|
6083
6219
|
var Range = require("./range").Range;
|
|
6084
6220
|
var Anchor = require("./anchor").Anchor;
|
|
6085
6221
|
|
|
6086
|
-
var Document = function(
|
|
6087
|
-
this.$lines = [];
|
|
6088
|
-
if (
|
|
6222
|
+
var Document = function(textOrLines) {
|
|
6223
|
+
this.$lines = [""];
|
|
6224
|
+
if (textOrLines.length === 0) {
|
|
6089
6225
|
this.$lines = [""];
|
|
6090
|
-
} else if (Array.isArray(
|
|
6091
|
-
this.
|
|
6226
|
+
} else if (Array.isArray(textOrLines)) {
|
|
6227
|
+
this.insertMergedLines({row: 0, column: 0}, textOrLines);
|
|
6092
6228
|
} else {
|
|
6093
|
-
this.insert({row: 0, column:0},
|
|
6229
|
+
this.insert({row: 0, column:0}, textOrLines);
|
|
6094
6230
|
}
|
|
6095
6231
|
};
|
|
6096
6232
|
|
|
@@ -6098,9 +6234,9 @@ var Document = function(text) {
|
|
|
6098
6234
|
|
|
6099
6235
|
oop.implement(this, EventEmitter);
|
|
6100
6236
|
this.setValue = function(text) {
|
|
6101
|
-
var len = this.getLength();
|
|
6102
|
-
this.remove(new Range(0, 0, len, this.getLine(len
|
|
6103
|
-
this.insert({row: 0, column:0}, text);
|
|
6237
|
+
var len = this.getLength() - 1;
|
|
6238
|
+
this.remove(new Range(0, 0, len, this.getLine(len).length));
|
|
6239
|
+
this.insert({row: 0, column: 0}, text);
|
|
6104
6240
|
};
|
|
6105
6241
|
this.getValue = function() {
|
|
6106
6242
|
return this.getAllLines().join(this.getNewLineCharacter());
|
|
@@ -6108,14 +6244,15 @@ var Document = function(text) {
|
|
|
6108
6244
|
this.createAnchor = function(row, column) {
|
|
6109
6245
|
return new Anchor(this, row, column);
|
|
6110
6246
|
};
|
|
6111
|
-
if ("aaa".split(/a/).length === 0)
|
|
6247
|
+
if ("aaa".split(/a/).length === 0) {
|
|
6112
6248
|
this.$split = function(text) {
|
|
6113
6249
|
return text.replace(/\r\n|\r/g, "\n").split("\n");
|
|
6114
6250
|
};
|
|
6115
|
-
else
|
|
6251
|
+
} else {
|
|
6116
6252
|
this.$split = function(text) {
|
|
6117
6253
|
return text.split(/\r\n|\r|\n/);
|
|
6118
6254
|
};
|
|
6255
|
+
}
|
|
6119
6256
|
|
|
6120
6257
|
|
|
6121
6258
|
this.$detectNewLine = function(text) {
|
|
@@ -6162,251 +6299,246 @@ var Document = function(text) {
|
|
|
6162
6299
|
return this.$lines.length;
|
|
6163
6300
|
};
|
|
6164
6301
|
this.getTextRange = function(range) {
|
|
6165
|
-
|
|
6166
|
-
|
|
6167
|
-
|
|
6302
|
+
return this.getLinesForRange(range).join(this.getNewLineCharacter());
|
|
6303
|
+
};
|
|
6304
|
+
this.getLinesForRange = function(range) {
|
|
6305
|
+
var lines;
|
|
6306
|
+
if (range.start.row === range.end.row) {
|
|
6307
|
+
lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];
|
|
6308
|
+
} else {
|
|
6309
|
+
lines = this.getLines(range.start.row, range.end.row);
|
|
6310
|
+
lines[0] = (lines[0] || "").substring(range.start.column);
|
|
6311
|
+
var l = lines.length - 1;
|
|
6312
|
+
if (range.end.row - range.start.row == l)
|
|
6313
|
+
lines[l] = lines[l].substring(0, range.end.column);
|
|
6168
6314
|
}
|
|
6169
|
-
|
|
6170
|
-
lines[0] = (lines[0] || "").substring(range.start.column);
|
|
6171
|
-
var l = lines.length - 1;
|
|
6172
|
-
if (range.end.row - range.start.row == l)
|
|
6173
|
-
lines[l] = lines[l].substring(0, range.end.column);
|
|
6174
|
-
return lines.join(this.getNewLineCharacter());
|
|
6315
|
+
return lines;
|
|
6175
6316
|
};
|
|
6176
|
-
|
|
6177
|
-
|
|
6178
|
-
|
|
6179
|
-
|
|
6180
|
-
|
|
6181
|
-
|
|
6182
|
-
|
|
6183
|
-
|
|
6184
|
-
|
|
6317
|
+
this.insertLines = function(row, lines) {
|
|
6318
|
+
console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead.");
|
|
6319
|
+
return this.insertFullLines(row, lines);
|
|
6320
|
+
};
|
|
6321
|
+
this.removeLines = function(firstRow, lastRow) {
|
|
6322
|
+
console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead.");
|
|
6323
|
+
return this.removeFullLines(firstRow, lastRow);
|
|
6324
|
+
};
|
|
6325
|
+
this.insertNewLine = function(position) {
|
|
6326
|
+
console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead.");
|
|
6327
|
+
return this.insertMergedLines(position, ["", ""]);
|
|
6185
6328
|
};
|
|
6186
6329
|
this.insert = function(position, text) {
|
|
6187
|
-
if (!text || text.length === 0)
|
|
6188
|
-
return position;
|
|
6189
|
-
|
|
6190
|
-
position = this.$clipPosition(position);
|
|
6191
6330
|
if (this.getLength() <= 1)
|
|
6192
6331
|
this.$detectNewLine(text);
|
|
6193
|
-
|
|
6194
|
-
|
|
6195
|
-
|
|
6196
|
-
|
|
6197
|
-
|
|
6198
|
-
|
|
6199
|
-
|
|
6200
|
-
|
|
6201
|
-
|
|
6202
|
-
|
|
6332
|
+
|
|
6333
|
+
return this.insertMergedLines(position, this.$split(text));
|
|
6334
|
+
};
|
|
6335
|
+
this.insertInLine = function(position, text) {
|
|
6336
|
+
var start = this.clippedPos(position.row, position.column);
|
|
6337
|
+
var end = this.pos(position.row, position.column + text.length);
|
|
6338
|
+
|
|
6339
|
+
this.applyDelta({
|
|
6340
|
+
start: start,
|
|
6341
|
+
end: end,
|
|
6342
|
+
action: "insert",
|
|
6343
|
+
lines: [text]
|
|
6344
|
+
}, true);
|
|
6345
|
+
|
|
6346
|
+
return this.clonePos(end);
|
|
6347
|
+
};
|
|
6348
|
+
|
|
6349
|
+
this.clippedPos = function(row, column) {
|
|
6350
|
+
var length = this.getLength();
|
|
6351
|
+
if (row === undefined) {
|
|
6352
|
+
row = length;
|
|
6353
|
+
} else if (row < 0) {
|
|
6354
|
+
row = 0;
|
|
6355
|
+
} else if (row >= length) {
|
|
6356
|
+
row = length - 1;
|
|
6357
|
+
column = undefined;
|
|
6203
6358
|
}
|
|
6204
|
-
|
|
6359
|
+
var line = this.getLine(row);
|
|
6360
|
+
if (column == undefined)
|
|
6361
|
+
column = line.length;
|
|
6362
|
+
column = Math.min(Math.max(column, 0), line.length);
|
|
6363
|
+
return {row: row, column: column};
|
|
6205
6364
|
};
|
|
6206
|
-
|
|
6207
|
-
|
|
6208
|
-
|
|
6209
|
-
return this._insertLines(Math.max(row, 0), lines);
|
|
6210
|
-
};
|
|
6211
|
-
this._insertLines = function(row, lines) {
|
|
6212
|
-
if (lines.length == 0)
|
|
6213
|
-
return {row: row, column: 0};
|
|
6214
|
-
while (lines.length > 20000) {
|
|
6215
|
-
var end = this._insertLines(row, lines.slice(0, 20000));
|
|
6216
|
-
lines = lines.slice(20000);
|
|
6217
|
-
row = end.row;
|
|
6218
|
-
}
|
|
6219
|
-
|
|
6220
|
-
var args = [row, 0];
|
|
6221
|
-
args.push.apply(args, lines);
|
|
6222
|
-
this.$lines.splice.apply(this.$lines, args);
|
|
6223
|
-
|
|
6224
|
-
var range = new Range(row, 0, row + lines.length, 0);
|
|
6225
|
-
var delta = {
|
|
6226
|
-
action: "insertLines",
|
|
6227
|
-
range: range,
|
|
6228
|
-
lines: lines
|
|
6229
|
-
};
|
|
6230
|
-
this._signal("change", { data: delta });
|
|
6231
|
-
return range.end;
|
|
6365
|
+
|
|
6366
|
+
this.clonePos = function(pos) {
|
|
6367
|
+
return {row: pos.row, column: pos.column};
|
|
6232
6368
|
};
|
|
6233
|
-
|
|
6234
|
-
|
|
6235
|
-
|
|
6236
|
-
|
|
6237
|
-
this.$lines[position.row] = line.substring(0, position.column);
|
|
6238
|
-
this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
|
|
6239
|
-
|
|
6240
|
-
var end = {
|
|
6241
|
-
row : position.row + 1,
|
|
6242
|
-
column : 0
|
|
6243
|
-
};
|
|
6244
|
-
|
|
6245
|
-
var delta = {
|
|
6246
|
-
action: "insertText",
|
|
6247
|
-
range: Range.fromPoints(position, end),
|
|
6248
|
-
text: this.getNewLineCharacter()
|
|
6249
|
-
};
|
|
6250
|
-
this._signal("change", { data: delta });
|
|
6251
|
-
|
|
6252
|
-
return end;
|
|
6369
|
+
|
|
6370
|
+
this.pos = function(row, column) {
|
|
6371
|
+
return {row: row, column: column};
|
|
6253
6372
|
};
|
|
6254
|
-
|
|
6255
|
-
|
|
6256
|
-
|
|
6257
|
-
|
|
6258
|
-
|
|
6259
|
-
|
|
6260
|
-
|
|
6261
|
-
|
|
6262
|
-
|
|
6373
|
+
|
|
6374
|
+
this.$clipPosition = function(position) {
|
|
6375
|
+
var length = this.getLength();
|
|
6376
|
+
if (position.row >= length) {
|
|
6377
|
+
position.row = Math.max(0, length - 1);
|
|
6378
|
+
position.column = this.getLine(length - 1).length;
|
|
6379
|
+
} else {
|
|
6380
|
+
position.row = Math.max(0, position.row);
|
|
6381
|
+
position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);
|
|
6382
|
+
}
|
|
6383
|
+
return position;
|
|
6384
|
+
};
|
|
6385
|
+
this.insertFullLines = function(row, lines) {
|
|
6386
|
+
row = Math.min(Math.max(row, 0), this.getLength());
|
|
6387
|
+
var column = 0;
|
|
6388
|
+
if (row < this.getLength()) {
|
|
6389
|
+
lines = lines.concat([""]);
|
|
6390
|
+
column = 0;
|
|
6391
|
+
} else {
|
|
6392
|
+
lines = [""].concat(lines);
|
|
6393
|
+
row--;
|
|
6394
|
+
column = this.$lines[row].length;
|
|
6395
|
+
}
|
|
6396
|
+
this.insertMergedLines({row: row, column: column}, lines);
|
|
6397
|
+
};
|
|
6398
|
+
this.insertMergedLines = function(position, lines) {
|
|
6399
|
+
var start = this.clippedPos(position.row, position.column);
|
|
6263
6400
|
var end = {
|
|
6264
|
-
row
|
|
6265
|
-
column
|
|
6401
|
+
row: start.row + lines.length - 1,
|
|
6402
|
+
column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length
|
|
6266
6403
|
};
|
|
6267
|
-
|
|
6268
|
-
|
|
6269
|
-
|
|
6270
|
-
|
|
6271
|
-
|
|
6272
|
-
|
|
6273
|
-
|
|
6274
|
-
|
|
6275
|
-
return end;
|
|
6404
|
+
|
|
6405
|
+
this.applyDelta({
|
|
6406
|
+
start: start,
|
|
6407
|
+
end: end,
|
|
6408
|
+
action: "insert",
|
|
6409
|
+
lines: lines
|
|
6410
|
+
});
|
|
6411
|
+
|
|
6412
|
+
return this.clonePos(end);
|
|
6276
6413
|
};
|
|
6277
6414
|
this.remove = function(range) {
|
|
6278
|
-
|
|
6279
|
-
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
|
|
6283
|
-
|
|
6284
|
-
|
|
6285
|
-
|
|
6286
|
-
|
|
6287
|
-
var lastRow = range.end.row;
|
|
6288
|
-
|
|
6289
|
-
if (range.isMultiLine()) {
|
|
6290
|
-
var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
|
|
6291
|
-
var lastFullRow = lastRow - 1;
|
|
6292
|
-
|
|
6293
|
-
if (range.end.column > 0)
|
|
6294
|
-
this.removeInLine(lastRow, 0, range.end.column);
|
|
6295
|
-
|
|
6296
|
-
if (lastFullRow >= firstFullRow)
|
|
6297
|
-
this._removeLines(firstFullRow, lastFullRow);
|
|
6298
|
-
|
|
6299
|
-
if (firstFullRow != firstRow) {
|
|
6300
|
-
this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
|
|
6301
|
-
this.removeNewLine(range.start.row);
|
|
6302
|
-
}
|
|
6303
|
-
}
|
|
6304
|
-
else {
|
|
6305
|
-
this.removeInLine(firstRow, range.start.column, range.end.column);
|
|
6306
|
-
}
|
|
6307
|
-
return range.start;
|
|
6415
|
+
var start = this.clippedPos(range.start.row, range.start.column);
|
|
6416
|
+
var end = this.clippedPos(range.end.row, range.end.column);
|
|
6417
|
+
this.applyDelta({
|
|
6418
|
+
start: start,
|
|
6419
|
+
end: end,
|
|
6420
|
+
action: "remove",
|
|
6421
|
+
lines: this.getLinesForRange({start: start, end: end})
|
|
6422
|
+
});
|
|
6423
|
+
return this.clonePos(start);
|
|
6308
6424
|
};
|
|
6309
6425
|
this.removeInLine = function(row, startColumn, endColumn) {
|
|
6310
|
-
|
|
6311
|
-
|
|
6312
|
-
|
|
6313
|
-
|
|
6314
|
-
|
|
6315
|
-
|
|
6316
|
-
|
|
6317
|
-
|
|
6318
|
-
|
|
6319
|
-
|
|
6320
|
-
|
|
6321
|
-
|
|
6322
|
-
|
|
6323
|
-
|
|
6324
|
-
|
|
6325
|
-
|
|
6326
|
-
|
|
6327
|
-
|
|
6328
|
-
|
|
6329
|
-
|
|
6330
|
-
|
|
6331
|
-
|
|
6332
|
-
|
|
6333
|
-
|
|
6334
|
-
|
|
6335
|
-
|
|
6336
|
-
|
|
6337
|
-
|
|
6338
|
-
|
|
6339
|
-
|
|
6340
|
-
|
|
6341
|
-
lines: removed
|
|
6342
|
-
};
|
|
6343
|
-
this._signal("change", { data: delta });
|
|
6344
|
-
return removed;
|
|
6426
|
+
var start = this.clippedPos(row, startColumn);
|
|
6427
|
+
var end = this.clippedPos(row, endColumn);
|
|
6428
|
+
|
|
6429
|
+
this.applyDelta({
|
|
6430
|
+
start: start,
|
|
6431
|
+
end: end,
|
|
6432
|
+
action: "remove",
|
|
6433
|
+
lines: this.getLinesForRange({start: start, end: end})
|
|
6434
|
+
}, true);
|
|
6435
|
+
|
|
6436
|
+
return this.clonePos(start);
|
|
6437
|
+
};
|
|
6438
|
+
this.removeFullLines = function(firstRow, lastRow) {
|
|
6439
|
+
firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);
|
|
6440
|
+
lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);
|
|
6441
|
+
var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;
|
|
6442
|
+
var deleteLastNewLine = lastRow < this.getLength() - 1;
|
|
6443
|
+
var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );
|
|
6444
|
+
var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );
|
|
6445
|
+
var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );
|
|
6446
|
+
var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length );
|
|
6447
|
+
var range = new Range(startRow, startCol, endRow, endCol);
|
|
6448
|
+
var deletedLines = this.$lines.slice(firstRow, lastRow + 1);
|
|
6449
|
+
|
|
6450
|
+
this.applyDelta({
|
|
6451
|
+
start: range.start,
|
|
6452
|
+
end: range.end,
|
|
6453
|
+
action: "remove",
|
|
6454
|
+
lines: this.getLinesForRange(range)
|
|
6455
|
+
});
|
|
6456
|
+
return deletedLines;
|
|
6345
6457
|
};
|
|
6346
6458
|
this.removeNewLine = function(row) {
|
|
6347
|
-
|
|
6348
|
-
|
|
6349
|
-
|
|
6350
|
-
|
|
6351
|
-
|
|
6352
|
-
|
|
6353
|
-
|
|
6354
|
-
|
|
6355
|
-
var delta = {
|
|
6356
|
-
action: "removeText",
|
|
6357
|
-
range: range,
|
|
6358
|
-
text: this.getNewLineCharacter()
|
|
6359
|
-
};
|
|
6360
|
-
this._signal("change", { data: delta });
|
|
6459
|
+
if (row < this.getLength() - 1 && row >= 0) {
|
|
6460
|
+
this.applyDelta({
|
|
6461
|
+
start: this.pos(row, this.getLine(row).length),
|
|
6462
|
+
end: this.pos(row + 1, 0),
|
|
6463
|
+
action: "remove",
|
|
6464
|
+
lines: ["", ""]
|
|
6465
|
+
});
|
|
6466
|
+
}
|
|
6361
6467
|
};
|
|
6362
6468
|
this.replace = function(range, text) {
|
|
6363
6469
|
if (!(range instanceof Range))
|
|
6364
6470
|
range = Range.fromPoints(range.start, range.end);
|
|
6365
|
-
if (text.length
|
|
6471
|
+
if (text.length === 0 && range.isEmpty())
|
|
6366
6472
|
return range.start;
|
|
6367
6473
|
if (text == this.getTextRange(range))
|
|
6368
6474
|
return range.end;
|
|
6369
6475
|
|
|
6370
6476
|
this.remove(range);
|
|
6477
|
+
var end;
|
|
6371
6478
|
if (text) {
|
|
6372
|
-
|
|
6479
|
+
end = this.insert(range.start, text);
|
|
6373
6480
|
}
|
|
6374
6481
|
else {
|
|
6375
6482
|
end = range.start;
|
|
6376
6483
|
}
|
|
6377
|
-
|
|
6484
|
+
|
|
6378
6485
|
return end;
|
|
6379
6486
|
};
|
|
6380
6487
|
this.applyDeltas = function(deltas) {
|
|
6381
6488
|
for (var i=0; i<deltas.length; i++) {
|
|
6382
|
-
|
|
6383
|
-
var range = Range.fromPoints(delta.range.start, delta.range.end);
|
|
6384
|
-
|
|
6385
|
-
if (delta.action == "insertLines")
|
|
6386
|
-
this.insertLines(range.start.row, delta.lines);
|
|
6387
|
-
else if (delta.action == "insertText")
|
|
6388
|
-
this.insert(range.start, delta.text);
|
|
6389
|
-
else if (delta.action == "removeLines")
|
|
6390
|
-
this._removeLines(range.start.row, range.end.row - 1);
|
|
6391
|
-
else if (delta.action == "removeText")
|
|
6392
|
-
this.remove(range);
|
|
6489
|
+
this.applyDelta(deltas[i]);
|
|
6393
6490
|
}
|
|
6394
6491
|
};
|
|
6395
6492
|
this.revertDeltas = function(deltas) {
|
|
6396
6493
|
for (var i=deltas.length-1; i>=0; i--) {
|
|
6397
|
-
|
|
6398
|
-
|
|
6399
|
-
|
|
6400
|
-
|
|
6401
|
-
|
|
6402
|
-
|
|
6403
|
-
|
|
6404
|
-
|
|
6405
|
-
else if (delta.action == "removeLines")
|
|
6406
|
-
this._insertLines(range.start.row, delta.lines);
|
|
6407
|
-
else if (delta.action == "removeText")
|
|
6408
|
-
this.insert(range.start, delta.text);
|
|
6494
|
+
this.revertDelta(deltas[i]);
|
|
6495
|
+
}
|
|
6496
|
+
};
|
|
6497
|
+
this.applyDelta = function(delta, doNotValidate) {
|
|
6498
|
+
var isInsert = delta.action == "insert";
|
|
6499
|
+
if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]
|
|
6500
|
+
: !Range.comparePoints(delta.start, delta.end)) {
|
|
6501
|
+
return;
|
|
6409
6502
|
}
|
|
6503
|
+
|
|
6504
|
+
if (isInsert && delta.lines.length > 20000)
|
|
6505
|
+
this.$splitAndapplyLargeDelta(delta, 20000);
|
|
6506
|
+
applyDelta(this.$lines, delta, doNotValidate);
|
|
6507
|
+
this._signal("change", delta);
|
|
6508
|
+
};
|
|
6509
|
+
|
|
6510
|
+
this.$splitAndapplyLargeDelta = function(delta, MAX) {
|
|
6511
|
+
var lines = delta.lines;
|
|
6512
|
+
var l = lines.length;
|
|
6513
|
+
var row = delta.start.row;
|
|
6514
|
+
var column = delta.start.column;
|
|
6515
|
+
var from = 0, to = 0;
|
|
6516
|
+
do {
|
|
6517
|
+
from = to;
|
|
6518
|
+
to += MAX - 1;
|
|
6519
|
+
var chunk = lines.slice(from, to);
|
|
6520
|
+
if (to > l) {
|
|
6521
|
+
delta.lines = chunk;
|
|
6522
|
+
delta.start.row = row + from;
|
|
6523
|
+
delta.start.column = column;
|
|
6524
|
+
break;
|
|
6525
|
+
}
|
|
6526
|
+
chunk.push("");
|
|
6527
|
+
this.applyDelta({
|
|
6528
|
+
start: this.pos(row + from, column),
|
|
6529
|
+
end: this.pos(row + to, column = 0),
|
|
6530
|
+
action: delta.action,
|
|
6531
|
+
lines: chunk
|
|
6532
|
+
}, true);
|
|
6533
|
+
} while(true);
|
|
6534
|
+
};
|
|
6535
|
+
this.revertDelta = function(delta) {
|
|
6536
|
+
this.applyDelta({
|
|
6537
|
+
start: this.clonePos(delta.start),
|
|
6538
|
+
end: this.clonePos(delta.end),
|
|
6539
|
+
action: (delta.action == "insert" ? "remove" : "insert"),
|
|
6540
|
+
lines: delta.lines.slice()
|
|
6541
|
+
});
|
|
6410
6542
|
};
|
|
6411
6543
|
this.indexToPosition = function(index, startRow) {
|
|
6412
6544
|
var lines = this.$lines || this.getAllLines();
|
|
@@ -6457,11 +6589,10 @@ var BackgroundTokenizer = function(tokenizer, editor) {
|
|
|
6457
6589
|
var endLine = -1;
|
|
6458
6590
|
var doc = self.doc;
|
|
6459
6591
|
|
|
6592
|
+
var startLine = currentLine;
|
|
6460
6593
|
while (self.lines[currentLine])
|
|
6461
6594
|
currentLine++;
|
|
6462
|
-
|
|
6463
|
-
var startLine = currentLine;
|
|
6464
|
-
|
|
6595
|
+
|
|
6465
6596
|
var len = doc.getLength();
|
|
6466
6597
|
var processedLines = 0;
|
|
6467
6598
|
self.running = false;
|
|
@@ -6523,13 +6654,12 @@ var BackgroundTokenizer = function(tokenizer, editor) {
|
|
|
6523
6654
|
}
|
|
6524
6655
|
|
|
6525
6656
|
this.$updateOnChange = function(delta) {
|
|
6526
|
-
var
|
|
6527
|
-
var
|
|
6528
|
-
var len = range.end.row - startRow;
|
|
6657
|
+
var startRow = delta.start.row;
|
|
6658
|
+
var len = delta.end.row - startRow;
|
|
6529
6659
|
|
|
6530
6660
|
if (len === 0) {
|
|
6531
6661
|
this.lines[startRow] = null;
|
|
6532
|
-
} else if (delta.action == "
|
|
6662
|
+
} else if (delta.action == "remove") {
|
|
6533
6663
|
this.lines.splice(startRow, len + 1, null);
|
|
6534
6664
|
this.states.splice(startRow, len + 1, null);
|
|
6535
6665
|
} else {
|
|
@@ -7001,14 +7131,13 @@ var RangeList = function() {
|
|
|
7001
7131
|
this.session = null;
|
|
7002
7132
|
};
|
|
7003
7133
|
|
|
7004
|
-
this.$onChange = function(
|
|
7005
|
-
|
|
7006
|
-
|
|
7007
|
-
var
|
|
7008
|
-
var end = changeRange.end;
|
|
7134
|
+
this.$onChange = function(delta) {
|
|
7135
|
+
if (delta.action == "insert"){
|
|
7136
|
+
var start = delta.start;
|
|
7137
|
+
var end = delta.end;
|
|
7009
7138
|
} else {
|
|
7010
|
-
var end =
|
|
7011
|
-
var start =
|
|
7139
|
+
var end = delta.start;
|
|
7140
|
+
var start = delta.end;
|
|
7012
7141
|
}
|
|
7013
7142
|
var startRow = start.row;
|
|
7014
7143
|
var endRow = end.row;
|
|
@@ -7238,7 +7367,7 @@ function Folding() {
|
|
|
7238
7367
|
var folds = this.getFoldsInRange(ranges);
|
|
7239
7368
|
}
|
|
7240
7369
|
return folds;
|
|
7241
|
-
}
|
|
7370
|
+
};
|
|
7242
7371
|
this.getAllFolds = function() {
|
|
7243
7372
|
var folds = [];
|
|
7244
7373
|
var foldLines = this.$foldData;
|
|
@@ -7323,15 +7452,15 @@ function Folding() {
|
|
|
7323
7452
|
end = foldLine.end.row,
|
|
7324
7453
|
start = foldLine.start.row;
|
|
7325
7454
|
if (end >= last) {
|
|
7326
|
-
if(start < last) {
|
|
7327
|
-
if(start >= first)
|
|
7455
|
+
if (start < last) {
|
|
7456
|
+
if (start >= first)
|
|
7328
7457
|
rowCount -= last-start;
|
|
7329
7458
|
else
|
|
7330
|
-
rowCount = 0
|
|
7459
|
+
rowCount = 0; // in one fold
|
|
7331
7460
|
}
|
|
7332
7461
|
break;
|
|
7333
|
-
} else if(end >= first){
|
|
7334
|
-
if (start >= first) //fold inside range
|
|
7462
|
+
} else if (end >= first){
|
|
7463
|
+
if (start >= first) // fold inside range
|
|
7335
7464
|
rowCount -= end-start;
|
|
7336
7465
|
else
|
|
7337
7466
|
rowCount -= end-first+1;
|
|
@@ -7416,7 +7545,7 @@ function Folding() {
|
|
|
7416
7545
|
else
|
|
7417
7546
|
this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);
|
|
7418
7547
|
this.$modified = true;
|
|
7419
|
-
this.
|
|
7548
|
+
this._signal("changeFold", { data: fold, action: "add" });
|
|
7420
7549
|
|
|
7421
7550
|
return fold;
|
|
7422
7551
|
};
|
|
@@ -7465,7 +7594,7 @@ function Folding() {
|
|
|
7465
7594
|
this.$updateRowLengthCache(startRow, endRow);
|
|
7466
7595
|
}
|
|
7467
7596
|
this.$modified = true;
|
|
7468
|
-
this.
|
|
7597
|
+
this._signal("changeFold", { data: fold, action: "remove" });
|
|
7469
7598
|
};
|
|
7470
7599
|
|
|
7471
7600
|
this.removeFolds = function(folds) {
|
|
@@ -7644,7 +7773,7 @@ function Folding() {
|
|
|
7644
7773
|
var placeholder = "...";
|
|
7645
7774
|
if (!range.isMultiLine()) {
|
|
7646
7775
|
placeholder = this.getTextRange(range);
|
|
7647
|
-
if(placeholder.length < 4)
|
|
7776
|
+
if (placeholder.length < 4)
|
|
7648
7777
|
return;
|
|
7649
7778
|
placeholder = placeholder.trim().substring(0, 2) + "..";
|
|
7650
7779
|
}
|
|
@@ -7661,7 +7790,7 @@ function Folding() {
|
|
|
7661
7790
|
if (dir != 1) {
|
|
7662
7791
|
do {
|
|
7663
7792
|
token = iterator.stepBackward();
|
|
7664
|
-
} while(token && re.test(token.type));
|
|
7793
|
+
} while (token && re.test(token.type));
|
|
7665
7794
|
iterator.stepForward();
|
|
7666
7795
|
}
|
|
7667
7796
|
|
|
@@ -7673,7 +7802,7 @@ function Folding() {
|
|
|
7673
7802
|
if (dir != -1) {
|
|
7674
7803
|
do {
|
|
7675
7804
|
token = iterator.stepForward();
|
|
7676
|
-
} while(token && re.test(token.type));
|
|
7805
|
+
} while (token && re.test(token.type));
|
|
7677
7806
|
token = iterator.stepBackward();
|
|
7678
7807
|
} else
|
|
7679
7808
|
token = iterator.getCurrentToken();
|
|
@@ -7742,7 +7871,7 @@ function Folding() {
|
|
|
7742
7871
|
|
|
7743
7872
|
this.off('change', this.$updateFoldWidgets);
|
|
7744
7873
|
this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);
|
|
7745
|
-
this.
|
|
7874
|
+
this._signal("changeAnnotation");
|
|
7746
7875
|
|
|
7747
7876
|
if (!foldMode || this.$foldStyle == "manual") {
|
|
7748
7877
|
this.foldWidgets = null;
|
|
@@ -7784,7 +7913,7 @@ function Folding() {
|
|
|
7784
7913
|
range: i !== -1 && range,
|
|
7785
7914
|
firstRange: firstRange
|
|
7786
7915
|
};
|
|
7787
|
-
}
|
|
7916
|
+
};
|
|
7788
7917
|
|
|
7789
7918
|
this.onFoldWidgetClick = function(row, e) {
|
|
7790
7919
|
e = e.domEvent;
|
|
@@ -7796,7 +7925,7 @@ function Folding() {
|
|
|
7796
7925
|
|
|
7797
7926
|
var range = this.$toggleFoldWidget(row, options);
|
|
7798
7927
|
if (!range) {
|
|
7799
|
-
var el = (e.target || e.srcElement)
|
|
7928
|
+
var el = (e.target || e.srcElement);
|
|
7800
7929
|
if (el && /ace_fold-widget/.test(el.className))
|
|
7801
7930
|
el.className += " ace_invalid";
|
|
7802
7931
|
}
|
|
@@ -7871,15 +8000,13 @@ function Folding() {
|
|
|
7871
8000
|
}
|
|
7872
8001
|
};
|
|
7873
8002
|
|
|
7874
|
-
this.updateFoldWidgets = function(
|
|
7875
|
-
var
|
|
7876
|
-
var
|
|
7877
|
-
var firstRow = range.start.row;
|
|
7878
|
-
var len = range.end.row - firstRow;
|
|
8003
|
+
this.updateFoldWidgets = function(delta) {
|
|
8004
|
+
var firstRow = delta.start.row;
|
|
8005
|
+
var len = delta.end.row - firstRow;
|
|
7879
8006
|
|
|
7880
8007
|
if (len === 0) {
|
|
7881
8008
|
this.foldWidgets[firstRow] = null;
|
|
7882
|
-
} else if (delta.action ==
|
|
8009
|
+
} else if (delta.action == 'remove') {
|
|
7883
8010
|
this.foldWidgets.splice(firstRow, len + 1, null);
|
|
7884
8011
|
} else {
|
|
7885
8012
|
var args = Array(len + 1);
|
|
@@ -7893,7 +8020,7 @@ function Folding() {
|
|
|
7893
8020
|
if (this.foldWidgets.length > rows.first)
|
|
7894
8021
|
this.foldWidgets.splice(rows.first, this.foldWidgets.length);
|
|
7895
8022
|
}
|
|
7896
|
-
}
|
|
8023
|
+
};
|
|
7897
8024
|
}
|
|
7898
8025
|
|
|
7899
8026
|
exports.Folding = Folding;
|
|
@@ -7989,7 +8116,7 @@ function BracketMatch() {
|
|
|
7989
8116
|
typeRe = new RegExp(
|
|
7990
8117
|
"(\\.?" +
|
|
7991
8118
|
token.type.replace(".", "\\.").replace("rparen", ".paren")
|
|
7992
|
-
.replace(/\b(?:end
|
|
8119
|
+
.replace(/\b(?:end)\b/, "(?:start|begin|end)")
|
|
7993
8120
|
+ ")+"
|
|
7994
8121
|
);
|
|
7995
8122
|
}
|
|
@@ -8041,7 +8168,7 @@ function BracketMatch() {
|
|
|
8041
8168
|
typeRe = new RegExp(
|
|
8042
8169
|
"(\\.?" +
|
|
8043
8170
|
token.type.replace(".", "\\.").replace("lparen", ".paren")
|
|
8044
|
-
.replace(/\b(?:
|
|
8171
|
+
.replace(/\b(?:start|begin)\b/, "(?:start|begin|end)")
|
|
8045
8172
|
+ ")+"
|
|
8046
8173
|
);
|
|
8047
8174
|
}
|
|
@@ -8107,7 +8234,7 @@ var EditSession = function(text, mode) {
|
|
|
8107
8234
|
this.$foldData = [];
|
|
8108
8235
|
this.$foldData.toString = function() {
|
|
8109
8236
|
return this.join("\n");
|
|
8110
|
-
}
|
|
8237
|
+
};
|
|
8111
8238
|
this.on("changeFold", this.onChangeFold.bind(this));
|
|
8112
8239
|
this.$onChange = this.onChange.bind(this);
|
|
8113
8240
|
|
|
@@ -8188,13 +8315,12 @@ var EditSession = function(text, mode) {
|
|
|
8188
8315
|
this.$resetRowCache(fold.start.row);
|
|
8189
8316
|
};
|
|
8190
8317
|
|
|
8191
|
-
this.onChange = function(
|
|
8192
|
-
var delta = e.data;
|
|
8318
|
+
this.onChange = function(delta) {
|
|
8193
8319
|
this.$modified = true;
|
|
8194
8320
|
|
|
8195
|
-
this.$resetRowCache(delta.
|
|
8321
|
+
this.$resetRowCache(delta.start.row);
|
|
8196
8322
|
|
|
8197
|
-
var removedFolds = this.$updateInternalDataOnChange(
|
|
8323
|
+
var removedFolds = this.$updateInternalDataOnChange(delta);
|
|
8198
8324
|
if (!this.$fromUndo && this.$undoManager && !delta.ignore) {
|
|
8199
8325
|
this.$deltasDoc.push(delta);
|
|
8200
8326
|
if (removedFolds && removedFolds.length != 0) {
|
|
@@ -8208,7 +8334,7 @@ var EditSession = function(text, mode) {
|
|
|
8208
8334
|
}
|
|
8209
8335
|
|
|
8210
8336
|
this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);
|
|
8211
|
-
this._signal("change",
|
|
8337
|
+
this._signal("change", delta);
|
|
8212
8338
|
};
|
|
8213
8339
|
this.setValue = function(text) {
|
|
8214
8340
|
this.doc.setValue(text);
|
|
@@ -8724,6 +8850,9 @@ var EditSession = function(text, mode) {
|
|
|
8724
8850
|
this.remove = function(range) {
|
|
8725
8851
|
return this.doc.remove(range);
|
|
8726
8852
|
};
|
|
8853
|
+
this.removeFullLines = function(firstRow, lastRow){
|
|
8854
|
+
return this.doc.removeFullLines(firstRow, lastRow);
|
|
8855
|
+
};
|
|
8727
8856
|
this.undoChanges = function(deltas, dontSelect) {
|
|
8728
8857
|
if (!deltas.length)
|
|
8729
8858
|
return;
|
|
@@ -8776,39 +8905,36 @@ var EditSession = function(text, mode) {
|
|
|
8776
8905
|
|
|
8777
8906
|
this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {
|
|
8778
8907
|
function isInsert(delta) {
|
|
8779
|
-
|
|
8780
|
-
delta.action === "insertText" || delta.action === "insertLines";
|
|
8781
|
-
return isUndo ? !insert : insert;
|
|
8908
|
+
return isUndo ? delta.action !== "insert" : delta.action === "insert";
|
|
8782
8909
|
}
|
|
8783
8910
|
|
|
8784
8911
|
var delta = deltas[0];
|
|
8785
8912
|
var range, point;
|
|
8786
8913
|
var lastDeltaIsInsert = false;
|
|
8787
8914
|
if (isInsert(delta)) {
|
|
8788
|
-
range = Range.fromPoints(delta.
|
|
8915
|
+
range = Range.fromPoints(delta.start, delta.end);
|
|
8789
8916
|
lastDeltaIsInsert = true;
|
|
8790
8917
|
} else {
|
|
8791
|
-
range = Range.fromPoints(delta.
|
|
8918
|
+
range = Range.fromPoints(delta.start, delta.start);
|
|
8792
8919
|
lastDeltaIsInsert = false;
|
|
8793
8920
|
}
|
|
8794
8921
|
|
|
8795
8922
|
for (var i = 1; i < deltas.length; i++) {
|
|
8796
8923
|
delta = deltas[i];
|
|
8797
8924
|
if (isInsert(delta)) {
|
|
8798
|
-
point = delta.
|
|
8925
|
+
point = delta.start;
|
|
8799
8926
|
if (range.compare(point.row, point.column) == -1) {
|
|
8800
|
-
range.setStart(
|
|
8927
|
+
range.setStart(point);
|
|
8801
8928
|
}
|
|
8802
|
-
point = delta.
|
|
8929
|
+
point = delta.end;
|
|
8803
8930
|
if (range.compare(point.row, point.column) == 1) {
|
|
8804
|
-
range.setEnd(
|
|
8931
|
+
range.setEnd(point);
|
|
8805
8932
|
}
|
|
8806
8933
|
lastDeltaIsInsert = true;
|
|
8807
8934
|
} else {
|
|
8808
|
-
point = delta.
|
|
8935
|
+
point = delta.start;
|
|
8809
8936
|
if (range.compare(point.row, point.column) == -1) {
|
|
8810
|
-
range =
|
|
8811
|
-
Range.fromPoints(delta.range.start, delta.range.start);
|
|
8937
|
+
range = Range.fromPoints(delta.start, delta.start);
|
|
8812
8938
|
}
|
|
8813
8939
|
lastDeltaIsInsert = false;
|
|
8814
8940
|
}
|
|
@@ -8876,7 +9002,7 @@ var EditSession = function(text, mode) {
|
|
|
8876
9002
|
this.indentRows = function(startRow, endRow, indentString) {
|
|
8877
9003
|
indentString = indentString.replace(/\t/g, this.getTabString());
|
|
8878
9004
|
for (var row=startRow; row<=endRow; row++)
|
|
8879
|
-
this.
|
|
9005
|
+
this.doc.insertInLine({row: row, column: 0}, indentString);
|
|
8880
9006
|
};
|
|
8881
9007
|
this.outdentRows = function (range) {
|
|
8882
9008
|
var rowRange = range.collapseRows();
|
|
@@ -8926,11 +9052,11 @@ var EditSession = function(text, mode) {
|
|
|
8926
9052
|
x.end.row += diff;
|
|
8927
9053
|
return x;
|
|
8928
9054
|
});
|
|
8929
|
-
|
|
9055
|
+
|
|
8930
9056
|
var lines = dir == 0
|
|
8931
9057
|
? this.doc.getLines(firstRow, lastRow)
|
|
8932
|
-
: this.doc.
|
|
8933
|
-
this.doc.
|
|
9058
|
+
: this.doc.removeFullLines(firstRow, lastRow);
|
|
9059
|
+
this.doc.insertFullLines(firstRow+diff, lines);
|
|
8934
9060
|
folds.length && this.addFolds(folds);
|
|
8935
9061
|
return diff;
|
|
8936
9062
|
};
|
|
@@ -9072,34 +9198,23 @@ var EditSession = function(text, mode) {
|
|
|
9072
9198
|
};
|
|
9073
9199
|
};
|
|
9074
9200
|
|
|
9075
|
-
this.$updateInternalDataOnChange = function(
|
|
9201
|
+
this.$updateInternalDataOnChange = function(delta) {
|
|
9076
9202
|
var useWrapMode = this.$useWrapMode;
|
|
9077
|
-
var
|
|
9078
|
-
var
|
|
9079
|
-
var
|
|
9080
|
-
var
|
|
9081
|
-
var
|
|
9082
|
-
var
|
|
9203
|
+
var action = delta.action;
|
|
9204
|
+
var start = delta.start;
|
|
9205
|
+
var end = delta.end;
|
|
9206
|
+
var firstRow = start.row;
|
|
9207
|
+
var lastRow = end.row;
|
|
9208
|
+
var len = lastRow - firstRow;
|
|
9083
9209
|
var removedFolds = null;
|
|
9084
|
-
|
|
9085
|
-
if (action.indexOf("Lines") != -1) {
|
|
9086
|
-
if (action == "insertLines") {
|
|
9087
|
-
lastRow = firstRow + (e.data.lines.length);
|
|
9088
|
-
} else {
|
|
9089
|
-
lastRow = firstRow;
|
|
9090
|
-
}
|
|
9091
|
-
len = e.data.lines ? e.data.lines.length : lastRow - firstRow;
|
|
9092
|
-
} else {
|
|
9093
|
-
len = lastRow - firstRow;
|
|
9094
|
-
}
|
|
9095
|
-
|
|
9210
|
+
|
|
9096
9211
|
this.$updating = true;
|
|
9097
9212
|
if (len != 0) {
|
|
9098
|
-
if (action
|
|
9213
|
+
if (action === "remove") {
|
|
9099
9214
|
this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len);
|
|
9100
9215
|
|
|
9101
9216
|
var foldLines = this.$foldData;
|
|
9102
|
-
removedFolds = this.getFoldsInRange(
|
|
9217
|
+
removedFolds = this.getFoldsInRange(delta);
|
|
9103
9218
|
this.removeFolds(removedFolds);
|
|
9104
9219
|
|
|
9105
9220
|
var foldLine = this.getFoldLine(end.row);
|
|
@@ -9156,9 +9271,9 @@ var EditSession = function(text, mode) {
|
|
|
9156
9271
|
}
|
|
9157
9272
|
}
|
|
9158
9273
|
} else {
|
|
9159
|
-
len = Math.abs(
|
|
9160
|
-
if (action
|
|
9161
|
-
removedFolds = this.getFoldsInRange(
|
|
9274
|
+
len = Math.abs(delta.start.column - delta.end.column);
|
|
9275
|
+
if (action === "remove") {
|
|
9276
|
+
removedFolds = this.getFoldsInRange(delta);
|
|
9162
9277
|
this.removeFolds(removedFolds);
|
|
9163
9278
|
|
|
9164
9279
|
len = -len;
|
|
@@ -9240,7 +9355,7 @@ var EditSession = function(text, mode) {
|
|
|
9240
9355
|
TAB_SPACE = 12;
|
|
9241
9356
|
|
|
9242
9357
|
|
|
9243
|
-
this.$computeWrapSplits = function(tokens, wrapLimit) {
|
|
9358
|
+
this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {
|
|
9244
9359
|
if (tokens.length == 0) {
|
|
9245
9360
|
return [];
|
|
9246
9361
|
}
|
|
@@ -9251,6 +9366,31 @@ var EditSession = function(text, mode) {
|
|
|
9251
9366
|
|
|
9252
9367
|
var isCode = this.$wrapAsCode;
|
|
9253
9368
|
|
|
9369
|
+
var indentedSoftWrap = this.$indentedSoftWrap;
|
|
9370
|
+
var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)
|
|
9371
|
+
|| indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);
|
|
9372
|
+
|
|
9373
|
+
function getWrapIndent() {
|
|
9374
|
+
var indentation = 0;
|
|
9375
|
+
if (maxIndent === 0)
|
|
9376
|
+
return indentation;
|
|
9377
|
+
if (indentedSoftWrap) {
|
|
9378
|
+
for (var i = 0; i < tokens.length; i++) {
|
|
9379
|
+
var token = tokens[i];
|
|
9380
|
+
if (token == SPACE)
|
|
9381
|
+
indentation += 1;
|
|
9382
|
+
else if (token == TAB)
|
|
9383
|
+
indentation += tabSize;
|
|
9384
|
+
else if (token == TAB_SPACE)
|
|
9385
|
+
continue;
|
|
9386
|
+
else
|
|
9387
|
+
break;
|
|
9388
|
+
}
|
|
9389
|
+
}
|
|
9390
|
+
if (isCode && indentedSoftWrap !== false)
|
|
9391
|
+
indentation += tabSize;
|
|
9392
|
+
return Math.min(indentation, maxIndent);
|
|
9393
|
+
}
|
|
9254
9394
|
function addSplit(screenPos) {
|
|
9255
9395
|
var displayed = tokens.slice(lastSplit, screenPos);
|
|
9256
9396
|
var len = displayed.length;
|
|
@@ -9262,13 +9402,17 @@ var EditSession = function(text, mode) {
|
|
|
9262
9402
|
len -= 1;
|
|
9263
9403
|
});
|
|
9264
9404
|
|
|
9405
|
+
if (!splits.length) {
|
|
9406
|
+
indent = getWrapIndent();
|
|
9407
|
+
splits.indent = indent;
|
|
9408
|
+
}
|
|
9265
9409
|
lastDocSplit += len;
|
|
9266
9410
|
splits.push(lastDocSplit);
|
|
9267
9411
|
lastSplit = screenPos;
|
|
9268
9412
|
}
|
|
9269
|
-
|
|
9270
|
-
while (displayLength - lastSplit > wrapLimit) {
|
|
9271
|
-
var split = lastSplit + wrapLimit;
|
|
9413
|
+
var indent = 0;
|
|
9414
|
+
while (displayLength - lastSplit > wrapLimit - indent) {
|
|
9415
|
+
var split = lastSplit + wrapLimit - indent;
|
|
9272
9416
|
if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {
|
|
9273
9417
|
addSplit(split);
|
|
9274
9418
|
continue;
|
|
@@ -9295,7 +9439,7 @@ var EditSession = function(text, mode) {
|
|
|
9295
9439
|
addSplit(split);
|
|
9296
9440
|
continue;
|
|
9297
9441
|
}
|
|
9298
|
-
var minSplit = Math.max(split - (
|
|
9442
|
+
var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);
|
|
9299
9443
|
while (split > minSplit && tokens[split] < PLACEHOLDER_START) {
|
|
9300
9444
|
split --;
|
|
9301
9445
|
}
|
|
@@ -9318,7 +9462,7 @@ var EditSession = function(text, mode) {
|
|
|
9318
9462
|
split = lastSplit + wrapLimit;
|
|
9319
9463
|
if (tokens[split] == CHAR_EXT)
|
|
9320
9464
|
split--;
|
|
9321
|
-
addSplit(split);
|
|
9465
|
+
addSplit(split - indent);
|
|
9322
9466
|
}
|
|
9323
9467
|
return splits;
|
|
9324
9468
|
};
|
|
@@ -9394,6 +9538,16 @@ var EditSession = function(text, mode) {
|
|
|
9394
9538
|
return this.$wrapData[row].length + 1;
|
|
9395
9539
|
}
|
|
9396
9540
|
};
|
|
9541
|
+
|
|
9542
|
+
this.getRowWrapIndent = function(screenRow) {
|
|
9543
|
+
if (this.$useWrapMode) {
|
|
9544
|
+
var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);
|
|
9545
|
+
var splits = this.$wrapData[pos.row];
|
|
9546
|
+
return splits.length && splits[0] < pos.column ? splits.indent : 0;
|
|
9547
|
+
} else {
|
|
9548
|
+
return 0;
|
|
9549
|
+
}
|
|
9550
|
+
}
|
|
9397
9551
|
this.getScreenLastRowColumn = function(screenRow) {
|
|
9398
9552
|
var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);
|
|
9399
9553
|
return this.documentToScreenColumn(pos.row, pos.column);
|
|
@@ -9484,20 +9638,21 @@ var EditSession = function(text, mode) {
|
|
|
9484
9638
|
line = this.getLine(docRow);
|
|
9485
9639
|
foldLine = null;
|
|
9486
9640
|
}
|
|
9487
|
-
|
|
9641
|
+
var wrapIndent = 0;
|
|
9488
9642
|
if (this.$useWrapMode) {
|
|
9489
9643
|
var splits = this.$wrapData[docRow];
|
|
9490
9644
|
if (splits) {
|
|
9491
9645
|
var splitIndex = Math.floor(screenRow - row);
|
|
9492
9646
|
column = splits[splitIndex];
|
|
9493
9647
|
if(splitIndex > 0 && splits.length) {
|
|
9648
|
+
wrapIndent = splits.indent;
|
|
9494
9649
|
docColumn = splits[splitIndex - 1] || splits[splits.length - 1];
|
|
9495
9650
|
line = line.substring(docColumn);
|
|
9496
9651
|
}
|
|
9497
9652
|
}
|
|
9498
9653
|
}
|
|
9499
9654
|
|
|
9500
|
-
docColumn += this.$getStringScreenWidth(line, screenColumn)[1];
|
|
9655
|
+
docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];
|
|
9501
9656
|
if (this.$useWrapMode && docColumn >= column)
|
|
9502
9657
|
docColumn = column - 1;
|
|
9503
9658
|
|
|
@@ -9569,6 +9724,7 @@ var EditSession = function(text, mode) {
|
|
|
9569
9724
|
textLine = this.getLine(docRow).substring(0, docColumn);
|
|
9570
9725
|
foldStartRow = docRow;
|
|
9571
9726
|
}
|
|
9727
|
+
var wrapIndent = 0;
|
|
9572
9728
|
if (this.$useWrapMode) {
|
|
9573
9729
|
var wrapRow = this.$wrapData[foldStartRow];
|
|
9574
9730
|
if (wrapRow) {
|
|
@@ -9580,12 +9736,13 @@ var EditSession = function(text, mode) {
|
|
|
9580
9736
|
textLine = textLine.substring(
|
|
9581
9737
|
wrapRow[screenRowOffset - 1] || 0, textLine.length
|
|
9582
9738
|
);
|
|
9739
|
+
wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;
|
|
9583
9740
|
}
|
|
9584
9741
|
}
|
|
9585
9742
|
|
|
9586
9743
|
return {
|
|
9587
9744
|
row: screenRow,
|
|
9588
|
-
column: this.$getStringScreenWidth(textLine)[0]
|
|
9745
|
+
column: wrapIndent + this.$getStringScreenWidth(textLine)[0]
|
|
9589
9746
|
};
|
|
9590
9747
|
};
|
|
9591
9748
|
this.documentToScreenColumn = function(row, docColumn) {
|
|
@@ -9627,6 +9784,29 @@ var EditSession = function(text, mode) {
|
|
|
9627
9784
|
return screenRows;
|
|
9628
9785
|
};
|
|
9629
9786
|
this.$setFontMetrics = function(fm) {
|
|
9787
|
+
if (!this.$enableVarChar) return;
|
|
9788
|
+
this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {
|
|
9789
|
+
if (maxScreenColumn === 0)
|
|
9790
|
+
return [0, 0];
|
|
9791
|
+
if (!maxScreenColumn)
|
|
9792
|
+
maxScreenColumn = Infinity;
|
|
9793
|
+
screenColumn = screenColumn || 0;
|
|
9794
|
+
|
|
9795
|
+
var c, column;
|
|
9796
|
+
for (column = 0; column < str.length; column++) {
|
|
9797
|
+
c = str.charAt(column);
|
|
9798
|
+
if (c === "\t") {
|
|
9799
|
+
screenColumn += this.getScreenTabSize(screenColumn);
|
|
9800
|
+
} else {
|
|
9801
|
+
screenColumn += fm.getCharacterWidth(c);
|
|
9802
|
+
}
|
|
9803
|
+
if (screenColumn > maxScreenColumn) {
|
|
9804
|
+
break;
|
|
9805
|
+
}
|
|
9806
|
+
}
|
|
9807
|
+
|
|
9808
|
+
return [screenColumn, column];
|
|
9809
|
+
};
|
|
9630
9810
|
};
|
|
9631
9811
|
|
|
9632
9812
|
this.destroy = function() {
|
|
@@ -9730,6 +9910,7 @@ config.defineOptions(EditSession.prototype, "session", {
|
|
|
9730
9910
|
},
|
|
9731
9911
|
initialValue: "auto"
|
|
9732
9912
|
},
|
|
9913
|
+
indentedSoftWrap: { initialValue: true },
|
|
9733
9914
|
firstLineNumber: {
|
|
9734
9915
|
set: function() {this._signal("changeBreakpoint");},
|
|
9735
9916
|
initialValue: 1
|
|
@@ -10135,9 +10316,12 @@ MultiHashHandler.prototype = HashHandler.prototype;
|
|
|
10135
10316
|
}
|
|
10136
10317
|
};
|
|
10137
10318
|
|
|
10138
|
-
this.bindKey = function(key, command,
|
|
10139
|
-
if (typeof key == "object")
|
|
10319
|
+
this.bindKey = function(key, command, position) {
|
|
10320
|
+
if (typeof key == "object") {
|
|
10321
|
+
if (position == undefined)
|
|
10322
|
+
position = key.position;
|
|
10140
10323
|
key = key[this.platform];
|
|
10324
|
+
}
|
|
10141
10325
|
if (!key)
|
|
10142
10326
|
return;
|
|
10143
10327
|
if (typeof command == "function")
|
|
@@ -10158,11 +10342,15 @@ MultiHashHandler.prototype = HashHandler.prototype;
|
|
|
10158
10342
|
}
|
|
10159
10343
|
var binding = this.parseKeys(keyPart);
|
|
10160
10344
|
var id = KEY_MODS[binding.hashId] + binding.key;
|
|
10161
|
-
this._addCommandToBinding(chain + id, command,
|
|
10345
|
+
this._addCommandToBinding(chain + id, command, position);
|
|
10162
10346
|
}, this);
|
|
10163
10347
|
};
|
|
10164
10348
|
|
|
10165
|
-
|
|
10349
|
+
function getPosition(command) {
|
|
10350
|
+
return typeof command == "object" && command.bindKey
|
|
10351
|
+
&& command.bindKey.position || 0;
|
|
10352
|
+
}
|
|
10353
|
+
this._addCommandToBinding = function(keyId, command, position) {
|
|
10166
10354
|
var ckb = this.commandKeyBinding, i;
|
|
10167
10355
|
if (!command) {
|
|
10168
10356
|
delete ckb[keyId];
|
|
@@ -10174,11 +10362,21 @@ MultiHashHandler.prototype = HashHandler.prototype;
|
|
|
10174
10362
|
} else if ((i = ckb[keyId].indexOf(command)) != -1) {
|
|
10175
10363
|
ckb[keyId].splice(i, 1);
|
|
10176
10364
|
}
|
|
10177
|
-
|
|
10178
|
-
if (
|
|
10179
|
-
|
|
10180
|
-
|
|
10181
|
-
|
|
10365
|
+
|
|
10366
|
+
if (typeof position != "number") {
|
|
10367
|
+
if (position || command.isDefault)
|
|
10368
|
+
position = -100;
|
|
10369
|
+
else
|
|
10370
|
+
position = getPosition(command);
|
|
10371
|
+
}
|
|
10372
|
+
var commands = ckb[keyId];
|
|
10373
|
+
for (i = 0; i < commands.length; i++) {
|
|
10374
|
+
var other = commands[i];
|
|
10375
|
+
var otherPos = getPosition(other);
|
|
10376
|
+
if (otherPos > position)
|
|
10377
|
+
break;
|
|
10378
|
+
}
|
|
10379
|
+
commands.splice(i, 0, command);
|
|
10182
10380
|
}
|
|
10183
10381
|
};
|
|
10184
10382
|
|
|
@@ -10250,6 +10448,7 @@ MultiHashHandler.prototype = HashHandler.prototype;
|
|
|
10250
10448
|
};
|
|
10251
10449
|
|
|
10252
10450
|
this.handleKeyboard = function(data, hashId, keyString, keyCode) {
|
|
10451
|
+
if (keyCode < 0) return;
|
|
10253
10452
|
var key = KEY_MODS[hashId] + keyString;
|
|
10254
10453
|
var command = this.commandKeyBinding[key];
|
|
10255
10454
|
if (data.$keyChain) {
|
|
@@ -10264,10 +10463,18 @@ MultiHashHandler.prototype = HashHandler.prototype;
|
|
|
10264
10463
|
}
|
|
10265
10464
|
}
|
|
10266
10465
|
|
|
10267
|
-
if (data.$keyChain
|
|
10268
|
-
|
|
10466
|
+
if (data.$keyChain) {
|
|
10467
|
+
if ((!hashId || hashId == 4) && keyString.length == 1)
|
|
10468
|
+
data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input
|
|
10469
|
+
else if (hashId == -1 || keyCode > 0)
|
|
10470
|
+
data.$keyChain = ""; // reset keyChain
|
|
10471
|
+
}
|
|
10269
10472
|
return {command: command};
|
|
10270
10473
|
};
|
|
10474
|
+
|
|
10475
|
+
this.getStatusText = function(editor, data) {
|
|
10476
|
+
return data.$keyChain || "";
|
|
10477
|
+
};
|
|
10271
10478
|
|
|
10272
10479
|
}).call(HashHandler.prototype);
|
|
10273
10480
|
|
|
@@ -10772,6 +10979,11 @@ exports.commands = [{
|
|
|
10772
10979
|
exec: function() {},
|
|
10773
10980
|
passEvent: true,
|
|
10774
10981
|
readOnly: true
|
|
10982
|
+
}, {
|
|
10983
|
+
name: "copy",
|
|
10984
|
+
exec: function(editor) {
|
|
10985
|
+
},
|
|
10986
|
+
readOnly: true
|
|
10775
10987
|
},
|
|
10776
10988
|
{
|
|
10777
10989
|
name: "cut",
|
|
@@ -10786,6 +10998,12 @@ exports.commands = [{
|
|
|
10786
10998
|
},
|
|
10787
10999
|
scrollIntoView: "cursor",
|
|
10788
11000
|
multiSelectAction: "forEach"
|
|
11001
|
+
}, {
|
|
11002
|
+
name: "paste",
|
|
11003
|
+
exec: function(editor, args) {
|
|
11004
|
+
editor.$handlePaste(args);
|
|
11005
|
+
},
|
|
11006
|
+
scrollIntoView: "cursor"
|
|
10789
11007
|
}, {
|
|
10790
11008
|
name: "removeline",
|
|
10791
11009
|
bindKey: bindKey("Ctrl-D", "Command-D"),
|
|
@@ -11177,8 +11395,11 @@ var Editor = function(renderer, session) {
|
|
|
11177
11395
|
var command = this.curOp.command;
|
|
11178
11396
|
if (command.name && this.$blockScrolling > 0)
|
|
11179
11397
|
this.$blockScrolling--;
|
|
11180
|
-
|
|
11181
|
-
|
|
11398
|
+
var scrollIntoView = command && command.scrollIntoView;
|
|
11399
|
+
if (scrollIntoView) {
|
|
11400
|
+
switch (scrollIntoView) {
|
|
11401
|
+
case "center-animate":
|
|
11402
|
+
scrollIntoView = "animate";
|
|
11182
11403
|
case "center":
|
|
11183
11404
|
this.renderer.scrollCursorIntoView(null, 0.5);
|
|
11184
11405
|
break;
|
|
@@ -11196,7 +11417,7 @@ var Editor = function(renderer, session) {
|
|
|
11196
11417
|
default:
|
|
11197
11418
|
break;
|
|
11198
11419
|
}
|
|
11199
|
-
if (
|
|
11420
|
+
if (scrollIntoView == "animate")
|
|
11200
11421
|
this.renderer.animateScrolling(this.curOp.scrollTop);
|
|
11201
11422
|
}
|
|
11202
11423
|
|
|
@@ -11260,6 +11481,8 @@ var Editor = function(renderer, session) {
|
|
|
11260
11481
|
this.setSession = function(session) {
|
|
11261
11482
|
if (this.session == session)
|
|
11262
11483
|
return;
|
|
11484
|
+
if (this.curOp) this.endOperation();
|
|
11485
|
+
this.curOp = {};
|
|
11263
11486
|
|
|
11264
11487
|
var oldSession = this.session;
|
|
11265
11488
|
if (oldSession) {
|
|
@@ -11359,6 +11582,8 @@ var Editor = function(renderer, session) {
|
|
|
11359
11582
|
oldSession: oldSession
|
|
11360
11583
|
});
|
|
11361
11584
|
|
|
11585
|
+
this.curOp = null;
|
|
11586
|
+
|
|
11362
11587
|
oldSession && oldSession._signal("changeEditor", {oldEditor: this});
|
|
11363
11588
|
session && session._signal("changeEditor", {editor: this});
|
|
11364
11589
|
};
|
|
@@ -11543,18 +11768,12 @@ var Editor = function(renderer, session) {
|
|
|
11543
11768
|
this.$cursorChange = function() {
|
|
11544
11769
|
this.renderer.updateCursor();
|
|
11545
11770
|
};
|
|
11546
|
-
this.onDocumentChange = function(
|
|
11547
|
-
var
|
|
11548
|
-
var
|
|
11549
|
-
|
|
11771
|
+
this.onDocumentChange = function(delta) {
|
|
11772
|
+
var wrap = this.session.$useWrapMode;
|
|
11773
|
+
var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);
|
|
11774
|
+
this.renderer.updateLines(delta.start.row, lastRow, wrap);
|
|
11550
11775
|
|
|
11551
|
-
|
|
11552
|
-
lastRow = range.end.row;
|
|
11553
|
-
else
|
|
11554
|
-
lastRow = Infinity;
|
|
11555
|
-
this.renderer.updateLines(range.start.row, lastRow, this.session.$useWrapMode);
|
|
11556
|
-
|
|
11557
|
-
this._signal("change", e);
|
|
11776
|
+
this._signal("change", delta);
|
|
11558
11777
|
this.$cursorChange();
|
|
11559
11778
|
this.$updateHighlightActiveLine();
|
|
11560
11779
|
};
|
|
@@ -11719,13 +11938,16 @@ var Editor = function(renderer, session) {
|
|
|
11719
11938
|
this.onCut = function() {
|
|
11720
11939
|
this.commands.exec("cut", this);
|
|
11721
11940
|
};
|
|
11722
|
-
this.onPaste = function(text) {
|
|
11723
|
-
|
|
11724
|
-
|
|
11725
|
-
|
|
11726
|
-
|
|
11941
|
+
this.onPaste = function(text, event) {
|
|
11942
|
+
var e = {text: text, event: event};
|
|
11943
|
+
this.commands.exec("paste", this, e);
|
|
11944
|
+
};
|
|
11945
|
+
|
|
11946
|
+
this.$handlePaste = function(e) {
|
|
11947
|
+
if (typeof e == "string")
|
|
11948
|
+
e = {text: e};
|
|
11727
11949
|
this._signal("paste", e);
|
|
11728
|
-
text = e.text;
|
|
11950
|
+
var text = e.text;
|
|
11729
11951
|
if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {
|
|
11730
11952
|
this.insert(text);
|
|
11731
11953
|
} else {
|
|
@@ -11743,7 +11965,6 @@ var Editor = function(renderer, session) {
|
|
|
11743
11965
|
this.session.insert(range.start, lines[i]);
|
|
11744
11966
|
}
|
|
11745
11967
|
}
|
|
11746
|
-
this.renderer.scrollCursorIntoView();
|
|
11747
11968
|
};
|
|
11748
11969
|
|
|
11749
11970
|
this.execCommand = function(command, args) {
|
|
@@ -12186,15 +12407,7 @@ var Editor = function(renderer, session) {
|
|
|
12186
12407
|
};
|
|
12187
12408
|
this.removeLines = function() {
|
|
12188
12409
|
var rows = this.$getSelectedRows();
|
|
12189
|
-
|
|
12190
|
-
if (rows.first === 0 || rows.last+1 < this.session.getLength())
|
|
12191
|
-
range = new Range(rows.first, 0, rows.last+1, 0);
|
|
12192
|
-
else
|
|
12193
|
-
range = new Range(
|
|
12194
|
-
rows.first-1, this.session.getLine(rows.first-1).length,
|
|
12195
|
-
rows.last, this.session.getLine(rows.last).length
|
|
12196
|
-
);
|
|
12197
|
-
this.session.remove(range);
|
|
12410
|
+
this.session.removeFullLines(rows.first, rows.last);
|
|
12198
12411
|
this.clearSelection();
|
|
12199
12412
|
};
|
|
12200
12413
|
|
|
@@ -12901,6 +13114,7 @@ config.defineOptions(Editor.prototype, "editor", {
|
|
|
12901
13114
|
useSoftTabs: "session",
|
|
12902
13115
|
tabSize: "session",
|
|
12903
13116
|
wrap: "session",
|
|
13117
|
+
indentedSoftWrap: "session",
|
|
12904
13118
|
foldStyle: "session",
|
|
12905
13119
|
mode: "session"
|
|
12906
13120
|
});
|
|
@@ -12916,42 +13130,39 @@ var UndoManager = function() {
|
|
|
12916
13130
|
|
|
12917
13131
|
(function() {
|
|
12918
13132
|
this.execute = function(options) {
|
|
12919
|
-
var
|
|
13133
|
+
var deltaSets = options.args[0];
|
|
12920
13134
|
this.$doc = options.args[1];
|
|
12921
13135
|
if (options.merge && this.hasUndo()){
|
|
12922
13136
|
this.dirtyCounter--;
|
|
12923
|
-
|
|
13137
|
+
deltaSets = this.$undoStack.pop().concat(deltaSets);
|
|
12924
13138
|
}
|
|
12925
|
-
this.$undoStack.push(
|
|
13139
|
+
this.$undoStack.push(deltaSets);
|
|
12926
13140
|
this.$redoStack = [];
|
|
12927
|
-
|
|
12928
13141
|
if (this.dirtyCounter < 0) {
|
|
12929
13142
|
this.dirtyCounter = NaN;
|
|
12930
13143
|
}
|
|
12931
13144
|
this.dirtyCounter++;
|
|
12932
13145
|
};
|
|
12933
13146
|
this.undo = function(dontSelect) {
|
|
12934
|
-
var
|
|
13147
|
+
var deltaSets = this.$undoStack.pop();
|
|
12935
13148
|
var undoSelectionRange = null;
|
|
12936
|
-
if (
|
|
12937
|
-
undoSelectionRange =
|
|
12938
|
-
|
|
12939
|
-
this.$redoStack.push(deltas);
|
|
13149
|
+
if (deltaSets) {
|
|
13150
|
+
undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);
|
|
13151
|
+
this.$redoStack.push(deltaSets);
|
|
12940
13152
|
this.dirtyCounter--;
|
|
12941
13153
|
}
|
|
12942
13154
|
|
|
12943
13155
|
return undoSelectionRange;
|
|
12944
13156
|
};
|
|
12945
13157
|
this.redo = function(dontSelect) {
|
|
12946
|
-
var
|
|
13158
|
+
var deltaSets = this.$redoStack.pop();
|
|
12947
13159
|
var redoSelectionRange = null;
|
|
12948
|
-
if (
|
|
13160
|
+
if (deltaSets) {
|
|
12949
13161
|
redoSelectionRange =
|
|
12950
|
-
this.$doc.redoChanges(
|
|
12951
|
-
this.$undoStack.push(
|
|
13162
|
+
this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);
|
|
13163
|
+
this.$undoStack.push(deltaSets);
|
|
12952
13164
|
this.dirtyCounter++;
|
|
12953
13165
|
}
|
|
12954
|
-
|
|
12955
13166
|
return redoSelectionRange;
|
|
12956
13167
|
};
|
|
12957
13168
|
this.reset = function() {
|
|
@@ -12971,7 +13182,48 @@ var UndoManager = function() {
|
|
|
12971
13182
|
this.isClean = function() {
|
|
12972
13183
|
return this.dirtyCounter === 0;
|
|
12973
13184
|
};
|
|
12974
|
-
|
|
13185
|
+
this.$serializeDeltas = function(deltaSets) {
|
|
13186
|
+
return cloneDeltaSetsObj(deltaSets, $serializeDelta);
|
|
13187
|
+
};
|
|
13188
|
+
this.$deserializeDeltas = function(deltaSets) {
|
|
13189
|
+
return cloneDeltaSetsObj(deltaSets, $deserializeDelta);
|
|
13190
|
+
};
|
|
13191
|
+
|
|
13192
|
+
function $serializeDelta(delta){
|
|
13193
|
+
return {
|
|
13194
|
+
action: delta.action,
|
|
13195
|
+
start: delta.start,
|
|
13196
|
+
end: delta.end,
|
|
13197
|
+
lines: delta.lines.length == 1 ? null : delta.lines,
|
|
13198
|
+
text: delta.lines.length == 1 ? delta.lines[0] : null,
|
|
13199
|
+
};
|
|
13200
|
+
}
|
|
13201
|
+
|
|
13202
|
+
function $deserializeDelta(delta) {
|
|
13203
|
+
return {
|
|
13204
|
+
action: delta.action,
|
|
13205
|
+
start: delta.start,
|
|
13206
|
+
end: delta.end,
|
|
13207
|
+
lines: delta.lines || [delta.text]
|
|
13208
|
+
};
|
|
13209
|
+
}
|
|
13210
|
+
|
|
13211
|
+
function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {
|
|
13212
|
+
var deltaSets_new = new Array(deltaSets_old.length);
|
|
13213
|
+
for (var i = 0; i < deltaSets_old.length; i++) {
|
|
13214
|
+
var deltaSet_old = deltaSets_old[i];
|
|
13215
|
+
var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)};
|
|
13216
|
+
|
|
13217
|
+
for (var j = 0; j < deltaSet_old.deltas.length; j++) {
|
|
13218
|
+
var delta_old = deltaSet_old.deltas[j];
|
|
13219
|
+
deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);
|
|
13220
|
+
}
|
|
13221
|
+
|
|
13222
|
+
deltaSets_new[i] = deltaSet_new;
|
|
13223
|
+
}
|
|
13224
|
+
return deltaSets_new;
|
|
13225
|
+
}
|
|
13226
|
+
|
|
12975
13227
|
}).call(UndoManager.prototype);
|
|
12976
13228
|
|
|
12977
13229
|
exports.UndoManager = UndoManager;
|
|
@@ -13048,15 +13300,13 @@ var Gutter = function(parentEl) {
|
|
|
13048
13300
|
}
|
|
13049
13301
|
};
|
|
13050
13302
|
|
|
13051
|
-
this.$updateAnnotations = function (
|
|
13303
|
+
this.$updateAnnotations = function (delta) {
|
|
13052
13304
|
if (!this.$annotations.length)
|
|
13053
13305
|
return;
|
|
13054
|
-
var
|
|
13055
|
-
var
|
|
13056
|
-
var firstRow = range.start.row;
|
|
13057
|
-
var len = range.end.row - firstRow;
|
|
13306
|
+
var firstRow = delta.start.row;
|
|
13307
|
+
var len = delta.end.row - firstRow;
|
|
13058
13308
|
if (len === 0) {
|
|
13059
|
-
} else if (delta.action ==
|
|
13309
|
+
} else if (delta.action == 'remove') {
|
|
13060
13310
|
this.$annotations.splice(firstRow, len + 1, null);
|
|
13061
13311
|
} else {
|
|
13062
13312
|
var args = new Array(len + 1);
|
|
@@ -13294,7 +13544,7 @@ var Marker = function(parentEl) {
|
|
|
13294
13544
|
else
|
|
13295
13545
|
this.drawMultiLineMarker(html, range, marker.clazz, config);
|
|
13296
13546
|
} else {
|
|
13297
|
-
this.drawSingleLineMarker(html, range, marker.clazz + " ace_start", config);
|
|
13547
|
+
this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config);
|
|
13298
13548
|
}
|
|
13299
13549
|
}
|
|
13300
13550
|
this.element.innerHTML = html.join("");
|
|
@@ -13303,23 +13553,30 @@ var Marker = function(parentEl) {
|
|
|
13303
13553
|
this.$getTop = function(row, layerConfig) {
|
|
13304
13554
|
return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;
|
|
13305
13555
|
};
|
|
13306
|
-
this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {
|
|
13307
|
-
var row = range.start.row;
|
|
13308
|
-
|
|
13309
|
-
var lineRange = new Range(
|
|
13310
|
-
row, range.start.column,
|
|
13311
|
-
row, this.session.getScreenLastRowColumn(row)
|
|
13312
|
-
);
|
|
13313
|
-
this.drawSingleLineMarker(stringBuilder, lineRange, clazz + " ace_start", layerConfig, 1, extraStyle);
|
|
13314
|
-
row = range.end.row;
|
|
13315
|
-
lineRange = new Range(row, 0, row, range.end.column);
|
|
13316
|
-
this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 0, extraStyle);
|
|
13317
13556
|
|
|
13318
|
-
|
|
13319
|
-
|
|
13320
|
-
|
|
13321
|
-
|
|
13322
|
-
|
|
13557
|
+
function getBorderClass(tl, tr, br, bl) {
|
|
13558
|
+
return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);
|
|
13559
|
+
}
|
|
13560
|
+
this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {
|
|
13561
|
+
var session = this.session;
|
|
13562
|
+
var start = range.start.row;
|
|
13563
|
+
var end = range.end.row;
|
|
13564
|
+
var row = start;
|
|
13565
|
+
var prev = 0;
|
|
13566
|
+
var curr = 0;
|
|
13567
|
+
var next = session.getScreenLastRowColumn(row);
|
|
13568
|
+
var lineRange = new Range(row, range.start.column, row, curr);
|
|
13569
|
+
for (; row <= end; row++) {
|
|
13570
|
+
lineRange.start.row = lineRange.end.row = row;
|
|
13571
|
+
lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);
|
|
13572
|
+
lineRange.end.column = next;
|
|
13573
|
+
prev = curr;
|
|
13574
|
+
curr = next;
|
|
13575
|
+
next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;
|
|
13576
|
+
this.drawSingleLineMarker(stringBuilder, lineRange,
|
|
13577
|
+
clazz + (row == start ? " ace_start" : "") + " ace_br"
|
|
13578
|
+
+ getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),
|
|
13579
|
+
layerConfig, row == end ? 0 : 1, extraStyle);
|
|
13323
13580
|
}
|
|
13324
13581
|
};
|
|
13325
13582
|
this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {
|
|
@@ -13330,7 +13587,7 @@ var Marker = function(parentEl) {
|
|
|
13330
13587
|
extraStyle = extraStyle || "";
|
|
13331
13588
|
|
|
13332
13589
|
stringBuilder.push(
|
|
13333
|
-
"<div class='", clazz, " ace_start' style='",
|
|
13590
|
+
"<div class='", clazz, " ace_br1 ace_start' style='",
|
|
13334
13591
|
"height:", height, "px;",
|
|
13335
13592
|
"right:0;",
|
|
13336
13593
|
"top:", top, "px;",
|
|
@@ -13340,19 +13597,21 @@ var Marker = function(parentEl) {
|
|
|
13340
13597
|
var width = range.end.column * config.characterWidth;
|
|
13341
13598
|
|
|
13342
13599
|
stringBuilder.push(
|
|
13343
|
-
"<div class='", clazz, "' style='",
|
|
13600
|
+
"<div class='", clazz, " ace_br12' style='",
|
|
13344
13601
|
"height:", height, "px;",
|
|
13345
13602
|
"width:", width, "px;",
|
|
13346
13603
|
"top:", top, "px;",
|
|
13347
13604
|
"left:", padding, "px;", extraStyle, "'></div>"
|
|
13348
13605
|
);
|
|
13349
13606
|
height = (range.end.row - range.start.row - 1) * config.lineHeight;
|
|
13350
|
-
if (height
|
|
13607
|
+
if (height <= 0)
|
|
13351
13608
|
return;
|
|
13352
13609
|
top = this.$getTop(range.start.row + 1, config);
|
|
13610
|
+
|
|
13611
|
+
var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);
|
|
13353
13612
|
|
|
13354
13613
|
stringBuilder.push(
|
|
13355
|
-
"<div class='", clazz, "' style='",
|
|
13614
|
+
"<div class='", clazz, (radiusClass ? " ace_br" + radiusClass : ""), "' style='",
|
|
13356
13615
|
"height:", height, "px;",
|
|
13357
13616
|
"right:0;",
|
|
13358
13617
|
"top:", top, "px;",
|
|
@@ -13431,7 +13690,7 @@ var Text = function(parentEl) {
|
|
|
13431
13690
|
this.EOL_CHAR_LF = "\xAC";
|
|
13432
13691
|
this.EOL_CHAR_CRLF = "\xa4";
|
|
13433
13692
|
this.EOL_CHAR = this.EOL_CHAR_LF;
|
|
13434
|
-
this.TAB_CHAR = "\
|
|
13693
|
+
this.TAB_CHAR = "\u2014"; //"\u21E5";
|
|
13435
13694
|
this.SPACE_CHAR = "\xB7";
|
|
13436
13695
|
this.$padding = 0;
|
|
13437
13696
|
|
|
@@ -13507,8 +13766,7 @@ var Text = function(parentEl) {
|
|
|
13507
13766
|
for (var i = 1; i < tabSize + 1; i++) {
|
|
13508
13767
|
if (this.showInvisibles) {
|
|
13509
13768
|
tabStr.push("<span class='ace_invisible ace_invisible_tab'>"
|
|
13510
|
-
+ this.TAB_CHAR
|
|
13511
|
-
+ lang.stringRepeat(" ", i - 1)
|
|
13769
|
+
+ lang.stringRepeat(this.TAB_CHAR, i)
|
|
13512
13770
|
+ "</span>");
|
|
13513
13771
|
} else {
|
|
13514
13772
|
tabStr.push(lang.stringRepeat(" ", i));
|
|
@@ -13524,7 +13782,7 @@ var Text = function(parentEl) {
|
|
|
13524
13782
|
spaceClass = " ace_invisible_space";
|
|
13525
13783
|
tabClass = " ace_invisible_tab";
|
|
13526
13784
|
var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);
|
|
13527
|
-
var tabContent =
|
|
13785
|
+
var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);
|
|
13528
13786
|
} else{
|
|
13529
13787
|
var spaceContent = lang.stringRepeat(" ", this.tabSize);
|
|
13530
13788
|
var tabContent = spaceContent;
|
|
@@ -13695,7 +13953,7 @@ var Text = function(parentEl) {
|
|
|
13695
13953
|
|
|
13696
13954
|
this.$renderToken = function(stringBuilder, screenColumn, token, value) {
|
|
13697
13955
|
var self = this;
|
|
13698
|
-
var replaceReg = /\t
|
|
13956
|
+
var replaceReg = /\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g;
|
|
13699
13957
|
var replaceFunc = function(c, a, b, tabIdx, idx4) {
|
|
13700
13958
|
if (a) {
|
|
13701
13959
|
return self.showInvisibles
|
|
@@ -13705,6 +13963,8 @@ var Text = function(parentEl) {
|
|
|
13705
13963
|
return "&";
|
|
13706
13964
|
} else if (c == "<") {
|
|
13707
13965
|
return "<";
|
|
13966
|
+
} else if (c == ">") {
|
|
13967
|
+
return ">";
|
|
13708
13968
|
} else if (c == "\t") {
|
|
13709
13969
|
var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);
|
|
13710
13970
|
screenColumn += tabSize - 1;
|
|
@@ -13792,6 +14052,8 @@ var Text = function(parentEl) {
|
|
|
13792
14052
|
);
|
|
13793
14053
|
}
|
|
13794
14054
|
|
|
14055
|
+
stringBuilder.push(lang.stringRepeat("\xa0", splits.indent));
|
|
14056
|
+
|
|
13795
14057
|
split ++;
|
|
13796
14058
|
screenColumn = 0;
|
|
13797
14059
|
splitChars = splits[split] || Number.MAX_VALUE;
|
|
@@ -13942,15 +14204,15 @@ define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], function
|
|
|
13942
14204
|
"use strict";
|
|
13943
14205
|
|
|
13944
14206
|
var dom = require("../lib/dom");
|
|
13945
|
-
var
|
|
14207
|
+
var isIE8;
|
|
13946
14208
|
|
|
13947
14209
|
var Cursor = function(parentEl) {
|
|
13948
14210
|
this.element = dom.createElement("div");
|
|
13949
14211
|
this.element.className = "ace_layer ace_cursor-layer";
|
|
13950
14212
|
parentEl.appendChild(this.element);
|
|
13951
14213
|
|
|
13952
|
-
if (
|
|
13953
|
-
|
|
14214
|
+
if (isIE8 === undefined)
|
|
14215
|
+
isIE8 = !("opacity" in this.element.style);
|
|
13954
14216
|
|
|
13955
14217
|
this.isVisible = false;
|
|
13956
14218
|
this.isBlinking = true;
|
|
@@ -13960,7 +14222,9 @@ var Cursor = function(parentEl) {
|
|
|
13960
14222
|
this.cursors = [];
|
|
13961
14223
|
this.cursor = this.addCursor();
|
|
13962
14224
|
dom.addCssClass(this.element, "ace_hidden-cursors");
|
|
13963
|
-
this.$updateCursors =
|
|
14225
|
+
this.$updateCursors = (isIE8
|
|
14226
|
+
? this.$updateVisibility
|
|
14227
|
+
: this.$updateOpacity).bind(this);
|
|
13964
14228
|
};
|
|
13965
14229
|
|
|
13966
14230
|
(function() {
|
|
@@ -14001,13 +14265,11 @@ var Cursor = function(parentEl) {
|
|
|
14001
14265
|
};
|
|
14002
14266
|
|
|
14003
14267
|
this.setSmoothBlinking = function(smoothBlinking) {
|
|
14004
|
-
if (smoothBlinking != this.smoothBlinking && !
|
|
14268
|
+
if (smoothBlinking != this.smoothBlinking && !isIE8) {
|
|
14005
14269
|
this.smoothBlinking = smoothBlinking;
|
|
14006
14270
|
dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking);
|
|
14007
14271
|
this.$updateCursors(true);
|
|
14008
|
-
this.$updateCursors = (
|
|
14009
|
-
? this.$updateOpacity
|
|
14010
|
-
: this.$updateVisibility).bind(this);
|
|
14272
|
+
this.$updateCursors = (this.$updateOpacity).bind(this);
|
|
14011
14273
|
this.restartTimer();
|
|
14012
14274
|
}
|
|
14013
14275
|
};
|
|
@@ -14399,9 +14661,9 @@ var FontMetrics = exports.FontMetrics = function(parentEl, interval) {
|
|
|
14399
14661
|
this.setPolling = function(val) {
|
|
14400
14662
|
if (val) {
|
|
14401
14663
|
this.$pollSizeChanges();
|
|
14402
|
-
} else {
|
|
14403
|
-
|
|
14404
|
-
|
|
14664
|
+
} else if (this.$pollSizeChangesTimer) {
|
|
14665
|
+
clearInterval(this.$pollSizeChangesTimer);
|
|
14666
|
+
this.$pollSizeChangesTimer = 0;
|
|
14405
14667
|
}
|
|
14406
14668
|
};
|
|
14407
14669
|
|
|
@@ -14599,6 +14861,7 @@ text-indent: -1em;\
|
|
|
14599
14861
|
-moz-user-select: text;\
|
|
14600
14862
|
-webkit-user-select: text;\
|
|
14601
14863
|
user-select: text;\
|
|
14864
|
+
white-space: pre!important;\
|
|
14602
14865
|
}\
|
|
14603
14866
|
.ace_text-input.ace_composition {\
|
|
14604
14867
|
background: inherit;\
|
|
@@ -14642,7 +14905,8 @@ position: absolute;\
|
|
|
14642
14905
|
-moz-box-sizing: border-box;\
|
|
14643
14906
|
-webkit-box-sizing: border-box;\
|
|
14644
14907
|
box-sizing: border-box;\
|
|
14645
|
-
border-left: 2px solid
|
|
14908
|
+
border-left: 2px solid;\
|
|
14909
|
+
transform: translatez(0);\
|
|
14646
14910
|
}\
|
|
14647
14911
|
.ace_slim-cursors .ace_cursor {\
|
|
14648
14912
|
border-left-width: 1px;\
|
|
@@ -14823,6 +15087,21 @@ background-color: rgba(255, 255, 0,0.2);\
|
|
|
14823
15087
|
position: absolute;\
|
|
14824
15088
|
z-index: 8;\
|
|
14825
15089
|
}\
|
|
15090
|
+
.ace_br1 {border-top-left-radius : 3px;}\
|
|
15091
|
+
.ace_br2 {border-top-right-radius : 3px;}\
|
|
15092
|
+
.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\
|
|
15093
|
+
.ace_br4 {border-bottom-right-radius: 3px;}\
|
|
15094
|
+
.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\
|
|
15095
|
+
.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\
|
|
15096
|
+
.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\
|
|
15097
|
+
.ace_br8 {border-bottom-left-radius : 3px;}\
|
|
15098
|
+
.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\
|
|
15099
|
+
.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\
|
|
15100
|
+
.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\
|
|
15101
|
+
.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\
|
|
15102
|
+
.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\
|
|
15103
|
+
.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\
|
|
15104
|
+
.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\
|
|
14826
15105
|
";
|
|
14827
15106
|
|
|
14828
15107
|
dom.importCssString(editorCss, "ace_editor.css");
|
|
@@ -15235,7 +15514,7 @@ var VirtualRenderer = function(container, theme) {
|
|
|
15235
15514
|
return this.container;
|
|
15236
15515
|
};
|
|
15237
15516
|
this.getMouseEventTarget = function() {
|
|
15238
|
-
return this.
|
|
15517
|
+
return this.scroller;
|
|
15239
15518
|
};
|
|
15240
15519
|
this.getTextAreaContainer = function() {
|
|
15241
15520
|
return this.container;
|
|
@@ -15464,6 +15743,8 @@ var VirtualRenderer = function(container, theme) {
|
|
|
15464
15743
|
(this.$minLines||1) * this.lineHeight,
|
|
15465
15744
|
Math.min(maxHeight, height)
|
|
15466
15745
|
) + this.scrollMargin.v + (this.$extraHeight || 0);
|
|
15746
|
+
if (this.$horizScroll)
|
|
15747
|
+
desiredHeight += this.scrollBarH.getHeight();
|
|
15467
15748
|
var vScroll = height > maxHeight;
|
|
15468
15749
|
|
|
15469
15750
|
if (desiredHeight != this.desiredHeight ||
|
|
@@ -15483,9 +15764,6 @@ var VirtualRenderer = function(container, theme) {
|
|
|
15483
15764
|
};
|
|
15484
15765
|
|
|
15485
15766
|
this.$computeLayerConfig = function() {
|
|
15486
|
-
if (this.$maxLines && this.lineHeight > 1)
|
|
15487
|
-
this.$autosize();
|
|
15488
|
-
|
|
15489
15767
|
var session = this.session;
|
|
15490
15768
|
var size = this.$size;
|
|
15491
15769
|
|
|
@@ -15493,9 +15771,6 @@ var VirtualRenderer = function(container, theme) {
|
|
|
15493
15771
|
var screenLines = this.session.getScreenLength();
|
|
15494
15772
|
var maxHeight = screenLines * this.lineHeight;
|
|
15495
15773
|
|
|
15496
|
-
var offset = this.scrollTop % this.lineHeight;
|
|
15497
|
-
var minHeight = size.scrollerHeight + this.lineHeight;
|
|
15498
|
-
|
|
15499
15774
|
var longestLine = this.$getLongestLine();
|
|
15500
15775
|
|
|
15501
15776
|
var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||
|
|
@@ -15506,21 +15781,28 @@ var VirtualRenderer = function(container, theme) {
|
|
|
15506
15781
|
this.$horizScroll = horizScroll;
|
|
15507
15782
|
this.scrollBarH.setVisible(horizScroll);
|
|
15508
15783
|
}
|
|
15784
|
+
var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine
|
|
15785
|
+
if (this.$maxLines && this.lineHeight > 1)
|
|
15786
|
+
this.$autosize();
|
|
15787
|
+
|
|
15788
|
+
var offset = this.scrollTop % this.lineHeight;
|
|
15789
|
+
var minHeight = size.scrollerHeight + this.lineHeight;
|
|
15509
15790
|
|
|
15510
15791
|
var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd
|
|
15511
15792
|
? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd
|
|
15512
15793
|
: 0;
|
|
15513
15794
|
maxHeight += scrollPastEnd;
|
|
15514
15795
|
|
|
15515
|
-
this.
|
|
15516
|
-
|
|
15796
|
+
var sm = this.scrollMargin;
|
|
15797
|
+
this.session.setScrollTop(Math.max(-sm.top,
|
|
15798
|
+
Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));
|
|
15517
15799
|
|
|
15518
|
-
this.session.setScrollLeft(Math.max(-
|
|
15519
|
-
longestLine + 2 * this.$padding - size.scrollerWidth +
|
|
15800
|
+
this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft,
|
|
15801
|
+
longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));
|
|
15520
15802
|
|
|
15521
15803
|
var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||
|
|
15522
|
-
size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop);
|
|
15523
|
-
var vScrollChanged =
|
|
15804
|
+
size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);
|
|
15805
|
+
var vScrollChanged = vScrollBefore !== vScroll;
|
|
15524
15806
|
if (vScrollChanged) {
|
|
15525
15807
|
this.$vScroll = vScroll;
|
|
15526
15808
|
this.scrollBarV.setVisible(vScroll);
|
|
@@ -16204,19 +16486,22 @@ var WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) {
|
|
|
16204
16486
|
doc.on("change", this.changeListener);
|
|
16205
16487
|
};
|
|
16206
16488
|
|
|
16207
|
-
this.changeListener = function(
|
|
16489
|
+
this.changeListener = function(delta) {
|
|
16208
16490
|
if (!this.deltaQueue) {
|
|
16209
|
-
this.deltaQueue = [
|
|
16491
|
+
this.deltaQueue = [];
|
|
16210
16492
|
setTimeout(this.$sendDeltaQueue, 0);
|
|
16211
|
-
}
|
|
16212
|
-
|
|
16493
|
+
}
|
|
16494
|
+
if (delta.action == "insert")
|
|
16495
|
+
this.deltaQueue.push(delta.start, delta.lines);
|
|
16496
|
+
else
|
|
16497
|
+
this.deltaQueue.push(delta.start, delta.end);
|
|
16213
16498
|
};
|
|
16214
16499
|
|
|
16215
16500
|
this.$sendDeltaQueue = function() {
|
|
16216
16501
|
var q = this.deltaQueue;
|
|
16217
16502
|
if (!q) return;
|
|
16218
16503
|
this.deltaQueue = null;
|
|
16219
|
-
if (q.length >
|
|
16504
|
+
if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {
|
|
16220
16505
|
this.call("setValue", [this.$doc.getValue()]);
|
|
16221
16506
|
} else
|
|
16222
16507
|
this.emit("change", {data: q});
|
|
@@ -16372,28 +16657,27 @@ var PlaceHolder = function(session, length, pos, others, mainClass, othersClass)
|
|
|
16372
16657
|
this.session.removeMarker(this.others[i].markerId);
|
|
16373
16658
|
}
|
|
16374
16659
|
};
|
|
16375
|
-
this.onUpdate = function(
|
|
16376
|
-
var
|
|
16377
|
-
var range = delta.range;
|
|
16660
|
+
this.onUpdate = function(delta) {
|
|
16661
|
+
var range = delta;
|
|
16378
16662
|
if(range.start.row !== range.end.row) return;
|
|
16379
16663
|
if(range.start.row !== this.pos.row) return;
|
|
16380
16664
|
if (this.$updating) return;
|
|
16381
16665
|
this.$updating = true;
|
|
16382
|
-
var lengthDiff = delta.action === "
|
|
16666
|
+
var lengthDiff = delta.action === "insert" ? range.end.column - range.start.column : range.start.column - range.end.column;
|
|
16383
16667
|
|
|
16384
16668
|
if(range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1) {
|
|
16385
16669
|
var distanceFromStart = range.start.column - this.pos.column;
|
|
16386
16670
|
this.length += lengthDiff;
|
|
16387
16671
|
if(!this.session.$fromUndo) {
|
|
16388
|
-
if(delta.action ===
|
|
16672
|
+
if(delta.action === 'insert') {
|
|
16389
16673
|
for (var i = this.others.length - 1; i >= 0; i--) {
|
|
16390
16674
|
var otherPos = this.others[i];
|
|
16391
16675
|
var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};
|
|
16392
16676
|
if(otherPos.row === range.start.row && range.start.column < otherPos.column)
|
|
16393
16677
|
newPos.column += lengthDiff;
|
|
16394
|
-
this.doc.
|
|
16678
|
+
this.doc.insertMergedLines(newPos, delta.lines);
|
|
16395
16679
|
}
|
|
16396
|
-
} else if(delta.action ===
|
|
16680
|
+
} else if(delta.action === 'remove') {
|
|
16397
16681
|
for (var i = this.others.length - 1; i >= 0; i--) {
|
|
16398
16682
|
var otherPos = this.others[i];
|
|
16399
16683
|
var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};
|
|
@@ -16402,7 +16686,7 @@ var PlaceHolder = function(session, length, pos, others, mainClass, othersClass)
|
|
|
16402
16686
|
this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));
|
|
16403
16687
|
}
|
|
16404
16688
|
}
|
|
16405
|
-
if(range.start.column === this.pos.column && delta.action ===
|
|
16689
|
+
if(range.start.column === this.pos.column && delta.action === 'insert') {
|
|
16406
16690
|
setTimeout(function() {
|
|
16407
16691
|
this.pos.setPosition(this.pos.row, this.pos.column - lengthDiff);
|
|
16408
16692
|
for (var i = 0; i < this.others.length; i++) {
|
|
@@ -16414,7 +16698,7 @@ var PlaceHolder = function(session, length, pos, others, mainClass, othersClass)
|
|
|
16414
16698
|
}
|
|
16415
16699
|
}.bind(this), 0);
|
|
16416
16700
|
}
|
|
16417
|
-
else if(range.start.column === this.pos.column && delta.action ===
|
|
16701
|
+
else if(range.start.column === this.pos.column && delta.action === 'remove') {
|
|
16418
16702
|
setTimeout(function() {
|
|
16419
16703
|
for (var i = 0; i < this.others.length; i++) {
|
|
16420
16704
|
var other = this.others[i];
|
|
@@ -16526,15 +16810,15 @@ function onMouseDown(e) {
|
|
|
16526
16810
|
var selectionMode;
|
|
16527
16811
|
if (editor.$mouseHandler.$enableJumpToDef) {
|
|
16528
16812
|
if (ctrl && alt || accel && alt)
|
|
16529
|
-
selectionMode = "add";
|
|
16530
|
-
else if (alt)
|
|
16813
|
+
selectionMode = shift ? "block" : "add";
|
|
16814
|
+
else if (alt && editor.$blockSelectEnabled)
|
|
16531
16815
|
selectionMode = "block";
|
|
16532
16816
|
} else {
|
|
16533
16817
|
if (accel && !alt) {
|
|
16534
16818
|
selectionMode = "add";
|
|
16535
16819
|
if (!isMultiSelect && shift)
|
|
16536
16820
|
return;
|
|
16537
|
-
} else if (alt) {
|
|
16821
|
+
} else if (alt && editor.$blockSelectEnabled) {
|
|
16538
16822
|
selectionMode = "block";
|
|
16539
16823
|
}
|
|
16540
16824
|
}
|
|
@@ -16560,7 +16844,7 @@ function onMouseDown(e) {
|
|
|
16560
16844
|
|
|
16561
16845
|
if (shift) {
|
|
16562
16846
|
oldRange = null;
|
|
16563
|
-
range = selection.ranges[0];
|
|
16847
|
+
range = selection.ranges[0] || range;
|
|
16564
16848
|
editor.removeSelectionMarker(range);
|
|
16565
16849
|
}
|
|
16566
16850
|
editor.once("mouseup", function() {
|
|
@@ -16659,54 +16943,54 @@ exports.defaultCommands = [{
|
|
|
16659
16943
|
exec: function(editor) { editor.selectMoreLines(-1); },
|
|
16660
16944
|
bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"},
|
|
16661
16945
|
scrollIntoView: "cursor",
|
|
16662
|
-
|
|
16946
|
+
readOnly: true
|
|
16663
16947
|
}, {
|
|
16664
16948
|
name: "addCursorBelow",
|
|
16665
16949
|
exec: function(editor) { editor.selectMoreLines(1); },
|
|
16666
16950
|
bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"},
|
|
16667
16951
|
scrollIntoView: "cursor",
|
|
16668
|
-
|
|
16952
|
+
readOnly: true
|
|
16669
16953
|
}, {
|
|
16670
16954
|
name: "addCursorAboveSkipCurrent",
|
|
16671
16955
|
exec: function(editor) { editor.selectMoreLines(-1, true); },
|
|
16672
16956
|
bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"},
|
|
16673
16957
|
scrollIntoView: "cursor",
|
|
16674
|
-
|
|
16958
|
+
readOnly: true
|
|
16675
16959
|
}, {
|
|
16676
16960
|
name: "addCursorBelowSkipCurrent",
|
|
16677
16961
|
exec: function(editor) { editor.selectMoreLines(1, true); },
|
|
16678
16962
|
bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"},
|
|
16679
16963
|
scrollIntoView: "cursor",
|
|
16680
|
-
|
|
16964
|
+
readOnly: true
|
|
16681
16965
|
}, {
|
|
16682
16966
|
name: "selectMoreBefore",
|
|
16683
16967
|
exec: function(editor) { editor.selectMore(-1); },
|
|
16684
16968
|
bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"},
|
|
16685
16969
|
scrollIntoView: "cursor",
|
|
16686
|
-
|
|
16970
|
+
readOnly: true
|
|
16687
16971
|
}, {
|
|
16688
16972
|
name: "selectMoreAfter",
|
|
16689
16973
|
exec: function(editor) { editor.selectMore(1); },
|
|
16690
16974
|
bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"},
|
|
16691
16975
|
scrollIntoView: "cursor",
|
|
16692
|
-
|
|
16976
|
+
readOnly: true
|
|
16693
16977
|
}, {
|
|
16694
16978
|
name: "selectNextBefore",
|
|
16695
16979
|
exec: function(editor) { editor.selectMore(-1, true); },
|
|
16696
16980
|
bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"},
|
|
16697
16981
|
scrollIntoView: "cursor",
|
|
16698
|
-
|
|
16982
|
+
readOnly: true
|
|
16699
16983
|
}, {
|
|
16700
16984
|
name: "selectNextAfter",
|
|
16701
16985
|
exec: function(editor) { editor.selectMore(1, true); },
|
|
16702
16986
|
bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"},
|
|
16703
16987
|
scrollIntoView: "cursor",
|
|
16704
|
-
|
|
16988
|
+
readOnly: true
|
|
16705
16989
|
}, {
|
|
16706
16990
|
name: "splitIntoLines",
|
|
16707
16991
|
exec: function(editor) { editor.multiSelect.splitIntoLines(); },
|
|
16708
16992
|
bindKey: {win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L"},
|
|
16709
|
-
|
|
16993
|
+
readOnly: true
|
|
16710
16994
|
}, {
|
|
16711
16995
|
name: "alignCursors",
|
|
16712
16996
|
exec: function(editor) { editor.alignCursors(); },
|
|
@@ -16717,14 +17001,14 @@ exports.defaultCommands = [{
|
|
|
16717
17001
|
exec: function(editor) { editor.findAll(); },
|
|
16718
17002
|
bindKey: {win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G"},
|
|
16719
17003
|
scrollIntoView: "cursor",
|
|
16720
|
-
|
|
17004
|
+
readOnly: true
|
|
16721
17005
|
}];
|
|
16722
17006
|
exports.multiSelectCommands = [{
|
|
16723
17007
|
name: "singleSelection",
|
|
16724
17008
|
bindKey: "esc",
|
|
16725
17009
|
exec: function(editor) { editor.exitMultiSelectMode(); },
|
|
16726
17010
|
scrollIntoView: "cursor",
|
|
16727
|
-
|
|
17011
|
+
readOnly: true,
|
|
16728
17012
|
isAvailable: function(editor) {return editor && editor.inMultiSelectMode}
|
|
16729
17013
|
}];
|
|
16730
17014
|
|
|
@@ -17326,9 +17610,9 @@ var Editor = require("./editor").Editor;
|
|
|
17326
17610
|
if (fr < 0) fr = 0;
|
|
17327
17611
|
if (lr >= max) lr = max - 1;
|
|
17328
17612
|
}
|
|
17329
|
-
var lines = this.session.
|
|
17613
|
+
var lines = this.session.removeFullLines(fr, lr);
|
|
17330
17614
|
lines = this.$reAlignText(lines, guessRange);
|
|
17331
|
-
this.session.
|
|
17615
|
+
this.session.insert({row: fr, column: 0}, lines.join("\n") + "\n");
|
|
17332
17616
|
if (!guessRange) {
|
|
17333
17617
|
range.start.column = 0;
|
|
17334
17618
|
range.end.column = lines[lines.length - 1].length;
|
|
@@ -17489,7 +17773,8 @@ function addAltCursorListeners(editor){
|
|
|
17489
17773
|
var el = editor.textInput.getElement();
|
|
17490
17774
|
var altCursor = false;
|
|
17491
17775
|
event.addListener(el, "keydown", function(e) {
|
|
17492
|
-
|
|
17776
|
+
var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);
|
|
17777
|
+
if (editor.$blockSelectEnabled && altDown) {
|
|
17493
17778
|
if (!altCursor) {
|
|
17494
17779
|
editor.renderer.setMouseCursor("crosshair");
|
|
17495
17780
|
altCursor = true;
|
|
@@ -17525,6 +17810,12 @@ require("./config").defineOptions(Editor.prototype, "editor", {
|
|
|
17525
17810
|
}
|
|
17526
17811
|
},
|
|
17527
17812
|
value: true
|
|
17813
|
+
},
|
|
17814
|
+
enableBlockSelect: {
|
|
17815
|
+
set: function(val) {
|
|
17816
|
+
this.$blockSelectEnabled = val;
|
|
17817
|
+
},
|
|
17818
|
+
value: true
|
|
17528
17819
|
}
|
|
17529
17820
|
});
|
|
17530
17821
|
|
|
@@ -17721,7 +18012,6 @@ background: rgb(181, 213, 255);\
|
|
|
17721
18012
|
}\
|
|
17722
18013
|
.ace-tm.ace_multiselect .ace_selection.ace_start {\
|
|
17723
18014
|
box-shadow: 0 0 3px 0px white;\
|
|
17724
|
-
border-radius: 2px;\
|
|
17725
18015
|
}\
|
|
17726
18016
|
.ace-tm .ace_marker-layer .ace_step {\
|
|
17727
18017
|
background: rgb(252, 255, 0);\
|
|
@@ -17772,6 +18062,7 @@ function LineWidgets(session) {
|
|
|
17772
18062
|
this.$onChangeEditor = this.$onChangeEditor.bind(this);
|
|
17773
18063
|
|
|
17774
18064
|
this.session.on("change", this.updateOnChange);
|
|
18065
|
+
this.session.on("changeFold", this.updateOnFold);
|
|
17775
18066
|
this.session.on("changeEditor", this.$onChangeEditor);
|
|
17776
18067
|
}
|
|
17777
18068
|
|
|
@@ -17792,8 +18083,8 @@ function LineWidgets(session) {
|
|
|
17792
18083
|
this.$getWidgetScreenLength = function() {
|
|
17793
18084
|
var screenRows = 0;
|
|
17794
18085
|
this.lineWidgets.forEach(function(w){
|
|
17795
|
-
if (w && w.rowCount)
|
|
17796
|
-
screenRows +=w.rowCount;
|
|
18086
|
+
if (w && w.rowCount && !w.hidden)
|
|
18087
|
+
screenRows += w.rowCount;
|
|
17797
18088
|
});
|
|
17798
18089
|
return screenRows;
|
|
17799
18090
|
};
|
|
@@ -17837,17 +18128,41 @@ function LineWidgets(session) {
|
|
|
17837
18128
|
});
|
|
17838
18129
|
};
|
|
17839
18130
|
|
|
17840
|
-
this.
|
|
18131
|
+
this.updateOnFold = function(e, session) {
|
|
18132
|
+
var lineWidgets = session.lineWidgets;
|
|
18133
|
+
if (!lineWidgets || !e.action)
|
|
18134
|
+
return;
|
|
18135
|
+
var fold = e.data;
|
|
18136
|
+
var start = fold.start.row;
|
|
18137
|
+
var end = fold.end.row;
|
|
18138
|
+
var hide = e.action == "add";
|
|
18139
|
+
for (var i = start + 1; i < end; i++) {
|
|
18140
|
+
if (lineWidgets[i])
|
|
18141
|
+
lineWidgets[i].hidden = hide;
|
|
18142
|
+
}
|
|
18143
|
+
if (lineWidgets[end]) {
|
|
18144
|
+
if (hide) {
|
|
18145
|
+
if (!lineWidgets[start])
|
|
18146
|
+
lineWidgets[start] = lineWidgets[end];
|
|
18147
|
+
else
|
|
18148
|
+
lineWidgets[end].hidden = hide;
|
|
18149
|
+
} else {
|
|
18150
|
+
if (lineWidgets[start] == lineWidgets[end])
|
|
18151
|
+
lineWidgets[start] = undefined;
|
|
18152
|
+
lineWidgets[end].hidden = hide;
|
|
18153
|
+
}
|
|
18154
|
+
}
|
|
18155
|
+
};
|
|
18156
|
+
|
|
18157
|
+
this.updateOnChange = function(delta) {
|
|
17841
18158
|
var lineWidgets = this.session.lineWidgets;
|
|
17842
18159
|
if (!lineWidgets) return;
|
|
17843
|
-
|
|
17844
|
-
var
|
|
17845
|
-
var
|
|
17846
|
-
var startRow = range.start.row;
|
|
17847
|
-
var len = range.end.row - startRow;
|
|
18160
|
+
|
|
18161
|
+
var startRow = delta.start.row;
|
|
18162
|
+
var len = delta.end.row - startRow;
|
|
17848
18163
|
|
|
17849
18164
|
if (len === 0) {
|
|
17850
|
-
} else if (delta.action ==
|
|
18165
|
+
} else if (delta.action == 'remove') {
|
|
17851
18166
|
var removed = lineWidgets.splice(startRow + 1, len);
|
|
17852
18167
|
removed.forEach(function(w) {
|
|
17853
18168
|
w && this.removeLineWidget(w);
|
|
@@ -17869,6 +18184,10 @@ function LineWidgets(session) {
|
|
|
17869
18184
|
if (w) {
|
|
17870
18185
|
noWidgets = false;
|
|
17871
18186
|
w.row = i;
|
|
18187
|
+
while (w.$oldWidget) {
|
|
18188
|
+
w.$oldWidget.row = i;
|
|
18189
|
+
w = w.$oldWidget;
|
|
18190
|
+
}
|
|
17872
18191
|
}
|
|
17873
18192
|
});
|
|
17874
18193
|
if (noWidgets)
|
|
@@ -17879,8 +18198,19 @@ function LineWidgets(session) {
|
|
|
17879
18198
|
if (!this.session.lineWidgets)
|
|
17880
18199
|
this.session.lineWidgets = new Array(this.session.getLength());
|
|
17881
18200
|
|
|
18201
|
+
var old = this.session.lineWidgets[w.row];
|
|
18202
|
+
if (old) {
|
|
18203
|
+
w.$oldWidget = old;
|
|
18204
|
+
if (old.el && old.el.parentNode) {
|
|
18205
|
+
old.el.parentNode.removeChild(old.el);
|
|
18206
|
+
old._inDocument = false;
|
|
18207
|
+
}
|
|
18208
|
+
}
|
|
18209
|
+
|
|
17882
18210
|
this.session.lineWidgets[w.row] = w;
|
|
17883
18211
|
|
|
18212
|
+
w.session = this.session;
|
|
18213
|
+
|
|
17884
18214
|
var renderer = this.editor.renderer;
|
|
17885
18215
|
if (w.html && !w.el) {
|
|
17886
18216
|
w.el = dom.createElement("div");
|
|
@@ -17900,29 +18230,67 @@ function LineWidgets(session) {
|
|
|
17900
18230
|
if (!w.pixelHeight) {
|
|
17901
18231
|
w.pixelHeight = w.el.offsetHeight;
|
|
17902
18232
|
}
|
|
17903
|
-
if (w.rowCount == null)
|
|
18233
|
+
if (w.rowCount == null) {
|
|
17904
18234
|
w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;
|
|
18235
|
+
}
|
|
17905
18236
|
|
|
18237
|
+
var fold = this.session.getFoldAt(w.row, 0);
|
|
18238
|
+
w.$fold = fold;
|
|
18239
|
+
if (fold) {
|
|
18240
|
+
var lineWidgets = this.session.lineWidgets;
|
|
18241
|
+
if (w.row == fold.end.row && !lineWidgets[fold.start.row])
|
|
18242
|
+
lineWidgets[fold.start.row] = w;
|
|
18243
|
+
else
|
|
18244
|
+
w.hidden = true;
|
|
18245
|
+
}
|
|
18246
|
+
|
|
17906
18247
|
this.session._emit("changeFold", {data:{start:{row: w.row}}});
|
|
17907
18248
|
|
|
17908
18249
|
this.$updateRows();
|
|
17909
18250
|
this.renderWidgets(null, renderer);
|
|
18251
|
+
this.onWidgetChanged(w);
|
|
17910
18252
|
return w;
|
|
17911
18253
|
};
|
|
17912
18254
|
|
|
17913
18255
|
this.removeLineWidget = function(w) {
|
|
17914
18256
|
w._inDocument = false;
|
|
18257
|
+
w.session = null;
|
|
17915
18258
|
if (w.el && w.el.parentNode)
|
|
17916
18259
|
w.el.parentNode.removeChild(w.el);
|
|
17917
18260
|
if (w.editor && w.editor.destroy) try {
|
|
17918
18261
|
w.editor.destroy();
|
|
17919
18262
|
} catch(e){}
|
|
17920
|
-
if (this.session.lineWidgets)
|
|
17921
|
-
this.session.lineWidgets[w.row]
|
|
18263
|
+
if (this.session.lineWidgets) {
|
|
18264
|
+
var w1 = this.session.lineWidgets[w.row]
|
|
18265
|
+
if (w1 == w) {
|
|
18266
|
+
this.session.lineWidgets[w.row] = w.$oldWidget;
|
|
18267
|
+
if (w.$oldWidget)
|
|
18268
|
+
this.onWidgetChanged(w.$oldWidget);
|
|
18269
|
+
} else {
|
|
18270
|
+
while (w1) {
|
|
18271
|
+
if (w1.$oldWidget == w) {
|
|
18272
|
+
w1.$oldWidget = w.$oldWidget;
|
|
18273
|
+
break;
|
|
18274
|
+
}
|
|
18275
|
+
w1 = w1.$oldWidget;
|
|
18276
|
+
}
|
|
18277
|
+
}
|
|
18278
|
+
}
|
|
17922
18279
|
this.session._emit("changeFold", {data:{start:{row: w.row}}});
|
|
17923
18280
|
this.$updateRows();
|
|
17924
18281
|
};
|
|
17925
18282
|
|
|
18283
|
+
this.getWidgetsAtRow = function(row) {
|
|
18284
|
+
var lineWidgets = this.session.lineWidgets;
|
|
18285
|
+
var w = lineWidgets && lineWidgets[row];
|
|
18286
|
+
var list = [];
|
|
18287
|
+
while (w) {
|
|
18288
|
+
list.push(w);
|
|
18289
|
+
w = w.$oldWidget;
|
|
18290
|
+
}
|
|
18291
|
+
return list;
|
|
18292
|
+
};
|
|
18293
|
+
|
|
17926
18294
|
this.onWidgetChanged = function(w) {
|
|
17927
18295
|
this.session._changedWidgets.push(w);
|
|
17928
18296
|
this.editor && this.editor.renderer.updateFull();
|
|
@@ -17936,6 +18304,8 @@ function LineWidgets(session) {
|
|
|
17936
18304
|
var min = Infinity;
|
|
17937
18305
|
for (var i = 0; i < changedWidgets.length; i++) {
|
|
17938
18306
|
var w = changedWidgets[i];
|
|
18307
|
+
if (!w || !w.el) continue;
|
|
18308
|
+
if (w.session != this.session) continue;
|
|
17939
18309
|
if (!w._inDocument) {
|
|
17940
18310
|
w._inDocument = true;
|
|
17941
18311
|
renderer.container.appendChild(w.el);
|
|
@@ -17985,7 +18355,10 @@ function LineWidgets(session) {
|
|
|
17985
18355
|
for (var i = first; i <= last; i++) {
|
|
17986
18356
|
var w = lineWidgets[i];
|
|
17987
18357
|
if (!w || !w.el) continue;
|
|
17988
|
-
|
|
18358
|
+
if (w.hidden) {
|
|
18359
|
+
w.el.style.top = -100 - (w.pixelHeight || 0) + "px";
|
|
18360
|
+
continue;
|
|
18361
|
+
}
|
|
17989
18362
|
if (!w._inDocument) {
|
|
17990
18363
|
w._inDocument = true;
|
|
17991
18364
|
renderer.container.appendChild(w.el);
|
|
@@ -17999,7 +18372,11 @@ function LineWidgets(session) {
|
|
|
17999
18372
|
if (!w.fixedWidth)
|
|
18000
18373
|
left -= renderer.scrollLeft;
|
|
18001
18374
|
w.el.style.left = left + "px";
|
|
18002
|
-
|
|
18375
|
+
|
|
18376
|
+
if (w.fullWidth && w.screenWidth) {
|
|
18377
|
+
w.el.style.minWidth = config.width + 2 * config.padding + "px";
|
|
18378
|
+
}
|
|
18379
|
+
|
|
18003
18380
|
if (w.fixedWidth) {
|
|
18004
18381
|
w.el.style.right = renderer.scrollBar.getWidth() + "px";
|
|
18005
18382
|
} else {
|
|
@@ -18083,7 +18460,9 @@ exports.showErrorMarker = function(editor, dir) {
|
|
|
18083
18460
|
|
|
18084
18461
|
var pos = editor.getCursorPosition();
|
|
18085
18462
|
var row = pos.row;
|
|
18086
|
-
var oldWidget = session.
|
|
18463
|
+
var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {
|
|
18464
|
+
return w.type == "errorMarker";
|
|
18465
|
+
})[0];
|
|
18087
18466
|
if (oldWidget) {
|
|
18088
18467
|
oldWidget.destroy();
|
|
18089
18468
|
} else {
|
|
@@ -18113,7 +18492,8 @@ exports.showErrorMarker = function(editor, dir) {
|
|
|
18113
18492
|
row: pos.row,
|
|
18114
18493
|
fixedWidth: true,
|
|
18115
18494
|
coverGutter: true,
|
|
18116
|
-
el: dom.createElement("div")
|
|
18495
|
+
el: dom.createElement("div"),
|
|
18496
|
+
type: "errorMarker"
|
|
18117
18497
|
};
|
|
18118
18498
|
var el = w.el.appendChild(dom.createElement("div"));
|
|
18119
18499
|
var arrow = w.el.appendChild(dom.createElement("div"));
|
|
@@ -18237,7 +18617,7 @@ exports.edit = function(el) {
|
|
|
18237
18617
|
value = oldNode.value;
|
|
18238
18618
|
el = dom.createElement("pre");
|
|
18239
18619
|
oldNode.parentNode.replaceChild(el, oldNode);
|
|
18240
|
-
} else {
|
|
18620
|
+
} else if (el) {
|
|
18241
18621
|
value = dom.getInnerText(el);
|
|
18242
18622
|
el.innerHTML = '';
|
|
18243
18623
|
}
|