update build
This commit is contained in:
parent
e37dc3f7e4
commit
31ebf038db
3 changed files with 105 additions and 42 deletions
|
|
@ -598,23 +598,21 @@ if (!Object.isFrozen) Object.isFrozen = no;
|
||||||
// ES5 15.2.3.13
|
// ES5 15.2.3.13
|
||||||
if (!Object.isExtensible) Object.isExtensible = yes;
|
if (!Object.isExtensible) Object.isExtensible = yes;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!String.prototype.trim) {
|
if (!String.prototype.trim) {
|
||||||
String.prototype.trim = function() {
|
String.prototype.trim = function() {
|
||||||
return this.replace(/^\s+/, "").replace(/\s+$/, "");
|
return this.trimLeft().trimRight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!String.prototype.trimRight) {
|
if (!String.prototype.trimRight) {
|
||||||
String.prototype.trimRight = function() {
|
String.prototype.trimRight = function() {
|
||||||
return this.replace(/\s+$/, "");
|
return this.replace(/[\t\v\f\s\u00a0\ufeff]+$/, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!String.prototype.trimLeft) {
|
if (!String.prototype.trimLeft) {
|
||||||
String.prototype.trimRight = function() {
|
String.prototype.trimLeft = function() {
|
||||||
return this.replace(/^\s+/, "");
|
return this.replace(/^[\t\v\f\s\u00a0\ufeff]+/, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4799,6 +4797,9 @@ var Editor =function(renderer, session) {
|
||||||
this.renderer.scrollToRow(row);
|
this.renderer.scrollToRow(row);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.scrollToLine = function(line, center) {
|
||||||
|
this.renderer.scrollToLine(line, center);
|
||||||
|
};
|
||||||
|
|
||||||
this.getCursorPosition = function() {
|
this.getCursorPosition = function() {
|
||||||
return this.selection.getCursor();
|
return this.selection.getCursor();
|
||||||
|
|
@ -4836,7 +4837,7 @@ var Editor =function(renderer, session) {
|
||||||
this.$blockScrolling -= 1;
|
this.$blockScrolling -= 1;
|
||||||
|
|
||||||
if (!this.isRowVisible(this.getCursorPosition().row)) {
|
if (!this.isRowVisible(this.getCursorPosition().row)) {
|
||||||
this.scrollToRow(lineNumber - 1 - Math.floor(this.getVisibleRowCount() / 2));
|
this.scrollToLine(lineNumber, true);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -5554,11 +5555,11 @@ if (window.pageYOffset !== undefined) {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
exports.getPageScrollTop = function() {
|
exports.getPageScrollTop = function() {
|
||||||
return ocument.body.scrollTop;
|
return document.body.scrollTop;
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.getPageScrollLeft = function() {
|
exports.getPageScrollLeft = function() {
|
||||||
return ocument.body.scrollLeft;
|
return document.body.scrollLeft;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5783,7 +5784,6 @@ var TextInput = function(parentNode, host) {
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
sendText();
|
sendText();
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var onCut = function(e) {
|
var onCut = function(e) {
|
||||||
|
|
@ -5798,7 +5798,6 @@ var TextInput = function(parentNode, host) {
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
sendText();
|
sendText();
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
event.addCommandKeyListener(text, host.onCommandKey.bind(host));
|
event.addCommandKeyListener(text, host.onCommandKey.bind(host));
|
||||||
|
|
@ -5832,8 +5831,29 @@ var TextInput = function(parentNode, host) {
|
||||||
event.addListener(text, "propertychange", onTextInput);
|
event.addListener(text, "propertychange", onTextInput);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (useragent.isIE) {
|
||||||
|
event.addListener(text, "beforecopy", function(e) {
|
||||||
|
var copyText = host.getCopyText();
|
||||||
|
if(copyText)
|
||||||
|
clipboardData.setData("Text", copyText);
|
||||||
|
else
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
event.addListener(parentNode, "keydown", function(e) {
|
||||||
|
if (e.ctrlKey && e.keyCode == 88) {
|
||||||
|
var copyText = host.getCopyText();
|
||||||
|
if (copyText) {
|
||||||
|
clipboardData.setData("Text", copyText);
|
||||||
|
host.onCut();
|
||||||
|
}
|
||||||
|
event.preventDefault(e)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
event.addListener(text, "copy", onCopy);
|
event.addListener(text, "copy", onCopy);
|
||||||
event.addListener(text, "cut", onCut);
|
event.addListener(text, "cut", onCut);
|
||||||
|
}
|
||||||
|
|
||||||
event.addListener(text, "compositionstart", onCompositionStart);
|
event.addListener(text, "compositionstart", onCompositionStart);
|
||||||
if (useragent.isGecko) {
|
if (useragent.isGecko) {
|
||||||
|
|
@ -6715,8 +6735,7 @@ canon.addCommand({
|
||||||
canon.addCommand({
|
canon.addCommand({
|
||||||
name: "inserttext",
|
name: "inserttext",
|
||||||
exec: function(env, args, request) {
|
exec: function(env, args, request) {
|
||||||
env.editor.insert(lang.stringRepeat(args.text || "",
|
env.editor.insert(lang.stringRepeat(args.text || "", args.times || 1));
|
||||||
args.times || 1));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -7929,10 +7948,12 @@ var Selection = function(session) {
|
||||||
this.selectionAnchor = new Anchor(this.doc, 0, 0);
|
this.selectionAnchor = new Anchor(this.doc, 0, 0);
|
||||||
|
|
||||||
var _self = this;
|
var _self = this;
|
||||||
this.selectionLead.on("change", function() {
|
this.selectionLead.on("change", function(e) {
|
||||||
_self._dispatchEvent("changeCursor");
|
_self._dispatchEvent("changeCursor");
|
||||||
if (!_self.$isEmpty)
|
if (!_self.$isEmpty)
|
||||||
_self._dispatchEvent("changeSelection");
|
_self._dispatchEvent("changeSelection");
|
||||||
|
if (e.old.row == e.value.row)
|
||||||
|
_self.$updateDesiredColumn();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.selectionAnchor.on("change", function() {
|
this.selectionAnchor.on("change", function() {
|
||||||
|
|
@ -8052,9 +8073,7 @@ var Selection = function(session) {
|
||||||
|
|
||||||
this.$updateDesiredColumn = function() {
|
this.$updateDesiredColumn = function() {
|
||||||
var cursor = this.getCursor();
|
var cursor = this.getCursor();
|
||||||
if (cursor) {
|
|
||||||
this.$desiredColumn = this.session.documentToScreenColumn(cursor.row, cursor.column);
|
this.$desiredColumn = this.session.documentToScreenColumn(cursor.row, cursor.column);
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
this.$moveSelection = function(mover) {
|
this.$moveSelection = function(mover) {
|
||||||
|
|
@ -8595,9 +8614,17 @@ var Anchor = exports.Anchor = function(doc, row, column) {
|
||||||
if (this.row == pos.row && this.column == pos.column)
|
if (this.row == pos.row && this.column == pos.column)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
var old = {
|
||||||
|
row: this.row,
|
||||||
|
column: this.column
|
||||||
|
};
|
||||||
|
|
||||||
this.row = pos.row;
|
this.row = pos.row;
|
||||||
this.column = pos.column;
|
this.column = pos.column;
|
||||||
this._dispatchEvent("change");
|
this._dispatchEvent("change", {
|
||||||
|
old: old,
|
||||||
|
value: pos
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.detach = function() {
|
this.detach = function() {
|
||||||
|
|
@ -8789,7 +8816,7 @@ var Tokenizer = function(rules) {
|
||||||
var value = match[0];
|
var value = match[0];
|
||||||
|
|
||||||
for ( var i = 0; i < state.length; i++) {
|
for ( var i = 0; i < state.length; i++) {
|
||||||
if (match[i + 1] !== undefined) {
|
if (match[i + 1]) {
|
||||||
if (typeof state[i].token == "function") {
|
if (typeof state[i].token == "function") {
|
||||||
type = state[i].token(match[0]);
|
type = state[i].token(match[0]);
|
||||||
}
|
}
|
||||||
|
|
@ -10095,19 +10122,19 @@ var VirtualRenderer = function(container, theme) {
|
||||||
this.scroller.appendChild(this.content);
|
this.scroller.appendChild(this.content);
|
||||||
|
|
||||||
this.$gutterLayer = new GutterLayer(this.$gutter);
|
this.$gutterLayer = new GutterLayer(this.$gutter);
|
||||||
this.$markerLayer = new MarkerLayer(this.content);
|
this.$markerBack = new MarkerLayer(this.content);
|
||||||
|
|
||||||
var textLayer = this.$textLayer = new TextLayer(this.content);
|
var textLayer = this.$textLayer = new TextLayer(this.content);
|
||||||
this.canvas = textLayer.element;
|
this.canvas = textLayer.element;
|
||||||
|
|
||||||
|
this.$markerFront = new MarkerLayer(this.content);
|
||||||
|
|
||||||
this.characterWidth = textLayer.getCharacterWidth();
|
this.characterWidth = textLayer.getCharacterWidth();
|
||||||
this.lineHeight = textLayer.getLineHeight();
|
this.lineHeight = textLayer.getLineHeight();
|
||||||
|
|
||||||
this.$cursorLayer = new CursorLayer(this.content);
|
this.$cursorLayer = new CursorLayer(this.content);
|
||||||
this.$cursorPadding = 8;
|
this.$cursorPadding = 8;
|
||||||
|
|
||||||
this.layers = [ this.$markerLayer, textLayer, this.$cursorLayer ];
|
|
||||||
|
|
||||||
this.scrollBar = new ScrollBar(container);
|
this.scrollBar = new ScrollBar(container);
|
||||||
this.scrollBar.addEventListener("scroll", this.onScroll.bind(this));
|
this.scrollBar.addEventListener("scroll", this.onScroll.bind(this));
|
||||||
|
|
||||||
|
|
@ -10153,14 +10180,17 @@ var VirtualRenderer = function(container, theme) {
|
||||||
this.CHANGE_LINES = 16;
|
this.CHANGE_LINES = 16;
|
||||||
this.CHANGE_TEXT = 32;
|
this.CHANGE_TEXT = 32;
|
||||||
this.CHANGE_SIZE = 64;
|
this.CHANGE_SIZE = 64;
|
||||||
this.CHANGE_FULL = 128;
|
this.CHANGE_MARKER_BACK = 128;
|
||||||
|
this.CHANGE_MARKER_FRONT = 256;
|
||||||
|
this.CHANGE_FULL = 512;
|
||||||
|
|
||||||
oop.implement(this, EventEmitter);
|
oop.implement(this, EventEmitter);
|
||||||
|
|
||||||
this.setSession = function(session) {
|
this.setSession = function(session) {
|
||||||
this.session = session;
|
this.session = session;
|
||||||
this.$cursorLayer.setSession(session);
|
this.$cursorLayer.setSession(session);
|
||||||
this.$markerLayer.setSession(session);
|
this.$markerBack.setSession(session);
|
||||||
|
this.$markerFront.setSession(session);
|
||||||
this.$gutterLayer.setSession(session);
|
this.$gutterLayer.setSession(session);
|
||||||
this.$textLayer.setSession(session);
|
this.$textLayer.setSession(session);
|
||||||
this.$loop.schedule(this.CHANGE_FULL);
|
this.$loop.schedule(this.CHANGE_FULL);
|
||||||
|
|
@ -10232,7 +10262,8 @@ var VirtualRenderer = function(container, theme) {
|
||||||
this.scroller.style.width = Math.max(0, width - gutterWidth - this.scrollBar.getWidth()) + "px";
|
this.scroller.style.width = Math.max(0, width - gutterWidth - this.scrollBar.getWidth()) + "px";
|
||||||
|
|
||||||
if (this.session.getUseWrapMode()) {
|
if (this.session.getUseWrapMode()) {
|
||||||
var limit = Math.floor(this.scroller.clientWidth / this.characterWidth);
|
var availableWidth = this.scroller.clientWidth - this.$padding * 2;
|
||||||
|
var limit = Math.floor(availableWidth / this.characterWidth) - 1;
|
||||||
if (this.session.adjustWrapLimit(limit) || force) {
|
if (this.session.adjustWrapLimit(limit) || force) {
|
||||||
changes = changes | this.CHANGE_FULL;
|
changes = changes | this.CHANGE_FULL;
|
||||||
}
|
}
|
||||||
|
|
@ -10403,7 +10434,8 @@ var VirtualRenderer = function(container, theme) {
|
||||||
if (changes & this.CHANGE_FULL) {
|
if (changes & this.CHANGE_FULL) {
|
||||||
this.$textLayer.update(this.layerConfig);
|
this.$textLayer.update(this.layerConfig);
|
||||||
this.showGutter && this.$gutterLayer.update(this.layerConfig);
|
this.showGutter && this.$gutterLayer.update(this.layerConfig);
|
||||||
this.$markerLayer.update(this.layerConfig);
|
this.$markerBack.update(this.layerConfig);
|
||||||
|
this.$markerFront.update(this.layerConfig);
|
||||||
this.$cursorLayer.update(this.layerConfig);
|
this.$cursorLayer.update(this.layerConfig);
|
||||||
this.$updateScrollBar();
|
this.$updateScrollBar();
|
||||||
this.scrollCursorIntoView();
|
this.scrollCursorIntoView();
|
||||||
|
|
@ -10417,7 +10449,8 @@ var VirtualRenderer = function(container, theme) {
|
||||||
else
|
else
|
||||||
this.$textLayer.scrollLines(this.layerConfig);
|
this.$textLayer.scrollLines(this.layerConfig);
|
||||||
this.showGutter && this.$gutterLayer.update(this.layerConfig);
|
this.showGutter && this.$gutterLayer.update(this.layerConfig);
|
||||||
this.$markerLayer.update(this.layerConfig);
|
this.$markerBack.update(this.layerConfig);
|
||||||
|
this.$markerFront.update(this.layerConfig);
|
||||||
this.$cursorLayer.update(this.layerConfig);
|
this.$cursorLayer.update(this.layerConfig);
|
||||||
this.$updateScrollBar();
|
this.$updateScrollBar();
|
||||||
return;
|
return;
|
||||||
|
|
@ -10438,8 +10471,12 @@ var VirtualRenderer = function(container, theme) {
|
||||||
if (changes & this.CHANGE_CURSOR)
|
if (changes & this.CHANGE_CURSOR)
|
||||||
this.$cursorLayer.update(this.layerConfig);
|
this.$cursorLayer.update(this.layerConfig);
|
||||||
|
|
||||||
if (changes & this.CHANGE_MARKER) {
|
if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {
|
||||||
this.$markerLayer.update(this.layerConfig);
|
this.$markerFront.update(this.layerConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {
|
||||||
|
this.$markerBack.update(this.layerConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changes & this.CHANGE_SIZE)
|
if (changes & this.CHANGE_SIZE)
|
||||||
|
|
@ -10524,15 +10561,28 @@ var VirtualRenderer = function(container, theme) {
|
||||||
return Math.max(this.$size.scrollerWidth - this.$padding * 2, Math.round(charCount * this.characterWidth));
|
return Math.max(this.$size.scrollerWidth - this.$padding * 2, Math.round(charCount * this.characterWidth));
|
||||||
};
|
};
|
||||||
|
|
||||||
this.addMarker = function(range, clazz, type) {
|
this.addMarker = function(range, clazz, type, inFront) {
|
||||||
var id = this.$markerLayer.addMarker(range, clazz, type);
|
if (inFront) {
|
||||||
this.$loop.schedule(this.CHANGE_MARKER);
|
var id = this.$markerFront.addMarker(range, clazz, type);
|
||||||
return id;
|
this.$loop.schedule(this.CHANGE_MARKER_FRONT);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var id = this.$markerBack.addMarker(range, clazz, type);
|
||||||
|
this.$loop.schedule(this.CHANGE_MARKER_BACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [id, !!inFront];
|
||||||
};
|
};
|
||||||
|
|
||||||
this.removeMarker = function(markerId) {
|
this.removeMarker = function(markerId) {
|
||||||
this.$markerLayer.removeMarker(markerId);
|
if (markerId[1]) {
|
||||||
this.$loop.schedule(this.CHANGE_MARKER);
|
this.$markerFront.removeMarker(markerId[0]);
|
||||||
|
this.$loop.schedule(this.CHANGE_MARKER_FRONT);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.$markerBack.removeMarker(markerId[0]);
|
||||||
|
this.$loop.schedule(this.CHANGE_MARKER_BACK);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.addGutterDecoration = function(row, className){
|
this.addGutterDecoration = function(row, className){
|
||||||
|
|
@ -10612,6 +10662,19 @@ var VirtualRenderer = function(container, theme) {
|
||||||
this.scrollToY(row * this.lineHeight);
|
this.scrollToY(row * this.lineHeight);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.scrollToLine = function(line, center) {
|
||||||
|
var lineHeight = { lineHeight: this.lineHeight };
|
||||||
|
var offset = 0;
|
||||||
|
for (var l = 1; l < line; l++) {
|
||||||
|
offset += this.session.getRowHeight(lineHeight, l-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (center) {
|
||||||
|
offset -= this.$size.scrollerHeight / 2;
|
||||||
|
}
|
||||||
|
this.scrollToY(offset);
|
||||||
|
};
|
||||||
|
|
||||||
this.scrollToY = function(scrollTop) {
|
this.scrollToY = function(scrollTop) {
|
||||||
var maxHeight = this.session.getScreenLength() * this.lineHeight - this.$size.scrollerHeight;
|
var maxHeight = this.session.getScreenLength() * this.lineHeight - this.$size.scrollerHeight;
|
||||||
var scrollTop = Math.max(0, Math.min(maxHeight, scrollTop));
|
var scrollTop = Math.max(0, Math.min(maxHeight, scrollTop));
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue