ClassSyntax

Library for simplifying code logic and syntax (Class Type)

Verzia zo dňa 11.03.2025. Pozri najnovšiu verziu.

Tento skript by nemal byť nainštalovaný priamo. Je to knižnica pre ďalšie skripty, ktorú by mali používať cez meta príkaz // @require https://update.greasyfork.org/scripts/487608/1551580/ClassSyntax.js

  1. // ==UserScript==
  2. // @name ClassSyntax
  3. // @version 2025/03/11
  4. // @author Canaan HS
  5. // @description Library for simplifying code logic and syntax (Class Type)
  6. // @namespace https://greasyfork.org/users/989635
  7. // @match *://*/*
  8. // @license MPL-2.0
  9. // ==/UserScript==
  10. class Syntax{constructor(){this.Mark={};this.Parser=new DOMParser;this.ListenerRecord=new Map;this.Type=a=>Object.prototype.toString.call(a).slice(8,-1);this.Print={log:a=>console.log(a),warn:a=>console.warn(a),trace:a=>console.trace(a),error:a=>console.error(a),count:a=>console.count(a)};this.Query={Match:/[ .#=:]/,"#":(a,b)=>a.getElementById(b.slice(1)),".":(a,b,c)=>{a=a.getElementsByClassName(b.slice(1));return c?[...a]:a[0]},tag:(a,b,c)=>{a=a.getElementsByTagName(b);return c?[...a]:a[0]},default:(a,b,c)=>c?a.querySelectorAll(b):a.querySelector(b)};this.WaitCore={queryMap:a=>{a=a.map(b=>document.querySelector(b));return a.every(Boolean)&&a},queryElement:(a,b)=>{a=b?document.querySelectorAll(a):document.querySelector(a);return(b?0<a.length:a)&&a}};this.TemplateMatch={Process:(a,b,c=null)=>{a=a[b.toLowerCase()];return"Function"===this.Type(a)?a(c):void 0!==a?a:"None"}};this.StoreMatch={verify:a=>void 0!==a&&a,d:a=>GM_deleteValue(a),a:()=>this.StoreMatch.verify(GM_listValues()),s:(a,b)=>GM_setValue(a,b),g:(a,b)=>this.StoreMatch.verify(GM_getValue(a,b)),sj:(a,b)=>GM_setValue(a,JSON.stringify(b,null,4)),gj:(a,b)=>JSON.parse(this.StoreMatch.verify(GM_getValue(a,b)))};this.StorageMatch={String:(a,b,c)=>null!=c?(a.setItem(b,JSON.stringify(c)),!0):JSON.parse(b),Number:(a,b,c)=>null!=c?(a.setItem(b,JSON.stringify(c)),!0):Number(b),Array:(a,b,c)=>null!=c?(a.setItem(b,JSON.stringify(c)),!0):(b=JSON.parse(b),Array.isArray(b[0])?new Map(b):b),Object:(a,b,c)=>null!=c?(a.setItem(b,JSON.stringify(c)),!0):JSON.parse(b),Boolean:(a,b,c)=>null!=c?(a.setItem(b,JSON.stringify(c)),!0):JSON.parse(b),Date:(a,b,c)=>null!=c?(a.setItem(b,JSON.stringify(c)),!0):new Date(b),Map:(a,b,c)=>(a.setItem(b,JSON.stringify([...c])),!0)};this.Device={sX:()=>window.scrollX,sY:()=>window.scrollY,iW:()=>window.innerWidth,iH:()=>window.innerHeight,_Type:void 0,Url:location.href,Orig:location.origin,Host:location.hostname,Path:location.pathname,Lang:navigator.language,Agen:navigator.userAgent,Type:function(){return this._Type=this._Type||(this._Type=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(this.Agen)||768>this.iW?"Mobile":"Desktop")}}}$$(a,{all:b=!1,root:c=document}={}){var d=this.Query.Match.test(a)?this.Query.Match.test(a.slice(1))?"default":a[0]:"tag";return this.Query[d](c,a,b)}Sleep(a){return new Promise(b=>setTimeout(b,a))}async Log(a=null,b="print",{dev:c=!0,type:d="log",collapsed:e=!0}={}){c&&(c=this.Print[d]||this.Print.log,null==a?c(b):(e?console.groupCollapsed(a):console.group(a),c(b),console.groupEnd()))}async AddStyle(a,b="New-Style",c=!0){let d=document.getElementById(b);if(d){if(!c)return}else(d=document.createElement("style")).id=b,document.head.appendChild(d);d.textContent+=a}async AddScript(a,b="New-Script",c=!0){let d=document.getElementById(b);if(d){if(!c)return}else(d=document.createElement("script")).id=b,document.head.appendChild(d);d.textContent+=a}async Listen(a,b,c,d={},e=null){try{a.addEventListener(b,c,d),e&&e(!0)}catch{e&&e(!1)}}async AddListener(a,b,c,d={}){let {mark:e,...k}=d;d=e??a;var f=this.ListenerRecord.get(d);f?.has(b)||(a.addEventListener(b,c,k),f||this.ListenerRecord.set(d,new Map),this.ListenerRecord.get(d).set(b,c))}async RemovListener(a,b){var c=this.ListenerRecord.get(a)?.get(b);c&&(a.removeEventListener(b,c),this.ListenerRecord.get(a).delete(b))}async Observer(a,b,{mark:c=!1,throttle:d=0,subtree:e=!0,childList:k=!0,attributes:f=!0,characterData:h=!1}={},l=null){if(c){if(this.Mark[c])return;this.Mark[c]=!0}c={subtree:e,childList:k,attributes:f,characterData:h};e=new MutationObserver(this.Throttle(()=>{b()},d));e.observe(a,c);l&&l({ob:e,op:c})}async WaitElem(a,b=null,c={}){let d=this,e=a instanceof Array?d.WaitCore.queryMap:d.WaitCore.queryElement,{raf:k=!1,all:f=!1,timeout:h=8,throttle:l=50,subtree:g=!0,childList:p=!0,attributes:u=!0,characterData:q=!1,timeoutResult:v=!1,root:y=document}=c??{};return new Promise((r,z)=>{async function w(){let t,m;if(k){let n,x=()=>{(m=e(a,f))?(cancelAnimationFrame(n),clearTimeout(t),b&&b(m),r(m)):n=requestAnimationFrame(x)};n=requestAnimationFrame(x);t=setTimeout(()=>{cancelAnimationFrame(n);v&&(b&&b(m),r(m))},1E3*h)}else{let n=new MutationObserver(d.Throttle(()=>{(m=e(a,f))&&(n.disconnect(),clearTimeout(t),b&&b(m),r(m))},l));n.observe(y,{subtree:g,childList:p,attributes:u,characterData:q});t=setTimeout(()=>{n.disconnect();v&&(b&&b(m),r(m))},1E3*h)}}"hidden"===document.visibilityState?document.addEventListener("visibilitychange",()=>w(),{once:!0}):w()})}Storage(a,{type:b=sessionStorage,value:c=null,error:d}={}){return null!=c?this.StorageMatch[this.Type(c)](b,a,c):null!=(c=b.getItem(a))?this.StorageMatch[this.Type(JSON.parse(c))](b,c):d}DomParse(a){return this.Parser.parseFromString(a,"text/html")}NameFilter(a){return a.replace(/[\/\?<>\\:\*\|":]/g,"")}GetFill(a){return Math.max(2,(""+a).length)}ExtensionName(a){try{return a.match(/\.([^.]+)$/)[1].toLowerCase()||"png"}catch{return"png"}}Mantissa(a,b,c="0",d=null){return d?(""+ ++a).padStart(b,c)+("."+this.ExtensionName(d)):(""+ ++a).padStart(b,c)}ScopeParsing(a,b){if("string"!=typeof a||""===a.trim())return b;let c=b.length,d=new Set,e=new Set;var k,f,h;let l;for(l of a.split(/\s*[\.,|/]\s*/))/^(!|-)?\d+(~\d+|-\d+)?$/.test(l)&&(h=l.slice(1),k=/^[!-]/.test(l),f=/[~-]/.test(h),[k,h]=k?[e,h]:[d,l],[f,h]=f?h.split(/-|~/):[h,h],f==h?k.add(+f-1):((g,p,u)=>{for(var q=g<=p;q?g<=p:g>=p;q?g++:g--)u.add(g)})(+f-1,+h-1,k));return[...d].filter(g=>!e.has(g)&&g<c&&0<=g).sort((g,p)=>g-p).map(g=>b[g])}FormatTemplate(a,b){return"Object"!==this.Type(a)?"Template must be an object":(a=Object.fromEntries(Object.entries(a).map(([c,d])=>[c.toLowerCase(),d])),"String"===this.Type(b)?b.replace(/\{\s*([^}\s]+)\s*\}/g,(c,d)=>this.TemplateMatch.Process(a,d)):"Object"===this.Type(b)?Object.entries(b).map(([c,d])=>this.TemplateMatch.Process(a,c,d)):{"Unsupported format":b})}async OutputJson(a,b,c=null){try{a="string"!=typeof a?JSON.stringify(a,null,4):a;b="string"!=typeof b?"Anonymous":b.replace(".json","");var d=document.createElement("a");d.href="data:application/json;charset=utf-8,"+encodeURIComponent(a);d.download=b+".json";d.click();await new Promise(e=>setTimeout(e,100));d.remove();c&&c({State:!0})}catch(e){c&&c({State:!1,Info:e})}}WorkerCreation(a){a=new Blob([a],{type:"application/javascript"});return new Worker(URL.createObjectURL(a))}Runtime(a=null,{log:b=!0,format:c=!0,label:d="Elapsed Time:",style:e="\u001b[1m\u001b[36m%s\u001b[0m"}={}){return a?(c=c?((performance.now()-a)/1E3).toPrecision(3)+"s":performance.now()-a,b?console.log(e,d+" "+c):c):performance.now()}GetDate(a=null){var b=new Date;let c={year:b.getFullYear(),month:(""+(b.getMonth()+1)).padStart(2,"0"),date:(""+b.getDate()).padStart(2,"0"),hour:(""+b.getHours()).padStart(2,"0"),minute:(""+b.getMinutes()).padStart(2,"0"),second:(""+b.getSeconds()).padStart(2,"0")};return("string"==typeof a?a:"{year}-{month}-{date} {hour}:{minute}:{second}").replace(/{([^}]+)}/g,(d,e)=>c[e]??"Error")}Throttle(a,b){let c=0;return(...d)=>{var e=Date.now();e-c>=b&&(c=e,a(...d))}}Debounce(a,b=500){let c=null;return(...d)=>{clearTimeout(c);c=setTimeout(function(){a(...d)},b)}}async Menu(a,b="Menu",c=1){for(let [d,e]of Object.entries(a))GM_registerMenuCommand(d,()=>{e.func()},{title:e.desc,id:b+"-"+c++,autoClose:e.close,accessKey:e.hotkey})}Store(a,b=null,c=null){return this.StoreMatch[a](b,c)}async StoreListen(a,b){a.forEach(c=>{this.Mark[c]||(this.Mark[c]=!0,GM_addValueChangeListener(c,function(d,e,k,f){b({key:d,ov:e,nv:k,far:f})}))})}};