HEX
Server: Apache/2
System: Linux nexus-01 4.18.0-553.146.1.el8_10.x86_64 #1 SMP Tue Jul 21 03:06:01 EDT 2026 x86_64
User: aglcoke (1118)
PHP: 8.2.32
Disabled: mail,exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //proc/1/cwd/usr/share/rspamd/www/js/lib/d3pie.min.js
/*!
 * rspamd-D3Pie 1.2.0 (https://github.com/moisseev/rspamd-D3Pie)
 * Copyright (c) 2022, Alexander Moisseev, BSD 2-Clause
 */
function D3Pie(t,e){"use strict";if("string"!=typeof t||0===t.length)throw new Error("D3Pie: id must be a non-empty string");if(!/^[a-zA-Z_-][\w-]*$/u.test(t))throw new Error('D3Pie: id must start with a letter, underscore, or hyphen, and contain only alphanumeric characters, hyphens (-), and underscores (_). Got: "'+t+'"');function n(t,e){return null===e||"object"!=typeof e||Object.keys(e).forEach(function(a){const l=e[a];let r=t[a];l&&"object"==typeof l?(null!==r&&"object"==typeof r||(r=Array.isArray(l)?[]:{},t[a]=r),n(r,l)):t[a]=l}),t}const a=n({canvasPadding:5,cornerRadius:3,duration:1250,gradient:{enabled:!0,percentage:100},labels:{inner:{hideWhenLessThanPercentage:4,offset:.15},outer:{collideHeight:13,format:"label",pieDistance:30}},padAngle:.01,pieCenterOffset:{x:0,y:0},size:{canvasHeight:400,canvasWidth:600,pieInnerRadius:"20%",pieOuterRadius:"85%"},title:"",total:{enabled:!1}},e),l=[];function r(t){const e=t.split(".");let n=a;for(const t of e)n=n[t];return n}function i(t,e){const n=r(t),a=parseFloat(n);isFinite(a)?void 0!==e.min&&a<e.min?l.push(t+" must be >= "+e.min+", got: "+a):void 0!==e.max&&a>e.max&&l.push(t+" must be <= "+e.max+", got: "+a):l.push(t+" must be a finite number, got: "+n)}function s(t){const e=r(t);if("number"==typeof e)(!isFinite(e)||e<0)&&l.push(t+" must be a non-negative number, got: "+e);else if("string"==typeof e){const n=/^(?<pct>\d+)%$/u.exec(e);if(n){const e=parseInt(n.groups.pct,10);e>99&&l.push(t+" percentage must be 0-99, got: "+e+"%")}else l.push(t+' must be a number or percentage string (e.g. "85%"), got: '+e)}else l.push(t+" must be a number or percentage string, got: "+typeof e)}if(i("canvasPadding",{min:0}),i("cornerRadius",{min:0}),i("duration",{min:0}),i("gradient.percentage",{min:0,max:100}),i("labels.inner.hideWhenLessThanPercentage",{min:0,max:100}),i("labels.inner.offset",{min:-1,max:1}),i("labels.outer.collideHeight",{min:1}),i("labels.outer.pieDistance",{min:0}),i("padAngle",{min:0,max:2*Math.PI}),i("pieCenterOffset.x",{}),i("pieCenterOffset.y",{}),i("size.canvasHeight",{min:50}),i("size.canvasWidth",{min:50}),s("size.pieOuterRadius"),s("size.pieInnerRadius"),function(t,e){const n=r(t);if(!e.includes(n)){const a=e.map(t=>'"'+t+'"').join(", ");l.push(t+" must be one of ["+a+'], got: "'+n+'"')}}("labels.outer.format",["none","label"]),l.length>0)throw new Error("D3Pie configuration errors:\n  - "+l.join("\n  - "));this.destroy=function(){d3.select("#"+t).selectAll("*").on("click",null).on("mousemove",null).on("mouseover",null).on("mouseout",null),d3.selectAll("#"+t+" svg, #"+t+"-tooltip").remove()},this.destroy();const o=d3.select("#"+t).append("svg").attr("class","d3pie").attr("width",a.size.canvasWidth).attr("height",a.size.canvasHeight);let c=0;if(""!==a.title){const t=o.append("svg:text").attr("class","chart-title").attr("x",a.size.canvasWidth/2);t.append("tspan").text(a.title+" "),c=t.node().getBBox().height,t.attr("y",c+a.canvasPadding)}const d=o.append("g").attr("transform","translate("+(a.size.canvasWidth/2+a.pieCenterOffset.x)+","+(a.size.canvasHeight/2+c/2+a.pieCenterOffset.y)+")"),u={},p={},{outerRadius:f,innerRadius:g}=function(){function t(t,e){if(!/%/u.test(t))return parseInt(t,10);const n=Math.max(0,Math.min(99,parseInt(t.replace(/[\D]/u,""),10)))/100;return Math.floor(e*n)}const e=a.size.canvasWidth-2*a.canvasPadding,n=a.size.canvasHeight-2*a.canvasPadding-c;let l=Math.min(e,n)/2;if("none"!==a.labels.outer.format){const t=parseInt(a.labels.outer.pieDistance,10);l>t&&(l-=t)}const r=t(a.size.pieOuterRadius,l);return{outerRadius:r,innerRadius:t(a.size.pieInnerRadius,r)}}(),h=f+a.labels.outer.pieDistance,b=d3.line().curve(d3.curveCatmullRomOpen),m=d3.select("body").append("div").attr("id",t+"-tooltip").attr("class","d3pie-tooltip"),v=m.append("span").attr("id",t+"-tooltip-text");function y(t){t.on("mouseover",function(t,e){const n=m.datum().total,a=n?Math.round(100*e.data.value/n):NaN;e.data.value?(m.transition().duration(300).style("opacity",1),v.text(e.data.label+(n?": "+e.data.value+" ("+a+"%)":""))):m.transition().duration(300).style("opacity",0),m.each(function(t){t.height=this.getBoundingClientRect().height})}).on("mouseout",function(){m.transition().duration(300).style("opacity",0)}).on("mousemove",t=>{const{pageX:e,pageY:n}=t;m.style("left",e+"px").style("top",function(t){return n-t.height-2+"px"})})}const A=d.append("g"),x=d.append("g");if(y(x),x.append("circle").attr("r",g).style("opacity",0),a.total.enabled){const t=x.append("text").attr("class","total-text");t.append("tspan").attr("class","total-value").style("font-size",.6*g+"px"),t.append("tspan").attr("x","0").attr("dy",.5*g).text(void 0!==a.total.label?a.total.label:"Total")}const w=o.append("defs");if(g>0){const e=w.append("mask").attr("id",t+"-donut-mask");e.append("rect").attr("x",-a.size.canvasWidth).attr("y",-a.size.canvasHeight).attr("width",2*a.size.canvasWidth).attr("height",2*a.size.canvasHeight).attr("fill","white"),e.append("circle").attr("r",g).attr("fill","black"),A.attr("mask","url(#"+t+"-donut-mask)")}this.data=function(e){let l=n([],e);const r=new Set;for(let t=0;t<l.length;t+=1){const e=l[t];if(!e||"string"!=typeof e.label||""===e.label)throw new Error("D3Pie: data["+t+"] must have a non-empty string 'label' property");if(r.has(e.label))throw new Error('D3Pie: duplicate label "'+e.label+'" found. All labels must be unique.');r.add(e.label)}const i=[],s=l.reduce(function(t,e){return t+(e.value||0)},0);m.datum({total:s}),x.datum({data:{label:void 0!==a.total.label?a.total.label:"Total",value:s}}),a.total.enabled&&x.select(".total-value").text(d3.format(".3~s")(s)),l.unshift({label:"undefined",color:a.gradient.enabled?"steelblue":"#ecf1f5",value:0===s?1:0});const o=d3.scaleOrdinal(d3.schemeSet1);function c(t,e){return void 0!==t&&void 0!==t.color?t.color:o(e)}function d(t,e,n=e){return d3.arc().innerRadius(e).outerRadius(n).centroid(t)}function v(t){return d3.interpolate(u[t.data.label],t)}function z(t){const e=h-.1;return Math.max(-e,Math.min(e,t))}const P=d3.transition().duration(a.duration);if(a.gradient.enabled){const e=w.selectAll("radialGradient").data(l,function(t){return t.label}).enter().append("radialGradient").attr("gradientUnits","userSpaceOnUse").attr("cx",0).attr("cy",0).attr("r","120%").attr("id",function(e,n){return t+"-grad"+n});e.append("stop").attr("class","grad-stop-0").style("stop-color",function(t,e){return c(t,e)}),e.append("stop").attr("class","grad-stop-1").attr("offset",a.gradient.percentage+"%"),w.selectAll("radialGradient").select(".grad-stop-0").transition(P).style("stop-color",function(t,e){return c(t,e)})}function R(t){return t.data.label}const M=d3.pie().sort(null).value(function(t){return t.value}),k=A.selectAll(".slice-g").data(M(l),R),D=k.enter().append("g").attr("class","slice-g");if(y(D),D.append("path").attr("id",function(e,n){return t+"-slice"+n}).attr("class","slice").attr("fill",function(e,n){return a.gradient.enabled?"url(#"+t+"-grad"+n+")":c(e.data,n)}),k.exit().each(function(t){const e=l.find(function(e){return e.label===t.data.label});e&&(e.value=0)}),M(l).forEach(function(t,e){if(void 0===u[t.data.label]){const n=e?u[M(l)[e-1].data.label].endAngle:0;u[t.data.label]={startAngle:n,endAngle:n}}}),A.selectAll(".slice").data(M(l),R).transition(P).attrTween("d",function(t){return function(e){return d3.arc().padAngle(a.padAngle).cornerRadius(a.cornerRadius).innerRadius(g).outerRadius(f)(v(t)(e))}}).end().then(function(){l=l.filter(function(t,e){return 0===e||t.value}),w.selectAll("radialGradient").data(l,function(t){return t.label}).exit().remove(),A.selectAll(".slice-g").data(M(l),R).exit().each(function(t){delete u[t.data.label],delete p[t.data.label]}).remove();for(const t of M(l))u[t.data.label]=t,"none"!==a.labels.outer.format&&(p[t.data.label].currentAngle=p[t.data.label].newAngle);A.selectAll(".slice-g").classed("first-slice",!1);const t=A.select(".slice-g");t.empty()||t.classed("first-slice",!0)}).catch(t=>{t&&"object"==typeof t&&"startAngle"in t&&"endAngle"in t||console.error("D3Pie error:",t)}),D.append("text").attr("class","inner-label").attr("dy",".35em"),A.selectAll(".inner-label").data(M(l),R).text(function(t){return"undefined"===t.data.label?"undefined":Math.round(100*t.data.value/s)+"%"}).transition(P).attrTween("opacity",function(t){return t.data.value?function(e){const n=v(t)(e);return 100*(n.endAngle-n.startAngle)/(2*Math.PI)<a.labels.inner.hideWhenLessThanPercentage?0:1}:function(){return 0}}).attrTween("transform",function(t){return function(e){return"translate("+d(v(t)(e),g*(1-a.labels.inner.offset),f*(1+a.labels.inner.offset))+")"}}),"none"!==a.labels.outer.format){M(l).forEach(function(t,e){if(void 0===p[t.data.label]){const n=e?u[M(l)[e-1].data.label].endAngle:0;p[t.data.label]={currentAngle:{startAngle:n,endAngle:n},newAngle:{startAngle:n,endAngle:n}}}let n=0;const[r,s]=d(t,h);t.data.value&&(n=r>=0?a.labels.outer.collideHeight:-a.labels.outer.collideHeight),i.push({fx:n,y:s})}),d3.forceSimulation(i).alphaMin(.5).force("collide",d3.forceCollide(a.labels.outer.collideHeight/2)).force("boundY",function(){for(const t of i)t.y=z(t.y)}).tick(30);const t=D.append("g").attr("class","outer-label-g");t.append("text").attr("class","outer-label").attr("dy",".35em").text(R),t.append("path").attr("class","link"),A.selectAll(".outer-label-g").data(M(l),R).transition(P).style("opacity",function(t,e){return e&&t.value?1:0}).each(function(t,e){d3.select(this).select(".link").attr("stroke",c(t.data,e))}),A.selectAll(".outer-label").data(M(l),R).transition(P).attrTween("transform",function(t,e){p[t.data.label].newAngle=function(){const n=z(i[e].y);let a=Math.sqrt(Math.pow(h,2)-Math.pow(n,2));(t.endAngle+t.startAngle)/2>Math.PI&&(a*=-1);let l=Math.PI/2-Math.atan2(-n,a);return l<0&&(l+=2*Math.PI),{startAngle:l,endAngle:l}}();const n=d3.interpolate(p[t.data.label].currentAngle,p[t.data.label].newAngle);return function(a){const l=d(n(a),h),[r,i]=l,s=r>0?{dx:5,textAnchor:"start"}:{dx:-5,textAnchor:"end"};return d3.select(A.selectAll(".link").nodes()[e]).datum([d(v(t)(a),f),d(v(t)(a),f+5),[r,i],[r+s.dx,i]]).attr("d",b),d3.select(A.selectAll(".outer-label").nodes()[e]).attr("dx",s.dx).style("text-anchor",s.textAnchor),"translate("+l+")"}})}}}