GraphQL Playground Timed Autocomplete Hide

Hides GraphQL Playground autocomplete suggestions after a short delay

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

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

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         GraphQL Playground Timed Autocomplete Hide
// @description  Hides GraphQL Playground autocomplete suggestions after a short delay
// @namespace    @lfernandezcall
// @version      2025-05-31
// @author       Alberto Fernandez
// @match        */graphql
// @icon         https://graphql.org/favicon.png
// @license      MIT
// @grant        none
// ==/UserScript==

let hintTimeout; // Global variable to store the timeout ID

const observer = new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
      mutation.addedNodes.forEach(node => {
        if (node.nodeType === Node.ELEMENT_NODE) {
          if (node.classList.contains("CodeMirror-hints") || node.classList.contains("CodeMirror-hint-information")) {
            handleHintBoxVisibility();
          }
        }
      });
    } else if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
      if (mutation.target.classList.contains("CodeMirror-hints") || mutation.target.classList.contains("CodeMirror-hint-information")) {
        if (window.getComputedStyle(mutation.target).display !== 'none') {
          handleHintBoxVisibility();
        }
      }
    }
  });
});

// Function to manage the hint box visibility
function handleHintBoxVisibility() {
  if (hintTimeout) {
    clearTimeout(hintTimeout);
  }

  // Set a new timeout to hide/remove the hints after a delay
  // You can adjust the delay (in milliseconds) here
  const delay = 1500; // 1.5 seconds

  hintTimeout = setTimeout(() => {
    const hintWrappers = document.querySelectorAll(".CodeMirror-hints-wrapper, .CodeMirror-hints, .CodeMirror-hint-information");
    hintWrappers.forEach(element => {
      if (element.style.display !== 'none') {
        element.style.display = 'none';
      }
    });
    hintTimeout = null; // Reset timeout ID after execution
  }, delay);
}

// Start observing the body for child list changes and attribute changes on subtree elements
observer.observe(document.body, {
  subtree: true,
  childList: true,
  attributes: true,
  attributeFilter: ['style'] // Only observe 'style' attribute changes for performance
});

console.log("MutationObserver for GraphQL Playground initialized (timed hide).");