myUtils

for offline

当前为 2023-07-02 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/435697/1214413/myUtils.js

  1. // ==UserScript==
  2. // @name myUtils
  3. // @run-at document-start
  4. // @match *://*/*
  5. // @description for offline
  6. // ==/UserScript==
  7. my=new class {
  8. constructor(){//dependency:after,zone
  9. const e=document.head.nextElementSibling;
  10. if(e.hasAttribute('my-zone')) this.zone=e;
  11. else this.zone=this.after('div',document.head,'',`my-zone`,'',`class`,'fucking-zhihu-sucks');
  12. this.addStyle(`#my-btn-container{display:flex;flex-wrap:wrap;z-index:1650729359811;position:fixed!important;}.my-btn{user-select: none!important}`,'my-css-for-btns fucking-zhihu-sucks');
  13. }
  14.  
  15. addStyle(css,className='fucking-zhihu-sucks'){//dependency:after,zone
  16. return this.append('style',this.zone,css,`class`,className)
  17. }
  18.  
  19. append(tag,dom,content){
  20. if(!tag) return;
  21. const son=typeof tag==='string'?
  22. document.createElement(tag):tag instanceof EventTarget?
  23. tag:0;
  24. let len=arguments.length;
  25. dom instanceof EventTarget?dom.append(son):0;
  26. if(content)son.append(content);
  27. while(len>3){
  28. son.setAttribute([arguments[len-2]],arguments[len-1]);len-=2
  29. }return son;
  30. }//my.append('tag',document.body,'content','idk','true','data-s')
  31.  
  32. after(tag,dom,content){
  33. if(!tag) return;
  34. const bro=typeof tag==='string'?
  35. document.createElement(tag):tag instanceof EventTarget?
  36. tag:0;
  37. let len=arguments.length;
  38. dom instanceof EventTarget?dom.after(bro):0;
  39. if(content)bro.append(content);
  40. while(len>3){
  41. bro.setAttribute([arguments[len-2]],arguments[len-1]);len-=2
  42. }return bro;
  43. }//my.after('div',document.body,'','suck','1','dick',000)
  44.  
  45. before(tag,dom,content){
  46. if(!tag) return;
  47. const bro=typeof tag==='string'?
  48. document.createElement(tag):tag instanceof EventTarget?
  49. tag:0;
  50. let len=arguments.length;
  51. dom instanceof EventTarget?dom.before(bro):0;
  52. if(content)bro.append(content);
  53. while(len>3){
  54. bro.setAttribute([arguments[len-2]],arguments[len-1]);len-=2
  55. }return bro;
  56. }// my.before('div',document.head,'','suck','1','dick')
  57.  
  58. switchStyle(...styleQueryRule){//enable or disable styleTag found in my.zone
  59. styleQueryRule.forEach(e=>{
  60. this.zone.querySelectorAll('style'+e).forEach(e=>{
  61. e.type!='0'?e.type=0:e.type="";
  62. });
  63. })
  64. }
  65. switchDisplay(...queryRule){//show or hide elements found
  66. queryRule.forEach(e=>{
  67. if(typeof e !="string") e.style.display=='none'?e.style.display='initial':e.style.display='none';
  68. else{
  69. document.querySelectorAll(e).forEach(e=>{
  70. e.style.display=='none'?e.style.display='initial':e.style.display='none';
  71. });
  72. }
  73. })
  74. }
  75. seconds2date(seconds){
  76. const date=new Date(seconds),year=date.getFullYear(),month=date.getMonth()+1,day=date.getDate(),
  77. hour=date.getHours(),minute=date.getMinutes(),second=date.getSeconds(),milliseconds=date.getMilliseconds(),currentTime=year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second+":"+milliseconds;
  78. return currentTime
  79. }//my.seconds2date(new Date().getTime())
  80.  
  81. fuckTiebaLogin(userName,password){//sign in tieba
  82. document.getElementById('TANGRAM__PSP_5__footerULoginBtn').click();
  83. document.getElementById('TANGRAM__PSP_5__userName').outerHTML+='';
  84. document.getElementById('TANGRAM__PSP_5__password').outerHTML+='';
  85. document.getElementById('TANGRAM__PSP_5__userName').value=userName;
  86. document.getElementById('TANGRAM__PSP_5__password').value=password;
  87. return document.getElementById('TANGRAM__PSP_5__submit').click();
  88. }
  89.  
  90. getValue(k,aDefault){
  91. const val=localStorage.getItem("XB_"+k)
  92. if (!val && 'undefined' != typeof aDefault) return aDefault;
  93. return val;
  94. }
  95.  
  96. setValue(k, v){
  97. localStorage.setItem("XB_"+k, v);
  98. }//setValue('k', 'v')
  99.  
  100. deleteValue(k){
  101. if(k.indexOf("XB_")!=-1) localStorage.removeItem(k);
  102. }//deleteValue('k')
  103.  
  104. listValues(){
  105. let list=[],j=0,k,l=localStorage.length;
  106. for (let i=0;i<l;i++) {
  107. k=localStorage.key(i);
  108. if(k.indexOf("XB_")!=-1) list[j++]=localStorage.key(i)
  109. }return list
  110. }
  111.  
  112. clearValues(){//dependency:listValues
  113. this.listValues().forEach(e=>{
  114. localStorage.removeItem(e)
  115. })
  116. }//get len of json obj
  117.  
  118. getJsonLen(jsonObj){
  119. let jsonLen=0, key;
  120. for (key in jsonObj) {
  121. if (jsonObj.hasOwnProperty(key)) jsonLen++;
  122. }return jsonLen;
  123. }
  124.  
  125. log(text){//syn console.log
  126. console.log(JSON.stringify(text))
  127. }
  128.  
  129. addBtns(...params){//dependency:addStyle,append
  130. const z=this.zone,myDiv=z.querySelector('#my-btn-container')||this.append('div',z,'',`id`,'my-btn-container',`class`,'fucking-zhihu-sucks'),btns=[],l=params.length;
  131. for(let i=0;i<l;i+=2){
  132. const btn= params[i]==""?this.append('button',myDiv,params[i+1].name+'|','class','my-btn'):this.append('button',myDiv,params[i]+'|','class','my-btn');
  133. btn.addEventListener('click',params[i+1])
  134. btns[btns.length]=btn//一个大坑:把on换成addEventListener后,带来的一个变化就是不返回东西了,所以会出现undefined.所以解决对策是先把按钮放入数组,再给按钮绑定事件
  135. }return btns
  136. }//my.addBtns('',()=>{},"func1",e=>{confirm(e.target.id)},'f2',function(e){prompt(e.target.outerHTML)},function test(e){return 1})
  137.  
  138. addAs(...args){//dependency:addStyle,append
  139. const z=this.zone,myDiv=z.querySelector('#my-btn-container')||this.append('div',z,'',`id`,'my-btn-container',`class`,'fucking-zhihu-sucks');
  140. for(let i=0;i<args.length;i+=2){
  141. this.append('a',myDiv,args[i]+'|',`href`,args[i+1]);
  142. }
  143. }//my.addAs("bilibili","https://www.bilibili.com/","baidu","https://www.baidu.com/")
  144.  
  145. fixTitle(){//stop title be changed
  146. Object.defineProperty(document,"title",{
  147. writable:false
  148. })
  149. }
  150.  
  151. fixConsoleLog(){//stop console be used
  152. this.cl=console.log;
  153. console.log=()=>{};
  154. Object.defineProperty(console,"log",{
  155. writable:false
  156. })
  157. }
  158.  
  159. }