slate-edit-code
Version:
A Slate plugin to handle keyboard events in code blocks.
42 lines (32 loc) • 991 B
JavaScript
;
var getLines = require('../getLines');
/**
* Indent all lines in selection
* @param {Transform} transform
* @param {String} indent
* @return {Transform}
*/
function indentLines(transform, indent) {
var state = transform.state;
var startBlock = state.startBlock;
var endBlock = state.endBlock;
var startOffset = state.startOffset;
var endOffset = state.endOffset;
var selection = state.selection;
var innerText = startBlock.text;
var lines = getLines(innerText);
if (startBlock != endBlock) {
endOffset = innerText.length;
}
var offset = 0;
innerText = lines.map(function (line) {
var result = line;
if (offset >= startOffset && offset < endOffset) {
result = indent + line;
}
offset += line.length;
return result;
}).join('\n');
return transform.insertTextAtRange(selection.moveToRangeOf(startBlock), innerText);
}
module.exports = indentLines;