Remove use of goog.array.map
This commit is contained in:
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
goog.provide('ol.format.GeoJSON');
|
goog.provide('ol.format.GeoJSON');
|
||||||
|
|
||||||
goog.require('goog.array');
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.object');
|
goog.require('goog.object');
|
||||||
goog.require('ol.Feature');
|
goog.require('ol.Feature');
|
||||||
@@ -90,7 +89,7 @@ ol.format.GeoJSON.readGeometryCollectionGeometry_ = function(
|
|||||||
object, opt_options) {
|
object, opt_options) {
|
||||||
goog.asserts.assert(object.type == 'GeometryCollection',
|
goog.asserts.assert(object.type == 'GeometryCollection',
|
||||||
'object.type should be GeometryCollection');
|
'object.type should be GeometryCollection');
|
||||||
var geometries = goog.array.map(object.geometries,
|
var geometries = object.geometries.map(
|
||||||
/**
|
/**
|
||||||
* @param {GeoJSONGeometry} geometry Geometry.
|
* @param {GeoJSONGeometry} geometry Geometry.
|
||||||
* @return {ol.geom.Geometry} geometry Geometry.
|
* @return {ol.geom.Geometry} geometry Geometry.
|
||||||
@@ -212,10 +211,9 @@ ol.format.GeoJSON.writeGeometryCollectionGeometry_ = function(
|
|||||||
geometry, opt_options) {
|
geometry, opt_options) {
|
||||||
goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection,
|
goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection,
|
||||||
'geometry should be an ol.geom.GeometryCollection');
|
'geometry should be an ol.geom.GeometryCollection');
|
||||||
var geometries = goog.array.map(
|
var geometries = geometry.getGeometriesArray().map(function(geometry) {
|
||||||
geometry.getGeometriesArray(), function(geometry) {
|
return ol.format.GeoJSON.writeGeometry_(geometry, opt_options);
|
||||||
return ol.format.GeoJSON.writeGeometry_(geometry, opt_options);
|
});
|
||||||
});
|
|
||||||
return /** @type {GeoJSONGeometryCollection} */ ({
|
return /** @type {GeoJSONGeometryCollection} */ ({
|
||||||
type: 'GeometryCollection',
|
type: 'GeometryCollection',
|
||||||
geometries: geometries
|
geometries: geometries
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
goog.provide('ol.proj.EPSG3857');
|
goog.provide('ol.proj.EPSG3857');
|
||||||
|
|
||||||
goog.require('goog.array');
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('ol.math');
|
goog.require('ol.math');
|
||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
@@ -91,11 +90,9 @@ ol.proj.EPSG3857.CODES = [
|
|||||||
* @const
|
* @const
|
||||||
* @type {Array.<ol.proj.Projection>}
|
* @type {Array.<ol.proj.Projection>}
|
||||||
*/
|
*/
|
||||||
ol.proj.EPSG3857.PROJECTIONS = goog.array.map(
|
ol.proj.EPSG3857.PROJECTIONS = ol.proj.EPSG3857.CODES.map(function(code) {
|
||||||
ol.proj.EPSG3857.CODES,
|
return new ol.proj.EPSG3857_(code);
|
||||||
function(code) {
|
});
|
||||||
return new ol.proj.EPSG3857_(code);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
goog.provide('ol.render.Box');
|
goog.provide('ol.render.Box');
|
||||||
|
|
||||||
goog.require('goog.Disposable');
|
goog.require('goog.Disposable');
|
||||||
goog.require('goog.array');
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.events');
|
goog.require('goog.events');
|
||||||
goog.require('ol.geom.Polygon');
|
goog.require('ol.geom.Polygon');
|
||||||
@@ -76,8 +75,7 @@ ol.render.Box.prototype.createGeometry_ = function() {
|
|||||||
endPixel,
|
endPixel,
|
||||||
[endPixel[0], startPixel[1]]
|
[endPixel[0], startPixel[1]]
|
||||||
];
|
];
|
||||||
var coordinates = goog.array.map(pixels,
|
var coordinates = pixels.map(this.map_.getCoordinateFromPixel, this.map_);
|
||||||
this.map_.getCoordinateFromPixel, this.map_);
|
|
||||||
// close the polygon
|
// close the polygon
|
||||||
coordinates[4] = coordinates[0].slice();
|
coordinates[4] = coordinates[0].slice();
|
||||||
return new ol.geom.Polygon([coordinates]);
|
return new ol.geom.Polygon([coordinates]);
|
||||||
|
|||||||
@@ -725,7 +725,7 @@ ol.render.canvas.Immediate.prototype.drawText = goog.abstractMethod;
|
|||||||
*/
|
*/
|
||||||
ol.render.canvas.Immediate.prototype.flush = function() {
|
ol.render.canvas.Immediate.prototype.flush = function() {
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = goog.array.map(goog.object.getKeys(this.callbacksByZIndex_), Number);
|
var zs = goog.object.getKeys(this.callbacksByZIndex_).map(Number);
|
||||||
goog.array.sort(zs);
|
goog.array.sort(zs);
|
||||||
var i, ii, callbacks, j, jj;
|
var i, ii, callbacks, j, jj;
|
||||||
for (i = 0, ii = zs.length; i < ii; ++i) {
|
for (i = 0, ii = zs.length; i < ii; ++i) {
|
||||||
|
|||||||
@@ -1960,7 +1960,7 @@ ol.render.canvas.ReplayGroup.prototype.replay = function(
|
|||||||
context, pixelRatio, transform, viewRotation, skippedFeaturesHash) {
|
context, pixelRatio, transform, viewRotation, skippedFeaturesHash) {
|
||||||
|
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number);
|
var zs = goog.object.getKeys(this.replaysByZIndex_).map(Number);
|
||||||
goog.array.sort(zs);
|
goog.array.sort(zs);
|
||||||
|
|
||||||
// setup clipping so that the parts of over-simplified geometries are not
|
// setup clipping so that the parts of over-simplified geometries are not
|
||||||
@@ -2015,7 +2015,7 @@ ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(
|
|||||||
context, transform, viewRotation, skippedFeaturesHash,
|
context, transform, viewRotation, skippedFeaturesHash,
|
||||||
featureCallback, opt_hitExtent) {
|
featureCallback, opt_hitExtent) {
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number);
|
var zs = goog.object.getKeys(this.replaysByZIndex_).map(Number);
|
||||||
goog.array.sort(zs, function(a, b) { return b - a; });
|
goog.array.sort(zs, function(a, b) { return b - a; });
|
||||||
|
|
||||||
var i, ii, j, replays, replay, result;
|
var i, ii, j, replays, replay, result;
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ goog.inherits(ol.render.webgl.Immediate, ol.render.VectorContext);
|
|||||||
*/
|
*/
|
||||||
ol.render.webgl.Immediate.prototype.flush = function() {
|
ol.render.webgl.Immediate.prototype.flush = function() {
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = goog.array.map(goog.object.getKeys(this.callbacksByZIndex_), Number);
|
var zs = goog.object.getKeys(this.callbacksByZIndex_).map(Number);
|
||||||
goog.array.sort(zs);
|
goog.array.sort(zs);
|
||||||
var i, ii, callbacks, j, jj;
|
var i, ii, callbacks, j, jj;
|
||||||
for (i = 0, ii = zs.length; i < ii; ++i) {
|
for (i = 0, ii = zs.length; i < ii; ++i) {
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame =
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number);
|
var zs = goog.object.getKeys(tilesToDrawByZ).map(Number);
|
||||||
goog.array.sort(zs);
|
goog.array.sort(zs);
|
||||||
var opaque = tileSource.getOpaque();
|
var opaque = tileSource.getOpaque();
|
||||||
var origin = ol.extent.getTopLeft(tileGrid.getTileCoordExtent(
|
var origin = ol.extent.getTopLeft(tileGrid.getTileCoordExtent(
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame =
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number);
|
var zs = goog.object.getKeys(tilesToDrawByZ).map(Number);
|
||||||
goog.array.sort(zs);
|
goog.array.sort(zs);
|
||||||
|
|
||||||
/** @type {Object.<number, boolean>} */
|
/** @type {Object.<number, boolean>} */
|
||||||
@@ -198,8 +198,7 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame =
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var tileLayerZKeys =
|
var tileLayerZKeys = goog.object.getKeys(this.tileLayerZs_).map(Number);
|
||||||
goog.array.map(goog.object.getKeys(this.tileLayerZs_), Number);
|
|
||||||
goog.array.sort(tileLayerZKeys);
|
goog.array.sort(tileLayerZKeys);
|
||||||
|
|
||||||
var i, ii, j, origin, resolution;
|
var i, ii, j, origin, resolution;
|
||||||
|
|||||||
@@ -286,7 +286,7 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame =
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number);
|
var zs = goog.object.getKeys(tilesToDrawByZ).map(Number);
|
||||||
goog.array.sort(zs);
|
goog.array.sort(zs);
|
||||||
var u_tileOffset = goog.vec.Vec4.createFloat32();
|
var u_tileOffset = goog.vec.Vec4.createFloat32();
|
||||||
var i, ii, sx, sy, tileKey, tilesToDraw, tx, ty;
|
var i, ii, sx, sy, tileKey, tilesToDraw, tx, ty;
|
||||||
|
|||||||
@@ -115,67 +115,63 @@ ol.source.BingMaps.prototype.handleImageryMetadataResponse =
|
|||||||
|
|
||||||
var culture = this.culture_;
|
var culture = this.culture_;
|
||||||
this.tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(
|
this.tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(
|
||||||
goog.array.map(
|
resource.imageUrlSubdomains.map(function(subdomain) {
|
||||||
resource.imageUrlSubdomains,
|
var quadKeyTileCoord = [0, 0, 0];
|
||||||
function(subdomain) {
|
var imageUrl = resource.imageUrl
|
||||||
var quadKeyTileCoord = [0, 0, 0];
|
.replace('{subdomain}', subdomain)
|
||||||
var imageUrl = resource.imageUrl
|
.replace('{culture}', culture);
|
||||||
.replace('{subdomain}', subdomain)
|
return (
|
||||||
.replace('{culture}', culture);
|
/**
|
||||||
return (
|
* @param {ol.TileCoord} tileCoord Tile coordinate.
|
||||||
/**
|
* @param {number} pixelRatio Pixel ratio.
|
||||||
* @param {ol.TileCoord} tileCoord Tile coordinate.
|
* @param {ol.proj.Projection} projection Projection.
|
||||||
* @param {number} pixelRatio Pixel ratio.
|
* @return {string|undefined} Tile URL.
|
||||||
* @param {ol.proj.Projection} projection Projection.
|
*/
|
||||||
* @return {string|undefined} Tile URL.
|
function(tileCoord, pixelRatio, projection) {
|
||||||
*/
|
goog.asserts.assert(ol.proj.equivalent(
|
||||||
function(tileCoord, pixelRatio, projection) {
|
projection, sourceProjection),
|
||||||
goog.asserts.assert(ol.proj.equivalent(
|
'projections are equivalent');
|
||||||
projection, sourceProjection),
|
if (goog.isNull(tileCoord)) {
|
||||||
'projections are equivalent');
|
return undefined;
|
||||||
if (goog.isNull(tileCoord)) {
|
} else {
|
||||||
return undefined;
|
ol.tilecoord.createOrUpdate(tileCoord[0], tileCoord[1],
|
||||||
} else {
|
-tileCoord[2] - 1, quadKeyTileCoord);
|
||||||
ol.tilecoord.createOrUpdate(tileCoord[0], tileCoord[1],
|
return imageUrl.replace('{quadkey}', ol.tilecoord.quadKey(
|
||||||
-tileCoord[2] - 1, quadKeyTileCoord);
|
quadKeyTileCoord));
|
||||||
return imageUrl.replace('{quadkey}', ol.tilecoord.quadKey(
|
}
|
||||||
quadKeyTileCoord));
|
});
|
||||||
}
|
}));
|
||||||
});
|
|
||||||
}));
|
|
||||||
|
|
||||||
if (resource.imageryProviders) {
|
if (resource.imageryProviders) {
|
||||||
var transform = ol.proj.getTransformFromProjections(
|
var transform = ol.proj.getTransformFromProjections(
|
||||||
ol.proj.get('EPSG:4326'), this.getProjection());
|
ol.proj.get('EPSG:4326'), this.getProjection());
|
||||||
|
|
||||||
var attributions = goog.array.map(
|
var attributions = resource.imageryProviders.map(function(imageryProvider) {
|
||||||
resource.imageryProviders,
|
var html = imageryProvider.attribution;
|
||||||
function(imageryProvider) {
|
/** @type {Object.<string, Array.<ol.TileRange>>} */
|
||||||
var html = imageryProvider.attribution;
|
var tileRanges = {};
|
||||||
/** @type {Object.<string, Array.<ol.TileRange>>} */
|
goog.array.forEach(
|
||||||
var tileRanges = {};
|
imageryProvider.coverageAreas,
|
||||||
goog.array.forEach(
|
function(coverageArea) {
|
||||||
imageryProvider.coverageAreas,
|
var minZ = coverageArea.zoomMin;
|
||||||
function(coverageArea) {
|
var maxZ = Math.min(coverageArea.zoomMax, maxZoom);
|
||||||
var minZ = coverageArea.zoomMin;
|
var bbox = coverageArea.bbox;
|
||||||
var maxZ = Math.min(coverageArea.zoomMax, maxZoom);
|
var epsg4326Extent = [bbox[1], bbox[0], bbox[3], bbox[2]];
|
||||||
var bbox = coverageArea.bbox;
|
var extent = ol.extent.applyTransform(
|
||||||
var epsg4326Extent = [bbox[1], bbox[0], bbox[3], bbox[2]];
|
epsg4326Extent, transform);
|
||||||
var extent = ol.extent.applyTransform(
|
var tileRange, z, zKey;
|
||||||
epsg4326Extent, transform);
|
for (z = minZ; z <= maxZ; ++z) {
|
||||||
var tileRange, z, zKey;
|
zKey = z.toString();
|
||||||
for (z = minZ; z <= maxZ; ++z) {
|
tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
|
||||||
zKey = z.toString();
|
if (zKey in tileRanges) {
|
||||||
tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
|
tileRanges[zKey].push(tileRange);
|
||||||
if (zKey in tileRanges) {
|
} else {
|
||||||
tileRanges[zKey].push(tileRange);
|
tileRanges[zKey] = [tileRange];
|
||||||
} else {
|
}
|
||||||
tileRanges[zKey] = [tileRange];
|
}
|
||||||
}
|
});
|
||||||
}
|
return new ol.Attribution({html: html, tileRanges: tileRanges});
|
||||||
});
|
});
|
||||||
return new ol.Attribution({html: html, tileRanges: tileRanges});
|
|
||||||
});
|
|
||||||
attributions.push(ol.source.BingMaps.TOS_ATTRIBUTION);
|
attributions.push(ol.source.BingMaps.TOS_ATTRIBUTION);
|
||||||
this.setAttributions(attributions);
|
this.setAttributions(attributions);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ ol.source.WMTS = function(options) {
|
|||||||
|
|
||||||
var tileUrlFunction = this.urls_.length > 0 ?
|
var tileUrlFunction = this.urls_.length > 0 ?
|
||||||
ol.TileUrlFunction.createFromTileUrlFunctions(
|
ol.TileUrlFunction.createFromTileUrlFunctions(
|
||||||
goog.array.map(this.urls_, createFromWMTSTemplate)) :
|
this.urls_.map(createFromWMTSTemplate)) :
|
||||||
ol.TileUrlFunction.nullTileUrlFunction;
|
ol.TileUrlFunction.nullTileUrlFunction;
|
||||||
|
|
||||||
goog.base(this, {
|
goog.base(this, {
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
goog.provide('ol.structs.RBush');
|
goog.provide('ol.structs.RBush');
|
||||||
|
|
||||||
goog.require('goog.array');
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.object');
|
goog.require('goog.object');
|
||||||
goog.require('ol.ext.rbush');
|
goog.require('ol.ext.rbush');
|
||||||
@@ -150,7 +149,7 @@ ol.structs.RBush.prototype.update = function(extent, value) {
|
|||||||
*/
|
*/
|
||||||
ol.structs.RBush.prototype.getAll = function() {
|
ol.structs.RBush.prototype.getAll = function() {
|
||||||
var items = this.rbush_.all();
|
var items = this.rbush_.all();
|
||||||
return goog.array.map(items, function(item) {
|
return items.map(function(item) {
|
||||||
return item[4];
|
return item[4];
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -163,7 +162,7 @@ ol.structs.RBush.prototype.getAll = function() {
|
|||||||
*/
|
*/
|
||||||
ol.structs.RBush.prototype.getInExtent = function(extent) {
|
ol.structs.RBush.prototype.getInExtent = function(extent) {
|
||||||
var items = this.rbush_.search(extent);
|
var items = this.rbush_.search(extent);
|
||||||
return goog.array.map(items, function(item) {
|
return items.map(function(item) {
|
||||||
return item[4];
|
return item[4];
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
+1
-3
@@ -1,7 +1,6 @@
|
|||||||
goog.provide('ol.TileCoord');
|
goog.provide('ol.TileCoord');
|
||||||
goog.provide('ol.tilecoord');
|
goog.provide('ol.tilecoord');
|
||||||
|
|
||||||
goog.require('goog.array');
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
|
|
||||||
@@ -35,10 +34,9 @@ ol.tilecoord.createFromString = function(str) {
|
|||||||
var v = str.split('/');
|
var v = str.split('/');
|
||||||
goog.asserts.assert(v.length === 3,
|
goog.asserts.assert(v.length === 3,
|
||||||
'must provide a string in "z/x/y" format, got "%s"', str);
|
'must provide a string in "z/x/y" format, got "%s"', str);
|
||||||
v = goog.array.map(v, function(e, i, a) {
|
return v.map(function(e) {
|
||||||
return parseInt(e, 10);
|
return parseInt(e, 10);
|
||||||
});
|
});
|
||||||
return v;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ ol.tilegrid.TileGrid = function(options) {
|
|||||||
if (options.sizes !== undefined) {
|
if (options.sizes !== undefined) {
|
||||||
goog.asserts.assert(options.sizes.length == this.resolutions_.length,
|
goog.asserts.assert(options.sizes.length == this.resolutions_.length,
|
||||||
'number of sizes and resolutions must be equal');
|
'number of sizes and resolutions must be equal');
|
||||||
this.fullTileRanges_ = goog.array.map(options.sizes, function(size, z) {
|
this.fullTileRanges_ = options.sizes.map(function(size, z) {
|
||||||
goog.asserts.assert(size[0] !== 0, 'width must not be 0');
|
goog.asserts.assert(size[0] !== 0, 'width must not be 0');
|
||||||
goog.asserts.assert(size[1] !== 0, 'height must not be 0');
|
goog.asserts.assert(size[1] !== 0, 'height must not be 0');
|
||||||
var tileRange = new ol.TileRange(
|
var tileRange = new ol.TileRange(
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
goog.provide('ol.TileUrlFunction');
|
goog.provide('ol.TileUrlFunction');
|
||||||
goog.provide('ol.TileUrlFunctionType');
|
goog.provide('ol.TileUrlFunctionType');
|
||||||
|
|
||||||
goog.require('goog.array');
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.math');
|
goog.require('goog.math');
|
||||||
goog.require('ol.TileCoord');
|
goog.require('ol.TileCoord');
|
||||||
@@ -73,7 +72,7 @@ ol.TileUrlFunction.createFromTemplate = function(template) {
|
|||||||
*/
|
*/
|
||||||
ol.TileUrlFunction.createFromTemplates = function(templates) {
|
ol.TileUrlFunction.createFromTemplates = function(templates) {
|
||||||
return ol.TileUrlFunction.createFromTileUrlFunctions(
|
return ol.TileUrlFunction.createFromTileUrlFunctions(
|
||||||
goog.array.map(templates, ol.TileUrlFunction.createFromTemplate));
|
templates.map(ol.TileUrlFunction.createFromTemplate));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ describe('ol.proj', function() {
|
|||||||
describe('projection equivalence', function() {
|
describe('projection equivalence', function() {
|
||||||
|
|
||||||
function _testAllEquivalent(codes) {
|
function _testAllEquivalent(codes) {
|
||||||
var projections = goog.array.map(codes, ol.proj.get);
|
var projections = codes.map(ol.proj.get);
|
||||||
goog.array.forEach(projections, function(source) {
|
goog.array.forEach(projections, function(source) {
|
||||||
goog.array.forEach(projections, function(destination) {
|
goog.array.forEach(projections, function(destination) {
|
||||||
expect(ol.proj.equivalent(source, destination)).to.be.ok();
|
expect(ol.proj.equivalent(source, destination)).to.be.ok();
|
||||||
|
|||||||
Reference in New Issue
Block a user