网道/Wangdoc 微改

网道目录悬浮、代码复制,wangdoc细微修改

// ==UserScript==
// @name         网道/Wangdoc 微改
// @namespace    https://wangdoc.com/
// @version      0.1
// @description  网道目录悬浮、代码复制,wangdoc细微修改
// @author       小邋嚃
// @license MIT
// @match        https://wangdoc.com/*
// @icon         https://wangdoc.com/typescript/assets/icons/favicon-32x32.png
// @grant        none
// ==/UserScript==

const setPosition = (el) => {
    el.style.position = 'fixed'
    el.style.top = 10 + 'px'
    el.style.left = 10 + 'px'
}

const delePosition = (el) => {
    el.removeAttribute('style');
}

const hint = (el) => {
    el.style.color = '#27c93f'
    el.innerText = '复制成功'
    setTimeout(()=>{
        el.style.removeProperty('color')
        el.innerText = 'copy'
    },2000)
}

const copy = () => {
    let pres = [...document.querySelectorAll('pre')]
    for(let i = 0; i < pres.length; i++){
        let el = pres[i]
        let content = el.querySelector('code').innerText
        el.style.position = 'relative'
        let copy = document.createElement('span')
        copy.innerText = 'copy'
        copy.style.position = 'absolute'
        copy.style.top = '5px'
        copy.style.right = '5px'
        copy.style.cursor = 'pointer'
        copy.onclick = async function(){
            try{
                await navigator.clipboard.writeText(content)
                hint(copy)
            }catch(err){
                console.log(err)
            }
        }
        el.appendChild(copy)
    }
}

const init = () => {
    let articleToc = document.querySelector('.article-toc')
    let rect = articleToc.getBoundingClientRect()
    let top = articleToc.offsetTop + articleToc.offsetParent.offsetTop
    let bool = false


    document.body.onscroll = function() {
         let distance = document.documentElement.scrollTop
         if(distance > top && !bool){
             bool = true
             setPosition(articleToc)
         }else if(distance < top && bool){
             bool = false
             delePosition(articleToc)
         }
    }

}




(function() {
    'use strict';
    init()
    copy()
})();