Add new function 'deleteCharacterBackward'
This commit is contained in:
parent
4518621790
commit
045cf17dee
|
@ -43,6 +43,7 @@ function editor(root, inputData, options) {
|
|||
editorKeymap.mapKey('C-S-ArrowUp', 'blockMoveBackward')
|
||||
editorKeymap.mapKey('C-S-ArrowDown', 'blockMoveForward')
|
||||
editorKeymap.mapKey('C-.', 'toggleBlock')
|
||||
editorKeymap.mapKey('Backspace', 'deleteCharacterBackward')
|
||||
// keymap.mapKey('C-]', 'zoomIn')
|
||||
// keymap.mapKey('C-[', 'zoomOut')
|
||||
|
||||
|
@ -179,6 +180,8 @@ function editor(root, inputData, options) {
|
|||
blockMoveBackward,
|
||||
blockMoveForward,
|
||||
|
||||
deleteCharacterBackward,
|
||||
|
||||
expandBlock,
|
||||
collapseBlock,
|
||||
toggleBlock
|
||||
|
@ -658,6 +661,64 @@ function editor(root, inputData, options) {
|
|||
return toggleBlock(event, false)
|
||||
}
|
||||
|
||||
function countBraces(sset, as) {
|
||||
let set = _(sset).chain().split('').value()
|
||||
let defaults = {}
|
||||
defaults[set[0]] = 0
|
||||
defaults[set[1]] = 0
|
||||
return _(as)
|
||||
.chain()
|
||||
.takeWhile(c => _.includes(set, c))
|
||||
.countBy()
|
||||
.defaults(defaults)
|
||||
.thru(x => x[set[0]] - x[set[1]])
|
||||
.value()
|
||||
}
|
||||
|
||||
function deleteCharacterBackward(event) {
|
||||
let input = event.target
|
||||
let value = input.value
|
||||
|
||||
// There is text selected, so we skip
|
||||
if (input.selectionStart !== input.selectionEnd) return true
|
||||
|
||||
let prefix = value.slice(0, input.selectionStart)
|
||||
let suffix = value.slice(input.selectionStart)
|
||||
|
||||
let braces = {
|
||||
'[': '[]',
|
||||
'(': '()',
|
||||
'{': '{}',
|
||||
}
|
||||
|
||||
let c = prefix[prefix.length-1]
|
||||
let braceSet = braces[c]
|
||||
|
||||
let prefixCount = _(prefix)
|
||||
.split('').reverse()
|
||||
.thru(_.partial(countBraces, braceSet))
|
||||
.value()
|
||||
|
||||
let suffixCount = _(suffix)
|
||||
.split('')
|
||||
.thru(_.partial(countBraces, braceSet))
|
||||
.value()
|
||||
|
||||
if (prefixCount > 0 && suffixCount < 0 && prefixCount + suffixCount === 0) {
|
||||
event.preventDefault()
|
||||
|
||||
input.value = prefix.slice(0, prefix.length - 1) + suffix.slice(1)
|
||||
_.defer(() => {
|
||||
input.selectionStart = prefix.length - 1
|
||||
input.selectionEnd = input.selectionStart
|
||||
})
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
$(root).on('keydown', function (event) {
|
||||
if (editing) {
|
||||
return editorKeymap.handleKey(EDITOR, event)
|
||||
|
|
Loading…
Reference in New Issue
Block a user