focus.min.js (1511B)
1 import { restartBlink } from "./selection.js" 2 import { webkit } from "../util/browser.js" 3 import { addClass, rmClass } from "../util/dom.js" 4 import { signal } from "../util/event.js" 5 6 export function ensureFocus(cm) { 7 if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm) } 8 } 9 10 export function delayBlurEvent(cm) { 11 cm.state.delayingBlurEvent = true 12 setTimeout(() => { if (cm.state.delayingBlurEvent) { 13 cm.state.delayingBlurEvent = false 14 onBlur(cm) 15 } }, 100) 16 } 17 18 export function onFocus(cm, e) { 19 if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false 20 21 if (cm.options.readOnly == "nocursor") return 22 if (!cm.state.focused) { 23 signal(cm, "focus", cm, e) 24 cm.state.focused = true 25 addClass(cm.display.wrapper, "CodeMirror-focused") 26 // This test prevents this from firing when a context 27 // menu is closed (since the input reset would kill the 28 // select-all detection hack) 29 if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { 30 cm.display.input.reset() 31 if (webkit) setTimeout(() => cm.display.input.reset(true), 20) // Issue #1730 32 } 33 cm.display.input.receivedFocus() 34 } 35 restartBlink(cm) 36 } 37 export function onBlur(cm, e) { 38 if (cm.state.delayingBlurEvent) return 39 40 if (cm.state.focused) { 41 signal(cm, "blur", cm, e) 42 cm.state.focused = false 43 rmClass(cm.display.wrapper, "CodeMirror-focused") 44 } 45 clearInterval(cm.display.blinker) 46 setTimeout(() => { if (!cm.state.focused) cm.display.shift = false }, 150) 47 }