WorkFlowy - Focus Fix

Fix WorkFlowy lost focus

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name         WorkFlowy - Focus Fix
// @description  Fix WorkFlowy lost focus
// @author       rawbytz and Gavin Elster
// @version      2026.04.12
// @license      MIT
//
// @namespace    https://github.com/elstgav
// @homepageURL  https://github.com/elstgav/workflowy
// @supportURL   https://github.com/elstgav/workflowy/issues
//
//
// @match        https://workflowy.com/*
//
// @grant        none
// @run-at       document-end
// ==/UserScript==

//#region src/scripts/focus-fix/focus-fix.ts
const fixFocus = () => {
  const active = document.activeElement?.className
  if (!active || active.includes('searchBoxInput') || active.includes('content')) return
  const matches = document.querySelectorAll(
    '.name.matches .content, .notes.matches .content, .metaMatches .name .content',
  )
  if (matches[0] instanceof HTMLElement) return matches[0].focus()
  const index = WF.currentItem().isMainDocumentRoot() && !WF.currentSearchQuery() ? 2 : 0
  const content = document.getElementsByClassName('content')
  if (content[index] instanceof HTMLElement) content[index].focus()
}
const otherListeners = WFEventListener
window.WFEventListener = (event) => {
  if (event !== 'locationChanged') return
  requestAnimationFrame(fixFocus)
  otherListeners?.(event)
}
const appObserver = new MutationObserver(() => {
  if (!document.querySelector('.page.active')) return
  appObserver.disconnect()
  fixFocus()
})
appObserver.observe(document.body, {
  subtree: true,
  childList: true,
})
//#endregion