diff --git a/leaflet/index.d.ts b/leaflet/index.d.ts index 80f42e9961..c56e98e7f8 100644 --- a/leaflet/index.d.ts +++ b/leaflet/index.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Leaflet.js 1.0.0 +// Type definitions for Leaflet.js 1.0.2 // Project: https://github.com/Leaflet/Leaflet // Definitions by: Alejandro Sánchez // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -9,10 +9,38 @@ type NativeMouseEvent = MouseEvent; declare namespace L { export class Class { - static extend(props:any):any/* how to return constructor of self extended type ? */; - static include(props:any):any /* how to return self extended type ? */; - static mergeOptions(props:any): any /* how to return self extended type ? */; - static addInitHook(initHookFn: ()=> void): any/* how to return self extended type ? */; + static extend(props: any): any/* how to return constructor of self extended type ? */; + static include(props: any): any /* how to return self extended type ? */; + static mergeOptions(props: any): any /* how to return self extended type ? */; + static addInitHook(initHookFn: () => void): any/* how to return self extended type ? */; + } + + export class Transformation { + constructor(a: number, b: number, c: number, d: number); + + transform(point: Point, scale?: number): Point; + + untransform(point: Point, scale?: number): Point; + } + + export namespace LineUtil { + export function simplify(points: Array, tolerance: number): Array; + + export function simplify(points: Array, tolerance: number): Array; + + export function pointToSegmentDistance(p: Point, p1: Point, p2: Point): number; + + export function pointToSegmentDistance(p: PointTuple, p1: PointTuple, p2: PointTuple): number; + + export function closestPointOnSegment(p: Point, p1: Point, p2: Point): Point; + + export function closestPointOnSegment(p: PointTuple, p1: PointTuple, p2: PointTuple): Point; + } + + export namespace PolyUtil { + export function clipPolygon(points: Array, bounds: Bounds, round?: boolean): Array; + + export function clipPolygon(points: Array, bounds: BoundsLiteral, round?: boolean): Array; } export class DomUtil { @@ -154,7 +182,7 @@ declare namespace L { round(): Point; floor(): Point; ceil(): Point; - distanceTo(otherPoint: PointExpression): Point; + distanceTo(otherPoint: PointExpression): number; equals(otherPoint: PointExpression): boolean; contains(otherPoint: PointExpression): boolean; toString(): string; @@ -210,7 +238,7 @@ declare namespace L { * keyword will point to). You can also pass several space-separated types * (e.g. 'click dblclick'). */ - on(type: string, fn: EventHandlerFn, context?: Object): this; + on(type: string, fn: EventHandlerFn, context?: any): this; /** * Adds a set of type/listener pairs, e.g. {click: onClick, mousemove: onMouseMove} @@ -223,7 +251,7 @@ declare namespace L { * Note that if you passed a custom context to on, you must pass the same context * to off in order to remove the listener. */ - off(type: string, fn?: EventHandlerFn, context?: Object): this; + off(type: string, fn?: EventHandlerFn, context?: any): this; /** * Removes a set of type/listener pairs. @@ -240,7 +268,7 @@ declare namespace L { * object — the first argument of the listener function will contain its properties. * The event might can optionally be propagated to event parents. */ - fire(type: string, data?: Object, propagate?: boolean): this; + fire(type: string, data?: any, propagate?: boolean): this; /** * Returns true if a particular event type has any listeners attached to it. @@ -250,7 +278,7 @@ declare namespace L { /** * Behaves as on(...), except the listener will only get fired once and then removed. */ - once(type: string, fn: EventHandlerFn, context?: Object): this; + once(type: string, fn: EventHandlerFn, context?: any): this; /** * Behaves as on(...), except the listener will only get fired once and then removed. @@ -275,7 +303,7 @@ declare namespace L { * keyword will point to). You can also pass several space-separated types * (e.g. 'click dblclick'). */ - addEventListener(type: string, fn: EventHandlerFn, context?: Object): this; + addEventListener(type: string, fn: EventHandlerFn, context?: any): this; /** * Alias for on(...) @@ -292,7 +320,7 @@ declare namespace L { * Note that if you passed a custom context to on, you must pass the same context * to off in order to remove the listener. */ - removeEventListener(type: string, fn: EventHandlerFn, context?: Object): this; + removeEventListener(type: string, fn: EventHandlerFn, context?: any): this; /** * Alias for off(...) @@ -313,7 +341,7 @@ declare namespace L { * * Behaves as on(...), except the listener will only get fired once and then removed. */ - addOneTimeEventListener(type: string, fn: EventHandlerFn, context?: Object): this; + addOneTimeEventListener(type: string, fn: EventHandlerFn, context?: any): this; /** * Alias for once(...) @@ -329,7 +357,7 @@ declare namespace L { * object — the first argument of the listener function will contain its properties. * The event might can optionally be propagated to event parents. */ - fireEvent(type: string, data?: Object, propagate?: boolean): this; + fireEvent(type: string, data?: any, propagate?: boolean): this; /** * Alias for listens(...) @@ -470,7 +498,7 @@ declare namespace L { } export interface WMS extends TileLayer { - setParams(params: Object, noRedraw?: boolean): this; + setParams(params: any, noRedraw?: boolean): this; } export namespace tileLayer { @@ -664,7 +692,7 @@ declare namespace L { * Iterates over the layers of the group, * optionally specifying context of the iterator function. */ - eachLayer(fn: (layer: Layer) => void, context?: Object): this; + eachLayer(fn: (layer: Layer) => void, context?: any): this; /** * Returns the layer with the given internal ID. @@ -1089,7 +1117,7 @@ declare namespace L { export interface Event { type: string; - target: any; // should this be Object and have users cast? + target: any; } export interface MouseEvent extends Event { @@ -1139,7 +1167,7 @@ declare namespace L { export interface GeoJSONEvent extends Event { layer: Layer; - properties: any; // any or Object? + properties: any; geometryType: string; id: string; } @@ -1157,13 +1185,13 @@ declare namespace L { } export namespace DomEvent { - export function on(el: HTMLElement, types: string, fn: (ev: Event) => any, context?: Object): typeof DomEvent; + export function on(el: HTMLElement, types: string, fn: (ev: Event) => any, context?: any): typeof DomEvent; - export function on(el: HTMLElement, eventMap: {[eventName: string]: Function}, context?: Object): typeof DomEvent; + export function on(el: HTMLElement, eventMap: {[eventName: string]: Function}, context?: any): typeof DomEvent; - export function off(el: HTMLElement, types: string, fn: (ev: Event) => any, context?: Object): typeof DomEvent; + export function off(el: HTMLElement, types: string, fn: (ev: Event) => any, context?: any): typeof DomEvent; - export function off(el: HTMLElement, eventMap: {[eventName: string]: Function}, context?: Object): typeof DomEvent; + export function off(el: HTMLElement, eventMap: {[eventName: string]: Function}, context?: any): typeof DomEvent; export function stopPropagation(ev: Event): typeof DomEvent; @@ -1179,13 +1207,13 @@ declare namespace L { export function getWheelDelta(ev: Event): number; - export function addListener(el: HTMLElement, types: string, fn: (ev: Event) => any, context?: Object): typeof DomEvent; + export function addListener(el: HTMLElement, types: string, fn: (ev: Event) => any, context?: any): typeof DomEvent; - export function addListener(el: HTMLElement, eventMap: {[eventName: string]: Function}, context?: Object): typeof DomEvent; + export function addListener(el: HTMLElement, eventMap: {[eventName: string]: Function}, context?: any): typeof DomEvent; - export function removeListener(el: HTMLElement, types: string, fn: (ev: Event) => any, context?: Object): typeof DomEvent; + export function removeListener(el: HTMLElement, types: string, fn: (ev: Event) => any, context?: any): typeof DomEvent; - export function removeListener(el: HTMLElement, eventMap: {[eventName: string]: Function}, context?: Object): typeof DomEvent; + export function removeListener(el: HTMLElement, eventMap: {[eventName: string]: Function}, context?: any): typeof DomEvent; } interface DefaultMapPanes { @@ -1207,7 +1235,7 @@ declare namespace L { addLayer(layer: Layer): this; removeLayer(layer: Layer): this; hasLayer(layer: Layer): boolean; - eachLayer(fn: (layer: Layer) => void, context?: Object): this; + eachLayer(fn: (layer: Layer) => void, context?: any): this; openPopup(popup: Popup): this; openPopup(content: string, latlng: LatLngExpression, options?: PopupOptions): this; openPopup(content: HTMLElement, latlng: LatLngExpression, options?: PopupOptions): this; @@ -1246,7 +1274,7 @@ declare namespace L { getPane(pane: HTMLElement): HTMLElement; getPanes(): {[name: string]: HTMLElement} & DefaultMapPanes; getContainer(): HTMLElement; - whenReady(fn: () => void, context?: Object): this; + whenReady(fn: () => void, context?: any): this; // Methods for getting map state getCenter(): LatLng; @@ -1316,7 +1344,7 @@ declare namespace L { export interface IconDefault extends Icon { imagePath: string; } - + export namespace Icon { export const Default: IconDefault; } diff --git a/leaflet/leaflet-tests.ts b/leaflet/leaflet-tests.ts index 47776a75ac..1d3f447ad4 100644 --- a/leaflet/leaflet-tests.ts +++ b/leaflet/leaflet-tests.ts @@ -1,5 +1,3 @@ - - import L = require('leaflet'); const latLngLiteral: L.LatLngLiteral = {lat: 12, lng: 13}; @@ -28,6 +26,16 @@ point = L.point(12, 13, true); point = L.point(pointTuple); point = L.point({x: 12, y: 13}); +let distance: number; +point.distanceTo(point); +point.distanceTo(pointTuple); + +const transformation = new L.Transformation(1, 2, 3, 4); +point = transformation.transform(point); +point = transformation.transform(point, 2); +point = transformation.untransform(point); +point = transformation.untransform(point, 2); + const boundsLiteral: L.BoundsLiteral = [[1, 1], pointTuple]; let bounds: L.Bounds; @@ -36,11 +44,26 @@ bounds = L.bounds(pointTuple, pointTuple); bounds = L.bounds([point, point]); bounds = L.bounds(boundsLiteral); +let points: Array; +points = L.LineUtil.simplify([point, point], 1); +points = L.LineUtil.simplify([pointTuple, pointTuple], 2); + +distance = L.LineUtil.pointToSegmentDistance(point, point, point); +distance = L.LineUtil.pointToSegmentDistance(pointTuple, pointTuple, pointTuple); + +point = L.LineUtil.closestPointOnSegment(point, point, point); +point = L.LineUtil.closestPointOnSegment(pointTuple, pointTuple, pointTuple); + +points = L.PolyUtil.clipPolygon(points, bounds); +points = L.PolyUtil.clipPolygon(points, bounds, true); +points = L.PolyUtil.clipPolygon([pointTuple, pointTuple], boundsLiteral); +points = L.PolyUtil.clipPolygon([pointTuple, pointTuple], boundsLiteral, true); + let mapOptions: L.MapOptions = {}; mapOptions = { preferCanvas: true, attributionControl: false, - zoomControl: true, + zoomControl: true, closePopupOnClick: false, zoomSnap: 1, zoomDelta: 1, @@ -51,11 +74,11 @@ mapOptions = { zoom: 12, minZoom: 10, maxZoom: 14, - fadeAnimation: true, + fadeAnimation: true, markerZoomAnimation: false, transform3DLimit: 123, zoomAnimation: false, - zoomAnimationThreshold: 4, + zoomAnimationThreshold: 4, inertia: false, inertiaDeceleration: 2000, inertiaMaxSpeed: 1000, diff --git a/leaflet/package.json b/leaflet/package.json new file mode 100644 index 0000000000..9605e3e506 --- /dev/null +++ b/leaflet/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "@types/geojson": "0.0.31" + } +} diff --git a/leaflet/tsconfig.json b/leaflet/tsconfig.json index b61ef91dfd..cc6a966883 100644 --- a/leaflet/tsconfig.json +++ b/leaflet/tsconfig.json @@ -6,6 +6,7 @@ "strictNullChecks": false, "baseUrl": "../", "typeRoots": [ + "node_modules/@types", "../" ], "types": [], @@ -16,4 +17,4 @@ "index.d.ts", "leaflet-tests.ts" ] -} \ No newline at end of file +}