就不登录-csdn

https://github.com/ojer/unregistered

Verze ze dne 27. 07. 2023. Zobrazit nejnovější verzi.

// ==UserScript==
// @name        就不登录-csdn
// @license MIT
// @namespace   unregistered
// @match       http*://blog.csdn.net/*/article/details/**
// @noframes
// @grant       GM_addStyle
// @version     1.1
// @author      ojer
// @description https://github.com/ojer/unregistered
// @description 复制网页内容
// ==/UserScript==

const codeElement = document.querySelectorAll('pre code')
const copyBtn = 'hljs-button'
const btnText = '复制'

let editorSta = void 0

const doCopy = (e) => {
  var t = e.target || e.srcElement
  var n = document.documentElement.scrollTop
  if (t.className.indexOf(copyBtn) > -1) {
    e.preventDefault()
    var o = document.getElementById('hljs-copy-el')
    o || ((o = document.createElement('textarea')), (o.style.position = 'absolute'), (o.style.left = '-9999px'), (o.style.top = n + 'px'), (o.id = 'hljs-copy-el'), document.body.appendChild(o)),
      (o.textContent = e.currentTarget.innerText.replace(/[\u00A0]/gi, ' ')),
      selectById('#hljs-copy-el')
    try {
      var r = document.execCommand('copy')
      o.remove(),
        (t.dataset.title = r ? '复制成功' : '复制失败'),
        r &&
          setTimeout(function () {
            t.dataset.title = btnText
          }, 3e3)
    } catch (i) {
      t.dataset.title = '复制失败'
    }
  }
}
const cusSignin = (e) => {
  doCopy(e)
}

const selectById = (e) => {
  if (((e = 'string' == typeof e ? document.querySelector(e) : e), navigator.userAgent.match(/ipad|ipod|iphone/i))) {
    var t = e.contentEditable,
      n = e.readOnly
    ;(e.contentEditable = !0), (e.readOnly = !0)
    var o = document.createRange()
    o.selectNodeContents(e)
    var r = window.getSelection()
    r.removeAllRanges(), r.addRange(o), e.setSelectionRange(0, 999999), (e.contentEditable = t), (e.readOnly = n)
  } else e.select()
}
const doBindCopy = () => {
  try {
    var e
    if ('ckeditor' == editorSta) {
      e = document.querySelectorAll('code.hljs')
      for (var t in e) {
        e.hasOwnProperty(t) && bindCopy(e[t].parentNode)
      }
    } else {
      e = codeElement
      for (var t in e) e.hasOwnProperty(t) && bindCopy(e[t])
    }
  } catch (n) {
    console.error('CopyButton error: ', n)
  }
}

const onCopy = (t) => {
  if (window.getSelection().getRangeAt(0).toString().length > 0) {
    t.preventDefault()
    var e = window
      .getSelection()
      .getRangeAt(0)
      .toString()
      .replace(/[\u00A0]/gi, ' ')
    if (t.clipboardData) {
      t.clipboardData.setData('text/plain', e)
    } else {
      if (window.clipboardData) {
        return window.clipboardData.setData('text', e)
      }
      var e = document.createElement('textarea')
      ;(e.style.cssText = 'position: fixed;z-index: -10;top: -50px;left: -50px;'), (e.innerHTML = t), document.getElementsByTagName('body')[0].appendChild(e), e.select(), document.execCommand('copy')
    }
  }
}

const initCopy = () => {
  document.querySelectorAll('.hljs-button').forEach((e) => {
    e.remove()
  })
  var intervalId = setInterval(() => {
    if (this.unsafeWindow.csdn && this.unsafeWindow.csdn.loginBox && this.unsafeWindow.csdn.loginBox.show) {
      this.unsafeWindow.csdn.loginBox.show = () => {
        return 0
      }
      clearInterval(intervalId)
    }
  }, 3e3)
  document.querySelector('#content_views').addEventListener('copy', onCopy)
  document.querySelector('#content_views').addEventListener('keydown', onCopy)
  doBindCopy()
}
const bindCopy = (e) => {
  var boolC = !1
  var t = ''
  if ('object' == typeof e && null !== e) {
    var n = '.signin(event)'
    var o = 'hljs'
    var r = '.copyCode(event)'
    'mdeditor' === editorSta && (o = 'mdcp'),
      (r = o + r),
      boolC && ((r = o + n), (t = 'data-report-click=\'{"spm":"1001.2101.3001.4334"}\'')),
      (e.innerHTML = e.innerHTML + ('<div class="{0} {2}" data-title="{1}" ' + t + '></div>').format(copyBtn, btnText, '')),
      'hljs' === o ? e.querySelector('.hljs-button').setAttribute('onclick', doCopy) : (e.setAttribute('onclick', doCopy), (e.style.position = 'unset'))
  }
}

const setStyle = () => {
  var e = document.createElement('style')
  ;(e.type = 'text/css'), (e.innerHTML = ['code, pre {user-select: auto !important;}'].join('').format(copyBtn)), document.getElementsByTagName('head')[0].appendChild(e)
}
const init = () => {
  codeElement.length > 0 && ((this.unsafeWindow.mdcp.copyCode = doCopy), (this.unsafeWindow.mdcp.signin = cusSignin), initCopy(), setStyle(), (editorSta = 'mdeditor'))
}

const intervalId = setInterval(() => {
  if (this.unsafeWindow.mdcp) {
    init()
    clearInterval(intervalId)
  }
}, 1e3)