| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import { onBlur } from "../display/focus.js"
- import { on } from "../util/event.js"
- // These must be handled carefully, because naively registering a
- // handler for each editor will cause the editors to never be
- // garbage collected.
- function forEachCodeMirror(f) {
- if (!document.getElementsByClassName) return
- let byClass = document.getElementsByClassName("CodeMirror"), editors = []
- for (let i = 0; i < byClass.length; i++) {
- let cm = byClass[i].CodeMirror
- if (cm) editors.push(cm)
- }
- if (editors.length) editors[0].operation(() => {
- for (let i = 0; i < editors.length; i++) f(editors[i])
- })
- }
- let globalsRegistered = false
- export function ensureGlobalHandlers() {
- if (globalsRegistered) return
- registerGlobalHandlers()
- globalsRegistered = true
- }
- function registerGlobalHandlers() {
- // When the window resizes, we need to refresh active editors.
- let resizeTimer
- on(window, "resize", () => {
- if (resizeTimer == null) resizeTimer = setTimeout(() => {
- resizeTimer = null
- forEachCodeMirror(onResize)
- }, 100)
- })
- // When the window loses focus, we want to show the editor as blurred
- on(window, "blur", () => forEachCodeMirror(onBlur))
- }
- // Called when the window resizes
- function onResize(cm) {
- let d = cm.display
- // Might be a text scaling operation, clear size caches.
- d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null
- d.scrollbarsClipped = false
- cm.setSize()
- }
|