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