-
Notifications
You must be signed in to change notification settings - Fork 0
/
elementQuery.min.js
1 lines (1 loc) · 6.36 KB
/
elementQuery.min.js
1
!function(e,t){function n(e){var t,n=this,r=c(e);for(t in r)n[t]=r[t];return v(n),n}function r(e){var t=this;return this.reinit(e),t}var s={},u=s.hasOwnProperty,a=function(t,n,r){var i,s;if(n&&t){if(r||(r=e),u.apply(t,["length"])&&(s=1),s)for(i=0;i<t.length;i++)n.apply(r,[t[i],i,t]);if(!s)for(i in t)n.apply(r,[t[i],i,t])}return r},o=function(e,t,n){var r=new RegExp(t);return e.replace(r,n)},c=function(e){return{el:e,watchers:{},formerVals:{},currentValidQueries:{},annexes:[]}},l={height:{fn:function(e,t,n){return parseFloat(n.height)}},width:{fn:function(e,t,n){return parseFloat(n.width)}}},f={px:function(e){return e}},h=function(e,t){var n=e.split(t).length-1;return!!n},p=function(e){var t=e.match(/\-.*\~|\~\=/)[0];return t.slice(1,t.length-1)},m=function(e){var t=e.match(/\=(\"|\')(.*)(\"|\')/);return t[2]},d=function(e,t){var n,r,i=[];for(e=e.trim(),n=e.length-1;n>=0;n--)if(i.unshift(e[n]),r=i.join(""),t.indexOf(r)>=0)return"em"===r&&"r"===e[n-1]?"rem":r;return!1},y=function(e,t){var n=t.toString(),r=o(n.slice(1,n.length-1),"{{{}}}",e);return new RegExp(r,"mgi")},v=function(t){var n;n=function(){t.update(),e.requestAnimationFrame(n)}.bind(t),e.requestAnimationFrame(n)},g=/,?([^,\n]*)\[[\s\t]*(min|max)-({{{}}})[\s\t]*[~$\^]?=[\s\t]*(["|'](.*)["|'])[\s\t]*]([^\n\s\{]*)/,w=/\,?([[\s\t]*(min|max)-({{{}}})[\s\t]*[~$\^]?=[\s\t]*(["|'](.+?)["|'])[\s\t]*])/;f[""]=f.px,n.prototype={updateUI:function(e){var t,n,r=this,i=r.currentValidQueries[e],s=r.el;for(t in i)attrName=t+"-"+e,n=i[t],n&&(valuesLen=n.length,valuesLen&&s.setAttribute(attrName,n.join(" ")),valuesLen||s.removeAttribute(attrName));return r},update:function(){var t,n,r,i,s,u=this,a=u.watchers,o=u.formerVals,c=u.el,f=e.getComputedStyle(c),h=c.getBoundingClientRect(),p=parseFloat(h.height),m=parseFloat(h.width),d=[c,m,p,f,h],y=[];u.latestStyles=f,u.latestClientRect=h,u.latestHeight=p,u.latestWidth=m;for(t in a)n=l[t],r=o[t],i=n.fn.apply(u,d),i!==r&&(o[t]=i,y.push(t),u.calculateValues(t,i));for(t=0;t<y.length;t++)u.updateUI(y[t]),s=1;return s&&u.runAnnexes(),u},calculateValues:function(e,t){var n,r,i,s,u,a,o,c,h,p,m,d,y=this,v=y.el,g=y.watchers,w=y.latestStyles,x=y.latestClientRect,Q=y.latestHeight,P=y.latestWidth;if(c=l[e],c.fn){m=g[e],h=c.fn,d={min:[],max:[]},s=[t,h,v,P,Q,w,x];for(i in m){o=m[i],val=parseFloat(i);for(r in o)for(a=o[r],n=0;n<a.length;n++)u=a[n],p=f[u].apply(y,s),val<p&&"min"===r&&d[r].push(val+u),val>p&&"max"===r&&d[r].push(val+u)}y.currentValidQueries[e]=d}return y},hasWatcher:function(e){var t,n,r,i=this,s=i.watchers;if("object"==typeof e&&!Array.isArray(e))for(t in e)if(s=s[t])for(n in e[t])if(s=s[n])for(r in e[t][n])if(s[r])return 1;return 0},parseObject:function(e){var t,n,r,i,s,u=[],a={},o=p(e),c=a[o]={};r=m(e);for(t in f)u.push(t);return s=d(r,u),s||(s=""),i=c[r]={},h(e,"min-")&&(n="min"),h(e,"max-")&&(n="max"),i[n]=s,a},extendWatcher:function(e){var t,n,r,i,s=this,u=s.watchers;for(t in e){u[t]||(u[t]={}),s.formerVals[t]||(s.formerVals[t]=0/0),u=u[t];for(n in e[t]){u[n]||(u[n]={}),u=u[n];for(r in e[t][n])u[r]||(u[r]=[]),u=u[r],i=e[t][n][r],-1===u.indexOf(e[t][n][r])&&u.push(i)}}},add:function(e){var t,n=this;return t=n.parseObject(e),n.extendWatcher(t),n},annex:function(e){return this.annexes.push(e),this},runAnnexes:function(){var e,t=this;for(e=0;e<t.annexes.length;e++)t.annexes[e].apply(t);return t}},r.prototype={reinit:function(e){var t=this;return a(l,function(e,t){e.regex=y(t,g)}),e&&(t.styles=e),t.update(),t},update:function(){var e=this;return e.styles&&a(l,function(t){e.scanSelectors(t.regex,function(t,n){e.addRule(t,n)})}),e},scanSelectors:function(e,t){var n,r,i,s=this;a(s.styles,function(u){"object"==typeof u&&(i=u.rules||u.cssRules,a(i,function(i){n=i.selectorText,n&&(r=n.match(e),r&&a(r,function(e){t.apply(s,[e,n,i])}))}))})},addRule:function(e,n){var r,i,s,u,o,c,f,h=this;return f=n.split(e)[0]+e.replace(),c=[],o=[],a(l,function(t,n){if(u=y(n,w),i=f.match(u),s=e.match(u),i)for(r=0;r<i.length;r++)o.push(i[r]),f=f.split(i[r]).join("");if(s)for(r=0;r<s.length;r++)c.push(s[r])}),els=t.querySelectorAll(f),a(els,function(e){a(c,function(t){e instanceof HTMLElement&&h.attach(e,t)})}),h},attach:function(e,t){var n=this;return sensor=n.getSensor(e),sensor.add(t),n},getSensor:function(e){var t,r,i,s,u,a=this,o=e.toString();return a.watchers||(a.watchers={}),r=a.watchers,r[o]||(r[o]={}),i=r[o],i.els||(i.els=[]),i.sensors||(i.sensors=[]),t=i.els,u=i.sensors,s=t.indexOf(e),-1===s&&(s=t.length,t.push(e)),u[s]||(u[s]=new n(e)),u[s]},applySensorValues:function(){var e,t,n,r=this,s=r.watchers;for(e in s)for(t=s[e].sensors,i=0;i<t.length;i++)n=t[i],n.update();return r},unitProcessor:function(e,t){var n=this;return f[e]=t,n},addProcessor:function(e,t){var n=this;return l[e]={fn:t,regex:y(e,g)},n},physicalDistance:function(t){return function(n){return n/e.devicePixelRatio/t}}},e.ElementQuery=r,e.elementQuery=new e.ElementQuery}(window,document),elementQuery.unitProcessor("%",function(e,t,n){{var r=n.parentNode,i=r.getBoundingClientRect(),s=r.getComputedStyle(),u=parseFloat(parentStyles.height),a=parseFloat(parentStyles.width);t.apply(this,[r,a,u,i,s])}return e/parentVal}),elementQuery.unitProcessor("em",function(e,t,n,r,i,s){return e/parseFloat(s.fontSize)}),elementQuery.unitProcessor("rem",function(e,t){var n=parseFloat(e.getComputedStyle(t.documentElement).fontSize);return function(e){return e/n}}(window,document)),elementQuery.unitProcessor("in",elementQuery.physicalDistance(96)),elementQuery.unitProcessor("cm",elementQuery.physicalDistance(37.79527559055118)),elementQuery.unitProcessor("mm",elementQuery.physicalDistance(3.779527559055118)),elementQuery.unitProcessor("pc",elementQuery.physicalDistance(16)),elementQuery.unitProcessor("pt",elementQuery.physicalDistance(1.333333333333333)),elementQuery.unitProcessor("vw",function(e){var t=window.innerWidth;return e/(t/100)}),elementQuery.unitProcessor("vh",function(e){var t=window.innerHeight;return e/(t/100)}),elementQuery.unitProcessor("vmax",function(e){var t=Math.max(window.innerHeight,window.innerWidth);return e/(t/100)}),elementQuery.unitProcessor("vmin",function(e){var t=Math.min(window.innerHeight,window.innerWidth);return e/(t/100)}),elementQuery.addProcessor("area",function(e,t,n){return n*t}),elementQuery.addProcessor("diagonal",function(e,t,n){return Math.pow(n*n+t*t,.5)}),elementQuery.addProcessor("aspect",function(e,t,n){return t/n}),elementQuery.addProcessor("perimeter",function(e,t,n){return 2*n+2*t}),window.elementQuery.reinit(document.styleSheets);