diff options
author | Sheogorath | 2018-06-23 21:19:44 +0200 |
---|---|---|
committer | Sheogorath | 2018-06-23 21:19:44 +0200 |
commit | 49db5bc6534bccaea89192d95a6a0e87d0cb28dd (patch) | |
tree | 78c9bfca3a4513a4c4223c536219b6fa781dd637 /public/js/lib/editor/utils.js | |
parent | 7542968dc7f1f0e302f3f5cdad602aab68076c38 (diff) | |
parent | f65d96c57b02c98616ffe3d8d7cc93f3e3942897 (diff) |
Merge branch 'pr-846'
Diffstat (limited to '')
-rw-r--r-- | public/js/lib/editor/utils.js | 113 |
1 files changed, 93 insertions, 20 deletions
diff --git a/public/js/lib/editor/utils.js b/public/js/lib/editor/utils.js index 3702a166..33670884 100644 --- a/public/js/lib/editor/utils.js +++ b/public/js/lib/editor/utils.js @@ -3,39 +3,39 @@ export function wrapTextWith (editor, cm, symbol) { if (!cm.getSelection()) { return CodeMirror.Pass } else { - var ranges = cm.listSelections() - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i] + let ranges = cm.listSelections() + for (let i = 0; i < ranges.length; i++) { + let range = ranges[i] if (!range.empty()) { const from = range.from() const to = range.to() if (symbol !== 'Backspace') { - cm.replaceRange(symbol, to, to, '+input') - cm.replaceRange(symbol, from, from, '+input') - // workaround selection range not correct after add symbol - var _ranges = cm.listSelections() - var anchorIndex = editor.indexFromPos(_ranges[i].anchor) - var headIndex = editor.indexFromPos(_ranges[i].head) + let selection = cm.getRange(from, to) + let anchorIndex = editor.indexFromPos(ranges[i].anchor) + let headIndex = editor.indexFromPos(ranges[i].head) + cm.replaceRange(symbol + selection + symbol, from, to, '+input') if (anchorIndex > headIndex) { - _ranges[i].anchor.ch-- + ranges[i].anchor.ch+= symbol.length + ranges[i].head.ch+= symbol.length } else { - _ranges[i].head.ch-- + ranges[i].head.ch+= symbol.length + ranges[i].anchor.ch+= symbol.length } - cm.setSelections(_ranges) + cm.setSelections(ranges) } else { - var preEndPos = { + let preEndPos = { line: to.line, - ch: to.ch + 1 + ch: to.ch + symbol.length } - var preText = cm.getRange(to, preEndPos) - var preIndex = wrapSymbols.indexOf(preText) - var postEndPos = { + let preText = cm.getRange(to, preEndPos) + let preIndex = wrapSymbols.indexOf(preText) + let postEndPos = { line: from.line, - ch: from.ch - 1 + ch: from.ch - symbol.length } - var postText = cm.getRange(postEndPos, from) - var postIndex = wrapSymbols.indexOf(postText) + let postText = cm.getRange(postEndPos, from) + let postIndex = wrapSymbols.indexOf(postText) // check if surround symbol are list in array and matched if (preIndex > -1 && postIndex > -1 && preIndex === postIndex) { cm.replaceRange('', to, preEndPos, '+delete') @@ -46,3 +46,76 @@ export function wrapTextWith (editor, cm, symbol) { } } } + +export function insertText (cm, text, cursorEnd = 0) { + let cursor = cm.getCursor() + cm.replaceSelection(text, cursor, cursor) + cm.focus() + cm.setCursor({line: cursor.line, ch: cursor.ch + cursorEnd}) +} + +export function insertLink(cm, isImage) { + let cursor = cm.getCursor() + let ranges = cm.listSelections() + const linkEnd = '](https://)' + const symbol = (isImage) ? '![' : '[' + + for (let i = 0; i < ranges.length; i++) { + let range = ranges[i] + if (!range.empty()) { + const from = range.from() + const to = range.to() + let anchorIndex = editor.indexFromPos(ranges[i].anchor) + let headIndex = editor.indexFromPos(ranges[i].head) + let selection = cm.getRange(from, to) + selection = symbol + selection + linkEnd + cm.replaceRange(selection, from, to) + if (anchorIndex > headIndex) { + ranges[i].anchor.ch+= symbol.length + ranges[i].head.ch+= symbol.length + } else { + ranges[i].head.ch+= symbol.length + ranges[i].anchor.ch+= symbol.length + } + cm.setSelections(ranges) + } else { + cm.replaceRange(symbol + linkEnd, cursor, cursor) + cm.setCursor({line: cursor.line, ch: cursor.ch + symbol.length + linkend.length}) + } + } + cm.focus() +} + +export function insertHeader (cm) { + let cursor = cm.getCursor() + let startOfLine = {line: cursor.line, ch: 0} + let startOfLineText = cm.getRange(startOfLine, {line: cursor.line, ch: 1}) + // See if it is already a header + if (startOfLineText === '#') { + cm.replaceRange('#', startOfLine, startOfLine) + } else { + cm.replaceRange('# ', startOfLine, startOfLine) + } + cm.focus() +} + +export function insertOnStartOfLines (cm, symbol) { + let cursor = cm.getCursor() + let ranges = cm.listSelections() + + for (let i = 0; i < ranges.length; i++) { + let range = ranges[i] + if (!range.empty()) { + const from = range.from() + const to = range.to() + let selection = cm.getRange({line: from.line, ch: 0}, to) + selection = selection.replace(/\n/g, '\n' + symbol) + selection = symbol + selection + cm.replaceRange(selection, from, to) + } else { + cm.replaceRange(symbol, {line: cursor.line, ch: 0}, {line: cursor.line, ch: 0}) + } + } + cm.setCursor({line: cursor.line, ch: cursor.ch + symbol.length}) + cm.focus() +} |