diff --git a/lib/ace/config.js b/lib/ace/config.js
index 73a83d51..0bdaf786 100644
--- a/lib/ace/config.js
+++ b/lib/ace/config.js
@@ -97,10 +97,9 @@ exports.init = function() {
}
}
- var m = src.match(/^(?:(.*\/)ace\.js)(?:\?|$)/);
- if (m) {
- scriptUrl = m[1] || m[2];
- }
+ var m = src.match(/^(.*)\/ace(\-\w+)?\.js(\?|$)/);
+ if (m)
+ scriptUrl = m[1];
}
if (scriptUrl) {
diff --git a/lib/ace/css/editor.css b/lib/ace/css/editor.css
index d53a135b..0a668fff 100644
--- a/lib/ace/css/editor.css
+++ b/lib/ace/css/editor.css
@@ -8,7 +8,6 @@
.ace_scroller {
position: absolute;
overflow: hidden;
- width : 100%;
}
.ace_content {
diff --git a/lib/ace/edit_session/bracket_match.js b/lib/ace/edit_session/bracket_match.js
index 83c8f572..9b977b8c 100644
--- a/lib/ace/edit_session/bracket_match.js
+++ b/lib/ace/edit_session/bracket_match.js
@@ -94,7 +94,7 @@ function BracketMatch() {
var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/);
if (!match) {
chr = line.charAt(pos.column);
- pos.column++;
+ pos = {row: pos.row, column: pos.column + 1};
match = chr && chr.match(/([\(\[\{])|([\)\]\}])/);
before = false;
}
@@ -123,9 +123,6 @@ function BracketMatch() {
range.cursor = range.start;
}
- if (!before)
- pos.column--;
-
return range;
};
@@ -194,7 +191,7 @@ function BracketMatch() {
return null;
};
- this.$findClosingBracket = function(bracket, position, typeRe, allowBlankLine) {
+ this.$findClosingBracket = function(bracket, position, typeRe) {
var closingBracket = this.$brackets[bracket];
var depth = 1;
@@ -239,12 +236,6 @@ function BracketMatch() {
// whose type matches typeRe
do {
token = iterator.stepForward();
- if (allowBlankLine) {
- // if you've reached the doc end, or, you match a new content line
- if (token === null || token.type == "string") {
- return {row: iterator.getCurrentTokenRow() + (token === null ? 1 : -1), column: 0};
- }
- }
} while (token && !typeRe.test(token.type));
if (token == null)
diff --git a/lib/ace/layer/marker.js b/lib/ace/layer/marker.js
index f5999338..127cf7f3 100644
--- a/lib/ace/layer/marker.js
+++ b/lib/ace/layer/marker.js
@@ -73,7 +73,7 @@ var Marker = function(parentEl) {
var html = [];
- for ( var key in this.markers) {
+ for (var key in this.markers) {
var marker = this.markers[key];
if (!marker.range) {
@@ -140,29 +140,25 @@ var Marker = function(parentEl) {
}
};
- // Draws a multi line marker, where lines span the full width
- this.drawMultiLineMarker = function(stringBuilder, range, clazz, layerConfig, type) {
+ // Draws a multi line marker, where lines span the full width
+ this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, type) {
var padding = type === "background" ? 0 : this.$padding;
- var layerWidth = layerConfig.width + 2 * this.$padding - padding;
// from selection start to the end of the line
- var height = layerConfig.lineHeight;
- var width = Math.round(layerWidth - (range.start.column * layerConfig.characterWidth));
- var top = this.$getTop(range.start.row, layerConfig);
- var left = Math.round(
- padding + range.start.column * layerConfig.characterWidth
- );
+ var height = config.lineHeight;
+ var top = this.$getTop(range.start.row, config);
+ var left = Math.round(padding + range.start.column * config.characterWidth);
stringBuilder.push(
"
"
);
// from start of the last line to the selection end
- top = this.$getTop(range.end.row, layerConfig);
- width = Math.round(range.end.column * layerConfig.characterWidth);
+ top = this.$getTop(range.end.row, config);
+ var width = Math.round(range.end.column * config.characterWidth);
stringBuilder.push(
""
);
diff --git a/lib/ace/layer/text.js b/lib/ace/layer/text.js
index 92683967..e96dff28 100644
--- a/lib/ace/layer/text.js
+++ b/lib/ace/layer/text.js
@@ -131,7 +131,7 @@ var Text = function(parentEl) {
container.appendChild(measureNode);
}
}
-
+
// Size and width can be null if the editor is not visible or
// detached from the document
if (!this.element.offsetWidth)
@@ -153,7 +153,7 @@ var Text = function(parentEl) {
return null;
return size;
- }
+ }
: function() {
if (!this.$measureNode) {
var measureNode = this.$measureNode = dom.createElement("div");
@@ -178,7 +178,7 @@ var Text = function(parentEl) {
container.appendChild(measureNode);
}
-
+
var rect = this.$measureNode.getBoundingClientRect();
var size = {
@@ -382,7 +382,7 @@ var Text = function(parentEl) {
"lparen": true
};
- this.$renderToken = function(stringBuilder, screenColumn, token, value) {
+ this.$renderToken = function(stringBuilder, screenColumn, token, value) {
var self = this;
var replaceReg = /\t|&|<|( +)|([\u0000-\u0019\u00a0\u1680\u180E\u2000-\u200b\u2028\u2029\u202F\u205F\u3000\uFEFF])|[\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;
var replaceFunc = function(c, a, b, tabIdx, idx4) {
@@ -447,7 +447,7 @@ var Text = function(parentEl) {
"'>"
);
}
-
+
for (var i = 0; i < tokens.length; i++) {
var token = tokens[i];
var value = token.value;
@@ -461,12 +461,12 @@ var Text = function(parentEl) {
else {
while (chars + value.length >= splitChars) {
screenColumn = self.$renderToken(
- stringBuilder, screenColumn,
+ stringBuilder, screenColumn,
token, value.substring(0, splitChars - chars)
);
value = value.substring(splitChars - chars);
chars = splitChars;
-
+
if (!onlyContents) {
stringBuilder.push("",
"|[-+*/%<>&|^!?=]=|>>>=?|\\-\\-|\\+\\+|::|&&=|\\|\\|=|<<=|>>=|\\?\\.|\\.{2,3}|\\!)"
+ regex : "(?:[\\-=]>|[-+*/%<>&|^!?=]=|>>>=?|\\-\\-|\\+\\+|::|&&=|\\|\\|=|<<=|>>=|\\?\\.|\\.{2,3}|[!*+-=><])"
}, {
token : "paren.lparen",
regex : "[({[]"
diff --git a/lib/ace/mode/folding/c9search.js b/lib/ace/mode/folding/c9search.js
index 406222b6..2c9828de 100644
--- a/lib/ace/mode/folding/c9search.js
+++ b/lib/ace/mode/folding/c9search.js
@@ -48,46 +48,32 @@ oop.inherits(FoldMode, BaseFoldMode);
(function() {
- this.foldingStartMarker = /[a-zA-Z](:)\s*$/;
- this.foldingStopMarker = /^(\s*)$/;
+ this.foldingStartMarker = /^(\w.*\:|Searching for.*)$/;
+ this.foldingStopMarker = /^(\s+|Found.*)$/;
this.getFoldWidgetRange = function(session, foldStyle, row) {
var line = session.getLine(row);
- var match = line.match(this.foldingStartMarker);
- if (match) {
- var i = match.index;
+ var level1 = /^(Found.*|Searching for.*)$/;
+ var level2 = /^(\w.*\:|\s*)$/;
+ var re = level1.test(line) ? level1 : level2;
- if (match[1])
- return this.openingBracketBlock(session, match[1], row, i, false, true);
-
- var range = session.getCommentFoldRange(row, i + match[0].length);
- range.end.column -= 2;
- return range;
- }
-
- if (foldStyle !== "markbeginend")
- return;
-
- var match = line.match(this.foldingStopMarker);
- if (match) {
- var i = match.index + match[0].length;
-
- if (match[2]) {
- var range = session.getCommentFoldRange(row, i);
- range.end.column -= 2;
- return range;
+ if (this.foldingStartMarker.test(line)) {
+ for (var i = row + 1, l = session.getLength(); i < l; i++) {
+ if (re.test(session.getLine(i)))
+ break;
}
- var end = {row: row, column: i};
- var start = session.$findOpeningBracket(match[1], end);
-
- if (!start)
- return;
+ return new Range(row, line.length, i, 0);
+ }
- start.column++;
- end.column--;
+ if (this.foldingStopMarker.test(line)) {
+ for (var i = row - 1; i >= 0; i--) {
+ line = session.getLine(i);
+ if (re.test(line))
+ break;
+ }
- return Range.fromPoints(start, end);
+ return new Range(i, line.length, row, 0);
}
};
diff --git a/lib/ace/mode/folding/coffee.js b/lib/ace/mode/folding/coffee.js
new file mode 100644
index 00000000..b502afc4
--- /dev/null
+++ b/lib/ace/mode/folding/coffee.js
@@ -0,0 +1,127 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define(function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var BaseFoldMode = require("./fold_mode").FoldMode;
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
+ var range = this.indentationBlock(session, row);
+ if (range)
+ return range;
+
+ var re = /\S/;
+ var line = session.getLine(row);
+ var startLevel = line.search(re);
+ if (startLevel == -1 || line[startLevel] != "#")
+ return;
+
+ var startColumn = line.length;
+ var maxRow = session.getLength();
+ var startRow = row;
+ var endRow = row;
+
+ while (++row < maxRow) {
+ line = session.getLine(row);
+ var level = line.search(re);
+
+ if (level == -1)
+ continue;
+
+ if (line[level] != "#")
+ break;
+
+ endRow = row;
+ }
+
+ if (endRow > startRow) {
+ var endColumn = session.getLine(endRow).length;
+ return new Range(startRow, startColumn, endRow, endColumn);
+ }
+ };
+
+ // must return "" if there's no fold, to enable caching
+ this.getFoldWidget = function(session, foldStyle, row) {
+ var line = session.getLine(row);
+ var indent = line.search(/\S/);
+ var next = session.getLine(row + 1);
+ var prev = session.getLine(row - 1);
+ var prevIndent = prev.search(/\S/);
+ var nextIndent = next.search(/\S/);
+
+ if (indent == -1) {
+ session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
+ return "";
+ }
+
+ // documentation comments
+ if (prevIndent == -1) {
+ if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
+ session.foldWidgets[row - 1] = "";
+ session.foldWidgets[row + 1] = "";
+ return "start";
+ }
+ } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
+ if (session.getLine(row - 2).search(/\S/) == -1) {
+ session.foldWidgets[row - 1] = "start";
+ session.foldWidgets[row + 1] = "";
+ return ""
+ }
+ }
+
+ if (prevIndent!= -1 && prevIndent < indent)
+ session.foldWidgets[row - 1] = "start";
+ else
+ session.foldWidgets[row - 1] = "";
+
+ if (indent < nextIndent)
+ return "start";
+ else
+ return "";
+ };
+
+}).call(FoldMode.prototype);
+
+});
diff --git a/lib/ace/mode/folding/coffee_test.js b/lib/ace/mode/folding/coffee_test.js
new file mode 100644
index 00000000..41c440a2
--- /dev/null
+++ b/lib/ace/mode/folding/coffee_test.js
@@ -0,0 +1,108 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Ajax.org Code Editor (ACE).
+ *
+ * The Initial Developer of the Original Code is
+ * Ajax.org B.V.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Fabian Jakobs
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+if (typeof process !== "undefined")
+ require("amd-loader");
+
+define(function(require, exports, module) {
+"use strict";
+
+var CoffeeMode = require("../coffee").Mode;
+var EditSession = require("../../edit_session").EditSession;
+var assert = require("../../test/assertions");
+function testFoldWidgets(array) {
+ var session = array.filter(function(_, i){return i % 2 == 1});
+ session = new EditSession(session);
+ var mode = new CoffeeMode();
+ session.setFoldStyle("markbeginend");
+ session.setMode(mode);
+
+ var widgets = array.filter(function(_, i){return i % 2 == 0});
+ widgets.forEach(function(w, i){
+ session.foldWidgets[i] = session.getFoldWidget(i);
+ })
+ widgets.forEach(function(w, i){
+ w = w.split(",");
+ var type = w[0] == ">" ? "start" : w[0] == "<" ? "end" : "";
+ assert.equal(session.foldWidgets[i], type);
+ if (!type)
+ return;
+ var range = session.getFoldWidgetRange(i);
+ if (!w[1]) {
+ assert.equal(range, null);
+ return;
+ }
+ assert.equal(range.start.row, i);
+ assert.equal(range.end.row - range.start.row, parseInt(w[1]));
+ testColumn(w[2], range.start);
+ testColumn(w[3], range.end);
+ });
+
+ function testColumn(w, pos) {
+ if (!w)
+ return;
+ if (w == "l")
+ w = session.getLine(pos.row).length;
+ else
+ w = parseInt(w);
+ assert.equal(pos.column, w);
+ }
+}
+module.exports = {
+ "test: coffee script indentation based folding": function() {
+ testFoldWidgets([
+ '>,1,l,l', ' ## indented comment',
+ '', ' # ',
+ '', '',
+ '>,1,l,l', ' # plain comment',
+ '', ' # ',
+ '>,2', ' function (x)=>',
+ '', ' ',
+ '', ' x++',
+ '', ' ',
+ '', ' ',
+ '>,2', ' bar = ',
+ '', ' foo: 1',
+ '', ' baz: lighter'
+ ]);
+ }
+};
+
+});
+
+if (typeof module !== "undefined" && module === require.main)
+ require("asyncjs").test.testcase(module.exports).exec();
diff --git a/lib/ace/mode/folding/fold_mode.js b/lib/ace/mode/folding/fold_mode.js
index 849526c7..25407569 100644
--- a/lib/ace/mode/folding/fold_mode.js
+++ b/lib/ace/mode/folding/fold_mode.js
@@ -58,25 +58,27 @@ var FoldMode = exports.FoldMode = function() {};
return "end";
return "";
};
-
+
this.getFoldWidgetRange = function(session, foldStyle, row) {
return null;
};
this.indentationBlock = function(session, row, column) {
- var re = /^\s*/;
+ var re = /\S/;
+ var line = session.getLine(row);
+ var startLevel = line.search(re);
+ if (startLevel == -1)
+ return;
+
+ var startColumn = column || line.length;
+ var maxRow = session.getLength();
var startRow = row;
var endRow = row;
- var line = session.getLine(row);
- var startColumn = column || line.length;
- var startLevel = line.match(re)[0].length;
- var maxRow = session.getLength()
-
- while (++row < maxRow) {
- line = session.getLine(row);
- var level = line.match(re)[0].length;
- if (level == line.length)
+ while (++row < maxRow) {
+ var level = session.getLine(row).search(re);
+
+ if (level == -1)
continue;
if (level <= startLevel)
@@ -91,9 +93,9 @@ var FoldMode = exports.FoldMode = function() {};
}
};
- this.openingBracketBlock = function(session, bracket, row, column, typeRe, allowBlankLine) {
+ this.openingBracketBlock = function(session, bracket, row, column, typeRe) {
var start = {row: row, column: column + 1};
- var end = session.$findClosingBracket(bracket, start, typeRe, allowBlankLine);
+ var end = session.$findClosingBracket(bracket, start, typeRe);
if (!end)
return;
@@ -101,7 +103,7 @@ var FoldMode = exports.FoldMode = function() {};
if (fw == null)
fw = this.getFoldWidget(session, end.row);
- if (fw == "start") {
+ if (fw == "start" && end.row > start.row) {
end.row --;
end.column = session.getLine(end.row).length;
}
diff --git a/lib/ace/mode/folding/pythonic.js b/lib/ace/mode/folding/pythonic.js
index 90ab2aad..529cc797 100644
--- a/lib/ace/mode/folding/pythonic.js
+++ b/lib/ace/mode/folding/pythonic.js
@@ -42,7 +42,7 @@ var oop = require("../../lib/oop");
var BaseFoldMode = require("./fold_mode").FoldMode;
var FoldMode = exports.FoldMode = function(markers) {
- this.foldingStartMarker = new RegExp("(?:([\\[{])|(" + markers + "))(?:\\s*)(?:#.*)?$");
+ this.foldingStartMarker = new RegExp("([\\[{])(?:\\s*)$|(" + markers + ")(?:\\s*)(?:#.*)?$");
};
oop.inherits(FoldMode, BaseFoldMode);
diff --git a/lib/ace/mode/folding/pythonic_test.js b/lib/ace/mode/folding/pythonic_test.js
index 6cfb1f77..ca853715 100644
--- a/lib/ace/mode/folding/pythonic_test.js
+++ b/lib/ace/mode/folding/pythonic_test.js
@@ -49,11 +49,12 @@ module.exports = {
"test: bracket folding": function() {
var session = new EditSession([
- '[ #-',
+ '[ ',
'stuff',
']',
'[ ',
- '{ '
+ '{ ',
+ '[ #-',
]);
var mode = new PythonMode();
@@ -65,9 +66,11 @@ module.exports = {
assert.equal(session.getFoldWidget(2), "");
assert.equal(session.getFoldWidget(3), "start");
assert.equal(session.getFoldWidget(4), "start");
+ assert.equal(session.getFoldWidget(5), "");
assert.range(session.getFoldWidgetRange(0), 0, 1, 2, 0);
assert.equal(session.getFoldWidgetRange(3), null);
+ assert.equal(session.getFoldWidgetRange(5), null);
},
"test: indentation folding": function() {
diff --git a/lib/ace/mouse/default_gutter_handler.js b/lib/ace/mouse/default_gutter_handler.js
index fc9b012b..21c792a1 100644
--- a/lib/ace/mouse/default_gutter_handler.js
+++ b/lib/ace/mouse/default_gutter_handler.js
@@ -58,13 +58,10 @@ function GutterHandler(mouseHandler) {
var row = e.getDocumentPosition().row;
var selection = editor.session.selection;
- if (e.getShiftKey()) {
+ if (e.getShiftKey())
selection.selectTo(row, 0);
- } else {
- selection.moveCursorTo(row, 0);
- selection.selectLine();
- mouseHandler.$clickSelection = selection.getRange();
- }
+ else
+ mouseHandler.$clickSelection = editor.selection.getLineRange(row);
mouseHandler.captureMouse(e, "selectByLines");
return e.preventDefault();
diff --git a/lib/ace/mouse/default_handlers.js b/lib/ace/mouse/default_handlers.js
index 1b916801..7fabf75d 100644
--- a/lib/ace/mouse/default_handlers.js
+++ b/lib/ace/mouse/default_handlers.js
@@ -65,7 +65,7 @@ function DefaultHandlers(mouseHandler) {
mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, "getLineRange");
mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, "getWordRange");
-
+
mouseHandler.$focusWaitTimout = 250;
}
@@ -163,10 +163,12 @@ function DefaultHandlers(mouseHandler) {
if (cmpStart == -1 && cmpEnd <= 0) {
anchor = this.$clickSelection.end;
- cursor = range.start;
+ if (range.end.row != cursor.row || range.end.column != cursor.column)
+ cursor = range.start;
} else if (cmpEnd == 1 && cmpStart >= 0) {
anchor = this.$clickSelection.start;
- cursor = range.end;
+ if (range.start.row != cursor.row || range.start.column != cursor.column)
+ cursor = range.end;
} else if (cmpStart == -1 && cmpEnd == 1) {
cursor = range.end;
anchor = range.start;
@@ -286,7 +288,7 @@ function DefaultHandlers(mouseHandler) {
this.setState("select");
return;
}
-
+
this.$clickSelection = editor.selection.getWordRange(pos.row, pos.column);
this.setState("selectByWords");
};
@@ -296,10 +298,7 @@ function DefaultHandlers(mouseHandler) {
var editor = this.editor;
this.setState("selectByLines");
-
- editor.moveCursorToPosition(pos);
- editor.selection.selectLine();
- this.$clickSelection = editor.getSelectionRange();
+ this.$clickSelection = editor.selection.getLineRange(pos.row);
};
this.onQuadClick = function(ev) {
@@ -345,7 +344,7 @@ function calcRangeOrientation(range, cursor) {
var cmp = 2 * cursor.column - range.start.column - range.end.column;
else
var cmp = 2 * cursor.row - range.start.row - range.end.row;
-
+
if (cmp < 0)
return {cursor: range.start, anchor: range.end};
else
diff --git a/lib/ace/requirejs/text.js b/lib/ace/requirejs/text.js
index cf7ef666..6d6f59ce 100644
--- a/lib/ace/requirejs/text.js
+++ b/lib/ace/requirejs/text.js
@@ -41,17 +41,17 @@
(function() {
-var globalRequire = require;
+var globalRequire = typeof require != "undefined" && require;
define(function (require, exports, module) {
"use strict";
exports.load = function (name, req, onLoad, config) {
- if (req.isBrowser)
- require("ace/lib/net").get(req.toUrl(name), onLoad);
+ //Using special require.nodeRequire, something added by r.js.
+ if (globalRequire && globalRequire.nodeRequire)
+ onLoad(('fs').readFileSync(req.toUrl(name), 'utf8'));
else
- //Using special require.nodeRequire, something added by r.js.
- onLoad(globalRequire.nodeRequire('fs').readFileSync(req.toUrl(name), 'utf8'));
+ require("ace/lib/net").get(req.toUrl(name), onLoad);
};
});
diff --git a/lib/ace/test/all_browser.js b/lib/ace/test/all_browser.js
index 934149e4..f1f68c81 100644
--- a/lib/ace/test/all_browser.js
+++ b/lib/ace/test/all_browser.js
@@ -42,6 +42,7 @@ var testNames = [
"ace/mode/folding/html_test",
"ace/mode/folding/pythonic_test",
"ace/mode/folding/xml_test",
+ "ace/mode/folding/coffee_test",
"ace/multi_select_test",
"ace/range_test",
"ace/range_list_test",
diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js
index c41d976a..eb6a17c7 100644
--- a/lib/ace/virtual_renderer.js
+++ b/lib/ace/virtual_renderer.js
@@ -321,7 +321,7 @@ var VirtualRenderer = function(container, theme) {
var gutterWidth = this.showGutter ? this.$gutter.offsetWidth : 0;
this.scroller.style.left = gutterWidth + "px";
size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBar.getWidth());
- //this.scroller.style.width = size.scrollerWidth + "px";
+ this.scroller.style.right = this.scrollBar.getWidth() + "px";
if (this.session.getUseWrapMode() && this.adjustWrapLimit() || force)
changes = changes | this.CHANGE_FULL;