@vavt/util
Version:
JavaScript library.
2 lines (1 loc) • 4.38 kB
JavaScript
(function(c,u){typeof exports=="object"&&typeof module<"u"?u(exports):typeof define=="function"&&define.amd?define(["exports"],u):(c=typeof globalThis<"u"?globalThis:c||self,u(c.VavtUtil={}))})(this,function(c){"use strict";const u=e=>{const n=typeof e;return n!=="function"&&n!=="object"||e===null},M=e=>{const n=e.flags===""?void 0:e.flags;return new RegExp(e.source,n)},a=(e,n=new WeakMap)=>{if(e===null||u(e))return e;if(n.has(e))return n.get(e);if(e instanceof RegExp)return M(e);if(e instanceof Date)return new Date(e.getTime());if(e instanceof Function)return e;if(e instanceof Map){const r=new Map;return n.set(e,r),e.forEach((o,s)=>{r.set(s,a(o,n))}),r}if(e instanceof Set){const r=new Set;n.set(e,r);for(const o of e)r.add(a(o,n));return r}if(Array.isArray(e)){const r=[];return n.set(e,r),e.forEach(o=>{r.push(a(o,n))}),r}const t={};n.set(e,t);for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=a(e[r],n));return t},E=(e,n=200)=>{let t=0;return(...r)=>new Promise(o=>{t&&(clearTimeout(t),o("cancel")),t=window.setTimeout(()=>{e.apply(void 0,r),t=0,o("done")},n)})},k=(e,n={_blank:!0,nofollow:!0})=>{const t=document.createElement("a");t.href=e,n._blank&&(t.target="_blank"),n.nofollow&&(t.rel="noopener noreferrer"),t.click()},C=(e,n="")=>{const t=document.createElement("a");t.setAttribute("href",e),t.setAttribute("download",n),t.click()},w=()=>{let e=-1;return(t,r,o,s=100)=>{const i=()=>{o&&(typeof s=="number"?setTimeout(o,s):o())};e!==-1&&(cancelAnimationFrame(e),i());let l=t.scrollTop;const f=()=>{e=-1;const d=r-l;l=l+d/5,Math.abs(d)<1?(t.scrollTo(0,r),i()):(t.scrollTo(0,l),e=requestAnimationFrame(f))};e=requestAnimationFrame(f)}},L=w(),O=(e,n=200)=>{let t=0,r=null;const o=s=>{t===0&&(t=s),s-t>=n?(e.apply(void 0,r),r=null,t=0):window.requestAnimationFrame(o)};return(...s)=>{r===null&&window.requestAnimationFrame(o),r=s}},R=(e,n=!0)=>{if(!e)return{};const t={};return e.replace(/^\?/,"").split("&").forEach(r=>{const[o,s]=r.split("=");if(o){const i=n?decodeURIComponent(o):o,l=n?decodeURIComponent(s):s;t[i]!==void 0?(Array.isArray(t[i])||(t[i]=[t[i]]),t[i].push(l)):t[i]=l}}),t},$=(e,n=!0)=>e?Object.keys(e).map(t=>{const r=n?encodeURIComponent(t):t;if(Array.isArray(e[t]))return e[t].map(o=>{const s=n?encodeURIComponent(o):o;return`${r}=${s}`}).join("&");{const o=n?encodeURIComponent(e[t]):e[t];return`${r}=${o}`}}).join("&"):"",b=(e,n,t="asc")=>e.sort((r,o)=>{const s=n(r),i=n(o);return s===void 0&&i!==void 0||s===null&&i!==void 0?t==="asc"?-1:1:s==null&&i===void 0||i==null?t==="asc"?1:-1:m(s)&&m(i)?t=="asc"?s-i:i-s:t=="asc"?String(s).localeCompare(String(i),void 0,{numeric:!0}):String(i).localeCompare(String(s),void 0,{numeric:!0})}),F=e=>{const n=t=>{const{scrollHeight:r,scrollWidth:o,offsetHeight:s,offsetWidth:i,scrollLeft:l,scrollTop:f}=e,d=t.x,H=t.y,v=A=>{const p=f+H-A.y,g=l+d-A.x,N=r-s,W=o-i,h={};g>=0&&g<=W&&(h.left=g),p>=0&&p<=N&&(h.top=p),e.scroll(h)};document.addEventListener("mousemove",v);const T=()=>{document.removeEventListener("mousemove",v),document.removeEventListener("mouseup",T)};document.addEventListener("mouseup",T)};return e.addEventListener("mousedown",n),()=>{e.removeEventListener("mousedown",n)}},I=()=>`${Date.now().toString(36)}${Math.random().toString(36).substring(2)}`,m=e=>{if(e==null||["boolean","symbol"].includes(typeof e)||/^\s*$/.test(e.toString()))return!1;const n=Number(e);return!isNaN(n)&&isFinite(n)},S=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),y=(e,n,t={})=>{const{excludeKeys:r}=t;for(const o in n)r&&r(o)?e[o]=n[o]:S(n[o])&&S(e[o])?e[o]=y(e[o],n[o],t):e[o]=n[o];return e},P=(e,n=document.body)=>{let t=e.offsetParent,r=e.offsetTop,o=e.offsetLeft;for(;t!==null&&t!==n;)r+=t.offsetTop,o+=t.offsetLeft,t=t.offsetParent;return{offsetTop:r,offsetLeft:o}},U=(e={})=>{const{forceScreenWidth:n=!1,threshold:t=768,fallbackToScreenWidth:r=!0}=e,o=navigator.userAgent,s=/android|ipad|iphone|ipod|windows phone|blackberry/i.test(o),i="ontouchstart"in window||navigator.maxTouchPoints>0,l=window.matchMedia(`(max-width: ${t}px)`).matches;return n?l:s&&i?!0:r?l:!1};c.createSmoothScroll=w,c.debounce=E,c.deepClone=a,c.deepMerge=y,c.download=C,c.draggingScroll=F,c.getRootOffset=P,c.isMobile=U,c.isNumber=m,c.isPrimitive=u,c.linkTo=k,c.objToSearch=$,c.objectSort=b,c.randomId=I,c.searchToObj=R,c.smoothScroll=L,c.throttle=O,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});