mylib

我的工具

Per 19-04-2024. Zie de nieuwste versie.

Dit script moet niet direct worden geïnstalleerd - het is een bibliotheek voor andere scripts om op te nemen met de meta-richtlijn // @require https://update.greasyfork.org/scripts/435697/1362551/mylib.js

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name mylib
// @description 我的工具
// @dependency unsafeWindow GM_setValue GM_getValue
// ==/UserScript==
(function(win){
    const e=document.documentElement.firstElementChild,sv=GM_setValue,gv=GM_getValue;
    let z,myBtns;
    // win.gv=gv;win.sv=sv
    win.my=new class {
        constructor(){
            if(e.tagName==='Z') z=this.zone=e;
            else {
                z=this.zone=this.before('z',e,'',`class`,'rwf');
                win.cl=win.console.log;win.al=win.alert;
            }
            if(z.querySelector('my-btns')) myBtns=z.querySelector('my-btns');
            else{
                this.addStyle(`my-btns{display:block;z-index:9195129;position:fixed;height: min-content;}.my-btn{user-select: none;font-size: initial !important;}`,'my-btns');
                myBtns=this.append('my-btns',z,'',`class`,'rwf');
                myBtns.style.left=gv('left',0);
                myBtns.style.top=gv('top',0);
                // myBtns.style.display='flex';
                if(gv('isFixed',0)) this.bindDrag(myBtns);
                myBtns.onmouseup=e=>{
                    sv('left',myBtns.style.left);
                    sv('top',myBtns.style.top);
                }
            }
        }
sleep(time){
 return new Promise((resolve) => setTimeout(resolve, time));
}
        addStyle(css,className='rwf'){//depend:after,zone
            return this.append('style',z,css,`class`,className);
        }
        append(tag,dom,content){
            if(!tag) return;
            const son=typeof tag==='string'?document.createElement(tag):tag instanceof EventTarget?tag:0;
            let len=arguments.length;
            if(dom instanceof EventTarget)dom.append(son);
            if(content)son.append(content);
            while(len>3){
                son.setAttribute([arguments[len-2]],arguments[len-1]);len-=2;
            }return son;
        }//my.append('tag',document.body,'content','idk','true','data-s')
        after(tag,dom,content){
            if(!tag) return;
            const bro=typeof tag==='string'?document.createElement(tag):tag instanceof EventTarget?tag:0;
            let len=arguments.length;
            if(dom instanceof EventTarget)dom.after(bro);
            if(content)bro.append(content);
            while(len>3){
                bro.setAttribute([arguments[len-2]],arguments[len-1]);len-=2;
            }return bro;
        }//my.after('div',document.body,'','suck','1','dick',000)
        before(tag,dom,content){
            if(!tag) return;
            const bro=typeof tag==='string'?
                  document.createElement(tag):tag instanceof EventTarget?
                  tag:0;
            let len=arguments.length;
            if(dom instanceof EventTarget)dom.before(bro);
            if(content)bro.append(content);
            while(len>3){
                bro.setAttribute([arguments[len-2]],arguments[len-1]);len-=2;
            }return bro;
        }// my.before('div',document.head,'','suck','1','dick')

        eods(){//enable or disable style in my.zone
            z.querySelectorAll('style').forEach(e=>e.type==='0'?e.type='':e.type=0);
        }
        sohe(...args){//show or hide elements
            args.forEach(e=>{
                if(typeof e!=="string") e.style.display==='none'?e.style.display='initial':e.style.display='none';
                else document.querySelectorAll(e).forEach(e=>e.style.display==='none'?e.style.display='initial':e.style.display='none');
            });
        }
        s2d(seconds){//seconds2date
            const date=new Date(seconds),year=date.getFullYear(),month=date.getMonth()+1,day=date.getDate(),
                  hour=date.getHours(),minute=date.getMinutes(),second=date.getSeconds(),milliseconds=date.getMilliseconds(),currentTime=year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second+":"+milliseconds;
            return currentTime;
        }//my.s2d(new Date().getTime())
        tieba(uname,pwd){
            document.querySelector('[name="userName"]').value=uname;
            document.querySelector('[name="password"]').value=pwd;
            return document.querySelector('[value="登录"]').click();
        }
        fixTitle(){//stop title be changed
            Object.defineProperty(document,"title",{
                writable:false
            });
        }

        addBtns(...args){//depend:addStyle,append
            const len=args.length;
            for(let i=0;i<len;i++){
                const btn= this.append('input',myBtns,'','type','button','class','my-btn','value',args[i].name+' ');
                btn.addEventListener('click',args[i]);
            }
            return myBtns;
        }//my.addBtns(()=>{},e=>{confirm(e.target.id)},function(e){prompt(e.target.outerHTML)},function test(e){return 1})
        addAs(...args){//depend:addStyle,append
            const len=args.length;
            for(let i=0;i<args.length;i+=2){
                this.append('a',myBtns,args[i]+'|',`href`,args[i+1],'class','my-btn');
            }
        }//my.addAs("bilibili","https://www.bilibili.com/","baidu","https://www.baidu.com/")

        bindDrag(ele){//鼠标拖动
            ele.onmousedown=function(ev){
                //if(ev.target.tagName==='TEXTAREA') return;
                const diffX=ev.clientX-ele.offsetLeft,diffY=ev.clientY-ele.offsetTop,iw=win.innerWidth,ih=win.innerHeight;
                document.onmousemove=function(ev){
                    let moveX=ev.clientX-diffX,moveY=ev.clientY-diffY;
                    moveX<0?moveX=0:moveX>iw-ele.offsetWidth?moveX=iw-ele.offsetWidth:0
                    moveY<0?moveY=0:moveY>ih-ele.offsetHeight?moveY=ih-ele.offsetHeight:0;
                    ele.style.left=moveX/iw*100+'%'//moveX + 'px';
                    ele.style.top=moveY/ih*100+'%'//moveY + 'px'
                }
                document.onmouseup=function(ev){
                    this.onmousemove=null;
                    this.onmouseup=null;
                }
            }
        }
    }()
})(unsafeWindow);