@cesium/engine 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Build/Workers/{AttributeCompression-8a5a065e.js → AttributeCompression-f9f6c717.js} +1 -1
- package/Build/Workers/{AxisAlignedBoundingBox-379015ef.js → AxisAlignedBoundingBox-31fadcf0.js} +1 -1
- package/Build/Workers/{BoundingRectangle-57f2b24f.js → BoundingRectangle-995f0079.js} +1 -1
- package/Build/Workers/{BoxGeometry-ecabfc78.js → BoxGeometry-7eb1af60.js} +1 -1
- package/Build/Workers/{Color-14d1a36d.js → Color-2dc49658.js} +1 -1
- package/Build/Workers/{CoplanarPolygonGeometryLibrary-048c3c14.js → CoplanarPolygonGeometryLibrary-d7d972d6.js} +1 -1
- package/Build/Workers/{CorridorGeometryLibrary-520c8619.js → CorridorGeometryLibrary-1f5ef7b3.js} +1 -1
- package/Build/Workers/{CylinderGeometry-119068b8.js → CylinderGeometry-23c67a6c.js} +1 -1
- package/Build/Workers/{CylinderGeometryLibrary-135b0858.js → CylinderGeometryLibrary-7bf291b4.js} +1 -1
- package/Build/Workers/{EllipseGeometry-2dfc3523.js → EllipseGeometry-37014da4.js} +1 -1
- package/Build/Workers/{EllipseGeometryLibrary-0a1e0170.js → EllipseGeometryLibrary-92ab6b1e.js} +1 -1
- package/Build/Workers/{EllipseOutlineGeometry-c5251669.js → EllipseOutlineGeometry-12b6fef5.js} +1 -1
- package/Build/Workers/{EllipsoidGeodesic-dcff5cbd.js → EllipsoidGeodesic-5b3623dc.js} +1 -1
- package/Build/Workers/{EllipsoidGeometry-d10a5221.js → EllipsoidGeometry-508da15c.js} +1 -1
- package/Build/Workers/{EllipsoidOutlineGeometry-7039a0ae.js → EllipsoidOutlineGeometry-40d97455.js} +1 -1
- package/Build/Workers/{EllipsoidRhumbLine-b672d507.js → EllipsoidRhumbLine-ef872433.js} +1 -1
- package/Build/Workers/{EllipsoidTangentPlane-857186be.js → EllipsoidTangentPlane-46d4d9c2.js} +1 -1
- package/Build/Workers/{EncodedCartesian3-e8bbca36.js → EncodedCartesian3-57415c8a.js} +1 -1
- package/Build/Workers/{FrustumGeometry-400fa1b7.js → FrustumGeometry-38605e69.js} +31 -3
- package/Build/Workers/{GeometryAttribute-7a2de5c6.js → GeometryAttribute-a466e9c7.js} +1 -1
- package/Build/Workers/{GeometryInstance-3fb607b7.js → GeometryInstance-34d9e21e.js} +1 -1
- package/Build/Workers/{GeometryPipeline-916636fa.js → GeometryPipeline-dcf79306.js} +1 -1
- package/Build/Workers/{IndexDatatype-b8f3e09d.js → IndexDatatype-2643aa47.js} +1 -1
- package/Build/Workers/{IntersectionTests-b4d02d4d.js → IntersectionTests-88c49b2e.js} +1 -1
- package/Build/Workers/{Math-dad82b4d.js → Math-0a2ac845.js} +12 -2
- package/Build/Workers/{Matrix2-1e403d0e.js → Matrix2-e1298525.js} +1 -1
- package/Build/Workers/{Matrix3-fa806b97.js → Matrix3-41c58dde.js} +1 -1
- package/Build/Workers/{OrientedBoundingBox-96fe1752.js → OrientedBoundingBox-2dd47921.js} +1 -1
- package/Build/Workers/{Plane-c27e1ac6.js → Plane-4c3d403b.js} +1 -1
- package/Build/Workers/{PolygonGeometryLibrary-931f1ec6.js → PolygonGeometryLibrary-59126025.js} +1 -1
- package/Build/Workers/PolygonPipeline-1fe328c0.js +1344 -0
- package/Build/Workers/{PolylinePipeline-6d5c63e5.js → PolylinePipeline-896735cc.js} +1 -1
- package/Build/Workers/{PolylineVolumeGeometryLibrary-f068c1fb.js → PolylineVolumeGeometryLibrary-9c0639f7.js} +1 -1
- package/Build/Workers/{PrimitivePipeline-879f996a.js → PrimitivePipeline-fc1a47ff.js} +1 -1
- package/Build/Workers/{RectangleGeometryLibrary-2d6f36f3.js → RectangleGeometryLibrary-a23c9ebe.js} +1 -1
- package/Build/Workers/{TerrainEncoding-82882059.js → TerrainEncoding-51b8b33b.js} +1 -1
- package/Build/Workers/Transforms-bc45e707.js +14699 -0
- package/Build/Workers/{WallGeometryLibrary-db7a64fb.js → WallGeometryLibrary-007e9883.js} +1 -1
- package/Build/Workers/{WebMercatorProjection-76a3fcc0.js → WebMercatorProjection-13ed1a6e.js} +1 -1
- package/Build/Workers/{arrayRemoveDuplicates-fac118a8.js → arrayRemoveDuplicates-d2061e85.js} +1 -1
- package/Build/Workers/cesiumWorkerBootstrapper.js +1 -1
- package/Build/Workers/combineGeometry.js +1 -1
- package/Build/Workers/createBoxGeometry.js +1 -1
- package/Build/Workers/createBoxOutlineGeometry.js +1 -1
- package/Build/Workers/createCircleGeometry.js +1 -1
- package/Build/Workers/createCircleOutlineGeometry.js +1 -1
- package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
- package/Build/Workers/createCorridorGeometry.js +1 -1
- package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
- package/Build/Workers/createCylinderGeometry.js +1 -1
- package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
- package/Build/Workers/createEllipseGeometry.js +1 -1
- package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
- package/Build/Workers/createEllipsoidGeometry.js +1 -1
- package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
- package/Build/Workers/createFrustumGeometry.js +1 -1
- package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
- package/Build/Workers/createGeometry.js +1 -1
- package/Build/Workers/createGroundPolylineGeometry.js +1 -1
- package/Build/Workers/createPlaneGeometry.js +1 -1
- package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
- package/Build/Workers/createPolygonGeometry.js +1 -1
- package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
- package/Build/Workers/createPolylineGeometry.js +1 -1
- package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
- package/Build/Workers/createRectangleGeometry.js +1 -1
- package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
- package/Build/Workers/createSimplePolylineGeometry.js +1 -1
- package/Build/Workers/createSphereGeometry.js +1 -1
- package/Build/Workers/createSphereOutlineGeometry.js +1 -1
- package/Build/Workers/createVectorTileClampedPolylines.js +1 -1
- package/Build/Workers/createVectorTileGeometries.js +1 -1
- package/Build/Workers/createVectorTilePoints.js +1 -1
- package/Build/Workers/createVectorTilePolygons.js +1 -1
- package/Build/Workers/createVectorTilePolylines.js +1 -1
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
- package/Build/Workers/createVerticesFromHeightmap.js +5 -8
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +1 -1
- package/Build/Workers/createWallGeometry.js +1 -1
- package/Build/Workers/createWallOutlineGeometry.js +1 -1
- package/Build/Workers/decodeDraco.js +1 -1
- package/Build/Workers/decodeI3S.js +1 -1
- package/Build/Workers/package.js +1 -1
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
- package/Source/Core/BingMapsGeocoderService.js +19 -1
- package/Source/Core/CartographicGeocoderService.js +15 -0
- package/Source/Core/Credit.js +1 -1
- package/Source/Core/FrustumGeometry.js +3 -2
- package/Source/Core/GeocoderService.js +32 -1
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/IonGeocoderService.js +17 -2
- package/Source/Core/OpenCageGeocoderService.js +18 -1
- package/Source/Core/OrthographicFrustum.js +13 -0
- package/Source/Core/PeliasGeocoderService.js +14 -1
- package/Source/Core/PerspectiveFrustum.js +14 -0
- package/Source/Core/Request.js +3 -2
- package/Source/Core/RequestScheduler.js +9 -4
- package/Source/Core/Resource.js +228 -234
- package/Source/DataSources/DataSourceDisplay.js +2 -2
- package/Source/DataSources/EntityCluster.js +126 -128
- package/Source/DataSources/ModelVisualizer.js +5 -3
- package/Source/Renderer/UniformState.js +3 -2
- package/Source/Renderer/demodernizeShader.js +5 -5
- package/Source/Scene/ArcGisBaseMapType.js +12 -0
- package/Source/Scene/ArcGisMapServerImageryProvider.js +162 -20
- package/Source/Scene/ArcGisMapService.js +83 -0
- package/Source/Scene/Camera.js +8 -7
- package/Source/Scene/Cesium3DTile.js +4 -3
- package/Source/Scene/Cesium3DTileset.js +4 -4
- package/Source/Scene/CreditDisplay.js +112 -16
- package/Source/Scene/GlobeSurfaceTileProvider.js +4 -4
- package/Source/Scene/GltfJsonLoader.js +12 -0
- package/Source/Scene/GltfLoader.js +6 -37
- package/Source/Scene/IonImageryProvider.js +11 -11
- package/Source/Scene/Model/MaterialPipelineStage.js +12 -12
- package/Source/Scene/Model/Model.js +85 -44
- package/Source/Scene/Model/UniformType.js +1 -1
- package/Source/Scene/Picking.js +3 -2
- package/Source/Scene/QuadtreePrimitive.js +3 -2
- package/Source/Scene/SceneTransforms.js +3 -2
- package/Source/Scene/ScreenSpaceCameraController.js +1 -1
- package/Source/Scene/Vector3DTilePoints.js +25 -13
- package/Source/Shaders/AtmosphereCommon.glsl +51 -8
- package/Source/Shaders/AtmosphereCommon.js +51 -8
- package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl +1 -1
- package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js +1 -1
- package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.glsl +3 -3
- package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.js +3 -3
- package/Source/Widget/CesiumWidget.js +12 -0
- package/index.d.ts +207 -16
- package/index.js +286 -284
- package/package.json +4 -4
- package/Build/Workers/PolygonPipeline-32fc92cc.js +0 -1345
- package/Build/Workers/Transforms-9052372a.js +0 -14715
package/Source/Core/Resource.js
CHANGED
|
@@ -36,184 +36,6 @@ const xhrBlobSupported = (function () {
|
|
|
36
36
|
}
|
|
37
37
|
})();
|
|
38
38
|
|
|
39
|
-
/**
|
|
40
|
-
* Parses a query string and returns the object equivalent.
|
|
41
|
-
*
|
|
42
|
-
* @param {Uri} uri The Uri with a query object.
|
|
43
|
-
* @param {Resource} resource The Resource that will be assigned queryParameters.
|
|
44
|
-
* @param {boolean} merge If true, we'll merge with the resource's existing queryParameters. Otherwise they will be replaced.
|
|
45
|
-
* @param {boolean} preserveQueryParameters If true duplicate parameters will be concatenated into an array. If false, keys in uri will take precedence.
|
|
46
|
-
*
|
|
47
|
-
* @private
|
|
48
|
-
*/
|
|
49
|
-
function parseQuery(uri, resource, merge, preserveQueryParameters) {
|
|
50
|
-
const queryString = uri.query();
|
|
51
|
-
if (queryString.length === 0) {
|
|
52
|
-
return {};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
let query;
|
|
56
|
-
// Special case we run into where the querystring is just a string, not key/value pairs
|
|
57
|
-
if (queryString.indexOf("=") === -1) {
|
|
58
|
-
const result = {};
|
|
59
|
-
result[queryString] = undefined;
|
|
60
|
-
query = result;
|
|
61
|
-
} else {
|
|
62
|
-
query = queryToObject(queryString);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (merge) {
|
|
66
|
-
resource._queryParameters = combineQueryParameters(
|
|
67
|
-
query,
|
|
68
|
-
resource._queryParameters,
|
|
69
|
-
preserveQueryParameters
|
|
70
|
-
);
|
|
71
|
-
} else {
|
|
72
|
-
resource._queryParameters = query;
|
|
73
|
-
}
|
|
74
|
-
uri.search("");
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Converts a query object into a string.
|
|
79
|
-
*
|
|
80
|
-
* @param {Uri} uri The Uri object that will have the query object set.
|
|
81
|
-
* @param {Resource} resource The resource that has queryParameters
|
|
82
|
-
*
|
|
83
|
-
* @private
|
|
84
|
-
*/
|
|
85
|
-
function stringifyQuery(uri, resource) {
|
|
86
|
-
const queryObject = resource._queryParameters;
|
|
87
|
-
|
|
88
|
-
const keys = Object.keys(queryObject);
|
|
89
|
-
|
|
90
|
-
// We have 1 key with an undefined value, so this is just a string, not key/value pairs
|
|
91
|
-
if (keys.length === 1 && !defined(queryObject[keys[0]])) {
|
|
92
|
-
uri.search(keys[0]);
|
|
93
|
-
} else {
|
|
94
|
-
uri.search(objectToQuery(queryObject));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Clones a value if it is defined, otherwise returns the default value
|
|
100
|
-
*
|
|
101
|
-
* @param {*} [val] The value to clone.
|
|
102
|
-
* @param {*} [defaultVal] The default value.
|
|
103
|
-
*
|
|
104
|
-
* @returns {*} A clone of val or the defaultVal.
|
|
105
|
-
*
|
|
106
|
-
* @private
|
|
107
|
-
*/
|
|
108
|
-
function defaultClone(val, defaultVal) {
|
|
109
|
-
if (!defined(val)) {
|
|
110
|
-
return defaultVal;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return defined(val.clone) ? val.clone() : clone(val);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Checks to make sure the Resource isn't already being requested.
|
|
118
|
-
*
|
|
119
|
-
* @param {Request} request The request to check.
|
|
120
|
-
*
|
|
121
|
-
* @private
|
|
122
|
-
*/
|
|
123
|
-
function checkAndResetRequest(request) {
|
|
124
|
-
if (
|
|
125
|
-
request.state === RequestState.ISSUED ||
|
|
126
|
-
request.state === RequestState.ACTIVE
|
|
127
|
-
) {
|
|
128
|
-
throw new RuntimeError("The Resource is already being fetched.");
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
request.state = RequestState.UNISSUED;
|
|
132
|
-
request.deferred = undefined;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* This combines a map of query parameters.
|
|
137
|
-
*
|
|
138
|
-
* @param {object} q1 The first map of query parameters. Values in this map will take precedence if preserveQueryParameters is false.
|
|
139
|
-
* @param {object} q2 The second map of query parameters.
|
|
140
|
-
* @param {boolean} preserveQueryParameters If true duplicate parameters will be concatenated into an array. If false, keys in q1 will take precedence.
|
|
141
|
-
*
|
|
142
|
-
* @returns {object} The combined map of query parameters.
|
|
143
|
-
*
|
|
144
|
-
* @example
|
|
145
|
-
* const q1 = {
|
|
146
|
-
* a: 1,
|
|
147
|
-
* b: 2
|
|
148
|
-
* };
|
|
149
|
-
* const q2 = {
|
|
150
|
-
* a: 3,
|
|
151
|
-
* c: 4
|
|
152
|
-
* };
|
|
153
|
-
* const q3 = {
|
|
154
|
-
* b: [5, 6],
|
|
155
|
-
* d: 7
|
|
156
|
-
* }
|
|
157
|
-
*
|
|
158
|
-
* // Returns
|
|
159
|
-
* // {
|
|
160
|
-
* // a: [1, 3],
|
|
161
|
-
* // b: 2,
|
|
162
|
-
* // c: 4
|
|
163
|
-
* // };
|
|
164
|
-
* combineQueryParameters(q1, q2, true);
|
|
165
|
-
*
|
|
166
|
-
* // Returns
|
|
167
|
-
* // {
|
|
168
|
-
* // a: 1,
|
|
169
|
-
* // b: 2,
|
|
170
|
-
* // c: 4
|
|
171
|
-
* // };
|
|
172
|
-
* combineQueryParameters(q1, q2, false);
|
|
173
|
-
*
|
|
174
|
-
* // Returns
|
|
175
|
-
* // {
|
|
176
|
-
* // a: 1,
|
|
177
|
-
* // b: [2, 5, 6],
|
|
178
|
-
* // d: 7
|
|
179
|
-
* // };
|
|
180
|
-
* combineQueryParameters(q1, q3, true);
|
|
181
|
-
*
|
|
182
|
-
* // Returns
|
|
183
|
-
* // {
|
|
184
|
-
* // a: 1,
|
|
185
|
-
* // b: 2,
|
|
186
|
-
* // d: 7
|
|
187
|
-
* // };
|
|
188
|
-
* combineQueryParameters(q1, q3, false);
|
|
189
|
-
*
|
|
190
|
-
* @private
|
|
191
|
-
*/
|
|
192
|
-
function combineQueryParameters(q1, q2, preserveQueryParameters) {
|
|
193
|
-
if (!preserveQueryParameters) {
|
|
194
|
-
return combine(q1, q2);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
const result = clone(q1, true);
|
|
198
|
-
for (const param in q2) {
|
|
199
|
-
if (q2.hasOwnProperty(param)) {
|
|
200
|
-
let value = result[param];
|
|
201
|
-
const q2Value = q2[param];
|
|
202
|
-
if (defined(value)) {
|
|
203
|
-
if (!Array.isArray(value)) {
|
|
204
|
-
value = result[param] = [value];
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
result[param] = value.concat(q2Value);
|
|
208
|
-
} else {
|
|
209
|
-
result[param] = Array.isArray(q2Value) ? q2Value.slice() : q2Value;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
return result;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
39
|
/**
|
|
218
40
|
* @typedef {object} Resource.ConstructorOptions
|
|
219
41
|
*
|
|
@@ -227,6 +49,7 @@ function combineQueryParameters(q1, q2, preserveQueryParameters) {
|
|
|
227
49
|
* @property {Resource.RetryCallback} [retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.
|
|
228
50
|
* @property {number} [retryAttempts=0] The number of times the retryCallback should be called before giving up.
|
|
229
51
|
* @property {Request} [request] A Request object that will be used. Intended for internal use only.
|
|
52
|
+
* @property {boolean} [parseUrl=true] If true, parse the url for query parameters; otherwise store the url without change
|
|
230
53
|
*/
|
|
231
54
|
|
|
232
55
|
/**
|
|
@@ -319,13 +142,26 @@ function Resource(options) {
|
|
|
319
142
|
this.retryAttempts = defaultValue(options.retryAttempts, 0);
|
|
320
143
|
this._retryCount = 0;
|
|
321
144
|
|
|
322
|
-
const
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
145
|
+
const parseUrl = defaultValue(options.parseUrl, true);
|
|
146
|
+
if (parseUrl) {
|
|
147
|
+
this.parseUrl(options.url, true, true);
|
|
148
|
+
} else {
|
|
149
|
+
this._url = options.url;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
327
152
|
|
|
328
|
-
|
|
153
|
+
/**
|
|
154
|
+
* Clones a value if it is defined, otherwise returns the default value
|
|
155
|
+
*
|
|
156
|
+
* @param {object} [value] The value to clone.
|
|
157
|
+
* @param {object} [defaultValue] The default value.
|
|
158
|
+
*
|
|
159
|
+
* @returns {object} A clone of value or the defaultValue.
|
|
160
|
+
*
|
|
161
|
+
* @private
|
|
162
|
+
*/
|
|
163
|
+
function defaultClone(value, defaultValue) {
|
|
164
|
+
return defined(value) ? clone(value) : defaultValue;
|
|
329
165
|
}
|
|
330
166
|
|
|
331
167
|
/**
|
|
@@ -471,14 +307,7 @@ Object.defineProperties(Resource.prototype, {
|
|
|
471
307
|
return this.getUrlComponent(true, true);
|
|
472
308
|
},
|
|
473
309
|
set: function (value) {
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
parseQuery(uri, this, false);
|
|
477
|
-
|
|
478
|
-
// Remove the fragment as it's not sent with a request
|
|
479
|
-
uri.fragment("");
|
|
480
|
-
|
|
481
|
-
this._url = uri.toString();
|
|
310
|
+
this.parseUrl(value, false, false);
|
|
482
311
|
},
|
|
483
312
|
},
|
|
484
313
|
|
|
@@ -555,6 +384,138 @@ Resource.prototype.toString = function () {
|
|
|
555
384
|
return this.getUrlComponent(true, true);
|
|
556
385
|
};
|
|
557
386
|
|
|
387
|
+
/**
|
|
388
|
+
* Parse a url string, and store its info
|
|
389
|
+
*
|
|
390
|
+
* @param {string} url The input url string.
|
|
391
|
+
* @param {boolean} merge If true, we'll merge with the resource's existing queryParameters. Otherwise they will be replaced.
|
|
392
|
+
* @param {boolean} preserveQuery If true duplicate parameters will be concatenated into an array. If false, keys in url will take precedence.
|
|
393
|
+
* @param {string} [baseUrl] If supplied, and input url is a relative url, it will be made absolute relative to baseUrl
|
|
394
|
+
*
|
|
395
|
+
* @private
|
|
396
|
+
*/
|
|
397
|
+
Resource.prototype.parseUrl = function (url, merge, preserveQuery, baseUrl) {
|
|
398
|
+
let uri = new Uri(url);
|
|
399
|
+
const query = parseQueryString(uri.query());
|
|
400
|
+
|
|
401
|
+
this._queryParameters = merge
|
|
402
|
+
? combineQueryParameters(query, this.queryParameters, preserveQuery)
|
|
403
|
+
: query;
|
|
404
|
+
|
|
405
|
+
// Remove unneeded info from the Uri
|
|
406
|
+
uri.search("");
|
|
407
|
+
uri.fragment("");
|
|
408
|
+
|
|
409
|
+
if (defined(baseUrl) && uri.scheme() === "") {
|
|
410
|
+
uri = uri.absoluteTo(getAbsoluteUri(baseUrl));
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
this._url = uri.toString();
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Parses a query string and returns the object equivalent.
|
|
418
|
+
*
|
|
419
|
+
* @param {string} queryString The query string
|
|
420
|
+
* @returns {object}
|
|
421
|
+
*
|
|
422
|
+
* @private
|
|
423
|
+
*/
|
|
424
|
+
function parseQueryString(queryString) {
|
|
425
|
+
if (queryString.length === 0) {
|
|
426
|
+
return {};
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// Special case where the querystring is just a string, not key/value pairs
|
|
430
|
+
if (queryString.indexOf("=") === -1) {
|
|
431
|
+
return { [queryString]: undefined };
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
return queryToObject(queryString);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* This combines a map of query parameters.
|
|
439
|
+
*
|
|
440
|
+
* @param {object} q1 The first map of query parameters. Values in this map will take precedence if preserveQueryParameters is false.
|
|
441
|
+
* @param {object} q2 The second map of query parameters.
|
|
442
|
+
* @param {boolean} preserveQueryParameters If true duplicate parameters will be concatenated into an array. If false, keys in q1 will take precedence.
|
|
443
|
+
*
|
|
444
|
+
* @returns {object} The combined map of query parameters.
|
|
445
|
+
*
|
|
446
|
+
* @example
|
|
447
|
+
* const q1 = {
|
|
448
|
+
* a: 1,
|
|
449
|
+
* b: 2
|
|
450
|
+
* };
|
|
451
|
+
* const q2 = {
|
|
452
|
+
* a: 3,
|
|
453
|
+
* c: 4
|
|
454
|
+
* };
|
|
455
|
+
* const q3 = {
|
|
456
|
+
* b: [5, 6],
|
|
457
|
+
* d: 7
|
|
458
|
+
* }
|
|
459
|
+
*
|
|
460
|
+
* // Returns
|
|
461
|
+
* // {
|
|
462
|
+
* // a: [1, 3],
|
|
463
|
+
* // b: 2,
|
|
464
|
+
* // c: 4
|
|
465
|
+
* // };
|
|
466
|
+
* combineQueryParameters(q1, q2, true);
|
|
467
|
+
*
|
|
468
|
+
* // Returns
|
|
469
|
+
* // {
|
|
470
|
+
* // a: 1,
|
|
471
|
+
* // b: 2,
|
|
472
|
+
* // c: 4
|
|
473
|
+
* // };
|
|
474
|
+
* combineQueryParameters(q1, q2, false);
|
|
475
|
+
*
|
|
476
|
+
* // Returns
|
|
477
|
+
* // {
|
|
478
|
+
* // a: 1,
|
|
479
|
+
* // b: [2, 5, 6],
|
|
480
|
+
* // d: 7
|
|
481
|
+
* // };
|
|
482
|
+
* combineQueryParameters(q1, q3, true);
|
|
483
|
+
*
|
|
484
|
+
* // Returns
|
|
485
|
+
* // {
|
|
486
|
+
* // a: 1,
|
|
487
|
+
* // b: 2,
|
|
488
|
+
* // d: 7
|
|
489
|
+
* // };
|
|
490
|
+
* combineQueryParameters(q1, q3, false);
|
|
491
|
+
*
|
|
492
|
+
* @private
|
|
493
|
+
*/
|
|
494
|
+
function combineQueryParameters(q1, q2, preserveQueryParameters) {
|
|
495
|
+
if (!preserveQueryParameters) {
|
|
496
|
+
return combine(q1, q2);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
const result = clone(q1, true);
|
|
500
|
+
for (const param in q2) {
|
|
501
|
+
if (q2.hasOwnProperty(param)) {
|
|
502
|
+
let value = result[param];
|
|
503
|
+
const q2Value = q2[param];
|
|
504
|
+
if (defined(value)) {
|
|
505
|
+
if (!Array.isArray(value)) {
|
|
506
|
+
value = result[param] = [value];
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
result[param] = value.concat(q2Value);
|
|
510
|
+
} else {
|
|
511
|
+
result[param] = Array.isArray(q2Value) ? q2Value.slice() : q2Value;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
return result;
|
|
517
|
+
}
|
|
518
|
+
|
|
558
519
|
/**
|
|
559
520
|
* Returns the url, optional with the query string and processed by a proxy.
|
|
560
521
|
*
|
|
@@ -568,32 +529,56 @@ Resource.prototype.getUrlComponent = function (query, proxy) {
|
|
|
568
529
|
return this._url;
|
|
569
530
|
}
|
|
570
531
|
|
|
571
|
-
|
|
572
|
-
|
|
532
|
+
let url = this._url;
|
|
573
533
|
if (query) {
|
|
574
|
-
stringifyQuery(
|
|
534
|
+
url = `${url}${stringifyQuery(this.queryParameters)}`;
|
|
575
535
|
}
|
|
576
536
|
|
|
577
|
-
//
|
|
578
|
-
|
|
537
|
+
// Restore the placeholders, which may have been escaped in objectToQuery or elsewhere
|
|
538
|
+
url = url.replace(/%7B/g, "{").replace(/%7D/g, "}");
|
|
579
539
|
|
|
580
540
|
const templateValues = this._templateValues;
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
541
|
+
if (Object.keys(templateValues).length > 0) {
|
|
542
|
+
url = url.replace(/{(.*?)}/g, function (match, key) {
|
|
543
|
+
const replacement = templateValues[key];
|
|
544
|
+
if (defined(replacement)) {
|
|
545
|
+
// use the replacement value from templateValues if there is one...
|
|
546
|
+
return encodeURIComponent(replacement);
|
|
547
|
+
}
|
|
548
|
+
// otherwise leave it unchanged
|
|
549
|
+
return match;
|
|
550
|
+
});
|
|
551
|
+
}
|
|
590
552
|
|
|
591
553
|
if (proxy && defined(this.proxy)) {
|
|
592
554
|
url = this.proxy.getURL(url);
|
|
593
555
|
}
|
|
556
|
+
|
|
594
557
|
return url;
|
|
595
558
|
};
|
|
596
559
|
|
|
560
|
+
/**
|
|
561
|
+
* Converts a query object into a string.
|
|
562
|
+
*
|
|
563
|
+
* @param {object} queryObject The object with query parameters
|
|
564
|
+
* @returns {string}
|
|
565
|
+
*
|
|
566
|
+
* @private
|
|
567
|
+
*/
|
|
568
|
+
function stringifyQuery(queryObject) {
|
|
569
|
+
const keys = Object.keys(queryObject);
|
|
570
|
+
|
|
571
|
+
if (keys.length === 0) {
|
|
572
|
+
return "";
|
|
573
|
+
}
|
|
574
|
+
if (keys.length === 1 && !defined(queryObject[keys[0]])) {
|
|
575
|
+
// We have 1 key with an undefined value, so this is just a string, not key/value pairs
|
|
576
|
+
return `?${keys[0]}`;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
return `?${objectToQuery(queryObject)}`;
|
|
580
|
+
}
|
|
581
|
+
|
|
597
582
|
/**
|
|
598
583
|
* Combines the specified object and the existing query parameters. This allows you to add many parameters at once,
|
|
599
584
|
* as opposed to adding them one at a time to the queryParameters property. If a value is already set, it will be replaced with the new value.
|
|
@@ -667,30 +652,14 @@ Resource.prototype.getDerivedResource = function (options) {
|
|
|
667
652
|
resource._retryCount = 0;
|
|
668
653
|
|
|
669
654
|
if (defined(options.url)) {
|
|
670
|
-
const
|
|
671
|
-
|
|
672
|
-
const preserveQueryParameters = defaultValue(
|
|
673
|
-
options.preserveQueryParameters,
|
|
674
|
-
false
|
|
675
|
-
);
|
|
676
|
-
parseQuery(uri, resource, true, preserveQueryParameters);
|
|
677
|
-
|
|
678
|
-
// Remove the fragment as it's not sent with a request
|
|
679
|
-
uri.fragment("");
|
|
680
|
-
|
|
681
|
-
if (uri.scheme() !== "") {
|
|
682
|
-
resource._url = uri.toString();
|
|
683
|
-
} else {
|
|
684
|
-
resource._url = uri
|
|
685
|
-
.absoluteTo(new Uri(getAbsoluteUri(this._url)))
|
|
686
|
-
.toString();
|
|
687
|
-
}
|
|
655
|
+
const preserveQuery = defaultValue(options.preserveQueryParameters, false);
|
|
656
|
+
resource.parseUrl(options.url, true, preserveQuery, this._url);
|
|
688
657
|
}
|
|
689
658
|
|
|
690
659
|
if (defined(options.queryParameters)) {
|
|
691
660
|
resource._queryParameters = combine(
|
|
692
661
|
options.queryParameters,
|
|
693
|
-
resource.
|
|
662
|
+
resource.queryParameters
|
|
694
663
|
);
|
|
695
664
|
}
|
|
696
665
|
if (defined(options.templateValues)) {
|
|
@@ -753,8 +722,16 @@ Resource.prototype.retryOnError = function (error) {
|
|
|
753
722
|
*/
|
|
754
723
|
Resource.prototype.clone = function (result) {
|
|
755
724
|
if (!defined(result)) {
|
|
756
|
-
|
|
725
|
+
return new Resource({
|
|
757
726
|
url: this._url,
|
|
727
|
+
queryParameters: this.queryParameters,
|
|
728
|
+
templateValues: this.templateValues,
|
|
729
|
+
headers: this.headers,
|
|
730
|
+
proxy: this.proxy,
|
|
731
|
+
retryCallback: this.retryCallback,
|
|
732
|
+
retryAttempts: this.retryAttempts,
|
|
733
|
+
request: this.request.clone(),
|
|
734
|
+
parseUrl: false,
|
|
758
735
|
});
|
|
759
736
|
}
|
|
760
737
|
|
|
@@ -1301,7 +1278,8 @@ function fetchJsonp(resource, callbackParameterName, functionName) {
|
|
|
1301
1278
|
resource.setQueryParameters(callbackQuery);
|
|
1302
1279
|
|
|
1303
1280
|
const request = resource.request;
|
|
1304
|
-
|
|
1281
|
+
const url = resource.url;
|
|
1282
|
+
request.url = url;
|
|
1305
1283
|
request.requestFunction = function () {
|
|
1306
1284
|
const deferred = defer();
|
|
1307
1285
|
|
|
@@ -1316,11 +1294,7 @@ function fetchJsonp(resource, callbackParameterName, functionName) {
|
|
|
1316
1294
|
}
|
|
1317
1295
|
};
|
|
1318
1296
|
|
|
1319
|
-
Resource._Implementations.loadAndExecuteScript(
|
|
1320
|
-
resource.url,
|
|
1321
|
-
functionName,
|
|
1322
|
-
deferred
|
|
1323
|
-
);
|
|
1297
|
+
Resource._Implementations.loadAndExecuteScript(url, functionName, deferred);
|
|
1324
1298
|
return deferred.promise;
|
|
1325
1299
|
};
|
|
1326
1300
|
|
|
@@ -1376,7 +1350,8 @@ Resource.prototype._makeRequest = function (options) {
|
|
|
1376
1350
|
checkAndResetRequest(resource.request);
|
|
1377
1351
|
|
|
1378
1352
|
const request = resource.request;
|
|
1379
|
-
|
|
1353
|
+
const url = resource.url;
|
|
1354
|
+
request.url = url;
|
|
1380
1355
|
|
|
1381
1356
|
request.requestFunction = function () {
|
|
1382
1357
|
const responseType = options.responseType;
|
|
@@ -1386,7 +1361,7 @@ Resource.prototype._makeRequest = function (options) {
|
|
|
1386
1361
|
const data = options.data;
|
|
1387
1362
|
const deferred = defer();
|
|
1388
1363
|
const xhr = Resource._Implementations.loadWithXhr(
|
|
1389
|
-
|
|
1364
|
+
url,
|
|
1390
1365
|
responseType,
|
|
1391
1366
|
method,
|
|
1392
1367
|
data,
|
|
@@ -1433,6 +1408,25 @@ Resource.prototype._makeRequest = function (options) {
|
|
|
1433
1408
|
});
|
|
1434
1409
|
};
|
|
1435
1410
|
|
|
1411
|
+
/**
|
|
1412
|
+
* Checks to make sure the Resource isn't already being requested.
|
|
1413
|
+
*
|
|
1414
|
+
* @param {Request} request The request to check.
|
|
1415
|
+
*
|
|
1416
|
+
* @private
|
|
1417
|
+
*/
|
|
1418
|
+
function checkAndResetRequest(request) {
|
|
1419
|
+
if (
|
|
1420
|
+
request.state === RequestState.ISSUED ||
|
|
1421
|
+
request.state === RequestState.ACTIVE
|
|
1422
|
+
) {
|
|
1423
|
+
throw new RuntimeError("The Resource is already being fetched.");
|
|
1424
|
+
}
|
|
1425
|
+
|
|
1426
|
+
request.state = RequestState.UNISSUED;
|
|
1427
|
+
request.deferred = undefined;
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1436
1430
|
const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;
|
|
1437
1431
|
|
|
1438
1432
|
function decodeDataUriText(isBase64, data) {
|
|
@@ -313,7 +313,7 @@ DataSourceDisplay.prototype._postRender = function () {
|
|
|
313
313
|
|
|
314
314
|
const credit = dataSource.credit;
|
|
315
315
|
if (defined(credit)) {
|
|
316
|
-
frameState.creditDisplay.
|
|
316
|
+
frameState.creditDisplay.addCreditToNextFrame(credit);
|
|
317
317
|
}
|
|
318
318
|
|
|
319
319
|
// Credits from the resource that the user can't remove
|
|
@@ -321,7 +321,7 @@ DataSourceDisplay.prototype._postRender = function () {
|
|
|
321
321
|
if (defined(credits)) {
|
|
322
322
|
const creditCount = credits.length;
|
|
323
323
|
for (let c = 0; c < creditCount; c++) {
|
|
324
|
-
frameState.creditDisplay.
|
|
324
|
+
frameState.creditDisplay.addCreditToNextFrame(credits[c]);
|
|
325
325
|
}
|
|
326
326
|
}
|
|
327
327
|
}
|