myUtils

自分用、dom取得等の機能追加。

15.06.2022 itibariyledir. En son verisyonu görün.

Bu script direkt olarak kurulamaz. Başka scriptler için bir kütüphanedir ve meta yönergeleri içerir // @require https://update.greasyfork.org/scripts/435697/1061227/myUtils.js

// ==UserScript==
// @name         myUtils
// @description  自分用、dom取得等の機能追加。
// @include        *
// @noframes
// ==/UserScript==
window.my=new class {
    constructor(){
       Element.prototype.on=function(){
          addEventListener.apply(this,arguments);
          return this
       }
       const e=document.head.nextElementSibling;
       if(e.hasAttribute('my-zone')) this.zone=e;
       else{
           const z=document.createElement('div');
           z.setAttribute('my-zone','');
           document.head.after(z);
           this.zone=z
       }
    }
 
    //dependency:after,zone
    addStyle(css,className=void(0)){
        this.append('style',this.zone,css,`class`,className)
    }
    
    append(tag,dom,content){
        if(!tag) return;
        const son=typeof tag==='string'?
              document.createElement(tag):tag instanceof HTMLElement||tag instanceof DocumentFragment?
              tag:void(0);
        let len=arguments.length;
        if(dom instanceof HTMLElement||dom instanceof DocumentFragment)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 HTMLElement||tag instanceof DocumentFragment?
              tag:void(0);
        let len=arguments.length;
        if(dom instanceof HTMLElement||dom instanceof DocumentFragment)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 HTMLElement||tag instanceof DocumentFragment?
              tag:void(0);
        let len=arguments.length;
        if(dom instanceof HTMLElement||dom instanceof DocumentFragment)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')

    //enable or disable style with class
    switchStyle(...styleClassStrs){
        styleClassStrs.forEach(e=>{
            this.zone.querySelectorAll('style.'+e).forEach(e=>{
                e.type!='0'?e.type=0:e.type="";
            });
        })
    }

    seconds2date(seconds){
        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.seconds2date(new Date().getTime())

    //跳出登录框后再执行
    fuckTiebaLogin(userName,password){
        document.getElementById('TANGRAM__PSP_5__footerULoginBtn').click();
        document.getElementById('TANGRAM__PSP_5__userName').outerHTML+='';
        document.getElementById('TANGRAM__PSP_5__password').outerHTML+='';
        document.getElementById('TANGRAM__PSP_5__userName').value=userName;
        document.getElementById('TANGRAM__PSP_5__password').value=password;
        return document.getElementById('TANGRAM__PSP_5__submit').click();
    }

    getValue(k,aDefault){
        const val=localStorage.getItem("XB_"+k)
        if (!val && 'undefined' != typeof aDefault) return aDefault;
        return val;
    }

    setValue(k, v){
        localStorage.setItem("XB_"+k, v);
    }
    //setValue('k', 'v')

    deleteValue(k){
        if(k.indexOf("XB_")!=-1) localStorage.removeItem(k);
    }
    //deleteValue('k')

    listValues(){
        let list=[],j=0,k,l=localStorage.length;
        for (let i=0;i<l;i++) {
            k=localStorage.key(i);
            if(k.indexOf("XB_")!=-1) list[j++]=localStorage.key(i)
        }return list
    }

    //dependency:listValues
    clearValues(){
        this.listValues().forEach(e=>{
            localStorage.removeItem(e)
        })
    }

    //get len of json obj
    getJsonLen(jsonObj){
        let jsonLen=0, key;
        for (key in jsonObj) {
            if (jsonObj.hasOwnProperty(key)) jsonLen++;
        }return jsonLen;
    }

    //syn console.log
    log(text){
        console.log(JSON.stringify(text))
    }

    //dependency:addStyle,append
    addBtns(...params){
        const z=this.zone,myDiv=z.querySelector('#my-btn-container')||this.append('div',z,'',`id`,'my-btn-container',`class`,void(0)),btns=[],l=params.length;
        if(!z.querySelector('style.my-css'))this.addStyle(`#my-btn-container{display:flex;flex-wrap:wrap;z-index:1650729359811;position: fixed!important;right:0;top:0}.my-btn{user-select: none!important}`,'my-css undefined');
        for(let i=0;i<l;){
            const btn=typeof params[i]==="function"?
            this.append('button',myDiv,params[i].name+'|','class','my-btn').on('click',params[i++]):
            this.append('button',myDiv,params[i++]+'|','class','my-btn').on('click',params[i++]);
            btns[btns.length]=btn
        }return btns
    }
    //my.addBtns(()=>{},"func1",e=>{confirm(e.target.id)},function(e){prompt(e.target.outerHTML)},function test(e){return 1})

    //dependency:addStyle,append
    addAs(...args){
        const z=this.zone,myDiv=z.querySelector('#my-btn-container')||this.append('div',document.body,'',`id`,'my-btn-container',`class`,void(0));
        if(!z.querySelector('style.my-css')) this.addStyle(`#my-btn-container{display:flex;flex-wrap:wrap;z-index:1650729359811;position: fixed!important;right:0;top:0}.my-btn{user-select: none!important}`,'my-css undefined');
        for(let i=0;i<args.length;i+=2){
            this.append('a',myDiv,args[i]+'|',`href`,args[i+1]);
        }
    }
    //my.addAs("哔哩哔哩","https://www.bilibili.com/","百度","https://www.baidu.com/")

    //prevent document.title from being changed
    fixTitle(){
        Object.defineProperty(document,"title",{
            writable:false
        })
    }
}