Merge branch 'ui/navbar' of github.com:ajaxorg/ace into ui/navbar

This commit is contained in:
Ruben Daniels 2012-04-30 11:45:48 -07:00
commit 0c6b19a5f3
6 changed files with 90 additions and 86 deletions

View file

@ -301,7 +301,8 @@ split.on("focus", function(editor) {
}); });
env.split = split; env.split = split;
window.env = env; window.env = env;
window.ace = env.editor; window.editor = window.ace = env.editor;
env.editor.setAnimatedScroll(true);
var docEl = document.getElementById("doc"); var docEl = document.getElementById("doc");
var modeEl = document.getElementById("mode"); 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; this.desiredValue = e.target.value;
if (!this.$timer) if (!this.$timer)
this.$timer = setTimeout(this.updateTheme); this.$timer = setTimeout(this.updateTheme);
}) })
themeEl.addEventListener("mouseout", function(e){ event.addListener(themeEl, "mouseout", function(e){
this.desiredValue = null; this.desiredValue = null;
if (!this.$timer) if (!this.$timer)
this.$timer = setTimeout(this.updateTheme, 20); this.$timer = setTimeout(this.updateTheme, 20);
@ -486,7 +487,6 @@ bindCheckbox("show_hscroll", function(checked) {
env.editor.renderer.setHScrollBarAlwaysVisible(checked); env.editor.renderer.setHScrollBarAlwaysVisible(checked);
}); });
env.editor.setAnimatedScroll(true);
bindCheckbox("animate_scroll", function(checked) { bindCheckbox("animate_scroll", function(checked) {
env.editor.setAnimatedScroll(checked); env.editor.setAnimatedScroll(checked);
}); });

View file

@ -524,14 +524,17 @@ var EditSession = function(text, mode) {
}; };
this.$mode = null; this.$mode = null;
this.$origMode = null; this.$modeId = null;
this.setMode = function(mode) { this.setMode = function(mode) {
// load on demand // load on demand
if (typeof mode === "string") { if (typeof mode === "string") {
this.$origMode = mode; if (this.$modeId == mode)
return;
this.$modeId = mode;
var _self = this; var _self = this;
this._loadMode(mode, function(module) { this._loadMode(mode, function(module) {
if (_self.$origMode !== mode) if (_self.$modeId !== mode)
return; return;
_self.setMode(module); _self.setMode(module);
@ -539,7 +542,7 @@ var EditSession = function(text, mode) {
return; return;
} else if (mode == null) { } else if (mode == null) {
mode = "ace/mode/text" mode = "ace/mode/text"
this.$origMode = mode; this.$modeId = mode;
this.$modes[mode] = this.$modes[mode] || (new TextMode()); this.$modes[mode] = this.$modes[mode] || (new TextMode());
this.setMode(this.$modes[mode]); this.setMode(this.$modes[mode]);
return; return;
@ -547,7 +550,7 @@ var EditSession = function(text, mode) {
if (this.$mode === mode) return; if (this.$mode === mode) return;
this.$mode = mode; this.$mode = mode;
this.$modeId = mode.$id;
this.$stopWorker(); this.$stopWorker();

View file

@ -390,21 +390,18 @@ var Text = function(parentEl) {
this.$renderToken = function(stringBuilder, screenColumn, token, value) { this.$renderToken = function(stringBuilder, screenColumn, token, value) {
var self = this; 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) { var replaceFunc = function(c, a, b, tabIdx, idx4) {
if (c.charCodeAt(0) == 32) { if (a) {
return new Array(c.length+1).join("&#160;"); return new Array(c.length+1).join("&#160;");
} else if (c == "&") {
return useragent.isOldGecko ? "&" : "&amp;";
} else if (c == "<") {
return "&lt;";
} else if (c == "\t") { } else if (c == "\t") {
var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx); var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);
screenColumn += tabSize - 1; screenColumn += tabSize - 1;
return self.$tabStrings[tabSize]; return self.$tabStrings[tabSize];
} else if (c == "&") {
if (useragent.isOldGecko)
return "&";
else
return "&amp;";
} else if (c == "<") {
return "&lt;";
} else if (c == "\u3000") { } else if (c == "\u3000") {
// U+3000 is both invisible AND full-width, so must be handled uniquely // U+3000 is both invisible AND full-width, so must be handled uniquely
var classToUse = self.showInvisibles ? "ace_cjk ace_invisible" : "ace_cjk"; var classToUse = self.showInvisibles ? "ace_cjk ace_invisible" : "ace_cjk";
@ -413,13 +410,11 @@ var Text = function(parentEl) {
return "<span class='" + classToUse + "' style='width:" + return "<span class='" + classToUse + "' style='width:" +
(self.config.characterWidth * 2) + (self.config.characterWidth * 2) +
"px'>" + space + "</span>"; "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]/)) { } else if (b) {
if (self.showInvisibles) { if (self.showInvisibles)
var space = new Array(c.length+1).join(self.SPACE_CHAR); return "<span class='ace_invisible ace_invalid'>" + self.SPACE_CHAR + "</span>";
return "<span class='ace_invisible'>" + space + "</span>"; else
} else {
return "&#160;"; return "&#160;";
}
} else { } else {
screenColumn += 1; screenColumn += 1;
return "<span class='ace_cjk' style='width:" + return "<span class='ace_cjk' style='width:" +

View file

@ -42,6 +42,7 @@ var RangeList = require("./range_list").RangeList;
var Range = require("./range").Range; var Range = require("./range").Range;
var Selection = require("./selection").Selection; var Selection = require("./selection").Selection;
var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; var onMouseDown = require("./mouse/multi_select_handler").onMouseDown;
var event = require("./lib/event");
exports.commands = require("./commands/multi_select_commands"); exports.commands = require("./commands/multi_select_commands");
// Todo: session.find or editor.findVolatile that returns range // Todo: session.find or editor.findVolatile that returns range
@ -734,7 +735,7 @@ function addAltCursorListeners(editor){
var el = editor.textInput.getElement(); var el = editor.textInput.getElement();
var altCursor = false; var altCursor = false;
var contentEl = editor.renderer.content; 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 (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) {
if (!altCursor) { if (!altCursor) {
contentEl.style.cursor = "crosshair"; contentEl.style.cursor = "crosshair";
@ -745,8 +746,8 @@ function addAltCursorListeners(editor){
} }
}); });
el.addEventListener("keyup", reset); event.addListener(el, "keyup", reset);
el.addEventListener("blur", reset); event.addListener(el, "blur", reset);
function reset() { function reset() {
if (altCursor) { if (altCursor) {
contentEl.style.cursor = ""; contentEl.style.cursor = "";

View file

@ -470,34 +470,58 @@ var Selection = function(session) {
this.moveCursorTo(row, column); 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() { this.moveCursorShortWordRight = function() {
var row = this.selectionLead.row; var row = this.selectionLead.row;
var column = this.selectionLead.column; var column = this.selectionLead.column;
var line = this.doc.getLine(row); var line = this.doc.getLine(row);
var rightOfCursor = line.substring(column); var rightOfCursor = line.substring(column);
var match; var fold = this.session.getFoldAt(row, column, 1);
this.session.nonTokenRe.lastIndex = 0; if (fold)
this.session.tokenRe.lastIndex = 0; return this.moveCursorTo(fold.end.row, fold.end.column);
var fold; if (column == line.length)
if (fold = this.session.getFoldAt(row, column, 1)) { return this.moveCursorRight();
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;
}
this.moveCursorTo(row, column); var index = this.$shortWordEndIndex(rightOfCursor);
this.moveCursorTo(row, column + index);
}; };
this.moveCursorShortWordLeft = function() { this.moveCursorShortWordLeft = function() {
@ -505,36 +529,17 @@ var Selection = function(session) {
var column = this.selectionLead.column; var column = this.selectionLead.column;
var fold; var fold;
if (fold = this.session.getFoldAt(row, column, -1)) { if (fold = this.session.getFoldAt(row, column, -1))
this.moveCursorTo(fold.start.row, fold.start.column); return this.moveCursorTo(fold.start.row, fold.start.column);
return;
}
if (column == 0) { if (column == 0)
this.moveCursorLeft(); return this.moveCursorLeft();
return;
}
var str = this.session.getFoldStringAt(row, column, -1); var str = this.session.getLine(row).substring(0, column);
if (str == null) {
str = this.doc.getLine(row).substring(0, column)
}
var leftOfCursor = lang.stringReverse(str); var leftOfCursor = lang.stringReverse(str);
var index = this.$shortWordEndIndex(leftOfCursor);
var match; return this.moveCursorTo(row, column - index);
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);
}; };
this.moveCursorWordRight = function() { this.moveCursorWordRight = function() {

View file

@ -101,8 +101,8 @@ exports.cssText = ".ace-tm .ace_editor {\
}\ }\
\ \
.ace-tm .ace_line .ace_invalid {\ .ace-tm .ace_line .ace_invalid {\
background-color: rgb(153, 0, 0);\ background-color: rgba(255, 0, 0, 0.1);\
color: white;\ color: red;\
}\ }\
\ \
.ace-tm .ace_line .ace_support.ace_function {\ .ace-tm .ace_line .ace_support.ace_function {\