mirror of
https://github.com/Leaflet/Leaflet.git
synced 2025-07-25 01:32:21 +00:00
Remove Util.extend
This commit is contained in:
@ -16,16 +16,17 @@ expect.Assertion.prototype.nearLatLng = function (expected, delta) {
|
||||
.be.within(expected.lng - delta, expected.lng + delta);
|
||||
};
|
||||
|
||||
happen.at = function (what, x, y, props) {
|
||||
this.once(document.elementFromPoint(x, y), L.Util.extend({
|
||||
happen.at = function (what, x, y, props = {}) {
|
||||
this.once(document.elementFromPoint(x, y), {
|
||||
type: what,
|
||||
clientX: x,
|
||||
clientY: y,
|
||||
screenX: x,
|
||||
screenY: y,
|
||||
which: 1,
|
||||
button: 0
|
||||
}, props || {}));
|
||||
button: 0,
|
||||
...props
|
||||
});
|
||||
};
|
||||
|
||||
happen.makeEvent = (function (makeEvent) {
|
||||
|
@ -1,38 +1,4 @@
|
||||
describe('Util', () => {
|
||||
describe('#extend', () => {
|
||||
let a;
|
||||
|
||||
beforeEach(() => {
|
||||
a = {
|
||||
foo: 5,
|
||||
bar: 'asd'
|
||||
};
|
||||
});
|
||||
|
||||
it('extends the first argument with the properties of the second', () => {
|
||||
L.Util.extend(a, {
|
||||
bar: 7,
|
||||
baz: 3
|
||||
});
|
||||
|
||||
expect(a).to.eql({
|
||||
foo: 5,
|
||||
bar: 7,
|
||||
baz: 3
|
||||
});
|
||||
});
|
||||
|
||||
it('accepts more than 2 arguments', () => {
|
||||
L.Util.extend(a, {bar: 7}, {baz: 3});
|
||||
|
||||
expect(a).to.eql({
|
||||
foo: 5,
|
||||
bar: 7,
|
||||
baz: 3
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#stamp', () => {
|
||||
it('sets a unique id on the given object and returns it', () => {
|
||||
const a = {},
|
||||
|
@ -76,7 +76,7 @@ describe('DomEvent.DoubleTapSpec.js', () => {
|
||||
happen.click(container, click);
|
||||
|
||||
const event = spy.lastCall.args[0];
|
||||
const expectedProps = L.extend(click, {
|
||||
const expectedProps = Object.assign(click, {
|
||||
type: 'dblclick',
|
||||
// bubbles: true, // not important, as we do not actually dispatch the event
|
||||
// cancelable: true, //
|
||||
|
@ -99,7 +99,7 @@ describe('DomEvent.Pointer', () => {
|
||||
|
||||
// pointerdown/touchstart
|
||||
const pointer1 = {clientX:1, clientY:1, pointerId: 1};
|
||||
happen.once(el, L.extend({type: 'pointerdown'}, pointer1));
|
||||
happen.once(el, {type: 'pointerdown', ...pointer1}));
|
||||
let evt = listeners.touchstart.lastCall.args[0];
|
||||
expect(evt.type).to.be('pointerdown');
|
||||
expect(evt).to.have.keys('touches', 'changedTouches');
|
||||
@ -110,7 +110,7 @@ describe('DomEvent.Pointer', () => {
|
||||
|
||||
// another pointerdown/touchstart (multitouch)
|
||||
const pointer2 = {clientX:2, clientY:2, pointerId: 2};
|
||||
happen.once(el, L.extend({type: 'pointerdown'}, pointer2));
|
||||
happen.once(el, {type: 'pointerdown', ...pointer2});
|
||||
evt = listeners.touchstart.lastCall.args[0];
|
||||
expect(evt.type).to.be('pointerdown');
|
||||
expect(evt).to.have.keys('touches', 'changedTouches');
|
||||
@ -120,8 +120,8 @@ describe('DomEvent.Pointer', () => {
|
||||
expect(containIn([pointer1, pointer2], evt.touches)).to.be.ok();
|
||||
|
||||
// pointermove/touchmove (multitouch)
|
||||
L.extend(pointer1, {clientX:11, clientY:11});
|
||||
happen.once(el, L.extend({type: 'pointermove'}, pointer1));
|
||||
Object.assign(pointer1, {clientX:11, clientY:11});
|
||||
happen.once(el, {type: 'pointermove', ...pointer1});
|
||||
evt = listeners.touchmove.lastCall.args[0];
|
||||
expect(evt.type).to.be('pointermove');
|
||||
expect(evt).to.have.keys('touches', 'changedTouches');
|
||||
@ -131,7 +131,7 @@ describe('DomEvent.Pointer', () => {
|
||||
expect(containIn([pointer1, pointer2], evt.touches)).to.be.ok();
|
||||
|
||||
// pointerup/touchend (multitouch)
|
||||
happen.once(el, L.extend({type: 'pointerup'}, pointer2));
|
||||
happen.once(el, {type: 'pointerup', ...pointer2});
|
||||
evt = listeners.touchend.lastCall.args[0];
|
||||
expect(evt.type).to.be('pointerup');
|
||||
expect(evt).to.have.keys('touches', 'changedTouches');
|
||||
@ -141,7 +141,7 @@ describe('DomEvent.Pointer', () => {
|
||||
expect(containIn(pointer1, evt.touches[0])).to.be.ok();
|
||||
|
||||
// pointercancel/touchcancel
|
||||
happen.once(el, L.extend({type: 'pointercancel'}, pointer1));
|
||||
happen.once(el, {type: 'pointercancel', ...pointer1});
|
||||
evt = listeners.touchcancel.lastCall.args[0];
|
||||
expect(evt.type).to.be('pointercancel');
|
||||
expect(evt).to.have.keys('touches', 'changedTouches');
|
||||
|
@ -44,23 +44,23 @@ Class.extend = function (props) {
|
||||
|
||||
// mix static properties into the class
|
||||
if (props.statics) {
|
||||
Util.extend(NewClass, props.statics);
|
||||
Object.assign(NewClass, props.statics);
|
||||
}
|
||||
|
||||
// mix includes into the prototype
|
||||
if (props.includes) {
|
||||
Util.extend.apply(null, [proto].concat(props.includes));
|
||||
Object.assign(proto, ...props.includes);
|
||||
}
|
||||
|
||||
// mix given properties into the prototype
|
||||
Util.extend(proto, props);
|
||||
Object.assign(proto, props);
|
||||
delete proto.statics;
|
||||
delete proto.includes;
|
||||
|
||||
// merge options
|
||||
if (proto.options) {
|
||||
proto.options = parentProto.options ? Util.create(parentProto.options) : {};
|
||||
Util.extend(proto.options, props.options);
|
||||
Object.assign(proto.options, props.options);
|
||||
}
|
||||
|
||||
proto._initHooks = [];
|
||||
@ -89,7 +89,7 @@ Class.extend = function (props) {
|
||||
// [Includes a mixin](#class-includes) into the current class.
|
||||
Class.include = function (props) {
|
||||
const parentOptions = this.prototype.options;
|
||||
Util.extend(this.prototype, props);
|
||||
Object.assign(this.prototype, props);
|
||||
if (props.options) {
|
||||
this.prototype.options = parentOptions;
|
||||
this.mergeOptions(props.options);
|
||||
@ -100,7 +100,7 @@ Class.include = function (props) {
|
||||
// @function mergeOptions(options: Object): this
|
||||
// [Merges `options`](#class-options) into the defaults of the class.
|
||||
Class.mergeOptions = function (options) {
|
||||
Util.extend(this.prototype.options, options);
|
||||
Object.assign(this.prototype.options, options);
|
||||
return this;
|
||||
};
|
||||
|
||||
|
@ -175,11 +175,12 @@ export const Events = {
|
||||
fire(type, data, propagate) {
|
||||
if (!this.listens(type, propagate)) { return this; }
|
||||
|
||||
const event = Util.extend({}, data, {
|
||||
const event = {
|
||||
...data,
|
||||
type,
|
||||
target: this,
|
||||
sourceTarget: data && data.sourceTarget || this
|
||||
});
|
||||
};
|
||||
|
||||
if (this._events) {
|
||||
const listeners = this._events[type];
|
||||
@ -308,10 +309,11 @@ export const Events = {
|
||||
|
||||
_propagateEvent(e) {
|
||||
for (const id in this._eventParents) {
|
||||
this._eventParents[id].fire(e.type, Util.extend({
|
||||
this._eventParents[id].fire(e.type, {
|
||||
layer: e.target,
|
||||
propagatedFrom: e.target
|
||||
}, e), true);
|
||||
propagatedFrom: e.target,
|
||||
...e
|
||||
}, true);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -4,20 +4,6 @@
|
||||
* Various utility functions, used by Leaflet internally.
|
||||
*/
|
||||
|
||||
// @function extend(dest: Object, src?: Object): Object
|
||||
// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.
|
||||
export function extend(dest, ...args) {
|
||||
let i, j, len, src;
|
||||
|
||||
for (j = 0, len = args.length; j < len; j++) {
|
||||
src = args[j];
|
||||
for (i in src) {
|
||||
dest[i] = src[i];
|
||||
}
|
||||
}
|
||||
return dest;
|
||||
}
|
||||
|
||||
// @function create(proto: Object, properties?: Object): Object
|
||||
// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)
|
||||
export const create = Object.create || (function () {
|
||||
|
@ -5,4 +5,4 @@ export {Handler} from './Handler';
|
||||
|
||||
import * as Util from './Util';
|
||||
export {Util};
|
||||
export {extend, stamp, setOptions} from './Util';
|
||||
export {stamp, setOptions} from './Util';
|
||||
|
@ -1,7 +1,6 @@
|
||||
import {Earth} from './CRS.Earth';
|
||||
import {Mercator} from '../projection/Projection.Mercator';
|
||||
import {toTransformation} from '../../geometry/Transformation';
|
||||
import * as Util from '../../core/Util';
|
||||
|
||||
/*
|
||||
* @namespace CRS
|
||||
@ -9,7 +8,8 @@ import * as Util from '../../core/Util';
|
||||
*
|
||||
* Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.
|
||||
*/
|
||||
export const EPSG3395 = Util.extend({}, Earth, {
|
||||
export const EPSG3395 = {
|
||||
...Earth,
|
||||
code: 'EPSG:3395',
|
||||
projection: Mercator,
|
||||
|
||||
@ -17,4 +17,4 @@ export const EPSG3395 = Util.extend({}, Earth, {
|
||||
const scale = 0.5 / (Math.PI * Mercator.R);
|
||||
return toTransformation(scale, 0.5, -scale, 0.5);
|
||||
}())
|
||||
});
|
||||
};
|
||||
|
@ -1,7 +1,6 @@
|
||||
import {Earth} from './CRS.Earth';
|
||||
import {SphericalMercator} from '../projection/Projection.SphericalMercator';
|
||||
import {toTransformation} from '../../geometry/Transformation';
|
||||
import * as Util from '../../core/Util';
|
||||
|
||||
/*
|
||||
* @namespace CRS
|
||||
@ -12,7 +11,8 @@ import * as Util from '../../core/Util';
|
||||
* Map's `crs` option.
|
||||
*/
|
||||
|
||||
export const EPSG3857 = Util.extend({}, Earth, {
|
||||
export const EPSG3857 = {
|
||||
...Earth,
|
||||
code: 'EPSG:3857',
|
||||
projection: SphericalMercator,
|
||||
|
||||
@ -20,8 +20,9 @@ export const EPSG3857 = Util.extend({}, Earth, {
|
||||
const scale = 0.5 / (Math.PI * SphericalMercator.R);
|
||||
return toTransformation(scale, 0.5, -scale, 0.5);
|
||||
}())
|
||||
});
|
||||
};
|
||||
|
||||
export const EPSG900913 = Util.extend({}, EPSG3857, {
|
||||
export const EPSG900913 = {
|
||||
...EPSG3857,
|
||||
code: 'EPSG:900913'
|
||||
});
|
||||
};
|
||||
|
@ -1,7 +1,6 @@
|
||||
import {Earth} from './CRS.Earth';
|
||||
import {LonLat} from '../projection/Projection.LonLat';
|
||||
import {toTransformation} from '../../geometry/Transformation';
|
||||
import * as Util from '../../core/Util';
|
||||
|
||||
/*
|
||||
* @namespace CRS
|
||||
@ -16,8 +15,9 @@ import * as Util from '../../core/Util';
|
||||
* or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.
|
||||
*/
|
||||
|
||||
export const EPSG4326 = Util.extend({}, Earth, {
|
||||
export const EPSG4326 = {
|
||||
...Earth,
|
||||
code: 'EPSG:4326',
|
||||
projection: LonLat,
|
||||
transformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)
|
||||
});
|
||||
};
|
||||
|
@ -1,5 +1,4 @@
|
||||
import {CRS} from './CRS';
|
||||
import * as Util from '../../core/Util';
|
||||
|
||||
/*
|
||||
* @namespace CRS
|
||||
@ -11,7 +10,8 @@ import * as Util from '../../core/Util';
|
||||
* meters.
|
||||
*/
|
||||
|
||||
export const Earth = Util.extend({}, CRS, {
|
||||
export const Earth = {
|
||||
...CRS,
|
||||
wrapLng: [-180, 180],
|
||||
|
||||
// Mean Earth Radius, as recommended for use by
|
||||
@ -30,4 +30,4 @@ export const Earth = Util.extend({}, CRS, {
|
||||
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
||||
return this.R * c;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -1,7 +1,6 @@
|
||||
import {CRS} from './CRS';
|
||||
import {LonLat} from '../projection/Projection.LonLat';
|
||||
import {toTransformation} from '../../geometry/Transformation';
|
||||
import * as Util from '../../core/Util';
|
||||
|
||||
/*
|
||||
* @namespace CRS
|
||||
@ -13,7 +12,8 @@ import * as Util from '../../core/Util';
|
||||
* simple euclidean distance.
|
||||
*/
|
||||
|
||||
export const Simple = Util.extend({}, CRS, {
|
||||
export const Simple = {
|
||||
...CRS,
|
||||
projection: LonLat,
|
||||
transformation: toTransformation(1, 0, -1, 0),
|
||||
|
||||
@ -33,4 +33,4 @@ export const Simple = Util.extend({}, CRS, {
|
||||
},
|
||||
|
||||
infinite: true
|
||||
});
|
||||
};
|
||||
|
@ -138,7 +138,7 @@ export const GeoJSON = FeatureGroup.extend({
|
||||
return this.eachLayer(this.resetStyle, this);
|
||||
}
|
||||
// reset any custom styles
|
||||
layer.options = Util.extend({}, layer.defaultOptions);
|
||||
layer.options = {...layer.defaultOptions};
|
||||
this._setLayerStyle(layer, this.options.style);
|
||||
return this;
|
||||
},
|
||||
@ -296,7 +296,7 @@ export function latLngsToCoords(latlngs, levelsDeep, closed, precision) {
|
||||
|
||||
export function getFeature(layer, newGeometry) {
|
||||
return layer.feature ?
|
||||
Util.extend({}, layer.feature, {geometry: newGeometry}) :
|
||||
{...layer.feature, geometry: newGeometry} :
|
||||
asFeature(newGeometry);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {TileLayer} from './TileLayer';
|
||||
import {extend, setOptions, getParamString} from '../../core/Util';
|
||||
import {setOptions, getParamString} from '../../core/Util';
|
||||
import Browser from '../../core/Browser';
|
||||
import {EPSG4326} from '../../geo/crs/CRS.EPSG4326';
|
||||
import {toBounds} from '../../geometry/Bounds';
|
||||
@ -69,7 +69,7 @@ export const TileLayerWMS = TileLayer.extend({
|
||||
|
||||
this._url = url;
|
||||
|
||||
const wmsParams = extend({}, this.defaultWmsParams);
|
||||
const wmsParams = {...this.defaultWmsParams};
|
||||
|
||||
// all keys that are not TileLayer options go to WMS params
|
||||
for (const i in options) {
|
||||
@ -119,7 +119,7 @@ export const TileLayerWMS = TileLayer.extend({
|
||||
// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).
|
||||
setParams(params, noRedraw) {
|
||||
|
||||
extend(this.wmsParams, params);
|
||||
Object.assign(this.wmsParams, params);
|
||||
|
||||
if (!noRedraw) {
|
||||
this.redraw();
|
||||
|
@ -193,7 +193,7 @@ export const TileLayer = GridLayer.extend({
|
||||
data['-y'] = invertedY;
|
||||
}
|
||||
|
||||
return Util.template(this._url, Util.extend(data, this.options));
|
||||
return Util.template(this._url, Object.assign(data, this.options));
|
||||
},
|
||||
|
||||
_tileOnLoad(done, tile) {
|
||||
|
@ -27,7 +27,7 @@ export const Circle = CircleMarker.extend({
|
||||
initialize(latlng, options, legacyOptions) {
|
||||
if (typeof options === 'number') {
|
||||
// Backwards compatibility with 0.7.x factory (latlng, radius, options?)
|
||||
options = Util.extend({}, legacyOptions, {radius: options});
|
||||
options = {...legacyOptions, radius: options};
|
||||
}
|
||||
Util.setOptions(this, options);
|
||||
this._latlng = toLatLng(latlng);
|
||||
|
@ -182,8 +182,8 @@ export const Map = Evented.extend({
|
||||
if (this._loaded && !options.reset && options !== true) {
|
||||
|
||||
if (options.animate !== undefined) {
|
||||
options.zoom = Util.extend({animate: options.animate}, options.zoom);
|
||||
options.pan = Util.extend({animate: options.animate, duration: options.duration}, options.pan);
|
||||
options.zoom = {animate: options.animate, ...options.zoom};
|
||||
options.pan = {animate: options.animate, duration: options.duration, ...options.pan};
|
||||
}
|
||||
|
||||
// try animating pan or zoom
|
||||
@ -553,7 +553,7 @@ export const Map = Evented.extend({
|
||||
invalidateSize(options) {
|
||||
if (!this._loaded) { return this; }
|
||||
|
||||
options = Util.extend({
|
||||
options = Object.assign({
|
||||
animate: false,
|
||||
pan: true
|
||||
}, options === true ? {animate: true} : options);
|
||||
@ -618,14 +618,15 @@ export const Map = Evented.extend({
|
||||
// See `Locate options` for more details.
|
||||
locate(options) {
|
||||
|
||||
options = this._locateOptions = Util.extend({
|
||||
options = this._locateOptions = {
|
||||
timeout: 10000,
|
||||
watch: false
|
||||
watch: false,
|
||||
// setView: false
|
||||
// maxZoom: <Number>
|
||||
// maximumAge: 0
|
||||
// enableHighAccuracy: false
|
||||
}, options);
|
||||
...options
|
||||
};
|
||||
|
||||
if (!('geolocation' in navigator)) {
|
||||
this._handleGeolocationError({
|
||||
@ -1413,7 +1414,7 @@ export const Map = Evented.extend({
|
||||
// Fired before mouse click on the map (sometimes useful when you
|
||||
// want something to happen on click before any existing click
|
||||
// handlers start running).
|
||||
const synth = Util.extend({}, e);
|
||||
const synth = {...e};
|
||||
synth.type = 'preclick';
|
||||
this._fireDOMEvent(synth, synth.type, canvasTargets);
|
||||
}
|
||||
|
Reference in New Issue
Block a user