Poem downloader

Download Poem txt for cnkgraph.com

// ==UserScript==
// @name         Poem downloader
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  Download Poem txt for cnkgraph.com
// @author       LiHowe
// @match        https://cnkgraph.com/Poem/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=cnkgraph.com
// @license      MIT
// @grant        none
// ==/UserScript==
(function() {
 'use strict';
  const nodeList = document.querySelectorAll('.my-4')
  const buttonStyle = `
  position: absolute;
  top: 20px;
  right: 10px;
  border: none;
  font-size: 16px;
  border-radius: 4px;
  padding: 5px 10px;
  `

  function analysis(node) {
    const titleEl = node.querySelector('.poemTitle ')
    const allTitleContent = titleEl.textContent

    const descriptionEl = node.querySelector('.titleIndent')

    const dropdownEl = node.querySelector('.dropdown-menu')
    const dropdownContent = dropdownEl.textContent

    const description = descriptionEl.textContent
    const title = allTitleContent.substring(dropdownContent.length, allTitleContent.length - description.length)
    const poem = node.querySelector('.poemContent').textContent
    
    return `
    ${title}
    ${description}

    ${poem}
    `
  }

  function downloadText(str, name) {
    const a = document.createElement('a')
    const blob = new Blob([str], { type: 'plain/text' })
    a.href = URL.createObjectURL(blob)
    a.download = `${name}.txt`
    a.click()
    URL.revokeObjectURL(a.href)
  }
  for (const node of nodeList) {
    const button = document.createElement('button')
    button.innerText = '下载txt'
    button.style.cssText = buttonStyle
    button.addEventListener('click', () => {
      const res = analysis(node)
      downloadText(res, title)
      URL.revokeObjectURL(a.href)
    })
    node.style.position = 'relative'
    node.appendChild(button)
  }

  const navEl = document.querySelector('#pageContent')
  navEl.style.position = 'relative'
  const downloadAllButton = document.createElement('button')
  downloadAllButton.innerText = '下载当前页'
  downloadAllButton.style.cssText = `
  ${buttonStyle}
  top: 4px;`
  downloadAllButton.addEventListener('click', () => {
    const res = []
    for(const node of nodeList) {
      res.push(analysis(node))
    }
    const fileName = decodeURI(location.pathname).split('/').slice(2, 4).join('-')
    downloadText(res.join('\n'), fileName)
  })
  navEl.append(downloadAllButton)
})();