ClassSyntax

Library for simplifying code logic and syntax (Class Type)

Fra og med 24.05.2024. Se den nyeste version.

Dette script bør ikke installeres direkte. Det er et bibliotek, som andre scripts kan inkludere med metadirektivet // @require https://update.greasyfork.org/scripts/487608/1382007/ClassSyntax.js

// ==UserScript==
// @name         ClassSyntax
// @version      2024/05/24
// @author       Canaan HS
// @description  Library for simplifying code logic and syntax (Class Type)
// @namespace    https://greasyfork.org/users/989635
// @match        *://*/*
// @license      MIT
// ==/UserScript==
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.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:!1,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: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}={}){const 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",{type:c="log",collapsed:d=!0}={}){c="string"===typeof c&&this.Print[c]?c:c="log";if(null==a)this.Print[c](b);else d?console.groupCollapsed(a):console.group(a),this.Print[c](b),console.groupEnd()}async AddStyle(a,b="New-Style"){let c=document.getElementById(b);c||(c=document.createElement("style"),c.id=b,document.head.appendChild(c));c.textContent+=a}async AddScript(a,b="New-Script"){let c=document.getElementById(b);c||(c=document.createElement("script"),c.id=b,document.head.appendChild(c));c.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={}){const e=this.ListenerRecord.get(a);e&&e?.has(b)||(a.addEventListener(b,c,d),e||this.ListenerRecord.set(a,new Map),this.ListenerRecord.get(a).set(b,c))}async RemovListener(a,b){const 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:h=!0,attributes:f=!0,characterData:m=!1}={},p=null){if(c){if(this.Mark[c])return;this.Mark[c]=!0}c={subtree:e,childList:h,attributes:f,characterData:m};d=new MutationObserver(this.Throttle(()=>{b()},d));d.observe(a,c);p&&p({ob:d,op:c})}async WaitElem(a,b,{raf:c=!1,all:d=!1,timeout:e=8,throttle:h=50,subtree:f=!0,childList:m=!0,attributes:p=!1,characterData:r=!1,timeoutResult:t=!1,object:q=document.body}={}){let k,g,n;if(c){let l;const u=()=>{g=d?document.querySelectorAll(a):document.querySelector(a);(n=d?0<g.length:g)?(cancelAnimationFrame(l),clearTimeout(k),b(g)):l=requestAnimationFrame(u)};l=requestAnimationFrame(u);k=setTimeout(()=>{cancelAnimationFrame(l);t&&b(g)},1E3*e)}else{const l=new MutationObserver(this.Throttle(()=>{g=d?document.querySelectorAll(a):document.querySelector(a);if(n=d?0<g.length:g)l.disconnect(),clearTimeout(k),b(g)},h));l.observe(q,{subtree:f,childList:m,attributes:p,characterData:r});k=setTimeout(()=>{l.disconnect();t&&b(g)},1E3*e)}}async WaitMap(a,b,{raf:c=!1,timeout:d=8,throttle:e=50,subtree:h=!0,childList:f=!0,attributes:m=!1,characterData:p=!1,timeoutResult:r=!1,object:t=document.body}={}){let q,k;if(c){let g;const n=()=>{k=a.map(l=>document.querySelector(l));k.every(l=>null!==l&&"undefined"!==typeof l)?(cancelAnimationFrame(g),clearTimeout(q),b(k)):g=requestAnimationFrame(n)};g=requestAnimationFrame(n);q=setTimeout(()=>{cancelAnimationFrame(g);r&&b(k)},1E3*d)}else{const g=new MutationObserver(this.Throttle(()=>{k=a.map(n=>document.querySelector(n));k.every(n=>null!==n&&"undefined"!==typeof n)&&(g.disconnect(),clearTimeout(q),b(k))},e));g.observe(t,{subtree:h,childList:f,attributes:m,characterData:p});q=setTimeout(()=>{g.disconnect();r&&b(k)},1E3*d)}}Storage(a,{type:b=sessionStorage,value:c=null,error:d}={}){let e;return null!=c?this.StorageMatch[this.Type(c)](b,a,c):(e=b.getItem(a),void 0!=e?this.StorageMatch[this.Type(JSON.parse(e))](b,e):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){const c=new Set,d=new Set,e=b.length;for(const f of a.split(/\s*[,\./]\s*/))if(/^\d+$/.test(f))c.add(Number(f)-1);else if(/^\d+(?:~\d+|-\d+)$/.test(f)){var h=f.split(/-|~/);a=Number(h[0]-1);h=Number(h[1]-1);const m=a<=h;for(;m?a<=h:a>=h;m?a++:a--)c.add(a)}else/(!|-)+\d+/.test(f)&&d.add(Number(f.slice(1)-1));return[...c].filter(f=>!d.has(f)&&f<e&&0<=f).sort((f,m)=>f-m).map(f=>b[f])}FormatTemplate(a,b){if("Object"!==this.Type(a))return"Template must be an object";a=Object.fromEntries(Object.entries(a).map(([c,d])=>[c.toLowerCase(),d]));return"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","");const 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(d){c&&c({State:!1,Info:d})}}WorkerCreation(a){a=new Blob([a],{type:"application/javascript"});return new Worker(URL.createObjectURL(a))}Runtime(a=null,b="Elapsed Time:",{style:c="\u001b[1m\u001b[36m%s\u001b[0m",log:d=!0}={}){return a?d?console.log(c,`${b} ${(Date.now()-a)/1E3}s`):Date.now()-a:Date.now()}GetDate(a=null){const b=new Date,c={year:b.getFullYear(),month:(b.getMonth()+1).toString().padStart(2,"0"),date:b.getDate().toString().padStart(2,"0"),hour:b.getHours().toString().padStart(2,"0"),minute:b.getMinutes().toString().padStart(2,"0"),second:b.getSeconds().toString().padStart(2,"0")};return(d=>d.replace(/{([^}]+)}/g,(e,h)=>c[h]||"Error"))("string"===typeof a?a:"{year}-{month}-{date} {hour}:{minute}:{second}")}Throttle(a,b){let c=0;return(...d)=>{const 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(const [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,h,f){b({key:d,ov:e,nv:h,far:f})}))})}};