update package

This commit is contained in:
Fabian Jakobs 2011-07-11 12:11:34 +02:00
commit 5ae074024a
5 changed files with 140 additions and 93 deletions

View file

@ -5667,6 +5667,7 @@ var Editor =function(renderer, session) {
this.onChangeBackMarker(); this.onChangeBackMarker();
this.onChangeBreakpoint(); this.onChangeBreakpoint();
this.onChangeAnnotation(); this.onChangeAnnotation();
this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();
this.renderer.scrollToRow(session.getScrollTopRow()); this.renderer.scrollToRow(session.getScrollTopRow());
this.renderer.updateFull(); this.renderer.updateFull();
@ -5694,15 +5695,19 @@ var Editor =function(renderer, session) {
this.getTheme = function() { this.getTheme = function() {
return this.renderer.getTheme(); return this.renderer.getTheme();
} };
this.setStyle = function(style) { this.setStyle = function(style) {
this.renderer.setStyle(style) this.renderer.setStyle(style);
}; };
this.unsetStyle = function(style) { this.unsetStyle = function(style) {
this.renderer.unsetStyle(style) this.renderer.unsetStyle(style);
} };
this.setFontSize = function(size) {
this.container.style.fontSize = size;
};
this.$highlightBrackets = function() { this.$highlightBrackets = function() {
if (this.session.$bracketHighlight) { if (this.session.$bracketHighlight) {
@ -6471,11 +6476,11 @@ var Editor =function(renderer, session) {
}; };
this.gotoLine = function(lineNumber, row) { this.gotoLine = function(lineNumber, column) {
this.selection.clearSelection(); this.selection.clearSelection();
this.$blockScrolling += 1; this.$blockScrolling += 1;
this.moveCursorTo(lineNumber-1, row || 0); this.moveCursorTo(lineNumber-1, column || 0);
this.$blockScrolling -= 1; this.$blockScrolling -= 1;
if (!this.isRowVisible(this.getCursorPosition().row)) { if (!this.isRowVisible(this.getCursorPosition().row)) {
@ -6728,6 +6733,10 @@ var TextInput = function(parentNode, host) {
host.onTextInput(value); host.onTextInput(value);
} else } else
host.onTextInput(value); host.onTextInput(value);
// If editor is no longer focused we quit immediately, since
// it means that something else like CLI is in charge now.
if (!isFocused()) return false;
} }
} }
copied = false; copied = false;
@ -6883,6 +6892,11 @@ var TextInput = function(parentNode, host) {
text.blur(); text.blur();
}; };
function isFocused() {
return document.activeElement === text;
};
this.isFocused = isFocused;
this.getElement = function() { this.getElement = function() {
return text; return text;
}; };
@ -7653,7 +7667,7 @@ canon.addCommand({
}); });
canon.addCommand({ canon.addCommand({
name: "removewordleft", name: "removewordleft",
bindKey: bindKey(null, "Alt-Backspace|Ctrl-Alt-Backspace"), bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"),
exec: function(env, args, request) { env.editor.removeWordLeft(); } exec: function(env, args, request) { env.editor.removeWordLeft(); }
}); });
canon.addCommand({ canon.addCommand({
@ -12890,6 +12904,20 @@ var VirtualRenderer = function(container, theme) {
scrollerWidth: 0 scrollerWidth: 0
}; };
this.layerConfig = {
width : 1,
padding : 0,
firstRow : 0,
firstRowScreen: 0,
lastRow : 0,
lineHeight : 1,
characterWidth : 1,
minHeight : 1,
maxHeight : 1,
offset : 0,
height : 1
};
this.$loop = new RenderLoop(this.$renderChanges.bind(this)); this.$loop = new RenderLoop(this.$renderChanges.bind(this));
this.$loop.schedule(this.CHANGE_FULL); this.$loop.schedule(this.CHANGE_FULL);
@ -12970,13 +12998,15 @@ var VirtualRenderer = function(container, theme) {
*/ */
this.onResize = function(force) { this.onResize = function(force) {
var changes = this.CHANGE_SIZE; var changes = this.CHANGE_SIZE;
var size = this.$size;
var height = dom.getInnerHeight(this.container); var height = dom.getInnerHeight(this.container);
if (force || this.$size.height != height) { if (force || size.height != height) {
this.$size.height = height; size.height = height;
this.scroller.style.height = height + "px"; this.scroller.style.height = height + "px";
this.scrollBar.setHeight(this.scroller.clientHeight); size.scrollerHeight = this.scroller.clientHeight;
this.scrollBar.setHeight(size.scrollerHeight);
if (this.session) { if (this.session) {
this.scrollToY(this.getScrollTop()); this.scrollToY(this.getScrollTop());
@ -12985,27 +13015,27 @@ var VirtualRenderer = function(container, theme) {
} }
var width = dom.getInnerWidth(this.container); var width = dom.getInnerWidth(this.container);
if (force || this.$size.width != width) { if (force || size.width != width) {
this.$size.width = width; size.width = width;
var gutterWidth = this.showGutter ? this.$gutter.offsetWidth : 0; var gutterWidth = this.showGutter ? this.$gutter.offsetWidth : 0;
this.scroller.style.left = gutterWidth + "px"; this.scroller.style.left = gutterWidth + "px";
this.scroller.style.width = Math.max(0, width - gutterWidth - this.scrollBar.getWidth()) + "px"; size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBar.getWidth())
this.scroller.style.width = size.scrollerWidth + "px";
if (this.session.getUseWrapMode()) { if (this.session.getUseWrapMode() && this.adjustWrapLimit() || force)
var availableWidth = this.scroller.clientWidth - this.$padding * 2; changes = changes | this.CHANGE_FULL;
var limit = Math.floor(availableWidth / this.characterWidth) - 1;
if (this.session.adjustWrapLimit(limit) || force) {
changes = changes | this.CHANGE_FULL;
}
}
} }
this.$size.scrollerWidth = this.scroller.clientWidth;
this.$size.scrollerHeight = this.scroller.clientHeight;
this.$loop.schedule(changes); this.$loop.schedule(changes);
}; };
this.adjustWrapLimit = function(){
var availableWidth = this.$size.scrollerWidth - this.$padding * 2;
var limit = Math.floor(availableWidth / this.characterWidth) - 1;
return this.session.adjustWrapLimit(limit);
};
this.$onGutterClick = function(e) { this.$onGutterClick = function(e) {
var pageX = event.getDocumentX(e); var pageX = event.getDocumentX(e);
var pageY = event.getDocumentY(e); var pageY = event.getDocumentY(e);
@ -13099,33 +13129,27 @@ var VirtualRenderer = function(container, theme) {
return; return;
var bounds = this.content.getBoundingClientRect(); var bounds = this.content.getBoundingClientRect();
var offset = (this.layerConfig && this.layerConfig.offset) || 0; var offset = this.layerConfig.offset;
textarea.style.left = (bounds.left + pos.left + this.$padding) + "px"; textarea.style.left = (bounds.left + pos.left + this.$padding) + "px";
textarea.style.top = (bounds.top + pos.top - this.scrollTop + offset) + "px"; textarea.style.top = (bounds.top + pos.top - this.scrollTop + offset) + "px";
}; };
this.getFirstVisibleRow = function() { this.getFirstVisibleRow = function() {
return (this.layerConfig || {}).firstRow || 0; return this.layerConfig.firstRow;
}; };
this.getFirstFullyVisibleRow = function(){ this.getFirstFullyVisibleRow = function() {
if (!this.layerConfig)
return 0;
return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);
}; };
this.getLastFullyVisibleRow = function() { this.getLastFullyVisibleRow = function() {
if (!this.layerConfig)
return 0;
var flint = Math.floor((this.layerConfig.height + this.layerConfig.offset) / this.layerConfig.lineHeight); var flint = Math.floor((this.layerConfig.height + this.layerConfig.offset) / this.layerConfig.lineHeight);
return this.layerConfig.firstRow - 1 + flint; return this.layerConfig.firstRow - 1 + flint;
}; };
this.getLastVisibleRow = function() { this.getLastVisibleRow = function() {
return (this.layerConfig || {}).lastRow || 0; return this.layerConfig.lastRow;
}; };
this.$padding = null; this.$padding = null;
@ -13162,8 +13186,7 @@ var VirtualRenderer = function(container, theme) {
return; return;
// text, scrolling and resize changes can cause the view port size to change // text, scrolling and resize changes can cause the view port size to change
if (!this.layerConfig || if (changes & this.CHANGE_FULL ||
changes & this.CHANGE_FULL ||
changes & this.CHANGE_SIZE || changes & this.CHANGE_SIZE ||
changes & this.CHANGE_TEXT || changes & this.CHANGE_TEXT ||
changes & this.CHANGE_LINES || changes & this.CHANGE_LINES ||
@ -13189,7 +13212,7 @@ var VirtualRenderer = function(container, theme) {
this.$textLayer.update(this.layerConfig); this.$textLayer.update(this.layerConfig);
else else
this.$textLayer.scrollLines(this.layerConfig); this.$textLayer.scrollLines(this.layerConfig);
if (this.showGutter) if (this.showGutter)
this.$gutterLayer.update(this.layerConfig); this.$gutterLayer.update(this.layerConfig);
this.$markerBack.update(this.layerConfig); this.$markerBack.update(this.layerConfig);
@ -13236,7 +13259,7 @@ var VirtualRenderer = function(container, theme) {
var minHeight = this.$size.scrollerHeight + this.lineHeight; var minHeight = this.$size.scrollerHeight + this.lineHeight;
var longestLine = this.$getLongestLine(); var longestLine = this.$getLongestLine();
var widthChanged = !this.layerConfig ? true : (this.layerConfig.width != longestLine); var widthChanged = this.layerConfig.width != longestLine;
var horizScroll = this.$horizScrollAlwaysVisible || this.$size.scrollerWidth - longestLine < 0; var horizScroll = this.$horizScrollAlwaysVisible || this.$size.scrollerWidth - longestLine < 0;
var horizScrollChanged = this.$horizScroll !== horizScroll; var horizScrollChanged = this.$horizScroll !== horizScroll;
@ -13536,7 +13559,7 @@ var VirtualRenderer = function(container, theme) {
this.setTheme = function(theme) { this.setTheme = function(theme) {
var _self = this; var _self = this;
this.$themeValue = theme; this.$themeValue = theme;
if (!theme || typeof theme == "string") { if (!theme || typeof theme == "string") {
theme = theme || "ace/theme/textmate"; theme = theme || "ace/theme/textmate";
@ -14282,19 +14305,19 @@ var Text = function(parentEl) {
else { else {
stringBuilder.push(output); stringBuilder.push(output);
} }
return value.length; return screenColumn + value.length;
}; };
this.$renderLineCore = function(stringBuilder, lastRow, tokens, splits) { this.$renderLineCore = function(stringBuilder, lastRow, tokens, splits) {
var chars = 0, var chars = 0;
split = 0, var split = 0;
splitChars, var splitChars;
characterWidth = this.config.characterWidth, var characterWidth = this.config.characterWidth;
screenColumn = 0, var screenColumn = 0;
self = this; var self = this;
function addToken(token, value) { function addToken(token, value) {
screenColumn += self.$renderToken( screenColumn = self.$renderToken(
stringBuilder, screenColumn, token, value); stringBuilder, screenColumn, token, value);
} }

File diff suppressed because one or more lines are too long

View file

@ -5656,6 +5656,7 @@ var Editor =function(renderer, session) {
this.onChangeBackMarker(); this.onChangeBackMarker();
this.onChangeBreakpoint(); this.onChangeBreakpoint();
this.onChangeAnnotation(); this.onChangeAnnotation();
this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();
this.renderer.scrollToRow(session.getScrollTopRow()); this.renderer.scrollToRow(session.getScrollTopRow());
this.renderer.updateFull(); this.renderer.updateFull();
@ -5683,15 +5684,19 @@ var Editor =function(renderer, session) {
this.getTheme = function() { this.getTheme = function() {
return this.renderer.getTheme(); return this.renderer.getTheme();
} };
this.setStyle = function(style) { this.setStyle = function(style) {
this.renderer.setStyle(style) this.renderer.setStyle(style);
}; };
this.unsetStyle = function(style) { this.unsetStyle = function(style) {
this.renderer.unsetStyle(style) this.renderer.unsetStyle(style);
} };
this.setFontSize = function(size) {
this.container.style.fontSize = size;
};
this.$highlightBrackets = function() { this.$highlightBrackets = function() {
if (this.session.$bracketHighlight) { if (this.session.$bracketHighlight) {
@ -6460,11 +6465,11 @@ var Editor =function(renderer, session) {
}; };
this.gotoLine = function(lineNumber, row) { this.gotoLine = function(lineNumber, column) {
this.selection.clearSelection(); this.selection.clearSelection();
this.$blockScrolling += 1; this.$blockScrolling += 1;
this.moveCursorTo(lineNumber-1, row || 0); this.moveCursorTo(lineNumber-1, column || 0);
this.$blockScrolling -= 1; this.$blockScrolling -= 1;
if (!this.isRowVisible(this.getCursorPosition().row)) { if (!this.isRowVisible(this.getCursorPosition().row)) {
@ -6717,6 +6722,10 @@ var TextInput = function(parentNode, host) {
host.onTextInput(value); host.onTextInput(value);
} else } else
host.onTextInput(value); host.onTextInput(value);
// If editor is no longer focused we quit immediately, since
// it means that something else like CLI is in charge now.
if (!isFocused()) return false;
} }
} }
copied = false; copied = false;
@ -6872,6 +6881,11 @@ var TextInput = function(parentNode, host) {
text.blur(); text.blur();
}; };
function isFocused() {
return document.activeElement === text;
};
this.isFocused = isFocused;
this.getElement = function() { this.getElement = function() {
return text; return text;
}; };
@ -7642,7 +7656,7 @@ canon.addCommand({
}); });
canon.addCommand({ canon.addCommand({
name: "removewordleft", name: "removewordleft",
bindKey: bindKey(null, "Alt-Backspace|Ctrl-Alt-Backspace"), bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"),
exec: function(env, args, request) { env.editor.removeWordLeft(); } exec: function(env, args, request) { env.editor.removeWordLeft(); }
}); });
canon.addCommand({ canon.addCommand({
@ -12879,6 +12893,20 @@ var VirtualRenderer = function(container, theme) {
scrollerWidth: 0 scrollerWidth: 0
}; };
this.layerConfig = {
width : 1,
padding : 0,
firstRow : 0,
firstRowScreen: 0,
lastRow : 0,
lineHeight : 1,
characterWidth : 1,
minHeight : 1,
maxHeight : 1,
offset : 0,
height : 1
};
this.$loop = new RenderLoop(this.$renderChanges.bind(this)); this.$loop = new RenderLoop(this.$renderChanges.bind(this));
this.$loop.schedule(this.CHANGE_FULL); this.$loop.schedule(this.CHANGE_FULL);
@ -12959,13 +12987,15 @@ var VirtualRenderer = function(container, theme) {
*/ */
this.onResize = function(force) { this.onResize = function(force) {
var changes = this.CHANGE_SIZE; var changes = this.CHANGE_SIZE;
var size = this.$size;
var height = dom.getInnerHeight(this.container); var height = dom.getInnerHeight(this.container);
if (force || this.$size.height != height) { if (force || size.height != height) {
this.$size.height = height; size.height = height;
this.scroller.style.height = height + "px"; this.scroller.style.height = height + "px";
this.scrollBar.setHeight(this.scroller.clientHeight); size.scrollerHeight = this.scroller.clientHeight;
this.scrollBar.setHeight(size.scrollerHeight);
if (this.session) { if (this.session) {
this.scrollToY(this.getScrollTop()); this.scrollToY(this.getScrollTop());
@ -12974,27 +13004,27 @@ var VirtualRenderer = function(container, theme) {
} }
var width = dom.getInnerWidth(this.container); var width = dom.getInnerWidth(this.container);
if (force || this.$size.width != width) { if (force || size.width != width) {
this.$size.width = width; size.width = width;
var gutterWidth = this.showGutter ? this.$gutter.offsetWidth : 0; var gutterWidth = this.showGutter ? this.$gutter.offsetWidth : 0;
this.scroller.style.left = gutterWidth + "px"; this.scroller.style.left = gutterWidth + "px";
this.scroller.style.width = Math.max(0, width - gutterWidth - this.scrollBar.getWidth()) + "px"; size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBar.getWidth())
this.scroller.style.width = size.scrollerWidth + "px";
if (this.session.getUseWrapMode()) { if (this.session.getUseWrapMode() && this.adjustWrapLimit() || force)
var availableWidth = this.scroller.clientWidth - this.$padding * 2; changes = changes | this.CHANGE_FULL;
var limit = Math.floor(availableWidth / this.characterWidth) - 1;
if (this.session.adjustWrapLimit(limit) || force) {
changes = changes | this.CHANGE_FULL;
}
}
} }
this.$size.scrollerWidth = this.scroller.clientWidth;
this.$size.scrollerHeight = this.scroller.clientHeight;
this.$loop.schedule(changes); this.$loop.schedule(changes);
}; };
this.adjustWrapLimit = function(){
var availableWidth = this.$size.scrollerWidth - this.$padding * 2;
var limit = Math.floor(availableWidth / this.characterWidth) - 1;
return this.session.adjustWrapLimit(limit);
};
this.$onGutterClick = function(e) { this.$onGutterClick = function(e) {
var pageX = event.getDocumentX(e); var pageX = event.getDocumentX(e);
var pageY = event.getDocumentY(e); var pageY = event.getDocumentY(e);
@ -13088,33 +13118,27 @@ var VirtualRenderer = function(container, theme) {
return; return;
var bounds = this.content.getBoundingClientRect(); var bounds = this.content.getBoundingClientRect();
var offset = (this.layerConfig && this.layerConfig.offset) || 0; var offset = this.layerConfig.offset;
textarea.style.left = (bounds.left + pos.left + this.$padding) + "px"; textarea.style.left = (bounds.left + pos.left + this.$padding) + "px";
textarea.style.top = (bounds.top + pos.top - this.scrollTop + offset) + "px"; textarea.style.top = (bounds.top + pos.top - this.scrollTop + offset) + "px";
}; };
this.getFirstVisibleRow = function() { this.getFirstVisibleRow = function() {
return (this.layerConfig || {}).firstRow || 0; return this.layerConfig.firstRow;
}; };
this.getFirstFullyVisibleRow = function(){ this.getFirstFullyVisibleRow = function() {
if (!this.layerConfig)
return 0;
return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);
}; };
this.getLastFullyVisibleRow = function() { this.getLastFullyVisibleRow = function() {
if (!this.layerConfig)
return 0;
var flint = Math.floor((this.layerConfig.height + this.layerConfig.offset) / this.layerConfig.lineHeight); var flint = Math.floor((this.layerConfig.height + this.layerConfig.offset) / this.layerConfig.lineHeight);
return this.layerConfig.firstRow - 1 + flint; return this.layerConfig.firstRow - 1 + flint;
}; };
this.getLastVisibleRow = function() { this.getLastVisibleRow = function() {
return (this.layerConfig || {}).lastRow || 0; return this.layerConfig.lastRow;
}; };
this.$padding = null; this.$padding = null;
@ -13151,8 +13175,7 @@ var VirtualRenderer = function(container, theme) {
return; return;
// text, scrolling and resize changes can cause the view port size to change // text, scrolling and resize changes can cause the view port size to change
if (!this.layerConfig || if (changes & this.CHANGE_FULL ||
changes & this.CHANGE_FULL ||
changes & this.CHANGE_SIZE || changes & this.CHANGE_SIZE ||
changes & this.CHANGE_TEXT || changes & this.CHANGE_TEXT ||
changes & this.CHANGE_LINES || changes & this.CHANGE_LINES ||
@ -13178,7 +13201,7 @@ var VirtualRenderer = function(container, theme) {
this.$textLayer.update(this.layerConfig); this.$textLayer.update(this.layerConfig);
else else
this.$textLayer.scrollLines(this.layerConfig); this.$textLayer.scrollLines(this.layerConfig);
if (this.showGutter) if (this.showGutter)
this.$gutterLayer.update(this.layerConfig); this.$gutterLayer.update(this.layerConfig);
this.$markerBack.update(this.layerConfig); this.$markerBack.update(this.layerConfig);
@ -13225,7 +13248,7 @@ var VirtualRenderer = function(container, theme) {
var minHeight = this.$size.scrollerHeight + this.lineHeight; var minHeight = this.$size.scrollerHeight + this.lineHeight;
var longestLine = this.$getLongestLine(); var longestLine = this.$getLongestLine();
var widthChanged = !this.layerConfig ? true : (this.layerConfig.width != longestLine); var widthChanged = this.layerConfig.width != longestLine;
var horizScroll = this.$horizScrollAlwaysVisible || this.$size.scrollerWidth - longestLine < 0; var horizScroll = this.$horizScrollAlwaysVisible || this.$size.scrollerWidth - longestLine < 0;
var horizScrollChanged = this.$horizScroll !== horizScroll; var horizScrollChanged = this.$horizScroll !== horizScroll;
@ -13525,7 +13548,7 @@ var VirtualRenderer = function(container, theme) {
this.setTheme = function(theme) { this.setTheme = function(theme) {
var _self = this; var _self = this;
this.$themeValue = theme; this.$themeValue = theme;
if (!theme || typeof theme == "string") { if (!theme || typeof theme == "string") {
theme = theme || "ace/theme/textmate"; theme = theme || "ace/theme/textmate";
@ -14271,19 +14294,19 @@ var Text = function(parentEl) {
else { else {
stringBuilder.push(output); stringBuilder.push(output);
} }
return value.length; return screenColumn + value.length;
}; };
this.$renderLineCore = function(stringBuilder, lastRow, tokens, splits) { this.$renderLineCore = function(stringBuilder, lastRow, tokens, splits) {
var chars = 0, var chars = 0;
split = 0, var split = 0;
splitChars, var splitChars;
characterWidth = this.config.characterWidth, var characterWidth = this.config.characterWidth;
screenColumn = 0, var screenColumn = 0;
self = this; var self = this;
function addToken(token, value) { function addToken(token, value) {
screenColumn += self.$renderToken( screenColumn = self.$renderToken(
stringBuilder, screenColumn, token, value); stringBuilder, screenColumn, token, value);
} }
@ -15550,7 +15573,7 @@ function setupApi(editor, editorDiv, settingDiv, ace, options) {
} }
} }
for (option in ace.options) { for (var option in ace.options) {
ret.setOption(option, ace.options[option]); ret.setOption(option, ace.options[option]);
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long