Greasy Fork

Greasy Fork is available in English.

Glarity helper

Glarity enhance

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Glarity helper
// @namespace    http://tampermonkey.net/
// @version      0.0.4
// @description  Glarity enhance
// @description:zh-cn Glarity 辅助功能
// @author       yoyo
// @match        http://*/*
// @match        https://*/*
// @grant        none
// @license MIT
// ==/UserScript==

;(() => {
  let hostElement, shadowRoot
  let hasHandleGlaritySummaryWidth = false
  function handleGlaritySummary() {
    if (hasHandleGlaritySummaryWidth) return
    const hostElement = document.querySelector('.glarity--summary')
    if (hostElement && hostElement.shadowRoot) {
      const targetElement = hostElement.shadowRoot.querySelector(
        '.glarity---drawer-content-wrapper',
      )
      if (targetElement) {
        targetElement.style.width = '800px'
        hasHandleGlaritySummaryWidth = true
        console.log('hasHandleGlaritySummaryWidth 修改成功')
      } else {
        console.log('未找到具有glarity---drawer-content-wrapper类的元素')
      }
    } else {
      console.log('未找到具有glarity--summary类的元素或此元素没有Shadow DOM')
    }
  }

  function changeDrawerStyle(display) {
    if (shadowRoot) {
      const drawerContentWrapper = shadowRoot.querySelector('.glarity---drawer-content-wrapper')
      if (drawerContentWrapper) {
        drawerContentWrapper.style.display = display
      } else {
        console.error('未找到 .glarity---drawer-content-wrapper 元素')
      }
    } else {
      console.error('shadowRoot 未定义')
    }
  }

  function addSummaryButton() {
    const newButton = document.createElement('div')
    newButton.onclick = () => {
      const iconElement = shadowRoot.querySelector('.glarity-summary-icon')
      iconElement.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }))
      shadowRoot.querySelector('.glarity---drawer-content-wrapper').style.display = 'unset'
      const btns = shadowRoot.querySelectorAll('.glarity---drawer-content-wrapper .glarity---btn')
      const summaryBtn = [...btns].find((a) => a.innerText === '总结页面')
      if (summaryBtn) {
        summaryBtn.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }))
      } else {
        console.log('找不到总结页面按钮')
        setTimeout(() => {
          summaryBtn.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }))
        }, 1000)
      }
    }
    newButton.classList.add('glarity--summaryButton')
    newButton.innerHTML = `
<div class="translate-container glarity---inline-flex glarity---px-[4px] hover:glarity---bg-[#3771e9]"><svg width="20" height="16" viewBox="0 0 20 16" fill="none" xmlns="http://www.w3.org/2000/svg"><title>总结</title><path d="M1 8a7 7 0 0 1 7-7h4a7 7 0 1 1 0 14H8a7 7 0 0 1-7-7Z" fill="#389AFC"></path><text x="50%" y="55%" fill="white" text-anchor="middle" dominant-baseline="middle" font-size="9">S</text></svg></div>
      `
    const translateButton = shadowRoot.querySelector('.glarity--shadowroot .glarity--translate')
    if (translateButton) {
      translateButton.parentNode.insertBefore(newButton, translateButton.nextSibling)
    } else {
      console.log('找不到翻译按钮')
    }
  }

  function onGlarityLoaded() {
    hostElement = document.querySelector('.glarity--summary')
    shadowRoot = hostElement.shadowRoot

    if (!(hostElement && hostElement.shadowRoot)) {
      return
    }
    console.log('==glarity装载完毕==')
    handleGlaritySummary()
    addSummaryButton()

    setTimeout(() => {
      handleGlaritySummary()
      // addSummaryButton()
    }, 1000)
  }

  const observer = new MutationObserver((mutationsList) => {
    for (const mutation of mutationsList) {
      if (mutation.addedNodes[0]?.classList.contains('glarity--summary')) {
        setTimeout(() => {
          shadowRoot.querySelector('.glarity-summary-icon')?.addEventListener('click', (e) => {
            changeDrawerStyle('unset')
          })
          shadowRoot
            .querySelector(
              '.glarity--header > div.glarity--header__action > div > div:nth-child(3)',
            )
            ?.addEventListener('click', (e) => {
              changeDrawerStyle('none')
            })
        }, 1000)
        onGlarityLoaded()
      }
    }
  })

  observer.observe(document.documentElement, { childList: true, subtree: true })

  document.addEventListener('keydown', (event) => {
    if (event.keyCode === 27 || event.key === 'Escape') {
      changeDrawerStyle('none')
    }
  })

  window.addEventListener('load', () => {
    onGlarityLoaded()
  })
})()