优化meditor的输入交互
parent
be857d0f45
commit
d8653d6d1a
|
@ -677,8 +677,10 @@ export default class Meditor {
|
||||||
dom.value =
|
dom.value =
|
||||||
dom.value.slice(0, start) + val + dom.value.slice(end, dom.value.length)
|
dom.value.slice(0, start) + val + dom.value.slice(end, dom.value.length)
|
||||||
|
|
||||||
dom.selectionStart = (isSelect ? start : start + val.length) + offset
|
this.select(
|
||||||
dom.selectionEnd = start + val.length - offset
|
(isSelect ? start : start + val.length) + offset,
|
||||||
|
start + val.length - offset
|
||||||
|
)
|
||||||
dom.scrollTop = scrollTop
|
dom.scrollTop = scrollTop
|
||||||
dom.focus()
|
dom.focus()
|
||||||
} else {
|
} else {
|
||||||
|
@ -746,14 +748,10 @@ export default class Meditor {
|
||||||
_getCursorText(n) {
|
_getCursorText(n) {
|
||||||
var dom = this.__EDITOR__
|
var dom = this.__EDITOR__
|
||||||
var start = dom.selectionStart
|
var start = dom.selectionStart
|
||||||
var end = dom.selectionEnd
|
var pos = dom.selectionEnd
|
||||||
var pos = end
|
|
||||||
|
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
pos = start - 1
|
pos = start - 1
|
||||||
if (pos < 0) {
|
|
||||||
pos = 0
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return this.value[pos] || ''
|
return this.value[pos] || ''
|
||||||
}
|
}
|
||||||
|
@ -860,6 +858,7 @@ export default class Meditor {
|
||||||
|
|
||||||
if (
|
if (
|
||||||
(prev === next && (prev === '"' || prev === "'")) ||
|
(prev === next && (prev === '"' || prev === "'")) ||
|
||||||
|
(prev === next && prev === '`') ||
|
||||||
(prev === '[' && next === ']') ||
|
(prev === '[' && next === ']') ||
|
||||||
(prev === '{' && next === '}') ||
|
(prev === '{' && next === '}') ||
|
||||||
(prev === '(' && next === ')')
|
(prev === '(' && next === ')')
|
||||||
|
@ -867,7 +866,6 @@ export default class Meditor {
|
||||||
this.select(pos - 1, pos + 1)
|
this.select(pos - 1, pos + 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break
|
break
|
||||||
|
|
||||||
// (
|
// (
|
||||||
|
@ -879,46 +877,73 @@ export default class Meditor {
|
||||||
this.cursor(select ? 0 : -1)
|
this.cursor(select ? 0 : -1)
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
|
// )
|
||||||
|
case 48:
|
||||||
|
if (ev.shiftKey) {
|
||||||
|
let prev = this._getCursorText(-1)
|
||||||
|
let next = this._getCursorText(1)
|
||||||
|
if (prev === '(' && next === ')') {
|
||||||
|
ev.preventDefault()
|
||||||
|
this.cursor(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
case 219: // [ & {
|
case 219: // [ & {
|
||||||
ev.preventDefault()
|
ev.preventDefault()
|
||||||
this.insert(
|
this.insert(
|
||||||
ev.shiftKey ? `{${wrap}}` : `[${wrap}]`,
|
ev.shiftKey ? `{${wrap}}` : `[${wrap}]`,
|
||||||
select,
|
select,
|
||||||
(select && 1) || 0
|
select ^ 0
|
||||||
)
|
)
|
||||||
this.cursor(select ? 0 : -1)
|
this.cursor(select ? 0 : -1)
|
||||||
|
|
||||||
break
|
break
|
||||||
|
// } & ]
|
||||||
|
case 221: {
|
||||||
|
let prev = this._getCursorText(-1)
|
||||||
|
let next = this._getCursorText(1)
|
||||||
|
if (ev.shiftKey) {
|
||||||
|
if (prev === '{' && next === '}') {
|
||||||
|
ev.preventDefault()
|
||||||
|
this.cursor(1)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (prev === '[' && next === ']') {
|
||||||
|
ev.preventDefault()
|
||||||
|
this.cursor(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// `
|
||||||
|
case 192:
|
||||||
// ' & "
|
// ' & "
|
||||||
case 222:
|
case 222:
|
||||||
{
|
if (ev.shiftKey && ev.keyCode === 192) {
|
||||||
ev.preventDefault()
|
break
|
||||||
let val = "'"
|
} else {
|
||||||
|
let val = ev.keyCode === 192 ? '`' : ev.shiftKey ? '"' : "'"
|
||||||
let prev = this._getCursorText(-1)
|
let prev = this._getCursorText(-1)
|
||||||
let next = this._getCursorText(1)
|
let next = this._getCursorText(1)
|
||||||
|
|
||||||
|
if (prev === '' && next === val) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
ev.preventDefault()
|
||||||
|
|
||||||
if (select) {
|
if (select) {
|
||||||
this.insert(val + wrap + val, true, 1)
|
this.insert(val + wrap + val, true, 1)
|
||||||
} else {
|
} else {
|
||||||
if (ev.shiftKey) {
|
|
||||||
val = '"'
|
|
||||||
}
|
|
||||||
if (prev === next && prev === val) {
|
if (prev === next && prev === val) {
|
||||||
this.cursor(1)
|
this.cursor(1)
|
||||||
} else {
|
} else {
|
||||||
if (prev === val || next === val) {
|
this.insert(val + wrap + val)
|
||||||
this.insert(val)
|
this.cursor(-1)
|
||||||
} else {
|
|
||||||
this.insert(val.repeat(2))
|
|
||||||
this.cursor(-1)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Reference in New Issue