Greasy Fork

Greasy Fork is available in English.

Glarity helper

Glarity enhance

当前为 2024-02-18 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Glarity helper
// @namespace    http://tampermonkey.net/
// @version      0.0.2
// @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 addSummaryButton() {
    const newButton = document.createElement('div')
    newButton.onclick = () => {
      const iconElement = shadowRoot.querySelector('.glarity-summary-icon')
      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) {
        const clickEvent = new MouseEvent('click', { bubbles: true, cancelable: true })
        summaryBtn.dispatchEvent(clickEvent)
      } else {
        console.log('找不到总结页面按钮')
      }
    }
    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')) {
        onGlarityLoaded()
      }
    }
  })

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

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