Merge branch 'ui/navbar' of github.com:ajaxorg/ace into ui/navbar
This commit is contained in:
commit
0c6b19a5f3
6 changed files with 90 additions and 86 deletions
|
|
@ -301,7 +301,8 @@ split.on("focus", function(editor) {
|
|||
});
|
||||
env.split = split;
|
||||
window.env = env;
|
||||
window.ace = env.editor;
|
||||
window.editor = window.ace = env.editor;
|
||||
env.editor.setAnimatedScroll(true);
|
||||
|
||||
var docEl = document.getElementById("doc");
|
||||
var modeEl = document.getElementById("mode");
|
||||
|
|
@ -395,13 +396,13 @@ function saveOption(el, val) {
|
|||
}
|
||||
}
|
||||
|
||||
themeEl.addEventListener("mouseover", function(e){
|
||||
event.addListener(themeEl, "mouseover", function(e){
|
||||
this.desiredValue = e.target.value;
|
||||
if (!this.$timer)
|
||||
this.$timer = setTimeout(this.updateTheme);
|
||||
})
|
||||
|
||||
themeEl.addEventListener("mouseout", function(e){
|
||||
event.addListener(themeEl, "mouseout", function(e){
|
||||
this.desiredValue = null;
|
||||
if (!this.$timer)
|
||||
this.$timer = setTimeout(this.updateTheme, 20);
|
||||
|
|
@ -486,7 +487,6 @@ bindCheckbox("show_hscroll", function(checked) {
|
|||
env.editor.renderer.setHScrollBarAlwaysVisible(checked);
|
||||
});
|
||||
|
||||
env.editor.setAnimatedScroll(true);
|
||||
bindCheckbox("animate_scroll", function(checked) {
|
||||
env.editor.setAnimatedScroll(checked);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -487,7 +487,7 @@ var EditSession = function(text, mode) {
|
|||
this._loadMode = function(mode, callback) {
|
||||
if (this.$modes[mode])
|
||||
return callback(this.$modes[mode]);
|
||||
|
||||
|
||||
var _self = this;
|
||||
var module;
|
||||
try {
|
||||
|
|
@ -495,15 +495,15 @@ var EditSession = function(text, mode) {
|
|||
} catch (e) {};
|
||||
if (module)
|
||||
return done(module);
|
||||
|
||||
|
||||
fetch(function() {
|
||||
require([mode], done);
|
||||
});
|
||||
|
||||
|
||||
function done(module) {
|
||||
if (_self.$modes[mode])
|
||||
return callback(_self.$modes[mode]);
|
||||
|
||||
|
||||
_self.$modes[mode] = new module.Mode();
|
||||
_self.$modes[mode].$id = mode;
|
||||
_self._emit("loadmode", {
|
||||
|
|
@ -516,7 +516,7 @@ var EditSession = function(text, mode) {
|
|||
function fetch(callback) {
|
||||
if (!config.get("packaged"))
|
||||
return callback();
|
||||
|
||||
|
||||
var base = mode.split("/").pop();
|
||||
var filename = config.get("modePath") + "/mode-" + base + config.get("suffix");
|
||||
net.loadScript(filename, callback);
|
||||
|
|
@ -524,30 +524,33 @@ var EditSession = function(text, mode) {
|
|||
};
|
||||
|
||||
this.$mode = null;
|
||||
this.$origMode = null;
|
||||
this.$modeId = null;
|
||||
this.setMode = function(mode) {
|
||||
// load on demand
|
||||
if (typeof mode === "string") {
|
||||
this.$origMode = mode;
|
||||
if (this.$modeId == mode)
|
||||
return;
|
||||
|
||||
this.$modeId = mode;
|
||||
var _self = this;
|
||||
this._loadMode(mode, function(module) {
|
||||
if (_self.$origMode !== mode)
|
||||
if (_self.$modeId !== mode)
|
||||
return;
|
||||
|
||||
|
||||
_self.setMode(module);
|
||||
});
|
||||
return;
|
||||
} else if (mode == null) {
|
||||
mode = "ace/mode/text"
|
||||
this.$origMode = mode;
|
||||
this.$modeId = mode;
|
||||
this.$modes[mode] = this.$modes[mode] || (new TextMode());
|
||||
this.setMode(this.$modes[mode]);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (this.$mode === mode) return;
|
||||
this.$mode = mode;
|
||||
|
||||
this.$modeId = mode.$id;
|
||||
|
||||
this.$stopWorker();
|
||||
|
||||
|
|
@ -606,7 +609,7 @@ var EditSession = function(text, mode) {
|
|||
this.getMode = function() {
|
||||
return this.$mode;
|
||||
};
|
||||
|
||||
|
||||
this.$scrollTop = 0;
|
||||
this.setScrollTop = function(scrollTop) {
|
||||
scrollTop = Math.round(Math.max(0, scrollTop));
|
||||
|
|
@ -620,7 +623,7 @@ var EditSession = function(text, mode) {
|
|||
this.getScrollTop = function() {
|
||||
return this.$scrollTop;
|
||||
};
|
||||
|
||||
|
||||
this.$scrollLeft = 0;
|
||||
this.setScrollLeft = function(scrollLeft) {
|
||||
scrollLeft = Math.round(Math.max(0, scrollLeft));
|
||||
|
|
@ -758,7 +761,7 @@ var EditSession = function(text, mode) {
|
|||
this.selection.setSelectionRange(lastUndoRange);
|
||||
return lastUndoRange;
|
||||
};
|
||||
|
||||
|
||||
this.setUndoSelect = function(enable) {
|
||||
this.$undoSelect = enable;
|
||||
};
|
||||
|
|
@ -959,7 +962,7 @@ var EditSession = function(text, mode) {
|
|||
range.start.column
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
var len = this.doc.getLength() - 1;
|
||||
if (range.end.row > len) {
|
||||
range.end.row = len;
|
||||
|
|
|
|||
|
|
@ -390,21 +390,18 @@ var Text = function(parentEl) {
|
|||
|
||||
this.$renderToken = function(stringBuilder, screenColumn, token, value) {
|
||||
var self = this;
|
||||
var replaceReg = /\t|&|<|( +)|([\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000])|[\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 replaceReg = /\t|&|<|( +)|([\u0000-\u0019\u00a0\u2000-\u200b\u2028\u2029\u3000])|[\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) {
|
||||
if (c.charCodeAt(0) == 32) {
|
||||
if (a) {
|
||||
return new Array(c.length+1).join(" ");
|
||||
} else if (c == "&") {
|
||||
return useragent.isOldGecko ? "&" : "&";
|
||||
} else if (c == "<") {
|
||||
return "<";
|
||||
} else if (c == "\t") {
|
||||
var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);
|
||||
screenColumn += tabSize - 1;
|
||||
return self.$tabStrings[tabSize];
|
||||
} else if (c == "&") {
|
||||
if (useragent.isOldGecko)
|
||||
return "&";
|
||||
else
|
||||
return "&";
|
||||
} else if (c == "<") {
|
||||
return "<";
|
||||
} else if (c == "\u3000") {
|
||||
// U+3000 is both invisible AND full-width, so must be handled uniquely
|
||||
var classToUse = self.showInvisibles ? "ace_cjk ace_invisible" : "ace_cjk";
|
||||
|
|
@ -413,13 +410,11 @@ var Text = function(parentEl) {
|
|||
return "<span class='" + classToUse + "' style='width:" +
|
||||
(self.config.characterWidth * 2) +
|
||||
"px'>" + space + "</span>";
|
||||
} else if (c.match(/[\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]/)) {
|
||||
if (self.showInvisibles) {
|
||||
var space = new Array(c.length+1).join(self.SPACE_CHAR);
|
||||
return "<span class='ace_invisible'>" + space + "</span>";
|
||||
} else {
|
||||
} else if (b) {
|
||||
if (self.showInvisibles)
|
||||
return "<span class='ace_invisible ace_invalid'>" + self.SPACE_CHAR + "</span>";
|
||||
else
|
||||
return " ";
|
||||
}
|
||||
} else {
|
||||
screenColumn += 1;
|
||||
return "<span class='ace_cjk' style='width:" +
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ var RangeList = require("./range_list").RangeList;
|
|||
var Range = require("./range").Range;
|
||||
var Selection = require("./selection").Selection;
|
||||
var onMouseDown = require("./mouse/multi_select_handler").onMouseDown;
|
||||
var event = require("./lib/event");
|
||||
exports.commands = require("./commands/multi_select_commands");
|
||||
|
||||
// Todo: session.find or editor.findVolatile that returns range
|
||||
|
|
@ -734,7 +735,7 @@ function addAltCursorListeners(editor){
|
|||
var el = editor.textInput.getElement();
|
||||
var altCursor = false;
|
||||
var contentEl = editor.renderer.content;
|
||||
el.addEventListener("keydown", function(e) {
|
||||
event.addListener(el, "keydown", function(e) {
|
||||
if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) {
|
||||
if (!altCursor) {
|
||||
contentEl.style.cursor = "crosshair";
|
||||
|
|
@ -745,8 +746,8 @@ function addAltCursorListeners(editor){
|
|||
}
|
||||
});
|
||||
|
||||
el.addEventListener("keyup", reset);
|
||||
el.addEventListener("blur", reset);
|
||||
event.addListener(el, "keyup", reset);
|
||||
event.addListener(el, "blur", reset);
|
||||
function reset() {
|
||||
if (altCursor) {
|
||||
contentEl.style.cursor = "";
|
||||
|
|
|
|||
|
|
@ -470,34 +470,58 @@ var Selection = function(session) {
|
|||
this.moveCursorTo(row, column);
|
||||
};
|
||||
|
||||
this.$shortWordEndIndex = function(rightOfCursor) {
|
||||
var match, index = 0, ch;
|
||||
var whitespaceRe = /\s/;
|
||||
var tokenRe = this.session.tokenRe;
|
||||
|
||||
tokenRe.lastIndex = 0;
|
||||
if (match = this.session.tokenRe.exec(rightOfCursor)) {
|
||||
index = this.session.tokenRe.lastIndex;
|
||||
} else {
|
||||
while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))
|
||||
index ++;
|
||||
|
||||
if (index <= 1) {
|
||||
tokenRe.lastIndex = 0;
|
||||
while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {
|
||||
tokenRe.lastIndex = 0;
|
||||
index ++;
|
||||
if (whitespaceRe.test(ch)) {
|
||||
if (index > 2) {
|
||||
index--
|
||||
break;
|
||||
} else {
|
||||
while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))
|
||||
index ++;
|
||||
if (index > 2)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tokenRe.lastIndex = 0;
|
||||
|
||||
return index;
|
||||
};
|
||||
|
||||
this.moveCursorShortWordRight = function() {
|
||||
var row = this.selectionLead.row;
|
||||
var column = this.selectionLead.column;
|
||||
var line = this.doc.getLine(row);
|
||||
var rightOfCursor = line.substring(column);
|
||||
|
||||
var match;
|
||||
this.session.nonTokenRe.lastIndex = 0;
|
||||
this.session.tokenRe.lastIndex = 0;
|
||||
var fold = this.session.getFoldAt(row, column, 1);
|
||||
if (fold)
|
||||
return this.moveCursorTo(fold.end.row, fold.end.column);
|
||||
|
||||
var fold;
|
||||
if (fold = this.session.getFoldAt(row, column, 1)) {
|
||||
this.moveCursorTo(fold.end.row, fold.end.column);
|
||||
return;
|
||||
} else if (column == line.length) {
|
||||
this.moveCursorRight();
|
||||
return;
|
||||
}
|
||||
else if (match = this.session.nonTokenRe.exec(rightOfCursor)) {
|
||||
column += this.session.nonTokenRe.lastIndex;
|
||||
this.session.nonTokenRe.lastIndex = 0;
|
||||
}
|
||||
else if (match = this.session.tokenRe.exec(rightOfCursor)) {
|
||||
column += this.session.tokenRe.lastIndex;
|
||||
this.session.tokenRe.lastIndex = 0;
|
||||
}
|
||||
if (column == line.length)
|
||||
return this.moveCursorRight();
|
||||
|
||||
this.moveCursorTo(row, column);
|
||||
var index = this.$shortWordEndIndex(rightOfCursor);
|
||||
|
||||
this.moveCursorTo(row, column + index);
|
||||
};
|
||||
|
||||
this.moveCursorShortWordLeft = function() {
|
||||
|
|
@ -505,36 +529,17 @@ var Selection = function(session) {
|
|||
var column = this.selectionLead.column;
|
||||
|
||||
var fold;
|
||||
if (fold = this.session.getFoldAt(row, column, -1)) {
|
||||
this.moveCursorTo(fold.start.row, fold.start.column);
|
||||
return;
|
||||
}
|
||||
if (fold = this.session.getFoldAt(row, column, -1))
|
||||
return this.moveCursorTo(fold.start.row, fold.start.column);
|
||||
|
||||
if (column == 0) {
|
||||
this.moveCursorLeft();
|
||||
return;
|
||||
}
|
||||
if (column == 0)
|
||||
return this.moveCursorLeft();
|
||||
|
||||
var str = this.session.getFoldStringAt(row, column, -1);
|
||||
if (str == null) {
|
||||
str = this.doc.getLine(row).substring(0, column)
|
||||
}
|
||||
var str = this.session.getLine(row).substring(0, column);
|
||||
var leftOfCursor = lang.stringReverse(str);
|
||||
var index = this.$shortWordEndIndex(leftOfCursor);
|
||||
|
||||
var match;
|
||||
this.session.nonTokenRe.lastIndex = 0;
|
||||
this.session.tokenRe.lastIndex = 0;
|
||||
|
||||
if (match = this.session.nonTokenRe.exec(leftOfCursor)) {
|
||||
column -= this.session.nonTokenRe.lastIndex;
|
||||
this.session.nonTokenRe.lastIndex = 0;
|
||||
}
|
||||
else if (match = this.session.tokenRe.exec(leftOfCursor)) {
|
||||
column -= this.session.tokenRe.lastIndex;
|
||||
this.session.tokenRe.lastIndex = 0;
|
||||
}
|
||||
|
||||
this.moveCursorTo(row, column);
|
||||
return this.moveCursorTo(row, column - index);
|
||||
};
|
||||
|
||||
this.moveCursorWordRight = function() {
|
||||
|
|
|
|||
|
|
@ -101,8 +101,8 @@ exports.cssText = ".ace-tm .ace_editor {\
|
|||
}\
|
||||
\
|
||||
.ace-tm .ace_line .ace_invalid {\
|
||||
background-color: rgb(153, 0, 0);\
|
||||
color: white;\
|
||||
background-color: rgba(255, 0, 0, 0.1);\
|
||||
color: red;\
|
||||
}\
|
||||
\
|
||||
.ace-tm .ace_line .ace_support.ace_function {\
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue