mirror of
https://github.com/openSUSE/osem.git
synced 2026-08-14 12:14:03 +00:00
1 line
18 KiB
JavaScript
1 line
18 KiB
JavaScript
|
|
function Trianglify(f){function e(f,e){return"undefined"!=typeof f?f:e}"undefined"==typeof f&&(f={}),this.options={cellsize:e(f.cellsize,150),bleed:e(f.cellsize,150),cellpadding:e(f.cellpadding,.1*f.cellsize||15),noiseIntensity:e(f.noiseIntensity,0),x_gradient:e(f.x_gradient,Trianglify.randomColor()),format:e(f.format,"svg"),fillOpacity:e(f.fillOpacity,1),strokeOpacity:e(f.strokeOpacity,1)},this.options.y_gradient=f.y_gradient||this.options.x_gradient.map(function(f){return d3.rgb(f).brighter(.5)})}"undefined"!=typeof module&&module.exports&&(d3=require("d3"),jsdom=require("jsdom"),document=new(jsdom.level(1,"core").Document),XMLSerializer=require("xmldom").XMLSerializer,btoa=require("btoa"),module.exports=Trianglify),Trianglify.randomColor=function(){var f=Object.keys(Trianglify.colorbrewer),e=Trianglify.colorbrewer[f[Math.floor(Math.random()*f.length)]];f=Object.keys(e);var d=e[f[Math.floor(Math.random()*f.length)]];return d},Trianglify.prototype.generate=function(f,e){return new Trianglify.Pattern(this.options,f,e)},Trianglify.Pattern=function(f,e,d){this.options=f,this.width=e,this.height=d,this.polys=this.generatePolygons(),this.svg=this.generateSVG();var a=new XMLSerializer;this.svgString=a.serializeToString(this.svg),this.base64=btoa(this.svgString),this.dataUri="data:image/svg+xml;base64,"+this.base64,this.dataUrl="url("+this.dataUri+")"},Trianglify.Pattern.prototype.append=function(){document.body.appendChild(this.svg)},Trianglify.Pattern.gradient_2d=function(f,e,d,a){return function(c,b){var t=d3.scale.linear().range(f).domain(d3.range(0,d,d/f.length)),i=d3.scale.linear().range(e).domain(d3.range(0,a,a/e.length));return d3.interpolateRgb(t(c),i(b))(.5)}},Trianglify.Pattern.prototype.generatePolygons=function(){var f=this.options,e=Math.ceil((this.width+2*f.bleed)/f.cellsize),d=Math.ceil((this.height+2*f.bleed)/f.cellsize),a=d3.range(e*d).map(function(d){var a=d%e,c=Math.floor(d/e),b=Math.round(-f.bleed+a*f.cellsize+Math.random()*(f.cellsize-2*f.cellpadding)+f.cellpadding),t=Math.round(-f.bleed+c*f.cellsize+Math.random()*(f.cellsize-2*f.cellpadding)+f.cellpadding);return[b,t]});return d3.geom.voronoi().triangles(a)},Trianglify.Pattern.prototype.generateSVG=function(){var f=this.options,e=Trianglify.Pattern.gradient_2d(f.x_gradient,f.y_gradient,this.width,this.height),d=document.createElementNS("http://www.w3.org/2000/svg","svg"),a=d3.select(d);a.attr("width",this.width),a.attr("height",this.height),a.attr("xmlns","http://www.w3.org/2000/svg");var c=a.append("g");if(f.noiseIntensity>.01){var b=a.append("filter").attr("id","noise");b.append("feTurbulence").attr("type","fractalNoise").attr("in","fillPaint").attr("fill","#F00").attr("baseFrequency",.7).attr("numOctaves","3").attr("stitchTiles","stitch");var t=b.append("feComponentTransfer");t.append("feFuncR").attr("type","linear").attr("slope","2").attr("intercept","-.5"),t.append("feFuncG").attr("type","linear").attr("slope","2").attr("intercept","-.5"),t.append("feFuncB").attr("type","linear").attr("slope","2").attr("intercept","-.5"),b.append("feColorMatrix").attr("type","matrix").attr("values","0.3333 0.3333 0.3333 0 0 \n 0.3333 0.3333 0.3333 0 0 \n 0.3333 0.3333 0.3333 0 0 \n 0 0 0 1 0"),a.append("rect").attr("opacity",f.noiseIntensity).attr("width","100%").attr("height","100%").attr("filter","url(#noise)")}return this.polys.forEach(function(d){var a=(d[0][0]+d[1][0]+d[2][0])/3,b=(d[0][1]+d[1][1]+d[2][1])/3,t=e(a,b),i=c.append("path").attr("d","M"+d.join("L")+"Z").attr({fill:t,stroke:t});1!=f.fillOpacity&&i.attr("fill-opacity",f.fillOpacity),1!=f.strokeOpacity&&i.attr("stroke-opacity",f.strokeOpacity)}),a.node()},Trianglify.Pattern.prototype.append=function(){document.body.appendChild(this.svg)},Trianglify.colorbrewer={YlGn:{3:["#f7fcb9","#addd8e","#31a354"],4:["#ffffcc","#c2e699","#78c679","#238443"],5:["#ffffcc","#c2e699","#78c679","#31a354","#006837"],6:["#ffffcc","#d9f0a3","#addd8e","#78c679","#31a354","#006837"],7:["#ffffcc","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#005a32"],8:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#23844
|