From 2161f2afc8d8b996680998acc1813faf242a007b Mon Sep 17 00:00:00 2001 From: Japorized Date: Fri, 20 Mar 2020 23:35:03 +0800 Subject: [PATCH] fix: change param type for spiral function in d3-cloud (#43226) * chore: format d3-cloud definitions and tests * fix: change param type for spiral function in d3-cloud Reference https://github.com/jasondavies/d3-cloud#spiral * fix: annotate an unused function param in d3-cloud test --- types/d3-cloud/d3-cloud-tests.ts | 90 ++++++++++++++++++++------------ types/d3-cloud/index.d.ts | 20 +++---- 2 files changed, 66 insertions(+), 44 deletions(-) diff --git a/types/d3-cloud/d3-cloud-tests.ts b/types/d3-cloud/d3-cloud-tests.ts index fd0b4768ae..6df7d36dce 100644 --- a/types/d3-cloud/d3-cloud-tests.ts +++ b/types/d3-cloud/d3-cloud-tests.ts @@ -7,46 +7,68 @@ d3Cloud(); // $ExpectType Cloud d3.layout.cloud(); -interface ICompTextSize{ - text:string; - size:number; - x?:number; - y?:number; - rotate?:number; +interface ICompTextSize { + text: string; + size: number; + x?: number; + y?: number; + rotate?: number; +} + +function archimedeanSpiral(size: [number, number]): (t: number) => [number, number] { + var e = size[0] / size[1]; + return (t: number) => { + const s = t * 0.1; + return [e * s * Math.sin(s), s * Math.cos(s)]; + }; } var fill = d3.scale.category20(); -d3.layout.cloud().size([300, 300]) - .words([ - "Hello", "world", "normally", "you", "want", "more", "words", - "than", "this"].map(function(d:string) { - return {text: d, size: 10 + Math.random() * 90}; - })) +d3.layout + .cloud() + .size([300, 300]) + .words( + ['Hello', 'world', 'normally', 'you', 'want', 'more', 'words', 'than', 'this'].map(function(d: string) { + return { text: d, size: 10 + Math.random() * 90 }; + }), + ) .padding(5) - .rotate(function() { return ~~(Math.random() * 2) * 90; }) - .font("Impact") - .fontSize(function(d:ICompTextSize) { return d.size; }) - .on("end", draw) + .rotate(function() { + return ~~(Math.random() * 2) * 90; + }) + .font('Impact') + .fontSize(function(d: ICompTextSize) { + return d.size; + }) + .spiral(archimedeanSpiral) + .on('end', draw) .random() .canvas() .start(); - -function draw(words:ICompTextSize[]) { - d3.select("body").append("svg") - .attr("width", 300) - .attr("height", 300) - .append("g") - .attr("transform", "translate(150,150)") - .selectAll("text") - .data(words) - .enter().append("text") - .style("font-size", function(d:ICompTextSize) { return d.size + "px"; }) - .style("font-family", "Impact") - .style("fill", function(d:ICompTextSize, i:number) { return fill(i); }) - .attr("text-anchor", "middle") - .attr("transform", function(d:ICompTextSize) { - return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")"; - }) - .text(function(d:ICompTextSize) { return d.text; }); +function draw(words: ICompTextSize[]) { + d3.select('body') + .append('svg') + .attr('width', 300) + .attr('height', 300) + .append('g') + .attr('transform', 'translate(150,150)') + .selectAll('text') + .data(words) + .enter() + .append('text') + .style('font-size', function(d: ICompTextSize) { + return d.size + 'px'; + }) + .style('font-family', 'Impact') + .style('fill', function(_d: ICompTextSize, i: number) { + return fill(i); + }) + .attr('text-anchor', 'middle') + .attr('transform', function(d: ICompTextSize) { + return 'translate(' + [d.x, d.y] + ')rotate(' + d.rotate + ')'; + }) + .text(function(d: ICompTextSize) { + return d.text; + }); } diff --git a/types/d3-cloud/index.d.ts b/types/d3-cloud/index.d.ts index b0a3b8a78c..f32873cda2 100644 --- a/types/d3-cloud/index.d.ts +++ b/types/d3-cloud/index.d.ts @@ -59,9 +59,9 @@ declare module 'd3' { text(text: string): Cloud; text(text: (datum: T, index: number) => string): Cloud; - spiral(): (size: number) => (t: number) => [number, number]; + spiral(): (size: [number, number]) => (t: number) => [number, number]; spiral(name: string): Cloud; - spiral(spiral: (size: number) => (t: number) => [number, number]): Cloud; + spiral(spiral: (size: [number, number]) => (t: number) => [number, number]): Cloud; fontSize(): (datum: T, index: number) => number; fontSize(size: number): Cloud; @@ -71,10 +71,10 @@ declare module 'd3' { padding(padding: number): Cloud; padding(padding: (datum: T, index: number) => number): Cloud; - /** + /** * If specified, sets the internal random number generator,used for selecting the initial position of each word, * and the clockwise/counterclockwise direction of the spiral for each word. - * + * * @param randomFunction should return a number in the range [0, 1).The default is Math.random. */ random(): Cloud; @@ -84,17 +84,17 @@ declare module 'd3' { * If specified, sets the canvas generator function, which is used internally to draw text. * When using Node.js, you will almost definitely override the default, e.g. using the canvas module. * @param canvasGenerator should return a HTMLCanvasElement.The default is: ()=>{document.createElement("canvas");} - * + * */ - canvas():Cloud; + canvas(): Cloud; canvas(canvasGenerator: () => HTMLCanvasElement): Cloud; - on(type: "word", listener: (word: T) => void): Cloud; - on(type: "end", listener: (tags: T[], bounds: { x: number; y: number }[]) => void): Cloud; + on(type: 'word', listener: (word: T) => void): Cloud; + on(type: 'end', listener: (tags: T[], bounds: { x: number; y: number }[]) => void): Cloud; on(type: string, listener: (...args: any[]) => void): Cloud; - on(type: "word"): (word: T) => void; - on(type: "end"): (tags: T[], bounds: { x: number; y: number }[]) => void; + on(type: 'word'): (word: T) => void; + on(type: 'end'): (tags: T[], bounds: { x: number; y: number }[]) => void; on(type: string): (...args: any[]) => void; } }