add support for rendering breakpoints
This commit is contained in:
parent
ba21db0feb
commit
d3b8f98817
4 changed files with 43 additions and 2 deletions
|
|
@ -4,6 +4,7 @@ ace.Document = function(text, mode) {
|
||||||
this.modified = true;
|
this.modified = true;
|
||||||
this.lines = [];
|
this.lines = [];
|
||||||
this.selection = new ace.Selection(this);
|
this.selection = new ace.Selection(this);
|
||||||
|
this.$breakpoints = [];
|
||||||
|
|
||||||
this.listeners = [];
|
this.listeners = [];
|
||||||
if (mode) {
|
if (mode) {
|
||||||
|
|
@ -109,6 +110,20 @@ ace.Document = function(text, mode) {
|
||||||
return this.$tabSize;
|
return this.$tabSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.getBreakpoints = function() {
|
||||||
|
return this.$breakpoints;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.setBreakpoint = function(row) {
|
||||||
|
this.$breakpoints[row] = true;
|
||||||
|
this.$dispatchEvent("changeBreakpoint", {data: row});
|
||||||
|
};
|
||||||
|
|
||||||
|
this.clearBreakpoint = function(row) {
|
||||||
|
delete this.$breakpoints[row];
|
||||||
|
this.$dispatchEvent("changeBreakpoint", {data: row});
|
||||||
|
};
|
||||||
|
|
||||||
this.$detectNewLine = function(text) {
|
this.$detectNewLine = function(text) {
|
||||||
var match = text.match(/^.*?(\r?\n)/m);
|
var match = text.match(/^.*?(\r?\n)/m);
|
||||||
if (match) {
|
if (match) {
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@ ace.Editor = function(renderer, doc) {
|
||||||
this.doc.removeEventListener("change", this.$onDocumentChange);
|
this.doc.removeEventListener("change", this.$onDocumentChange);
|
||||||
this.doc.removeEventListener("changeMode", this.$onDocumentModeChange);
|
this.doc.removeEventListener("changeMode", this.$onDocumentModeChange);
|
||||||
this.doc.removeEventListener("changeTabSize", this.$onDocumentChangeTabSize);
|
this.doc.removeEventListener("changeTabSize", this.$onDocumentChangeTabSize);
|
||||||
|
this.doc.removeEventListener("changeBreakpoint", this.$onDocumentChangeBreakpoint);
|
||||||
|
|
||||||
var selection = this.doc.getSelection();
|
var selection = this.doc.getSelection();
|
||||||
this.selection.removeEventListener("changeCursor", this.$onCursorChange);
|
this.selection.removeEventListener("changeCursor", this.$onCursorChange);
|
||||||
|
|
@ -88,6 +89,9 @@ ace.Editor = function(renderer, doc) {
|
||||||
this.$onDocumentChangeTabSize = ace.bind(this.renderer.draw, this.renderer);
|
this.$onDocumentChangeTabSize = ace.bind(this.renderer.draw, this.renderer);
|
||||||
doc.addEventListener("changeTabSize", this.$onDocumentChangeTabSize);
|
doc.addEventListener("changeTabSize", this.$onDocumentChangeTabSize);
|
||||||
|
|
||||||
|
this.$onDocumentChangeBreakpoint = ace.bind(this.onDocumentChangeBreakpoint, this);
|
||||||
|
this.doc.addEventListener("changeBreakpoint", this.$onDocumentChangeBreakpoint);
|
||||||
|
|
||||||
this.selection = doc.getSelection();
|
this.selection = doc.getSelection();
|
||||||
|
|
||||||
this.$onCursorChange = ace.bind(this.onCursorChange, this);
|
this.$onCursorChange = ace.bind(this.onCursorChange, this);
|
||||||
|
|
@ -103,6 +107,7 @@ ace.Editor = function(renderer, doc) {
|
||||||
this.renderer.draw();
|
this.renderer.draw();
|
||||||
this.onCursorChange();
|
this.onCursorChange();
|
||||||
this.onSelectionChange();
|
this.onSelectionChange();
|
||||||
|
this.onDocumentChangeBreakpoint();
|
||||||
this.renderer.scrollToRow(doc.getScrollTopRow());
|
this.renderer.scrollToRow(doc.getScrollTopRow());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -209,6 +214,10 @@ ace.Editor = function(renderer, doc) {
|
||||||
this.onCursorChange();
|
this.onCursorChange();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.onDocumentChangeBreakpoint = function() {
|
||||||
|
this.renderer.setBreakpoints(this.doc.getBreakpoints());
|
||||||
|
};
|
||||||
|
|
||||||
this.onDocumentModeChange = function() {
|
this.onDocumentModeChange = function() {
|
||||||
var mode = this.doc.getMode();
|
var mode = this.doc.getMode();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -221,6 +221,7 @@ ace.VirtualRenderer = function(container) {
|
||||||
this.$updateScrollBar();
|
this.$updateScrollBar();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
this.addMarker = function(range, clazz, type) {
|
this.addMarker = function(range, clazz, type) {
|
||||||
range.start = this.$documentToScreenPosition(range.start);
|
range.start = this.$documentToScreenPosition(range.start);
|
||||||
range.end = this.$documentToScreenPosition(range.end);
|
range.end = this.$documentToScreenPosition(range.end);
|
||||||
|
|
@ -231,6 +232,10 @@ ace.VirtualRenderer = function(container) {
|
||||||
this.$markerLayer.removeMarker(markerId);
|
this.$markerLayer.removeMarker(markerId);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.setBreakpoints = function(rows) {
|
||||||
|
this.$gutterLayer.setBreakpoints(rows);
|
||||||
|
};
|
||||||
|
|
||||||
this.updateCursor = function(position, overwrite) {
|
this.updateCursor = function(position, overwrite) {
|
||||||
this.cursorLayer.setCursor(this.$documentToScreenPosition(position), overwrite);
|
this.cursorLayer.setCursor(this.$documentToScreenPosition(position), overwrite);
|
||||||
this.cursorLayer.update(this.layerConfig);
|
this.cursorLayer.update(this.layerConfig);
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,27 @@ ace.layer.Gutter = function(parentEl) {
|
||||||
this.element = document.createElement("div");
|
this.element = document.createElement("div");
|
||||||
this.element.className = "layer gutter-layer";
|
this.element.className = "layer gutter-layer";
|
||||||
parentEl.appendChild(this.element);
|
parentEl.appendChild(this.element);
|
||||||
|
|
||||||
|
this.$breakpoints = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
|
this.setBreakpoints = function(rows) {
|
||||||
|
this.$breakpoints = rows.concat();
|
||||||
|
|
||||||
|
if (this.$config)
|
||||||
|
this.update(this.$config);
|
||||||
|
};
|
||||||
|
|
||||||
this.update = function(config) {
|
this.update = function(config) {
|
||||||
|
this.$config = config;
|
||||||
|
|
||||||
var html = [];
|
var html = [];
|
||||||
for ( var i = config.firstRow; i <= config.lastRow; i++) {
|
for ( var i = config.firstRow; i <= config.lastRow; i++) {
|
||||||
html.push("<div class='gutter-cell' style='height:" + config.lineHeight
|
html.push("<div class='gutter-cell",
|
||||||
+ "px;'>", (i+1), "</div>");
|
this.$breakpoints[i] ? " breakpoint" : "",
|
||||||
|
"' style='height:", config.lineHeight, "px;'>", (i+1), "</div>");
|
||||||
html.push("</div>");
|
html.push("</div>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue