/
c3tools-min.m.js
1 lines (1 loc) · 4.72 KB
/
c3tools-min.m.js
1
var Types={OTHER:-1,NUMBER:0,STRING:1,ARRAY:2,OBJECT:3,BOOLEAN:4,NULL:5};function is(e,t){if(null==e&&t==Types.NULL)return!0;let n={[Types.NUMBER]:["number",Number],[Types.STRING]:["string",String],[Types.BOOLEAN]:["boolean",Boolean]};switch(t){case Types.NUMBER:case Types.STRING:case Types.BOOLEAN:return n[t][0]==typeof e||e instanceof n[t][1];case Types.ARRAY:return Array.isArray(e);case Types.OBJECT:return"object"==typeof e&&!Array.isArray(e)}return t==Types.OTHER}function whatIs(e){switch(typeof e){case"number":return Types.NUMBER;case"string":return Types.STRING;case"object":switch(!0){case Array.isArray(e):return Types.ARRAY;case e instanceof String:return Types.STRING;case e instanceof Number:return Types.NUMBER;case null==e:return Types.NULL;default:return Types.OBJECT}default:return Types.OTHER}}const W=window,D=document,B=D.body,ALL=!0,ONLY_ONE=!1,gEt=e=>D.getElementById(e);function SqS(e,{n:t=false,from:n=D}={}){if(e instanceof Node)return e;if(t||(t=1),is(e,Types.STRING)){let r,s=e.slice(1);if(/[ :\[\.#,+~]/.test(s)){if(1===t)return n.querySelector(e);if(!0===t)return[...n.querySelectorAll(e)];r=n.querySelectorAll(e)}else switch(e[0]){case"#":return D.getElementById(s);case".":r=n.getElementsByClassName(s);break;case"[":let t=/^\[name="([^"]*)"\]$/.exec(e);t&&(r=D.getElementsByName(t[1]));break;case":":break;default:r=n.getElementsByTagName(e)}if(1===t)return r?r[0]:n.querySelector(e);{let s=[...r||n.querySelectorAll(e)];return!0===t?s:s.slice(0,t)}}throw new Error("The selector must be a string.")}function createElement(e,t,n){if(!e)throw new Error("Element is required.");let r,s,a;if(is(e,Types.ARRAY)&&([e,t,n]=e),is(e,Types.STRING)){if(!(e=e.trim()))throw new Error("Element is required.");e=D.createElement(e.toUpperCase())}if(!t||!t.nodeType&&is(t,Types.OBJECT)||(n=t,t=null),t)for(let n in t)switch(s=t[n],n){case"class":e.classList.add(s);break;case"classList":for(let t of s)e.classList.add(t);break;case"finalFun":r=s;break;case"children":a=D.createDocumentFragment(),addElement(a,...s);break;default:"on"==n.substring(0,2)&&is(s,Types.STRING)?s.match("[^a-zA-Z0-9_]")?e[n]=new Function(s):e[n]=W[s]:"on"!=n.substring(0,2)&&void 0===e[n]?e.setAttribute(n,s):is(s,Types.OBJECT)?Object.assign(e[n],s):e[n]=s;break}return n&&(a||(a=D.createDocumentFragment()),a.appendChild(n.nodeType?n:createElement(n))),a&&e.appendChild(a),r&&("string"==typeof r?new Function(r):r).call(e),e}function addElement(e,...t){if(!e instanceof HTMLElement)throw new Error("Parent must be an HTMLElement.");let n=[];for(let r of t)r&&n.push(e.appendChild(r.nodeType?r:createElement(r)));return n.length>1?n:n[0]}function superFetch(e,t,{method:n="GET",format:r,credentials:s="include"}={}){let a={credentials:s};return"GET"==n?t&&(e+=[...JSONAsURLEncodedStringIterator(t)].reduce(((e,t)=>e+=t.join("=")+"&"),"?")):(a.method=n,whatIs(t)==Types.OBJECT?t instanceof FormData?a.body=t:(a.headers["Content-Type"]="application/json",a.body=JSON.stringify(t)):t&&(a.body=t)),r?fetch(e,a).then((e=>e[r]())):fetch(e,a)}function*JSONAsURLEncodedStringIterator(e,t=null){let n=Array.isArray(e)?e.map((e=>["",e])):Object.entries(e);for(let[e,r]of n)e=t?t+"["+e+"]":e,null!=r&&"object"==typeof r?yield*JSONAsURLEncodedStringIterator(r,e):yield[e,r]}function JSONAsFormData(e){if(!is(e,Types.ARRAY)&&!is(e,Types.OBJECT))throw new Error('"obj" must be an array or object.');let t=new FormData;for(let n in e){let r=e[n];if(null==r||r instanceof File||"object"!=typeof r)t.append(n,r);else for(let e of JSONAsURLEncodedStringIterator(r,n))t.append(...e)}return t}function sendJSON(e,t,n=null){let r={credentials:"include",method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)};return fetch(e,n?Object.assign(r,n):r)}function sendPOST(e,t,{returnType:n,otherOptions:r}={}){t instanceof FormData||(t=JSONAsFormData(t));let s={credentials:"include",method:"POST",body:t};r&&Object.assign(s,r);let a=fetch(e,s);return n?a.then((e=>e[n]())):a}function fetchConCredentials(e,t={},...n){return t.credentials="include",fetch(e,t,...n)}const DOMQuerying={SqS:SqS,gEt:gEt,ALL:ALL,ONLY_ONE:false,W:W,D:D,B:B},DOMGenerators={createElement:createElement,addElement:addElement},Fetching={superFetch:superFetch,JSONAsURLEncodedStringIterator:JSONAsURLEncodedStringIterator,JSONAsFormData:JSONAsFormData,sendJSON:sendJSON,sendPOST:sendPOST,fetchConCredentials:fetchConCredentials},Shortcuts={W:W,D:D,B:B},TypeChecking={Types:Types,is:is,whatIs:whatIs},c3tools={DOMQuerying:DOMQuerying,DOMGenerators:DOMGenerators,Fetching:Fetching,Shortcuts:Shortcuts,TypeChecking:TypeChecking};export{c3tools,DOMQuerying,SqS,gEt,ALL,ONLY_ONE,DOMGenerators,createElement,addElement,Fetching,superFetch,JSONAsURLEncodedStringIterator,JSONAsFormData,sendJSON,sendPOST,fetchConCredentials,Shortcuts,W,D,B,TypeChecking,Types,is,whatIs};