mirror of
https://github.com/Ionaru/easy-markdown-editor
synced 2025-07-18 23:44:29 -06:00
When selecting lines within a fenced block, check if selection reaches a fenced line
This commit is contained in:
parent
5e204ae66e
commit
2c09c829ee
@ -353,6 +353,8 @@ function toggleCodeBlock(editor) {
|
|||||||
} else if(is_code === "fenced") {
|
} else if(is_code === "fenced") {
|
||||||
if(cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {
|
if(cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {
|
||||||
// use selection
|
// use selection
|
||||||
|
|
||||||
|
// find the fenced line so we know what type it is (tilde, backticks, number of them)
|
||||||
for(block_start = cur_start.line; block_start >= 0; block_start--) {
|
for(block_start = cur_start.line; block_start >= 0; block_start--) {
|
||||||
line = cm.getLineHandle(block_start);
|
line = cm.getLineHandle(block_start);
|
||||||
if(fencing_line(line)) {
|
if(fencing_line(line)) {
|
||||||
@ -363,7 +365,62 @@ function toggleCodeBlock(editor) {
|
|||||||
line: block_start,
|
line: block_start,
|
||||||
ch: 1
|
ch: 1
|
||||||
});
|
});
|
||||||
insertFencingAtSelection(cm, cur_start, cur_end, token_state(fencedTok).fencedChars);
|
var fence_chars = token_state(fencedTok).fencedChars;
|
||||||
|
var start_text, start_line;
|
||||||
|
var end_text, end_line;
|
||||||
|
// check for selection going up against fenced lines, in which case we don't want to add more fencing
|
||||||
|
if(fencing_line(cm.getLineHandle(cur_start.line))) {
|
||||||
|
start_text = "";
|
||||||
|
start_line = cur_start.line;
|
||||||
|
} else if(fencing_line(cm.getLineHandle(cur_start.line - 1))) {
|
||||||
|
start_text = "";
|
||||||
|
start_line = cur_start.line - 1;
|
||||||
|
} else {
|
||||||
|
start_text = fence_chars + "\n";
|
||||||
|
start_line = cur_start.line;
|
||||||
|
}
|
||||||
|
if(fencing_line(cm.getLineHandle(cur_end.line))) {
|
||||||
|
end_text = "";
|
||||||
|
end_line = cur_end.line;
|
||||||
|
if(cur_end.ch === 0) {
|
||||||
|
end_line += 1;
|
||||||
|
}
|
||||||
|
} else if(cur_end.ch !== 0 && fencing_line(cm.getLineHandle(cur_end.line + 1))) {
|
||||||
|
end_text = "";
|
||||||
|
end_line = cur_end.line + 1;
|
||||||
|
} else {
|
||||||
|
end_text = fence_chars + "\n";
|
||||||
|
end_line = cur_end.line + 1;
|
||||||
|
}
|
||||||
|
if(cur_end.ch === 0) {
|
||||||
|
// full last line selected, putting cursor at beginning of next
|
||||||
|
end_line -= 1;
|
||||||
|
}
|
||||||
|
cm.operation(function() {
|
||||||
|
// end line first, so that line numbers don't change
|
||||||
|
cm.replaceRange(end_text, {
|
||||||
|
line: end_line,
|
||||||
|
ch: 0
|
||||||
|
}, {
|
||||||
|
line: end_line + (end_text ? 0 : 1),
|
||||||
|
ch: 0
|
||||||
|
});
|
||||||
|
cm.replaceRange(start_text, {
|
||||||
|
line: start_line,
|
||||||
|
ch: 0
|
||||||
|
}, {
|
||||||
|
line: start_line + (start_text ? 0 : 1),
|
||||||
|
ch: 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
cm.setSelection({
|
||||||
|
line: start_line + (start_text ? 1 : 0),
|
||||||
|
ch: 0
|
||||||
|
}, {
|
||||||
|
line: end_line + (start_text ? 1 : -1),
|
||||||
|
ch: 0
|
||||||
|
});
|
||||||
|
cm.focus();
|
||||||
} else {
|
} else {
|
||||||
// no selection, search for ends of this fenced block
|
// no selection, search for ends of this fenced block
|
||||||
var search_from = cur_start.line;
|
var search_from = cur_start.line;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user