Merge branch 'cursors' into master
TODO, needs cleanup
This commit is contained in:
commit
1d7d636bff
31 changed files with 126 additions and 102 deletions
|
|
@ -148,10 +148,22 @@
|
|||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.ace_cursor.ace_hidden {
|
||||
.ace_hidden-cursors .ace_cursor {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
.ace_smooth-blinking .ace_cursor {
|
||||
-moz-transition: opacity 0.18s;
|
||||
-webkit-transition: opacity 0.18s;
|
||||
-o-transition: opacity 0.18s;
|
||||
-ms-transition: opacity 0.18s;
|
||||
transition: opacity 0.18s;
|
||||
}
|
||||
|
||||
.ace_cursor[style*="opacity: 0"]{
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||
}
|
||||
|
||||
.ace_editor.ace_multiselect .ace_cursor {
|
||||
border-left-width: 1px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ exports.handler.attach = function(editor) {
|
|||
opacity: 1;\
|
||||
background-color: transparent;\
|
||||
}\
|
||||
.emacs-mode .ace_cursor.ace_overwrite {\
|
||||
.emacs-mode .ace_overwrite-cursors .ace_cursor {\
|
||||
opacity: 1;\
|
||||
background-color: transparent;\
|
||||
border-width: 0 0 2px 2px !important;\
|
||||
|
|
|
|||
|
|
@ -40,9 +40,12 @@ var Cursor = function(parentEl) {
|
|||
|
||||
this.isVisible = false;
|
||||
this.isBlinking = true;
|
||||
this.blinkInterval = 1000;
|
||||
this.smoothBlinking = false;
|
||||
|
||||
this.cursors = [];
|
||||
this.cursor = this.addCursor();
|
||||
dom.addCssClass(this.element, "ace_hidden-cursors");
|
||||
};
|
||||
|
||||
(function() {
|
||||
|
|
@ -57,20 +60,33 @@ var Cursor = function(parentEl) {
|
|||
};
|
||||
|
||||
this.setBlinking = function(blinking) {
|
||||
this.isBlinking = blinking;
|
||||
if (blinking)
|
||||
if (blinking != this.isBlinking){
|
||||
this.isBlinking = blinking;
|
||||
this.restartTimer();
|
||||
}
|
||||
};
|
||||
|
||||
this.setBlinkInterval = function(blinkInterval) {
|
||||
if (blinkInterval != this.blinkInterval){
|
||||
this.blinkInterval = blinkInterval;
|
||||
this.restartTimer();
|
||||
}
|
||||
};
|
||||
|
||||
this.setSmoothBlinking = function(smoothBlinking) {
|
||||
if (smoothBlinking != this.smoothBlinking) {
|
||||
this.smoothBlinking = smoothBlinking;
|
||||
if (smoothBlinking)
|
||||
dom.addCssClass(this.element, "ace_smooth-blinking");
|
||||
else
|
||||
dom.removeCssClass(this.element, "ace_smooth-blinking");
|
||||
this.restartTimer();
|
||||
}
|
||||
};
|
||||
|
||||
this.addCursor = function() {
|
||||
var el = dom.createElement("div");
|
||||
var className = "ace_cursor";
|
||||
if (!this.isVisible)
|
||||
className += " ace_hidden";
|
||||
if (this.overwrite)
|
||||
className += " ace_overwrite";
|
||||
|
||||
el.className = className;
|
||||
el.className = "ace_cursor";
|
||||
this.element.appendChild(el);
|
||||
this.cursors.push(el);
|
||||
return el;
|
||||
|
|
@ -86,43 +102,53 @@ var Cursor = function(parentEl) {
|
|||
|
||||
this.hideCursor = function() {
|
||||
this.isVisible = false;
|
||||
for (var i = this.cursors.length; i--; )
|
||||
dom.addCssClass(this.cursors[i], "ace_hidden");
|
||||
clearInterval(this.blinkId);
|
||||
dom.addCssClass(this.element, "ace_hidden-cursors");
|
||||
this.restartTimer();
|
||||
};
|
||||
|
||||
this.showCursor = function() {
|
||||
this.isVisible = true;
|
||||
for (var i = this.cursors.length; i--; )
|
||||
dom.removeCssClass(this.cursors[i], "ace_hidden");
|
||||
|
||||
this.element.style.visibility = "";
|
||||
dom.removeCssClass(this.element, "ace_hidden-cursors");
|
||||
this.restartTimer();
|
||||
};
|
||||
|
||||
this.restartTimer = function() {
|
||||
clearInterval(this.blinkId);
|
||||
if (!this.isBlinking)
|
||||
return;
|
||||
if (!this.isVisible)
|
||||
clearInterval(this.intervalId);
|
||||
clearTimeout(this.timeoutId);
|
||||
if (this.smoothBlinking)
|
||||
dom.removeCssClass(this.element, "ace_smooth-blinking");
|
||||
for (var i = this.cursors.length; i--; )
|
||||
this.cursors[i].style.opacity = "";
|
||||
|
||||
if (!this.isBlinking || !this.blinkInterval || !this.isVisible)
|
||||
return;
|
||||
|
||||
var element = this.cursors.length == 1 ? this.cursor : this.element;
|
||||
this.blinkId = setInterval(function() {
|
||||
element.style.visibility = "hidden";
|
||||
setTimeout(function() {
|
||||
element.style.visibility = "";
|
||||
}, 400);
|
||||
}, 1000);
|
||||
if (this.smoothBlinking)
|
||||
setTimeout(function(){
|
||||
dom.addCssClass(this.element, "ace_smooth-blinking");
|
||||
}.bind(this));
|
||||
|
||||
var blink = function(){
|
||||
this.timeoutId = setTimeout(function() {
|
||||
for (var i = this.cursors.length; i--; ) {
|
||||
this.cursors[i].style.opacity = 0;
|
||||
}
|
||||
}.bind(this), 0.6 * this.blinkInterval);
|
||||
}.bind(this);
|
||||
|
||||
this.intervalId = setInterval(function() {
|
||||
for (var i = this.cursors.length; i--; ) {
|
||||
this.cursors[i].style.opacity = "";
|
||||
}
|
||||
blink();
|
||||
}.bind(this), this.blinkInterval);
|
||||
|
||||
blink();
|
||||
};
|
||||
|
||||
this.getPixelPosition = function(position, onScreen) {
|
||||
if (!this.config || !this.session) {
|
||||
return {
|
||||
left : 0,
|
||||
top : 0
|
||||
};
|
||||
}
|
||||
if (!this.config || !this.session)
|
||||
return {left : 0, top : 0};
|
||||
|
||||
if (!position)
|
||||
position = this.session.selection.getCursor();
|
||||
|
|
@ -132,72 +158,58 @@ var Cursor = function(parentEl) {
|
|||
var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *
|
||||
this.config.lineHeight;
|
||||
|
||||
return {
|
||||
left : cursorLeft,
|
||||
top : cursorTop
|
||||
};
|
||||
return {left : cursorLeft, top : cursorTop};
|
||||
};
|
||||
|
||||
this.update = function(config) {
|
||||
this.config = config;
|
||||
|
||||
if (this.session.selectionMarkerCount > 0) {
|
||||
var selections = this.session.$selectionMarkers;
|
||||
var i = 0, sel, cursorIndex = 0;
|
||||
var selections = this.session.$selectionMarkers;
|
||||
var i = 0, cursorIndex = 0;
|
||||
|
||||
for (var i = selections.length; i--; ) {
|
||||
sel = selections[i];
|
||||
var pixelPos = this.getPixelPosition(sel.cursor, true);
|
||||
if ((pixelPos.top > config.height + config.offset ||
|
||||
pixelPos.top < -config.offset) && i > 1) {
|
||||
continue;
|
||||
}
|
||||
if (selections === undefined || selections.length === 0){
|
||||
selections = [{cursor: null}];
|
||||
}
|
||||
|
||||
var style = (this.cursors[cursorIndex++] || this.addCursor()).style;
|
||||
|
||||
style.left = pixelPos.left + "px";
|
||||
style.top = pixelPos.top + "px";
|
||||
style.width = config.characterWidth + "px";
|
||||
style.height = config.lineHeight + "px";
|
||||
for (var i = selections.length; i--; ) {
|
||||
var pixelPos = this.getPixelPosition(selections[i].cursor, true);
|
||||
if ((pixelPos.top > config.height + config.offset ||
|
||||
pixelPos.top < -config.offset) && i > 1) {
|
||||
continue;
|
||||
}
|
||||
if (cursorIndex > 1)
|
||||
while (this.cursors.length > cursorIndex)
|
||||
this.removeCursor();
|
||||
} else {
|
||||
var pixelPos = this.getPixelPosition(null, true);
|
||||
var style = this.cursor.style;
|
||||
|
||||
var style = (this.cursors[cursorIndex++] || this.addCursor()).style;
|
||||
|
||||
style.left = pixelPos.left + "px";
|
||||
style.top = pixelPos.top + "px";
|
||||
style.width = config.characterWidth + "px";
|
||||
style.height = config.lineHeight + "px";
|
||||
|
||||
while (this.cursors.length > 1)
|
||||
this.removeCursor();
|
||||
}
|
||||
while (this.cursors.length > cursorIndex)
|
||||
this.removeCursor();
|
||||
|
||||
var overwrite = this.session.getOverwrite();
|
||||
if (overwrite != this.overwrite)
|
||||
this.$setOverwrite(overwrite);
|
||||
this.$setOverwrite(overwrite);
|
||||
|
||||
// cache for textarea and gutter highlight
|
||||
this.$pixelPos = pixelPos;
|
||||
|
||||
this.restartTimer();
|
||||
};
|
||||
|
||||
this.$setOverwrite = function(overwrite) {
|
||||
this.overwrite = overwrite;
|
||||
for (var i = this.cursors.length; i--; ) {
|
||||
if (overwrite != this.overwrite) {
|
||||
this.overwrite = overwrite;
|
||||
if (overwrite)
|
||||
dom.addCssClass(this.cursors[i], "ace_overwrite");
|
||||
dom.addCssClass(this.element, "ace_overwrite-cursors");
|
||||
else
|
||||
dom.removeCssClass(this.cursors[i], "ace_overwrite");
|
||||
dom.removeCssClass(this.element, "ace_overwrite-cursors");
|
||||
}
|
||||
};
|
||||
|
||||
this.destroy = function() {
|
||||
clearInterval(this.blinkId);
|
||||
}
|
||||
clearInterval(this.intervalId);
|
||||
clearTimeout(this.timeoutId);
|
||||
};
|
||||
|
||||
}).call(Cursor.prototype);
|
||||
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@
|
|||
border-left: 1px solid #7991E8;
|
||||
}
|
||||
|
||||
.ace-ambiance .ace_cursor.ace_overwrite {
|
||||
.ace-ambiance .ace_overwrite-cursors .ace_cursor {
|
||||
border: 1px solid #FFE300;
|
||||
background: #766B13;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
border-left: 2px solid black;
|
||||
}
|
||||
|
||||
.ace-chrome .ace_cursor.ace_overwrite {
|
||||
.ace-chrome .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #000000
|
||||
}
|
||||
|
||||
.ace-clouds .ace_cursor.ace_overwrite {
|
||||
.ace-clouds .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #000000
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #7DA5DC
|
||||
}
|
||||
|
||||
.ace-clouds-midnight .ace_cursor.ace_overwrite {
|
||||
.ace-clouds-midnight .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #7DA5DC
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #FFFFFF
|
||||
}
|
||||
|
||||
.ace-cobalt .ace_cursor.ace_overwrite {
|
||||
.ace-cobalt .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #FFFFFF
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
border-left: 2px solid black;
|
||||
}
|
||||
|
||||
.ace-crimson-editor .ace_cursor.ace_overwrite {
|
||||
.ace-crimson-editor .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #000000
|
||||
}
|
||||
|
||||
.ace-dawn .ace_cursor.ace_overwrite {
|
||||
.ace-dawn .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #000000
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
border-left: 2px solid black;
|
||||
}
|
||||
|
||||
.ace-dreamweaver .ace_cursor.ace_overwrite {
|
||||
.ace-dreamweaver .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@
|
|||
border-left: 2px solid black;
|
||||
}
|
||||
|
||||
.ace-github .ace_cursor.ace_overwrite {
|
||||
.ace-github .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #91FF00
|
||||
}
|
||||
|
||||
.ace-idle-fingers .ace_cursor.ace_overwrite {
|
||||
.ace-idle-fingers .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #91FF00
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #FF9900
|
||||
}
|
||||
|
||||
.ace-kr-theme .ace_cursor.ace_overwrite {
|
||||
.ace-kr-theme .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #FF9900
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #FFFFFF
|
||||
}
|
||||
|
||||
.ace-merbivore .ace_cursor.ace_overwrite {
|
||||
.ace-merbivore .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #FFFFFF
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #FFFFFF
|
||||
}
|
||||
|
||||
.ace-merbivore-soft .ace_cursor.ace_overwrite {
|
||||
.ace-merbivore-soft .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #FFFFFF
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #FFFFFF
|
||||
}
|
||||
|
||||
.ace-mono-industrial .ace_cursor.ace_overwrite {
|
||||
.ace-mono-industrial .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #FFFFFF
|
||||
}
|
||||
|
|
@ -135,4 +135,4 @@
|
|||
|
||||
.ace-mono-industrial .ace_indent-guide {
|
||||
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ0tH4zzBz5sz/ABAOBECKH+evAAAAAElFTkSuQmCC) right repeat-y
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #F8F8F0
|
||||
}
|
||||
|
||||
.ace-monokai .ace_cursor.ace_overwrite {
|
||||
.ace-monokai .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #F8F8F0
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #A7A7A7
|
||||
}
|
||||
|
||||
.ace-pastel-on-dark .ace_cursor.ace_overwrite {
|
||||
.ace-pastel-on-dark .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #A7A7A7
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
border-left: 2px solid #D30102
|
||||
}
|
||||
|
||||
.ace-solarized-dark .ace_cursor.ace_overwrite {
|
||||
.ace-solarized-dark .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #D30102
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #000000
|
||||
}
|
||||
|
||||
.ace-solarized-light .ace_cursor.ace_overwrite {
|
||||
.ace-solarized-light .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #000000
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid black;
|
||||
}
|
||||
|
||||
.ace-tm .ace_cursor.ace_overwrite {
|
||||
.ace-tm .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #AEAFAD
|
||||
}
|
||||
|
||||
.ace-tomorrow .ace_cursor.ace_overwrite {
|
||||
.ace-tomorrow .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #AEAFAD
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #AEAFAD
|
||||
}
|
||||
|
||||
.ace-tomorrow-night .ace_cursor.ace_overwrite {
|
||||
.ace-tomorrow-night .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #AEAFAD
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
border-left: 2px solid #FFFFFF
|
||||
}
|
||||
|
||||
.ace-tomorrow-night-blue .ace_cursor.ace_overwrite {
|
||||
.ace-tomorrow-night-blue .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #FFFFFF
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #9F9F9F
|
||||
}
|
||||
|
||||
.ace-tomorrow-night-bright .ace_cursor.ace_overwrite {
|
||||
.ace-tomorrow-night-bright .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #9F9F9F
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
border-left: 2px solid #CCCCCC
|
||||
}
|
||||
|
||||
.ace-tomorrow-night-eighties .ace_cursor.ace_overwrite {
|
||||
.ace-tomorrow-night-eighties .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #CCCCCC
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #A7A7A7
|
||||
}
|
||||
|
||||
.ace-twilight .ace_cursor.ace_overwrite {
|
||||
.ace-twilight .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #A7A7A7
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
border-left: 2px solid #FFFFFF
|
||||
}
|
||||
|
||||
.ace-vibrant-ink .ace_cursor.ace_overwrite {
|
||||
.ace-vibrant-ink .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #FFFFFF
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
border-left: 2px solid #000000
|
||||
}
|
||||
|
||||
.ace-xcode .ace_cursor.ace_overwrite {
|
||||
.ace-xcode .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid #000000
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
border-left: 2px solid %cursor%;
|
||||
}
|
||||
|
||||
.%cssClass% .ace_cursor.ace_overwrite {
|
||||
.%cssClass% .ace_overwrite-cursors .ace_cursor {
|
||||
border-left: 0px;
|
||||
border-bottom: 1px solid %overwrite%;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue