diff .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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.cms/lib/codemirror/src/display/focus.js	Fri Oct 11 22:40:23 2024 +0000
@@ -0,0 +1,50 @@
+import { restartBlink } from "./selection.js"
+import { webkit } from "../util/browser.js"
+import { addClass, rmClass } from "../util/dom.js"
+import { signal } from "../util/event.js"
+
+export function ensureFocus(cm) {
+  if (!cm.hasFocus()) {
+    cm.display.input.focus()
+    if (!cm.state.focused) onFocus(cm)
+  }
+}
+
+export function delayBlurEvent(cm) {
+  cm.state.delayingBlurEvent = true
+  setTimeout(() => { if (cm.state.delayingBlurEvent) {
+    cm.state.delayingBlurEvent = false
+    if (cm.state.focused) onBlur(cm)
+  } }, 100)
+}
+
+export function onFocus(cm, e) {
+  if (cm.state.delayingBlurEvent && !cm.state.draggingText) cm.state.delayingBlurEvent = false
+
+  if (cm.options.readOnly == "nocursor") return
+  if (!cm.state.focused) {
+    signal(cm, "focus", cm, e)
+    cm.state.focused = true
+    addClass(cm.display.wrapper, "CodeMirror-focused")
+    // This test prevents this from firing when a context
+    // menu is closed (since the input reset would kill the
+    // select-all detection hack)
+    if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
+      cm.display.input.reset()
+      if (webkit) setTimeout(() => cm.display.input.reset(true), 20) // Issue #1730
+    }
+    cm.display.input.receivedFocus()
+  }
+  restartBlink(cm)
+}
+export function onBlur(cm, e) {
+  if (cm.state.delayingBlurEvent) return
+
+  if (cm.state.focused) {
+    signal(cm, "blur", cm, e)
+    cm.state.focused = false
+    rmClass(cm.display.wrapper, "CodeMirror-focused")
+  }
+  clearInterval(cm.display.blinker)
+  setTimeout(() => { if (!cm.state.focused) cm.display.shift = false }, 150)
+}