grapper
Version:
Data Visualization Microframework
1 lines • 2.37 kB
JavaScript
/* grapper - 1.1.0-beta.3 [plugin.non.scaling.size] */ (()=>{var u=new WeakSet;function k(t){if(u.has(t))return;let e=t.getScreenCTM(),n=()=>{let s=t.getScreenCTM();s!==null&&(s.a!==e.a||s.b!==e.b||s.c!==e.c||s.d!==e.d||s.e!==e.e||s.f!==e.f)&&(t.dispatchEvent(new CustomEvent("resize",{detail:{currentMatrix:s,prevMatrix:e}})),e=s),window.requestAnimationFrame(n)};u.add(t),n()}function S(t){t.extendInstance(e=>{e.addEventListener=function(n,s,a){n==="resize"&&this.el.tagName.toLowerCase()==="svg"&&k(this.el),this.el.addEventListener(n,s,a)}})}var v=S;var l=Symbol(),z=t=>t?.split(/\)\s*/).filter(e=>!!e).map(e=>e.split(/\s*\(/)).reduce((e,n)=>(e[n.shift()]=n.pop().split(/,/).map(s=>isNaN(s)?s:Number(s)),e),{})||{};function r(t="size"){let e=this.closest("svg");return e?e._el.getRootNode()===e._el?(e.addEventListener("attach",()=>{r.call(this,t)}),this):(this[l]&&e.removeEventListener("resize",this[l]),t==="stroke"&&b(e,this),t==="size"&&(E(e,this),e.addEventListener("resize",this[l])),this):(this.top().addEventListener("attach",()=>{r.call(this,t)}),this)}function E(t,e){let n=t.getScreenCTM()||{a:1,d:1},s=e.tagName().toLowerCase(),a=s==="text"?{x:e.x(),y:e.y()}:s==="circle"?{x:e.cx(),y:e.cy()}:e.getBBox(),i=z(e.transform());i.scale||(i.scale=[1,1]),i.translate||(i.translate=[0,0]),n.a=n.a*i.scale[0],n.d=n.d*i.scale[1],e[l]=x=>{let c=x.detail.currentMatrix,d=e.transform("").transform,h=n.a/c.a,p=n.d/c.d,g=a.x*(c.a/n.a)-a.x,m=a.y*(c.d/n.d)-a.y;Object.keys(i).filter(o=>!["scale","translate"].includes(o)).forEach(o=>d[o](...i[o])),(h!==1||p!==1)&&d.scale(h,p),(g!==0||m!==0)&&d.translate(g,m)}}function b(t,e){e.vector_effect("non-scaling-stroke")}function w(t){t.install(v),t.extendInstance({keepAspect(e){return console.warn(e==="stroke"?`".keepAspect('stroke')" is deprecated; use ".vector_effect('non-scaling-stroke')" instead.`:'".keepAspect()" is deprecated; use ".nonScalingSize()" instead.'),r.call(this,e)},nonScalingSize:r}),t.extendTemplate&&(t.extendTemplate.defineDirective({name:"g-keep-aspect",exec(e,{expr:n}){console.warn('"g-keep-aspect" directive is deprecated; use "g-non-scaling-size" instead.'),e.nonScalingSize(n)}}),t.extendTemplate.defineDirective({name:"g-non-scaling-size",exec(e){r.call(e,"size")}}))}var f=w;globalThis.gSVG&&globalThis.gSVG.install(f);customElements.whenDefined("grapper-view").then(t=>{t.install(f)});})();