slate-edit-code
Version:
A Slate plugin to handle keyboard events in code blocks.
46 lines (34 loc) • 1.21 kB
JavaScript
;
var endsWith = require('ends-with');
var getNewLine = require('./getNewLine');
var getIndent = require('./getIndent');
var getLines = require('./getLines');
var LineAnchor = require('./LineAnchor');
/**
* User pressed Delete in an editor:
* Remove last idnentation before cursor
*/
function onBackspace(event, data, state) {
if (!state.isCollapsed) {
return;
}
var startBlock = state.startBlock;
var startOffset = state.startOffset;
var blockText = startBlock.text;
// Detect newline separator and indentation
var newLine = getNewLine(blockText);
var indent = getIndent(blockText);
// Get current line
var lines = getLines(blockText, newLine);
var lineAnchor = LineAnchor.getForOffset(blockText, startOffset, newLine);
var currentLine = lines.get(lineAnchor.line);
var beforeSelection = currentLine.slice(0, lineAnchor.offset);
// If the line before selection ending with the indentation?
if (!endsWith(beforeSelection, indent)) {
return;
}
// Remove indent
event.preventDefault();
return state.transform().deleteBackward(indent.length).focus().apply();
}
module.exports = onBackspace;