mirror of
https://github.com/zhigang1992/DefinitelyTyped.git
synced 2026-04-20 00:59:29 +08:00
Added tests for brush on different axis classes
This required some refactoring of the original brush code. Scale contains a generic. Brush can take up to three generics.
This commit is contained in:
@@ -2720,3 +2720,34 @@ function testEnterSizeEmpty() {
|
||||
selectionSize = newNodes.size();
|
||||
|
||||
}
|
||||
|
||||
// Example from Matthias Jobst http://github.com/MatthiasJobst
|
||||
// Checks the brush with different Axis types
|
||||
class BrushAxisTest {
|
||||
brush: d3.svg.Brush<any,Date,Date>;
|
||||
constructor() {
|
||||
let scale = d3.time.scale<Date,Date>();
|
||||
this.brush = d3.svg.brush<any,Date>()
|
||||
.x(scale) // the x accessor accepts time scales
|
||||
.y(scale); // as does y
|
||||
}
|
||||
brushes = () => {
|
||||
let extent = this.brush.extent();
|
||||
let brush = d3.svg.brush();
|
||||
brush.x(d3.scale.linear()); // Linear scale
|
||||
brush.y(d3.scale.log()); // Logarithmic scale
|
||||
// Does not work:
|
||||
// brush.extent(this.brush.extent());
|
||||
// From https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md#ordinal_rangePoints
|
||||
let ordinalScale = d3.scale.ordinal<number,number>()
|
||||
.domain([1, 2, 3, 4])
|
||||
.rangePoints([0, 100]);
|
||||
let ordinalBrush = d3.svg.brush()
|
||||
.x(ordinalScale) // Ordinal scale
|
||||
.y(d3.scale.linear());
|
||||
let colorScale = d3.scale.category10();
|
||||
let colorBrush = d3.svg.brush<any,string,number>()
|
||||
.x(colorScale) // Color scale
|
||||
.y(d3.scale.pow());
|
||||
}
|
||||
}
|
||||
44
types/d3/v3/index.d.ts
vendored
44
types/d3/v3/index.d.ts
vendored
@@ -2581,40 +2581,44 @@ declare namespace d3 {
|
||||
tickFormat(format: string): Axis;
|
||||
}
|
||||
|
||||
export function brush(): Brush<any>;
|
||||
export function brush<T>(): Brush<T>;
|
||||
export function brush(): Brush<any, number, number>;
|
||||
export function brush<T>(): Brush<T, number, number>;
|
||||
export function brush<T,X>(): Brush<T, X, X>;
|
||||
export function brush<T, X, Y>(): Brush<T, X, Y>;
|
||||
|
||||
namespace brush {
|
||||
interface Scale {
|
||||
domain(): number[] | Date[];
|
||||
domain(domain: number[] | Date[]): Scale;
|
||||
interface Scale<S> {
|
||||
domain(): S[];
|
||||
domain(domain: S[]): Scale<S>;
|
||||
|
||||
range(): number[] | Date[];
|
||||
range(range: number[] | Date[]): Scale;
|
||||
range(): S[];
|
||||
range(range: number[]): Scale<S>;
|
||||
|
||||
invert?(y: number | Date): number | Date;
|
||||
invert?(y: number): S;
|
||||
}
|
||||
}
|
||||
|
||||
interface Brush<T> {
|
||||
interface Brush<T, X, Y> {
|
||||
(selection: Selection<T>): void;
|
||||
(selection: Transition<T>): void;
|
||||
|
||||
event(selection: Selection<T>): void;
|
||||
event(selection: Transition<T>): void;
|
||||
|
||||
x(): brush.Scale;
|
||||
x(x: brush.Scale): Brush<T>;
|
||||
x(): brush.Scale<X>;
|
||||
x(x: brush.Scale<X>): Brush<T, X, Y>;
|
||||
x<A, B extends X>(x: d3.scale.Ordinal<A, B> | d3.time.Scale<A, B>): Brush<T, X, Y>;
|
||||
|
||||
y(): brush.Scale;
|
||||
y(y: brush.Scale): Brush<T>;
|
||||
y(): brush.Scale<Y>;
|
||||
y(y: brush.Scale<Y>): Brush<T, X, Y>;
|
||||
y<A, B extends Y>(x: d3.scale.Ordinal<A, B> | d3.time.Scale<A, B>): Brush<T, X, Y>;
|
||||
|
||||
// https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Controls.md#brush_extent
|
||||
extent(): [number, number] | [[number, number], [number, number]] | [Date, Date] | [[Date, Date],[Date,Date]];
|
||||
extent(extent: [number, number] | [[number, number], [number, number]] | [Date, Date] | [[Date, Date], [Date, Date]]): Brush<T>;
|
||||
extent(): [X, X] | [Y, Y] | [[X, Y], [X, Y]] | null;
|
||||
extent(extent: [X, X] | [Y, Y] | [[X, Y], [X, Y]]): Brush<T, X, Y>;
|
||||
|
||||
clamp(): boolean | [boolean, boolean];
|
||||
clamp(clamp: boolean | [boolean, boolean]): Brush<T>;
|
||||
clamp(clamp: boolean | [boolean, boolean]): Brush<T, X, Y>;
|
||||
|
||||
clear(): void;
|
||||
|
||||
@@ -2625,10 +2629,10 @@ declare namespace d3 {
|
||||
on(type: 'brushend'): (datum: T, index: number) => void;
|
||||
on(type: string): (datum: T, index: number) => void;
|
||||
|
||||
on(type: 'brushstart', listener: (datum: T, index: number) => void): Brush<T>;
|
||||
on(type: 'brush', listener: (datum: T, index: number) => void): Brush<T>;
|
||||
on(type: 'brushend', listener: (datum: T, index: number) => void): Brush<T>;
|
||||
on(type: string, listener: (datum: T, index: number) => void): Brush<T>;
|
||||
on(type: 'brushstart', listener: (datum: T, index: number) => void): Brush<T, X, Y>;
|
||||
on(type: 'brush', listener: (datum: T, index: number) => void): Brush<T, X ,Y>;
|
||||
on(type: 'brushend', listener: (datum: T, index: number) => void): Brush<T, X, Y>;
|
||||
on(type: string, listener: (datum: T, index: number) => void): Brush<T, X, Y>;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user