annotate .cms/lib/codemirror/src/display/focus.js @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 import { restartBlink } from "./selection.js"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 import { webkit } from "../util/browser.js"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3 import { addClass, rmClass } from "../util/dom.js"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 import { signal } from "../util/event.js"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 export function ensureFocus(cm) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 if (!cm.hasFocus()) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 cm.display.input.focus()
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 if (!cm.state.focused) onFocus(cm)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13 export function delayBlurEvent(cm) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 cm.state.delayingBlurEvent = true
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 setTimeout(() => { if (cm.state.delayingBlurEvent) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 cm.state.delayingBlurEvent = false
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 if (cm.state.focused) onBlur(cm)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 } }, 100)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 export function onFocus(cm, e) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 if (cm.state.delayingBlurEvent && !cm.state.draggingText) cm.state.delayingBlurEvent = false
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 if (cm.options.readOnly == "nocursor") return
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 if (!cm.state.focused) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 signal(cm, "focus", cm, e)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 cm.state.focused = true
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 addClass(cm.display.wrapper, "CodeMirror-focused")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 // This test prevents this from firing when a context
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 // menu is closed (since the input reset would kill the
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 // select-all detection hack)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 cm.display.input.reset()
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 if (webkit) setTimeout(() => cm.display.input.reset(true), 20) // Issue #1730
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 cm.display.input.receivedFocus()
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 restartBlink(cm)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 export function onBlur(cm, e) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 if (cm.state.delayingBlurEvent) return
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 if (cm.state.focused) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 signal(cm, "blur", cm, e)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 cm.state.focused = false
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 rmClass(cm.display.wrapper, "CodeMirror-focused")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 clearInterval(cm.display.blinker)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 setTimeout(() => { if (!cm.state.focused) cm.display.shift = false }, 150)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 }