mylib

我的工具

Versione datata 19/04/2024. Vedi la nuova versione l'ultima versione.

Questo script non dovrebbe essere installato direttamente. È una libreria per altri script da includere con la chiave // @require https://update.greasyfork.org/scripts/435697/1362551/mylib.js

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==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);