117 lines
3.1 KiB
JavaScript
117 lines
3.1 KiB
JavaScript
/**
|
|
* Ajax.org Code Editor (ACE)
|
|
*
|
|
* @copyright 2010, Ajax.org Services B.V.
|
|
* @license LGPLv3 <http://www.gnu.org/licenses/lgpl-3.0.txt>
|
|
* @author Fabian Jakobs <fabian AT ajax DOT org>
|
|
*/
|
|
require.def("ace/layer/Cursor", ["ace/lib/dom"], function(dom) {
|
|
|
|
var Cursor = function(parentEl) {
|
|
this.element = document.createElement("div");
|
|
this.element.className = "ace_layer ace_cursor-layer";
|
|
parentEl.appendChild(this.element);
|
|
|
|
this.cursor = document.createElement("div");
|
|
this.cursor.className = "ace_cursor";
|
|
|
|
this.isVisible = false;
|
|
};
|
|
|
|
(function() {
|
|
|
|
this.setDocument = function(doc) {
|
|
this.doc = doc;
|
|
};
|
|
|
|
this.setCursor = function(position, overwrite) {
|
|
this.position = {
|
|
row : position.row,
|
|
column : this.doc.documentToScreenColumn(position.row, position.column)
|
|
};
|
|
if (overwrite) {
|
|
dom.addCssClass(this.cursor, "ace_overwrite");
|
|
} else {
|
|
dom.removeCssClass(this.cursor, "ace_overwrite");
|
|
}
|
|
};
|
|
|
|
this.hideCursor = function() {
|
|
this.isVisible = false;
|
|
if (this.cursor.parentNode) {
|
|
this.cursor.parentNode.removeChild(this.cursor);
|
|
}
|
|
clearInterval(this.blinkId);
|
|
};
|
|
|
|
this.showCursor = function() {
|
|
this.isVisible = true;
|
|
this.element.appendChild(this.cursor);
|
|
|
|
var cursor = this.cursor;
|
|
cursor.style.visibility = "visible";
|
|
this.restartTimer();
|
|
};
|
|
|
|
this.restartTimer = function() {
|
|
clearInterval(this.blinkId);
|
|
if (!this.isVisible) {
|
|
return;
|
|
}
|
|
|
|
var cursor = this.cursor;
|
|
this.blinkId = setInterval(function() {
|
|
cursor.style.visibility = "hidden";
|
|
setTimeout(function() {
|
|
cursor.style.visibility = "visible";
|
|
}, 400);
|
|
}, 1000);
|
|
};
|
|
|
|
this.getPixelPosition = function() {
|
|
if (!this.config || !this.position) {
|
|
return {
|
|
left : 0,
|
|
top : 0
|
|
};
|
|
}
|
|
|
|
var cursorLeft = Math.round(this.position.column * this.config.characterWidth);
|
|
var cursorTop = this.position.row * this.config.lineHeight;
|
|
|
|
return {
|
|
left : cursorLeft,
|
|
top : cursorTop
|
|
};
|
|
};
|
|
|
|
this.update = function(config) {
|
|
if (!this.position)
|
|
return;
|
|
|
|
this.config = config;
|
|
|
|
var cursorLeft = Math.round(this.position.column * config.characterWidth);
|
|
var cursorTop = this.position.row * config.lineHeight;
|
|
|
|
this.pixelPos = {
|
|
left : cursorLeft,
|
|
top : cursorTop
|
|
};
|
|
|
|
this.cursor.style.left = cursorLeft + "px";
|
|
this.cursor.style.top = (cursorTop - (config.firstRow * config.lineHeight))
|
|
+ "px";
|
|
this.cursor.style.width = config.characterWidth + "px";
|
|
this.cursor.style.height = config.lineHeight + "px";
|
|
|
|
if (this.isVisible) {
|
|
this.element.appendChild(this.cursor);
|
|
}
|
|
this.restartTimer();
|
|
};
|
|
|
|
}).call(Cursor.prototype);
|
|
|
|
return Cursor;
|
|
});
|