UNPKG

1.81 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7require('slate');
8
9var _endsWith = require('ends-with');
10
11var _endsWith2 = _interopRequireDefault(_endsWith);
12
13var _utils = require('../utils');
14
15function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
17/**
18 * User pressed Delete in an editor:
19 * Remove last idnentation before cursor
20 */
21function onBackspace(opts, event, change, editor) {
22 var value = change.value;
23
24 if (value.isExpanded) {
25 return undefined;
26 }
27
28 var startOffset = value.startOffset,
29 startText = value.startText;
30
31
32 var currentLine = value.startBlock;
33
34 // Detect and remove indentation at cursor
35 var indent = (0, _utils.getCurrentIndent)(opts, value);
36 var beforeSelection = currentLine.text.slice(0, startOffset);
37
38 // If the line before selection ending with the indentation?
39 if ((0, _endsWith2.default)(beforeSelection, indent)) {
40 // Remove indent
41 event.preventDefault();
42
43 return change.deleteBackward(indent.length).focus();
44 } else if (opts.exitBlockType) {
45 // Otherwise check if we are in an empty code container...
46 var currentCode = (0, _utils.getCurrentCode)(opts, value);
47 var isStartOfCode = startOffset === 0 && currentCode.getFirstText() === startText;
48 // PERF: avoid checking for whole currentCode.text
49 var isEmpty = currentCode.nodes.size === 1 && currentLine.text.length === 0;
50
51 if (isStartOfCode && isEmpty) {
52 event.preventDefault();
53 // Convert it to default exit type
54 return change.setBlocks(opts.exitBlockType, { normalize: false }).unwrapNodeByKey(currentLine.key);
55 }
56 }
57 return undefined;
58}
59
60exports.default = onBackspace;
\No newline at end of file