UNPKG

slate-edit-code

Version:

A Slate plugin to handle keyboard events in code blocks.

46 lines (34 loc) 1.21 kB
'use strict'; 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;