cesium 0.13.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.
- data/LICENSE.md +259 -0
- data/README.rdoc +90 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/Assets/Assets.profile.js +8 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
- data/app/assets/javascripts/Assets/Textures/NE2_LR_LC_SR_W_DR_2048.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/waterNormals.jpg +0 -0
- data/app/assets/javascripts/Assets/package.json +6 -0
- data/app/assets/javascripts/Cesium.js +320 -0
- data/app/assets/javascripts/Core/AnimationController.js +148 -0
- data/app/assets/javascripts/Core/AxisAlignedBoundingBox.js +243 -0
- data/app/assets/javascripts/Core/BoundingRectangle.js +364 -0
- data/app/assets/javascripts/Core/BoundingSphere.js +819 -0
- data/app/assets/javascripts/Core/BoxTessellator.js +93 -0
- data/app/assets/javascripts/Core/Cartesian2.js +762 -0
- data/app/assets/javascripts/Core/Cartesian3.js +861 -0
- data/app/assets/javascripts/Core/Cartesian4.js +762 -0
- data/app/assets/javascripts/Core/Cartographic.js +211 -0
- data/app/assets/javascripts/Core/CatmullRomSpline.js +232 -0
- data/app/assets/javascripts/Core/Clock.js +195 -0
- data/app/assets/javascripts/Core/ClockRange.js +37 -0
- data/app/assets/javascripts/Core/ClockStep.js +32 -0
- data/app/assets/javascripts/Core/Color.js +1629 -0
- data/app/assets/javascripts/Core/ComponentDatatype.js +119 -0
- data/app/assets/javascripts/Core/Core.profile.js +8 -0
- data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +198 -0
- data/app/assets/javascripts/Core/CubicRealPolynomial.js +251 -0
- data/app/assets/javascripts/Core/DefaultProxy.js +30 -0
- data/app/assets/javascripts/Core/DeveloperError.js +60 -0
- data/app/assets/javascripts/Core/EarthOrientationParameters.js +383 -0
- data/app/assets/javascripts/Core/EarthOrientationParametersSample.js +50 -0
- data/app/assets/javascripts/Core/Ellipsoid.js +539 -0
- data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +207 -0
- data/app/assets/javascripts/Core/EllipsoidalOccluder.js +151 -0
- data/app/assets/javascripts/Core/EncodedCartesian3.js +197 -0
- data/app/assets/javascripts/Core/Enumeration.js +67 -0
- data/app/assets/javascripts/Core/Event.js +122 -0
- data/app/assets/javascripts/Core/Extent.js +383 -0
- data/app/assets/javascripts/Core/ExtentTessellator.js +384 -0
- data/app/assets/javascripts/Core/FAR.js +13 -0
- data/app/assets/javascripts/Core/FeatureDetection.js +126 -0
- data/app/assets/javascripts/Core/Fullscreen.js +235 -0
- data/app/assets/javascripts/Core/GeographicProjection.js +107 -0
- data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +176 -0
- data/app/assets/javascripts/Core/HermiteSpline.js +234 -0
- data/app/assets/javascripts/Core/Iau2006XysData.js +259 -0
- data/app/assets/javascripts/Core/Iau2006XysSample.js +36 -0
- data/app/assets/javascripts/Core/IndexDatatype.js +28 -0
- data/app/assets/javascripts/Core/Intersect.js +40 -0
- data/app/assets/javascripts/Core/IntersectionTests.js +359 -0
- data/app/assets/javascripts/Core/Interval.js +27 -0
- data/app/assets/javascripts/Core/Iso8601.js +46 -0
- data/app/assets/javascripts/Core/JulianDate.js +1228 -0
- data/app/assets/javascripts/Core/KeyboardEventModifier.js +38 -0
- data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +96 -0
- data/app/assets/javascripts/Core/LeapSecond.js +158 -0
- data/app/assets/javascripts/Core/LinearApproximation.js +98 -0
- data/app/assets/javascripts/Core/Math.js +532 -0
- data/app/assets/javascripts/Core/Matrix2.js +833 -0
- data/app/assets/javascripts/Core/Matrix3.js +1099 -0
- data/app/assets/javascripts/Core/Matrix4.js +2164 -0
- data/app/assets/javascripts/Core/MeshFilters.js +568 -0
- data/app/assets/javascripts/Core/Occluder.js +474 -0
- data/app/assets/javascripts/Core/OrientationInterpolator.js +109 -0
- data/app/assets/javascripts/Core/PlaneTessellator.js +74 -0
- data/app/assets/javascripts/Core/PolygonPipeline.js +792 -0
- data/app/assets/javascripts/Core/PolylinePipeline.js +90 -0
- data/app/assets/javascripts/Core/PrimitiveType.js +80 -0
- data/app/assets/javascripts/Core/QuadraticRealPolynomial.js +146 -0
- data/app/assets/javascripts/Core/QuarticRealPolynomial.js +339 -0
- data/app/assets/javascripts/Core/Quaternion.js +947 -0
- data/app/assets/javascripts/Core/Queue.js +95 -0
- data/app/assets/javascripts/Core/Ray.js +64 -0
- data/app/assets/javascripts/Core/ReferenceFrame.js +25 -0
- data/app/assets/javascripts/Core/RequestErrorEvent.js +35 -0
- data/app/assets/javascripts/Core/RuntimeError.js +59 -0
- data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +658 -0
- data/app/assets/javascripts/Core/ScreenSpaceEventType.js +149 -0
- data/app/assets/javascripts/Core/Shapes.js +230 -0
- data/app/assets/javascripts/Core/Spherical.js +192 -0
- data/app/assets/javascripts/Core/TaskProcessor.js +131 -0
- data/app/assets/javascripts/Core/TimeConstants.js +85 -0
- data/app/assets/javascripts/Core/TimeInterval.js +305 -0
- data/app/assets/javascripts/Core/TimeIntervalCollection.js +543 -0
- data/app/assets/javascripts/Core/TimeStandard.js +31 -0
- data/app/assets/javascripts/Core/Tipsify.js +285 -0
- data/app/assets/javascripts/Core/Transforms.js +614 -0
- data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +102 -0
- data/app/assets/javascripts/Core/Visibility.js +38 -0
- data/app/assets/javascripts/Core/WebMercatorProjection.js +154 -0
- data/app/assets/javascripts/Core/WindingOrder.js +40 -0
- data/app/assets/javascripts/Core/binarySearch.js +69 -0
- data/app/assets/javascripts/Core/buildModuleUrl.js +77 -0
- data/app/assets/javascripts/Core/clone.js +21 -0
- data/app/assets/javascripts/Core/combine.js +81 -0
- data/app/assets/javascripts/Core/computeSunPosition.js +116 -0
- data/app/assets/javascripts/Core/createGuid.js +25 -0
- data/app/assets/javascripts/Core/defaultValue.js +22 -0
- data/app/assets/javascripts/Core/destroyObject.js +61 -0
- data/app/assets/javascripts/Core/freezeObject.js +20 -0
- data/app/assets/javascripts/Core/getImagePixels.js +46 -0
- data/app/assets/javascripts/Core/isLeapYear.js +30 -0
- data/app/assets/javascripts/Core/jsonp.js +116 -0
- data/app/assets/javascripts/Core/loadArrayBuffer.js +76 -0
- data/app/assets/javascripts/Core/loadImage.js +85 -0
- data/app/assets/javascripts/Core/loadJson.js +54 -0
- data/app/assets/javascripts/Core/loadText.js +78 -0
- data/app/assets/javascripts/Core/loadXML.js +76 -0
- data/app/assets/javascripts/Core/package.json +6 -0
- data/app/assets/javascripts/Core/pointInsideTriangle2D.js +41 -0
- data/app/assets/javascripts/Core/requestAnimationFrame.js +61 -0
- data/app/assets/javascripts/Core/throttleRequestByServer.js +74 -0
- data/app/assets/javascripts/Core/writeTextToCanvas.js +92 -0
- data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +254 -0
- data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +57 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +96 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +99 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +125 -0
- data/app/assets/javascripts/DynamicScene/CzmlColor.js +127 -0
- data/app/assets/javascripts/DynamicScene/CzmlDefaults.js +135 -0
- data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +59 -0
- data/app/assets/javascripts/DynamicScene/CzmlImage.js +61 -0
- data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +59 -0
- data/app/assets/javascripts/DynamicScene/CzmlNumber.js +82 -0
- data/app/assets/javascripts/DynamicScene/CzmlString.js +56 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +99 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +172 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +98 -0
- data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +59 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +245 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +347 -0
- data/app/assets/javascripts/DynamicScene/DynamicColorMaterial.js +78 -0
- data/app/assets/javascripts/DynamicScene/DynamicCone.js +291 -0
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +350 -0
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +389 -0
- data/app/assets/javascripts/DynamicScene/DynamicDirectionsProperty.js +163 -0
- data/app/assets/javascripts/DynamicScene/DynamicEllipsoid.js +158 -0
- data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +277 -0
- data/app/assets/javascripts/DynamicScene/DynamicImageMaterial.js +136 -0
- data/app/assets/javascripts/DynamicScene/DynamicLabel.js +286 -0
- data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +341 -0
- data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +125 -0
- data/app/assets/javascripts/DynamicScene/DynamicObject.js +364 -0
- data/app/assets/javascripts/DynamicScene/DynamicObjectCollection.js +137 -0
- data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +299 -0
- data/app/assets/javascripts/DynamicScene/DynamicPath.js +214 -0
- data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +402 -0
- data/app/assets/javascripts/DynamicScene/DynamicPoint.js +184 -0
- data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +323 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolygon.js +138 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +251 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +183 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +268 -0
- data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +525 -0
- data/app/assets/javascripts/DynamicScene/DynamicProperty.js +352 -0
- data/app/assets/javascripts/DynamicScene/DynamicPyramid.js +204 -0
- data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +302 -0
- data/app/assets/javascripts/DynamicScene/DynamicScene.profile.js +8 -0
- data/app/assets/javascripts/DynamicScene/DynamicVertexPositionsProperty.js +199 -0
- data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +155 -0
- data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +181 -0
- data/app/assets/javascripts/DynamicScene/package.json +6 -0
- data/app/assets/javascripts/DynamicScene/processCzml.js +77 -0
- data/app/assets/javascripts/Renderer/BlendEquation.js +52 -0
- data/app/assets/javascripts/Renderer/BlendFunction.js +158 -0
- data/app/assets/javascripts/Renderer/BlendingState.js +64 -0
- data/app/assets/javascripts/Renderer/Buffer.js +141 -0
- data/app/assets/javascripts/Renderer/BufferUsage.js +48 -0
- data/app/assets/javascripts/Renderer/ClearCommand.js +40 -0
- data/app/assets/javascripts/Renderer/CommandLists.js +42 -0
- data/app/assets/javascripts/Renderer/Context.js +2805 -0
- data/app/assets/javascripts/Renderer/CubeMap.js +358 -0
- data/app/assets/javascripts/Renderer/CubeMapFace.js +202 -0
- data/app/assets/javascripts/Renderer/CullFace.js +50 -0
- data/app/assets/javascripts/Renderer/DepthFunction.js +95 -0
- data/app/assets/javascripts/Renderer/DrawCommand.js +96 -0
- data/app/assets/javascripts/Renderer/Framebuffer.js +435 -0
- data/app/assets/javascripts/Renderer/MipmapHint.js +50 -0
- data/app/assets/javascripts/Renderer/PickFramebuffer.js +178 -0
- data/app/assets/javascripts/Renderer/PixelDatatype.js +86 -0
- data/app/assets/javascripts/Renderer/PixelFormat.js +113 -0
- data/app/assets/javascripts/Renderer/Renderbuffer.js +102 -0
- data/app/assets/javascripts/Renderer/RenderbufferFormat.js +77 -0
- data/app/assets/javascripts/Renderer/Renderer.profile.js +8 -0
- data/app/assets/javascripts/Renderer/ShaderCache.js +121 -0
- data/app/assets/javascripts/Renderer/ShaderProgram.js +2402 -0
- data/app/assets/javascripts/Renderer/StencilFunction.js +95 -0
- data/app/assets/javascripts/Renderer/StencilOperation.js +95 -0
- data/app/assets/javascripts/Renderer/Texture.js +395 -0
- data/app/assets/javascripts/Renderer/TextureAtlas.js +472 -0
- data/app/assets/javascripts/Renderer/TextureAtlasBuilder.js +133 -0
- data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +41 -0
- data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +77 -0
- data/app/assets/javascripts/Renderer/TextureWrap.js +50 -0
- data/app/assets/javascripts/Renderer/UniformDatatype.js +218 -0
- data/app/assets/javascripts/Renderer/UniformState.js +799 -0
- data/app/assets/javascripts/Renderer/VertexArray.js +365 -0
- data/app/assets/javascripts/Renderer/VertexArrayFacade.js +574 -0
- data/app/assets/javascripts/Renderer/VertexLayout.js +49 -0
- data/app/assets/javascripts/Renderer/loadCubeMap.js +92 -0
- data/app/assets/javascripts/Renderer/package.json +6 -0
- data/app/assets/javascripts/Scene/AnimationCollection.js +249 -0
- data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +384 -0
- data/app/assets/javascripts/Scene/Billboard.js +680 -0
- data/app/assets/javascripts/Scene/BillboardCollection.js +1209 -0
- data/app/assets/javascripts/Scene/BingMapsImageryProvider.js +460 -0
- data/app/assets/javascripts/Scene/BingMapsStyle.js +55 -0
- data/app/assets/javascripts/Scene/Camera.js +358 -0
- data/app/assets/javascripts/Scene/CameraColumbusViewMode.js +30 -0
- data/app/assets/javascripts/Scene/CameraController.js +1258 -0
- data/app/assets/javascripts/Scene/CameraEventAggregator.js +270 -0
- data/app/assets/javascripts/Scene/CameraEventType.js +53 -0
- data/app/assets/javascripts/Scene/CameraFlightPath.js +495 -0
- data/app/assets/javascripts/Scene/CentralBody.js +817 -0
- data/app/assets/javascripts/Scene/CentralBodySurface.js +1120 -0
- data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +107 -0
- data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +511 -0
- data/app/assets/javascripts/Scene/CompositePrimitive.js +454 -0
- data/app/assets/javascripts/Scene/CullingVolume.js +59 -0
- data/app/assets/javascripts/Scene/CustomSensorVolume.js +440 -0
- data/app/assets/javascripts/Scene/DiscardMissingTileImagePolicy.js +134 -0
- data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +412 -0
- data/app/assets/javascripts/Scene/EllipsoidTerrainProvider.js +182 -0
- data/app/assets/javascripts/Scene/FrameState.js +86 -0
- data/app/assets/javascripts/Scene/FrustumCommands.js +32 -0
- data/app/assets/javascripts/Scene/GeographicTilingScheme.js +265 -0
- data/app/assets/javascripts/Scene/HorizontalOrigin.js +39 -0
- data/app/assets/javascripts/Scene/Imagery.js +85 -0
- data/app/assets/javascripts/Scene/ImageryLayer.js +876 -0
- data/app/assets/javascripts/Scene/ImageryLayerCollection.js +403 -0
- data/app/assets/javascripts/Scene/ImageryProvider.js +185 -0
- data/app/assets/javascripts/Scene/ImageryProviderError.js +149 -0
- data/app/assets/javascripts/Scene/ImageryState.js +20 -0
- data/app/assets/javascripts/Scene/Label.js +706 -0
- data/app/assets/javascripts/Scene/LabelCollection.js +697 -0
- data/app/assets/javascripts/Scene/LabelStyle.js +39 -0
- data/app/assets/javascripts/Scene/Material.js +1177 -0
- data/app/assets/javascripts/Scene/NeverTileDiscardPolicy.js +38 -0
- data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +282 -0
- data/app/assets/javascripts/Scene/OrthographicFrustum.js +345 -0
- data/app/assets/javascripts/Scene/PerformanceDisplay.js +183 -0
- data/app/assets/javascripts/Scene/PerspectiveFrustum.js +239 -0
- data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +394 -0
- data/app/assets/javascripts/Scene/Polygon.js +886 -0
- data/app/assets/javascripts/Scene/Polyline.js +441 -0
- data/app/assets/javascripts/Scene/PolylineCollection.js +1532 -0
- data/app/assets/javascripts/Scene/Projections.js +93 -0
- data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +224 -0
- data/app/assets/javascripts/Scene/Scene.js +632 -0
- data/app/assets/javascripts/Scene/Scene.profile.js +8 -0
- data/app/assets/javascripts/Scene/SceneMode.js +51 -0
- data/app/assets/javascripts/Scene/SceneTransitioner.js +776 -0
- data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1063 -0
- data/app/assets/javascripts/Scene/SensorVolumeCollection.js +192 -0
- data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +295 -0
- data/app/assets/javascripts/Scene/SkyAtmosphere.js +239 -0
- data/app/assets/javascripts/Scene/SkyBox.js +231 -0
- data/app/assets/javascripts/Scene/TerrainProvider.js +229 -0
- data/app/assets/javascripts/Scene/TexturePool.js +154 -0
- data/app/assets/javascripts/Scene/Tile.js +322 -0
- data/app/assets/javascripts/Scene/TileDiscardPolicy.js +42 -0
- data/app/assets/javascripts/Scene/TileImagery.js +36 -0
- data/app/assets/javascripts/Scene/TileLoadQueue.js +123 -0
- data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +337 -0
- data/app/assets/javascripts/Scene/TileReplacementQueue.js +139 -0
- data/app/assets/javascripts/Scene/TileState.js +19 -0
- data/app/assets/javascripts/Scene/TilingScheme.js +213 -0
- data/app/assets/javascripts/Scene/VerticalOrigin.js +39 -0
- data/app/assets/javascripts/Scene/ViewportQuad.js +256 -0
- data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +374 -0
- data/app/assets/javascripts/Scene/WebMercatorTilingScheme.js +291 -0
- data/app/assets/javascripts/Scene/package.json +6 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionFS.glsl +30 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionFS.js +31 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +68 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +54 -0
- data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +927 -0
- data/app/assets/javascripts/Shaders/BuiltinFunctions.js +322 -0
- data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +106 -0
- data/app/assets/javascripts/Shaders/CentralBodyFS.js +82 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSDepth.glsl +20 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSDepth.js +22 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSPole.glsl +29 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSPole.js +28 -0
- data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +88 -0
- data/app/assets/javascripts/Shaders/CentralBodyVS.js +69 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSDepth.glsl +9 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSDepth.js +13 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSPole.glsl +12 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSPole.js +15 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +448 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +361 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +19 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +20 -0
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +886 -0
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +586 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +126 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +95 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.glsl +14 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.js +18 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +40 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.js +38 -0
- data/app/assets/javascripts/Shaders/EllipsoidVS.glsl +26 -0
- data/app/assets/javascripts/Shaders/EllipsoidVS.js +16 -0
- data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.glsl +25 -0
- data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.js +23 -0
- data/app/assets/javascripts/Shaders/Materials/BlobMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/BlobMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/BrickMaterial.glsl +42 -0
- data/app/assets/javascripts/Shaders/Materials/BrickMaterial.js +36 -0
- data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.glsl +29 -0
- data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.js +27 -0
- data/app/assets/javascripts/Shaders/Materials/CementMaterial.glsl +19 -0
- data/app/assets/javascripts/Shaders/Materials/CementMaterial.js +20 -0
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +38 -0
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +32 -0
- data/app/assets/javascripts/Shaders/Materials/DotMaterial.glsl +17 -0
- data/app/assets/javascripts/Shaders/Materials/DotMaterial.js +18 -0
- data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.glsl +23 -0
- data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.js +24 -0
- data/app/assets/javascripts/Shaders/Materials/FacetMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/FacetMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.glsl +12 -0
- data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.js +15 -0
- data/app/assets/javascripts/Shaders/Materials/GrassMaterial.glsl +28 -0
- data/app/assets/javascripts/Shaders/Materials/GrassMaterial.js +26 -0
- data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.glsl +19 -0
- data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.js +21 -0
- data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.glsl +13 -0
- data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.js +16 -0
- data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.glsl +14 -0
- data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.js +17 -0
- data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +29 -0
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +26 -0
- data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.glsl +17 -0
- data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/Water.glsl +91 -0
- data/app/assets/javascripts/Shaders/Materials/Water.js +60 -0
- data/app/assets/javascripts/Shaders/Materials/WoodMaterial.glsl +36 -0
- data/app/assets/javascripts/Shaders/Materials/WoodMaterial.js +31 -0
- data/app/assets/javascripts/Shaders/Noise.glsl +453 -0
- data/app/assets/javascripts/Shaders/Noise.js +242 -0
- data/app/assets/javascripts/Shaders/PolygonFS.glsl +27 -0
- data/app/assets/javascripts/Shaders/PolygonFS.js +23 -0
- data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +6 -0
- data/app/assets/javascripts/Shaders/PolygonFSPick.js +11 -0
- data/app/assets/javascripts/Shaders/PolygonVS.glsl +38 -0
- data/app/assets/javascripts/Shaders/PolygonVS.js +39 -0
- data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +30 -0
- data/app/assets/javascripts/Shaders/PolygonVSPick.js +32 -0
- data/app/assets/javascripts/Shaders/PolylineFS.glsl +6 -0
- data/app/assets/javascripts/Shaders/PolylineFS.js +11 -0
- data/app/assets/javascripts/Shaders/PolylineVS.glsl +34 -0
- data/app/assets/javascripts/Shaders/PolylineVS.js +35 -0
- data/app/assets/javascripts/Shaders/Ray.glsl +532 -0
- data/app/assets/javascripts/Shaders/Ray.js +357 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +26 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +22 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +11 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +14 -0
- data/app/assets/javascripts/Shaders/SensorVolume.glsl +43 -0
- data/app/assets/javascripts/Shaders/SensorVolume.js +31 -0
- data/app/assets/javascripts/Shaders/Shaders.profile.js +8 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +70 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +62 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereVS.glsl +131 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereVS.js +115 -0
- data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +10 -0
- data/app/assets/javascripts/Shaders/SkyBoxFS.js +14 -0
- data/app/assets/javascripts/Shaders/SkyBoxVS.glsl +10 -0
- data/app/assets/javascripts/Shaders/SkyBoxVS.js +14 -0
- data/app/assets/javascripts/Shaders/ViewportQuadFS.glsl +16 -0
- data/app/assets/javascripts/Shaders/ViewportQuadFS.js +17 -0
- data/app/assets/javascripts/Shaders/ViewportQuadVS.glsl +10 -0
- data/app/assets/javascripts/Shaders/ViewportQuadVS.js +14 -0
- data/app/assets/javascripts/Shaders/package.json +6 -0
- data/app/assets/javascripts/ThirdParty/ThirdParty.profile.js +8 -0
- data/app/assets/javascripts/ThirdParty/Tween.js +678 -0
- data/app/assets/javascripts/ThirdParty/Uri.js +277 -0
- data/app/assets/javascripts/ThirdParty/measureText.js +197 -0
- data/app/assets/javascripts/ThirdParty/package.json +6 -0
- data/app/assets/javascripts/ThirdParty/sprintf.js +319 -0
- data/app/assets/javascripts/ThirdParty/when.js +748 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +175 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +52 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +1237 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +4 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +349 -0
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.css +1 -0
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.js +47 -0
- data/app/assets/javascripts/Widgets/Dojo/checkForChromeFrame.js +71 -0
- data/app/assets/javascripts/Widgets/Images/Bing_Logo_51x19_White.png +0 -0
- data/app/assets/javascripts/Widgets/Images/Cesium_Logo_overlay.png +0 -0
- data/app/assets/javascripts/Widgets/Images/TimelineIcons.png +0 -0
- data/app/assets/javascripts/Widgets/Images/ajax-loader.gif +0 -0
- data/app/assets/javascripts/Widgets/Images/animationBar.png +0 -0
- data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
- data/app/assets/javascripts/Widgets/Timeline.css +113 -0
- data/app/assets/javascripts/Widgets/Timeline.js +629 -0
- data/app/assets/javascripts/Widgets/TimelineHighlightRange.js +51 -0
- data/app/assets/javascripts/Widgets/TimelineTrack.js +54 -0
- data/app/assets/javascripts/Widgets/Widgets.profile.js +8 -0
- data/app/assets/javascripts/Widgets/package.json +6 -0
- data/app/assets/javascripts/Workers/Workers.profile.js +8 -0
- data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +2015 -0
- data/app/assets/javascripts/Workers/createTaskProcessorWorker.js +55 -0
- data/app/assets/javascripts/Workers/createVerticesFromExtent.js +24 -0
- data/app/assets/javascripts/Workers/package.json +6 -0
- data/app/assets/javascripts/copyrightHeader.js +22 -0
- data/app/assets/javascripts/main.js +10 -0
- data/app/assets/stylesheets/cesium.css +4 -0
- data/app/controllers/cesium_controller.rb +4 -0
- data/app/helpers/cesium_helper.rb +2 -0
- data/app/views/cesium/index.html.erb +3 -0
- data/config/routes.rb +3 -0
- data/lib/cesium.rb +4 -0
- data/lib/cesium/engine.rb +4 -0
- data/lib/cesium/version.rb +3 -0
- data/lib/tasks/cesium_tasks.rake +4 -0
- data/test/cesium_test.rb +7 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/adapters/jquery-adapter.js.coffee +4 -0
- data/test/dummy/app/assets/javascripts/app.js.coffee +11 -0
- data/test/dummy/app/assets/javascripts/application.js.coffee +73 -0
- data/test/dummy/app/assets/stylesheets/application.css +12 -0
- data/test/dummy/app/controllers/application_controller.rb +4 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +21 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/requirejs.yml +10 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/functional/cesium_controller_test.rb +9 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/helpers/cesium_helper_test.rb +4 -0
- metadata +641 -0
@@ -0,0 +1,319 @@
|
|
1
|
+
/**
|
2
|
+
@license
|
3
|
+
sprintf.js from the php.js project - https://github.com/kvz/phpjs
|
4
|
+
Directly from https://github.com/kvz/phpjs/blob/master/functions/strings/sprintf.js
|
5
|
+
|
6
|
+
php.js is copyright 2012 Kevin van Zonneveld.
|
7
|
+
|
8
|
+
Portions copyright Brett Zamir (http://brett-zamir.me), Kevin van Zonneveld
|
9
|
+
(http://kevin.vanzonneveld.net), Onno Marsman, Theriault, Michael White
|
10
|
+
(http://getsprink.com), Waldo Malqui Silva, Paulo Freitas, Jack, Jonas
|
11
|
+
Raoni Soares Silva (http://www.jsfromhell.com), Philip Peterson, Legaev
|
12
|
+
Andrey, Ates Goral (http://magnetiq.com), Alex, Ratheous, Martijn Wieringa,
|
13
|
+
Rafa? Kukawski (http://blog.kukawski.pl), lmeyrick
|
14
|
+
(https://sourceforge.net/projects/bcmath-js/), Nate, Philippe Baumann,
|
15
|
+
Enrique Gonzalez, Webtoolkit.info (http://www.webtoolkit.info/), Carlos R.
|
16
|
+
L. Rodrigues (http://www.jsfromhell.com), Ash Searle
|
17
|
+
(http://hexmen.com/blog/), Jani Hartikainen, travc, Ole Vrijenhoek,
|
18
|
+
Erkekjetter, Michael Grier, Rafa? Kukawski (http://kukawski.pl), Johnny
|
19
|
+
Mast (http://www.phpvrouwen.nl), T.Wild, d3x,
|
20
|
+
http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,
|
21
|
+
Rafa? Kukawski (http://blog.kukawski.pl/), stag019, pilus, WebDevHobo
|
22
|
+
(http://webdevhobo.blogspot.com/), marrtins, GeekFG
|
23
|
+
(http://geekfg.blogspot.com), Andrea Giammarchi
|
24
|
+
(http://webreflection.blogspot.com), Arpad Ray (mailto:arpad@php.net),
|
25
|
+
gorthaur, Paul Smith, Tim de Koning (http://www.kingsquare.nl), Joris, Oleg
|
26
|
+
Eremeev, Steve Hilder, majak, gettimeofday, KELAN, Josh Fraser
|
27
|
+
(http://onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/),
|
28
|
+
Marc Palau, Martin
|
29
|
+
(http://www.erlenwiese.de/), Breaking Par Consulting Inc
|
30
|
+
(http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256CFB006C45F7),
|
31
|
+
Chris, Mirek Slugen, saulius, Alfonso Jimenez
|
32
|
+
(http://www.alfonsojimenez.com), Diplom@t (http://difane.com/), felix,
|
33
|
+
Mailfaker (http://www.weedem.fr/), Tyler Akins (http://rumkin.com), Caio
|
34
|
+
Ariede (http://caioariede.com), Robin, Kankrelune
|
35
|
+
(http://www.webfaktory.info/), Karol Kowalski, Imgen Tata
|
36
|
+
(http://www.myipdf.com/), mdsjack (http://www.mdsjack.bo.it), Dreamer,
|
37
|
+
Felix Geisendoerfer (http://www.debuggable.com/felix), Lars Fischer, AJ,
|
38
|
+
David, Aman Gupta, Michael White, Public Domain
|
39
|
+
(http://www.json.org/json2.js), Steven Levithan
|
40
|
+
(http://blog.stevenlevithan.com), Sakimori, Pellentesque Malesuada,
|
41
|
+
Thunder.m, Dj (http://phpjs.org/functions/htmlentities:425#comment_134018),
|
42
|
+
Steve Clay, David James, Francois, class_exists, nobbler, T. Wild, Itsacon
|
43
|
+
(http://www.itsacon.net/), date, Ole Vrijenhoek (http://www.nervous.nl/),
|
44
|
+
Fox, Raphael (Ao RUDLER), Marco, noname, Mateusz "loonquawl" Zalega, Frank
|
45
|
+
Forte, Arno, ger, mktime, john (http://www.jd-tech.net), Nick Kolosov
|
46
|
+
(http://sammy.ru), marc andreu, Scott Cariss, Douglas Crockford
|
47
|
+
(http://javascript.crockford.com), madipta, Slawomir Kaniecki,
|
48
|
+
ReverseSyntax, Nathan, Alex Wilson, kenneth, Bayron Guevara, Adam Wallner
|
49
|
+
(http://web2.bitbaro.hu/), paulo kuong, jmweb, Lincoln Ramsay, djmix,
|
50
|
+
Pyerre, Jon Hohle, Thiago Mata (http://thiagomata.blog.com), lmeyrick
|
51
|
+
(https://sourceforge.net/projects/bcmath-js/this.), Linuxworld, duncan,
|
52
|
+
Gilbert, Sanjoy Roy, Shingo, sankai, Oskar Larsson H?gfeldt
|
53
|
+
(http://oskar-lh.name/), Denny Wardhana, 0m3r, Everlasto, Subhasis Deb,
|
54
|
+
josh, jd, Pier Paolo Ramon (http://www.mastersoup.com/), P, merabi, Soren
|
55
|
+
Hansen, Eugene Bulkin (http://doubleaw.com/), Der Simon
|
56
|
+
(http://innerdom.sourceforge.net/), echo is bad, Ozh, XoraX
|
57
|
+
(http://www.xorax.info), EdorFaus, JB, J A R, Marc Jansen, Francesco, LH,
|
58
|
+
Stoyan Kyosev (http://www.svest.org/), nord_ua, omid
|
59
|
+
(http://phpjs.org/functions/380:380#comment_137122), Brad Touesnard, MeEtc
|
60
|
+
(http://yass.meetcweb.com), Peter-Paul Koch
|
61
|
+
(http://www.quirksmode.org/js/beat.html), Olivier Louvignes
|
62
|
+
(http://mg-crea.com/), T0bsn, Tim Wiel, Bryan Elliott, Jalal Berrami,
|
63
|
+
Martin, JT, David Randall, Thomas Beaucourt (http://www.webapp.fr), taith,
|
64
|
+
vlado houba, Pierre-Luc Paour, Kristof Coomans (SCK-CEN Belgian Nucleair
|
65
|
+
Research Centre), Martin Pool, Kirk Strobeck, Rick Waldron, Brant Messenger
|
66
|
+
(http://www.brantmessenger.com/), Devan Penner-Woelk, Saulo Vallory, Wagner
|
67
|
+
B. Soares, Artur Tchernychev, Valentina De Rosa, Jason Wong
|
68
|
+
(http://carrot.org/), Christoph, Daniel Esteban, strftime, Mick@el, rezna,
|
69
|
+
Simon Willison (http://simonwillison.net), Anton Ongson, Gabriel Paderni,
|
70
|
+
Marco van Oort, penutbutterjelly, Philipp Lenssen, Bjorn Roesbeke
|
71
|
+
(http://www.bjornroesbeke.be/), Bug?, Eric Nagel, Tomasz Wesolowski,
|
72
|
+
Evertjan Garretsen, Bobby Drake, Blues (http://tech.bluesmoon.info/), Luke
|
73
|
+
Godfrey, Pul, uestla, Alan C, Ulrich, Rafal Kukawski, Yves Sucaet,
|
74
|
+
sowberry, Norman "zEh" Fuchs, hitwork, Zahlii, johnrembo, Nick Callen,
|
75
|
+
Steven Levithan (stevenlevithan.com), ejsanders, Scott Baker, Brian Tafoya
|
76
|
+
(http://www.premasolutions.com/), Philippe Jausions
|
77
|
+
(http://pear.php.net/user/jausions), Aidan Lister
|
78
|
+
(http://aidanlister.com/), Rob, e-mike, HKM, ChaosNo1, metjay, strcasecmp,
|
79
|
+
strcmp, Taras Bogach, jpfle, Alexander Ermolaev
|
80
|
+
(http://snippets.dzone.com/user/AlexanderErmolaev), DxGx, kilops, Orlando,
|
81
|
+
dptr1988, Le Torbi, James (http://www.james-bell.co.uk/), Pedro Tainha
|
82
|
+
(http://www.pedrotainha.com), James, Arnout Kazemier
|
83
|
+
(http://www.3rd-Eden.com), Chris McMacken, gabriel paderni, Yannoo,
|
84
|
+
FGFEmperor, baris ozdil, Tod Gentille, Greg Frazier, jakes, 3D-GRAF, Allan
|
85
|
+
Jensen (http://www.winternet.no), Howard Yeend, Benjamin Lupton, davook,
|
86
|
+
daniel airton wermann (http://wermann.com.br), Atli T¨®r, Maximusya, Ryan
|
87
|
+
W Tenney (http://ryan.10e.us), Alexander M Beedie, fearphage
|
88
|
+
(http://http/my.opera.com/fearphage/), Nathan Sepulveda, Victor, Matteo,
|
89
|
+
Billy, stensi, Cord, Manish, T.J. Leahy, Riddler
|
90
|
+
(http://www.frontierwebdev.com/), Rafa? Kukawski, FremyCompany, Matt
|
91
|
+
Bradley, Tim de Koning, Luis Salazar (http://www.freaky-media.com/), Diogo
|
92
|
+
Resende, Rival, Andrej Pavlovic, Garagoth, Le Torbi
|
93
|
+
(http://www.letorbi.de/), Dino, Josep Sanz (http://www.ws3.es/), rem,
|
94
|
+
Russell Walker (http://www.nbill.co.uk/), Jamie Beck
|
95
|
+
(http://www.terabit.ca/), setcookie, Michael, YUI Library:
|
96
|
+
http://developer.yahoo.com/yui/docs/YAHOO.util.DateLocale.html, Blues at
|
97
|
+
http://hacks.bluesmoon.info/strftime/strftime.js, Ben
|
98
|
+
(http://benblume.co.uk/), DtTvB
|
99
|
+
(http://dt.in.th/2008-09-16.string-length-in-bytes.html), Andreas, William,
|
100
|
+
meo, incidence, Cagri Ekin, Amirouche, Amir Habibi
|
101
|
+
(http://www.residence-mixte.com/), Luke Smith (http://lucassmith.name),
|
102
|
+
Kheang Hok Chin (http://www.distantia.ca/), Jay Klehr, Lorenzo Pisani,
|
103
|
+
Tony, Yen-Wei Liu, Greenseed, mk.keck, Leslie Hoare, dude, booeyOH, Ben
|
104
|
+
Bryan
|
105
|
+
|
106
|
+
Licensed under the MIT (MIT-LICENSE.txt) license.
|
107
|
+
|
108
|
+
Permission is hereby granted, free of charge, to any person obtaining a
|
109
|
+
copy of this software and associated documentation files (the
|
110
|
+
"Software"), to deal in the Software without restriction, including
|
111
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
112
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
113
|
+
permit persons to whom the Software is furnished to do so, subject to
|
114
|
+
the following conditions:
|
115
|
+
|
116
|
+
The above copyright notice and this permission notice shall be included
|
117
|
+
in all copies or substantial portions of the Software.
|
118
|
+
|
119
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
120
|
+
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
121
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
122
|
+
IN NO EVENT SHALL KEVIN VAN ZONNEVELD BE LIABLE FOR ANY CLAIM, DAMAGES
|
123
|
+
OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
124
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
125
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
126
|
+
*/
|
127
|
+
|
128
|
+
/*global define*/
|
129
|
+
define(function() {
|
130
|
+
|
131
|
+
function sprintf () {
|
132
|
+
// http://kevin.vanzonneveld.net
|
133
|
+
// + original by: Ash Searle (http://hexmen.com/blog/)
|
134
|
+
// + namespaced by: Michael White (http://getsprink.com)
|
135
|
+
// + tweaked by: Jack
|
136
|
+
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
137
|
+
// + input by: Paulo Freitas
|
138
|
+
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
139
|
+
// + input by: Brett Zamir (http://brett-zamir.me)
|
140
|
+
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
141
|
+
// + improved by: Dj
|
142
|
+
// + improved by: Allidylls
|
143
|
+
// * example 1: sprintf("%01.2f", 123.1);
|
144
|
+
// * returns 1: 123.10
|
145
|
+
// * example 2: sprintf("[%10s]", 'monkey');
|
146
|
+
// * returns 2: '[ monkey]'
|
147
|
+
// * example 3: sprintf("[%'#10s]", 'monkey');
|
148
|
+
// * returns 3: '[####monkey]'
|
149
|
+
// * example 4: sprintf("%d", 123456789012345);
|
150
|
+
// * returns 4: '123456789012345'
|
151
|
+
var regex = /%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuideEfFgG])/g;
|
152
|
+
var a = arguments,
|
153
|
+
i = 0,
|
154
|
+
format = a[i++];
|
155
|
+
|
156
|
+
// pad()
|
157
|
+
var pad = function (str, len, chr, leftJustify) {
|
158
|
+
if (!chr) {
|
159
|
+
chr = ' ';
|
160
|
+
}
|
161
|
+
var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);
|
162
|
+
return leftJustify ? str + padding : padding + str;
|
163
|
+
};
|
164
|
+
|
165
|
+
// justify()
|
166
|
+
var justify = function (value, prefix, leftJustify, minWidth, zeroPad, customPadChar) {
|
167
|
+
var diff = minWidth - value.length;
|
168
|
+
if (diff > 0) {
|
169
|
+
if (leftJustify || !zeroPad) {
|
170
|
+
value = pad(value, minWidth, customPadChar, leftJustify);
|
171
|
+
} else {
|
172
|
+
value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
|
173
|
+
}
|
174
|
+
}
|
175
|
+
return value;
|
176
|
+
};
|
177
|
+
|
178
|
+
// formatBaseX()
|
179
|
+
var formatBaseX = function (value, base, prefix, leftJustify, minWidth, precision, zeroPad) {
|
180
|
+
// Note: casts negative numbers to positive ones
|
181
|
+
var number = value >>> 0;
|
182
|
+
prefix = prefix && number && {
|
183
|
+
'2': '0b',
|
184
|
+
'8': '0',
|
185
|
+
'16': '0x'
|
186
|
+
}[base] || '';
|
187
|
+
value = prefix + pad(number.toString(base), precision || 0, '0', false);
|
188
|
+
return justify(value, prefix, leftJustify, minWidth, zeroPad);
|
189
|
+
};
|
190
|
+
|
191
|
+
// formatString()
|
192
|
+
var formatString = function (value, leftJustify, minWidth, precision, zeroPad, customPadChar) {
|
193
|
+
if (precision != null) {
|
194
|
+
value = value.slice(0, precision);
|
195
|
+
}
|
196
|
+
return justify(value, '', leftJustify, minWidth, zeroPad, customPadChar);
|
197
|
+
};
|
198
|
+
|
199
|
+
// doFormat()
|
200
|
+
var doFormat = function (substring, valueIndex, flags, minWidth, _, precision, type) {
|
201
|
+
var number;
|
202
|
+
var prefix;
|
203
|
+
var method;
|
204
|
+
var textTransform;
|
205
|
+
var value;
|
206
|
+
|
207
|
+
if (substring == '%%') {
|
208
|
+
return '%';
|
209
|
+
}
|
210
|
+
|
211
|
+
// parse flags
|
212
|
+
var leftJustify = false,
|
213
|
+
positivePrefix = '',
|
214
|
+
zeroPad = false,
|
215
|
+
prefixBaseX = false,
|
216
|
+
customPadChar = ' ';
|
217
|
+
var flagsl = flags.length;
|
218
|
+
for (var j = 0; flags && j < flagsl; j++) {
|
219
|
+
switch (flags.charAt(j)) {
|
220
|
+
case ' ':
|
221
|
+
positivePrefix = ' ';
|
222
|
+
break;
|
223
|
+
case '+':
|
224
|
+
positivePrefix = '+';
|
225
|
+
break;
|
226
|
+
case '-':
|
227
|
+
leftJustify = true;
|
228
|
+
break;
|
229
|
+
case "'":
|
230
|
+
customPadChar = flags.charAt(j + 1);
|
231
|
+
break;
|
232
|
+
case '0':
|
233
|
+
zeroPad = true;
|
234
|
+
break;
|
235
|
+
case '#':
|
236
|
+
prefixBaseX = true;
|
237
|
+
break;
|
238
|
+
}
|
239
|
+
}
|
240
|
+
|
241
|
+
// parameters may be null, undefined, empty-string or real valued
|
242
|
+
// we want to ignore null, undefined and empty-string values
|
243
|
+
if (!minWidth) {
|
244
|
+
minWidth = 0;
|
245
|
+
} else if (minWidth == '*') {
|
246
|
+
minWidth = +a[i++];
|
247
|
+
} else if (minWidth.charAt(0) == '*') {
|
248
|
+
minWidth = +a[minWidth.slice(1, -1)];
|
249
|
+
} else {
|
250
|
+
minWidth = +minWidth;
|
251
|
+
}
|
252
|
+
|
253
|
+
// Note: undocumented perl feature:
|
254
|
+
if (minWidth < 0) {
|
255
|
+
minWidth = -minWidth;
|
256
|
+
leftJustify = true;
|
257
|
+
}
|
258
|
+
|
259
|
+
if (!isFinite(minWidth)) {
|
260
|
+
throw new Error('sprintf: (minimum-)width must be finite');
|
261
|
+
}
|
262
|
+
|
263
|
+
if (!precision) {
|
264
|
+
precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : undefined;
|
265
|
+
} else if (precision == '*') {
|
266
|
+
precision = +a[i++];
|
267
|
+
} else if (precision.charAt(0) == '*') {
|
268
|
+
precision = +a[precision.slice(1, -1)];
|
269
|
+
} else {
|
270
|
+
precision = +precision;
|
271
|
+
}
|
272
|
+
|
273
|
+
// grab value using valueIndex if required?
|
274
|
+
value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];
|
275
|
+
|
276
|
+
switch (type) {
|
277
|
+
case 's':
|
278
|
+
return formatString(String(value), leftJustify, minWidth, precision, zeroPad, customPadChar);
|
279
|
+
case 'c':
|
280
|
+
return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad);
|
281
|
+
case 'b':
|
282
|
+
return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
|
283
|
+
case 'o':
|
284
|
+
return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
|
285
|
+
case 'x':
|
286
|
+
return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
|
287
|
+
case 'X':
|
288
|
+
return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase();
|
289
|
+
case 'u':
|
290
|
+
return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
|
291
|
+
case 'i':
|
292
|
+
case 'd':
|
293
|
+
number = +value || 0;
|
294
|
+
number = Math.round(number - number % 1); // Plain Math.round doesn't just truncate
|
295
|
+
prefix = number < 0 ? '-' : positivePrefix;
|
296
|
+
value = prefix + pad(String(Math.abs(number)), precision, '0', false);
|
297
|
+
return justify(value, prefix, leftJustify, minWidth, zeroPad);
|
298
|
+
case 'e':
|
299
|
+
case 'E':
|
300
|
+
case 'f': // Should handle locales (as per setlocale)
|
301
|
+
case 'F':
|
302
|
+
case 'g':
|
303
|
+
case 'G':
|
304
|
+
number = +value;
|
305
|
+
prefix = number < 0 ? '-' : positivePrefix;
|
306
|
+
method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
|
307
|
+
textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];
|
308
|
+
value = prefix + Math.abs(number)[method](precision);
|
309
|
+
return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform]();
|
310
|
+
default:
|
311
|
+
return substring;
|
312
|
+
}
|
313
|
+
};
|
314
|
+
|
315
|
+
return format.replace(regex, doFormat);
|
316
|
+
}
|
317
|
+
|
318
|
+
return sprintf;
|
319
|
+
});
|
@@ -0,0 +1,748 @@
|
|
1
|
+
/**
|
2
|
+
@license
|
3
|
+
when.js - https://github.com/cujojs/when
|
4
|
+
|
5
|
+
MIT License (c) copyright B Cavalier & J Hann
|
6
|
+
|
7
|
+
* A lightweight CommonJS Promises/A and when() implementation
|
8
|
+
* when is part of the cujo.js family of libraries (http://cujojs.com/)
|
9
|
+
*
|
10
|
+
* Licensed under the MIT License at:
|
11
|
+
* http://www.opensource.org/licenses/mit-license.php
|
12
|
+
*
|
13
|
+
* @version 1.7.1
|
14
|
+
*/
|
15
|
+
|
16
|
+
(function(define) { 'use strict';
|
17
|
+
define(function () {
|
18
|
+
var reduceArray, slice, undef;
|
19
|
+
|
20
|
+
//
|
21
|
+
// Public API
|
22
|
+
//
|
23
|
+
|
24
|
+
when.defer = defer; // Create a deferred
|
25
|
+
when.resolve = resolve; // Create a resolved promise
|
26
|
+
when.reject = reject; // Create a rejected promise
|
27
|
+
|
28
|
+
when.join = join; // Join 2 or more promises
|
29
|
+
|
30
|
+
when.all = all; // Resolve a list of promises
|
31
|
+
when.map = map; // Array.map() for promises
|
32
|
+
when.reduce = reduce; // Array.reduce() for promises
|
33
|
+
|
34
|
+
when.any = any; // One-winner race
|
35
|
+
when.some = some; // Multi-winner race
|
36
|
+
|
37
|
+
when.chain = chain; // Make a promise trigger another resolver
|
38
|
+
|
39
|
+
when.isPromise = isPromise; // Determine if a thing is a promise
|
40
|
+
|
41
|
+
/**
|
42
|
+
* Register an observer for a promise or immediate value.
|
43
|
+
*
|
44
|
+
* @param {*} promiseOrValue
|
45
|
+
* @param {function?} [onFulfilled] callback to be called when promiseOrValue is
|
46
|
+
* successfully fulfilled. If promiseOrValue is an immediate value, callback
|
47
|
+
* will be invoked immediately.
|
48
|
+
* @param {function?} [onRejected] callback to be called when promiseOrValue is
|
49
|
+
* rejected.
|
50
|
+
* @param {function?} [onProgress] callback to be called when progress updates
|
51
|
+
* are issued for promiseOrValue.
|
52
|
+
* @returns {Promise} a new {@link Promise} that will complete with the return
|
53
|
+
* value of callback or errback or the completion value of promiseOrValue if
|
54
|
+
* callback and/or errback is not supplied.
|
55
|
+
*/
|
56
|
+
function when(promiseOrValue, onFulfilled, onRejected, onProgress) {
|
57
|
+
// Get a trusted promise for the input promiseOrValue, and then
|
58
|
+
// register promise handlers
|
59
|
+
return resolve(promiseOrValue).then(onFulfilled, onRejected, onProgress);
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Returns promiseOrValue if promiseOrValue is a {@link Promise}, a new Promise if
|
64
|
+
* promiseOrValue is a foreign promise, or a new, already-fulfilled {@link Promise}
|
65
|
+
* whose value is promiseOrValue if promiseOrValue is an immediate value.
|
66
|
+
*
|
67
|
+
* @param {*} promiseOrValue
|
68
|
+
* @returns Guaranteed to return a trusted Promise. If promiseOrValue is a when.js {@link Promise}
|
69
|
+
* returns promiseOrValue, otherwise, returns a new, already-resolved, when.js {@link Promise}
|
70
|
+
* whose resolution value is:
|
71
|
+
* * the resolution value of promiseOrValue if it's a foreign promise, or
|
72
|
+
* * promiseOrValue if it's a value
|
73
|
+
*/
|
74
|
+
function resolve(promiseOrValue) {
|
75
|
+
var promise, deferred;
|
76
|
+
|
77
|
+
if(promiseOrValue instanceof Promise) {
|
78
|
+
// It's a when.js promise, so we trust it
|
79
|
+
promise = promiseOrValue;
|
80
|
+
|
81
|
+
} else {
|
82
|
+
// It's not a when.js promise. See if it's a foreign promise or a value.
|
83
|
+
if(isPromise(promiseOrValue)) {
|
84
|
+
// It's a thenable, but we don't know where it came from, so don't trust
|
85
|
+
// its implementation entirely. Introduce a trusted middleman when.js promise
|
86
|
+
deferred = defer();
|
87
|
+
|
88
|
+
// IMPORTANT: This is the only place when.js should ever call .then() on an
|
89
|
+
// untrusted promise. Don't expose the return value to the untrusted promise
|
90
|
+
promiseOrValue.then(
|
91
|
+
function(value) { deferred.resolve(value); },
|
92
|
+
function(reason) { deferred.reject(reason); },
|
93
|
+
function(update) { deferred.progress(update); }
|
94
|
+
);
|
95
|
+
|
96
|
+
promise = deferred.promise;
|
97
|
+
|
98
|
+
} else {
|
99
|
+
// It's a value, not a promise. Create a resolved promise for it.
|
100
|
+
promise = fulfilled(promiseOrValue);
|
101
|
+
}
|
102
|
+
}
|
103
|
+
|
104
|
+
return promise;
|
105
|
+
}
|
106
|
+
|
107
|
+
/**
|
108
|
+
* Returns a rejected promise for the supplied promiseOrValue. The returned
|
109
|
+
* promise will be rejected with:
|
110
|
+
* - promiseOrValue, if it is a value, or
|
111
|
+
* - if promiseOrValue is a promise
|
112
|
+
* - promiseOrValue's value after it is fulfilled
|
113
|
+
* - promiseOrValue's reason after it is rejected
|
114
|
+
* @param {*} promiseOrValue the rejected value of the returned {@link Promise}
|
115
|
+
* @return {Promise} rejected {@link Promise}
|
116
|
+
*/
|
117
|
+
function reject(promiseOrValue) {
|
118
|
+
return when(promiseOrValue, rejected);
|
119
|
+
}
|
120
|
+
|
121
|
+
/**
|
122
|
+
* Trusted Promise constructor. A Promise created from this constructor is
|
123
|
+
* a trusted when.js promise. Any other duck-typed promise is considered
|
124
|
+
* untrusted.
|
125
|
+
* @constructor
|
126
|
+
* @name Promise
|
127
|
+
*/
|
128
|
+
function Promise(then) {
|
129
|
+
this.then = then;
|
130
|
+
}
|
131
|
+
|
132
|
+
Promise.prototype = {
|
133
|
+
/**
|
134
|
+
* Register a callback that will be called when a promise is
|
135
|
+
* fulfilled or rejected. Optionally also register a progress handler.
|
136
|
+
* Shortcut for .then(onFulfilledOrRejected, onFulfilledOrRejected, onProgress)
|
137
|
+
* @param {function?} [onFulfilledOrRejected]
|
138
|
+
* @param {function?} [onProgress]
|
139
|
+
* @return {Promise}
|
140
|
+
*/
|
141
|
+
always: function(onFulfilledOrRejected, onProgress) {
|
142
|
+
return this.then(onFulfilledOrRejected, onFulfilledOrRejected, onProgress);
|
143
|
+
},
|
144
|
+
|
145
|
+
/**
|
146
|
+
* Register a rejection handler. Shortcut for .then(undefined, onRejected)
|
147
|
+
* @param {function?} onRejected
|
148
|
+
* @return {Promise}
|
149
|
+
*/
|
150
|
+
otherwise: function(onRejected) {
|
151
|
+
return this.then(undef, onRejected);
|
152
|
+
},
|
153
|
+
|
154
|
+
/**
|
155
|
+
* Shortcut for .then(function() { return value; })
|
156
|
+
* @param {*} value
|
157
|
+
* @return {Promise} a promise that:
|
158
|
+
* - is fulfilled if value is not a promise, or
|
159
|
+
* - if value is a promise, will fulfill with its value, or reject
|
160
|
+
* with its reason.
|
161
|
+
*/
|
162
|
+
yield: function(value) {
|
163
|
+
return this.then(function() {
|
164
|
+
return value;
|
165
|
+
});
|
166
|
+
},
|
167
|
+
|
168
|
+
/**
|
169
|
+
* Assumes that this promise will fulfill with an array, and arranges
|
170
|
+
* for the onFulfilled to be called with the array as its argument list
|
171
|
+
* i.e. onFulfilled.spread(undefined, array).
|
172
|
+
* @param {function} onFulfilled function to receive spread arguments
|
173
|
+
* @return {Promise}
|
174
|
+
*/
|
175
|
+
spread: function(onFulfilled) {
|
176
|
+
return this.then(function(array) {
|
177
|
+
// array may contain promises, so resolve its contents.
|
178
|
+
return all(array, function(array) {
|
179
|
+
return onFulfilled.apply(undef, array);
|
180
|
+
});
|
181
|
+
});
|
182
|
+
}
|
183
|
+
};
|
184
|
+
|
185
|
+
/**
|
186
|
+
* Create an already-resolved promise for the supplied value
|
187
|
+
* @private
|
188
|
+
*
|
189
|
+
* @param {*} value
|
190
|
+
* @return {Promise} fulfilled promise
|
191
|
+
*/
|
192
|
+
function fulfilled(value) {
|
193
|
+
var p = new Promise(function(onFulfilled) {
|
194
|
+
// TODO: Promises/A+ check typeof onFulfilled
|
195
|
+
try {
|
196
|
+
return resolve(onFulfilled ? onFulfilled(value) : value);
|
197
|
+
} catch(e) {
|
198
|
+
return rejected(e);
|
199
|
+
}
|
200
|
+
});
|
201
|
+
|
202
|
+
return p;
|
203
|
+
}
|
204
|
+
|
205
|
+
/**
|
206
|
+
* Create an already-rejected {@link Promise} with the supplied
|
207
|
+
* rejection reason.
|
208
|
+
* @private
|
209
|
+
*
|
210
|
+
* @param {*} reason
|
211
|
+
* @return {Promise} rejected promise
|
212
|
+
*/
|
213
|
+
function rejected(reason) {
|
214
|
+
var p = new Promise(function(_, onRejected) {
|
215
|
+
// TODO: Promises/A+ check typeof onRejected
|
216
|
+
try {
|
217
|
+
return onRejected ? resolve(onRejected(reason)) : rejected(reason);
|
218
|
+
} catch(e) {
|
219
|
+
return rejected(e);
|
220
|
+
}
|
221
|
+
});
|
222
|
+
|
223
|
+
return p;
|
224
|
+
}
|
225
|
+
|
226
|
+
/**
|
227
|
+
* Creates a new, Deferred with fully isolated resolver and promise parts,
|
228
|
+
* either or both of which may be given out safely to consumers.
|
229
|
+
* The Deferred itself has the full API: resolve, reject, progress, and
|
230
|
+
* then. The resolver has resolve, reject, and progress. The promise
|
231
|
+
* only has then.
|
232
|
+
*
|
233
|
+
* @return {Deferred}
|
234
|
+
*/
|
235
|
+
function defer() {
|
236
|
+
var deferred, promise, handlers, progressHandlers,
|
237
|
+
_then, _progress, _resolve;
|
238
|
+
|
239
|
+
/**
|
240
|
+
* The promise for the new deferred
|
241
|
+
* @type {Promise}
|
242
|
+
*/
|
243
|
+
promise = new Promise(then);
|
244
|
+
|
245
|
+
/**
|
246
|
+
* The full Deferred object, with {@link Promise} and {@link Resolver} parts
|
247
|
+
* @class Deferred
|
248
|
+
* @name Deferred
|
249
|
+
*/
|
250
|
+
deferred = {
|
251
|
+
then: then, // DEPRECATED: use deferred.promise.then
|
252
|
+
resolve: promiseResolve,
|
253
|
+
reject: promiseReject,
|
254
|
+
// TODO: Consider renaming progress() to notify()
|
255
|
+
progress: promiseProgress,
|
256
|
+
|
257
|
+
promise: promise,
|
258
|
+
|
259
|
+
resolver: {
|
260
|
+
resolve: promiseResolve,
|
261
|
+
reject: promiseReject,
|
262
|
+
progress: promiseProgress
|
263
|
+
}
|
264
|
+
};
|
265
|
+
|
266
|
+
handlers = [];
|
267
|
+
progressHandlers = [];
|
268
|
+
|
269
|
+
/**
|
270
|
+
* Pre-resolution then() that adds the supplied callback, errback, and progback
|
271
|
+
* functions to the registered listeners
|
272
|
+
* @private
|
273
|
+
*
|
274
|
+
* @param {function?} [onFulfilled] resolution handler
|
275
|
+
* @param {function?} [onRejected] rejection handler
|
276
|
+
* @param {function?} [onProgress] progress handler
|
277
|
+
*/
|
278
|
+
_then = function(onFulfilled, onRejected, onProgress) {
|
279
|
+
// TODO: Promises/A+ check typeof onFulfilled, onRejected, onProgress
|
280
|
+
var deferred, progressHandler;
|
281
|
+
|
282
|
+
deferred = defer();
|
283
|
+
|
284
|
+
progressHandler = typeof onProgress === 'function'
|
285
|
+
? function(update) {
|
286
|
+
try {
|
287
|
+
// Allow progress handler to transform progress event
|
288
|
+
deferred.progress(onProgress(update));
|
289
|
+
} catch(e) {
|
290
|
+
// Use caught value as progress
|
291
|
+
deferred.progress(e);
|
292
|
+
}
|
293
|
+
}
|
294
|
+
: function(update) { deferred.progress(update); };
|
295
|
+
|
296
|
+
handlers.push(function(promise) {
|
297
|
+
promise.then(onFulfilled, onRejected)
|
298
|
+
.then(deferred.resolve, deferred.reject, progressHandler);
|
299
|
+
});
|
300
|
+
|
301
|
+
progressHandlers.push(progressHandler);
|
302
|
+
|
303
|
+
return deferred.promise;
|
304
|
+
};
|
305
|
+
|
306
|
+
/**
|
307
|
+
* Issue a progress event, notifying all progress listeners
|
308
|
+
* @private
|
309
|
+
* @param {*} update progress event payload to pass to all listeners
|
310
|
+
*/
|
311
|
+
_progress = function(update) {
|
312
|
+
processQueue(progressHandlers, update);
|
313
|
+
return update;
|
314
|
+
};
|
315
|
+
|
316
|
+
/**
|
317
|
+
* Transition from pre-resolution state to post-resolution state, notifying
|
318
|
+
* all listeners of the resolution or rejection
|
319
|
+
* @private
|
320
|
+
* @param {*} value the value of this deferred
|
321
|
+
*/
|
322
|
+
_resolve = function(value) {
|
323
|
+
value = resolve(value);
|
324
|
+
|
325
|
+
// Replace _then with one that directly notifies with the result.
|
326
|
+
_then = value.then;
|
327
|
+
// Replace _resolve so that this Deferred can only be resolved once
|
328
|
+
_resolve = resolve;
|
329
|
+
// Make _progress a noop, to disallow progress for the resolved promise.
|
330
|
+
_progress = noop;
|
331
|
+
|
332
|
+
// Notify handlers
|
333
|
+
processQueue(handlers, value);
|
334
|
+
|
335
|
+
// Free progressHandlers array since we'll never issue progress events
|
336
|
+
progressHandlers = handlers = undef;
|
337
|
+
|
338
|
+
return value;
|
339
|
+
};
|
340
|
+
|
341
|
+
return deferred;
|
342
|
+
|
343
|
+
/**
|
344
|
+
* Wrapper to allow _then to be replaced safely
|
345
|
+
* @param {function?} [onFulfilled] resolution handler
|
346
|
+
* @param {function?} [onRejected] rejection handler
|
347
|
+
* @param {function?} [onProgress] progress handler
|
348
|
+
* @return {Promise} new promise
|
349
|
+
*/
|
350
|
+
function then(onFulfilled, onRejected, onProgress) {
|
351
|
+
// TODO: Promises/A+ check typeof onFulfilled, onRejected, onProgress
|
352
|
+
return _then(onFulfilled, onRejected, onProgress);
|
353
|
+
}
|
354
|
+
|
355
|
+
/**
|
356
|
+
* Wrapper to allow _resolve to be replaced
|
357
|
+
*/
|
358
|
+
function promiseResolve(val) {
|
359
|
+
return _resolve(val);
|
360
|
+
}
|
361
|
+
|
362
|
+
/**
|
363
|
+
* Wrapper to allow _reject to be replaced
|
364
|
+
*/
|
365
|
+
function promiseReject(err) {
|
366
|
+
return _resolve(rejected(err));
|
367
|
+
}
|
368
|
+
|
369
|
+
/**
|
370
|
+
* Wrapper to allow _progress to be replaced
|
371
|
+
*/
|
372
|
+
function promiseProgress(update) {
|
373
|
+
return _progress(update);
|
374
|
+
}
|
375
|
+
}
|
376
|
+
|
377
|
+
/**
|
378
|
+
* Determines if promiseOrValue is a promise or not. Uses the feature
|
379
|
+
* test from http://wiki.commonjs.org/wiki/Promises/A to determine if
|
380
|
+
* promiseOrValue is a promise.
|
381
|
+
*
|
382
|
+
* @param {*} promiseOrValue anything
|
383
|
+
* @returns {boolean} true if promiseOrValue is a {@link Promise}
|
384
|
+
*/
|
385
|
+
function isPromise(promiseOrValue) {
|
386
|
+
return promiseOrValue && typeof promiseOrValue.then === 'function';
|
387
|
+
}
|
388
|
+
|
389
|
+
/**
|
390
|
+
* Initiates a competitive race, returning a promise that will resolve when
|
391
|
+
* howMany of the supplied promisesOrValues have resolved, or will reject when
|
392
|
+
* it becomes impossible for howMany to resolve, for example, when
|
393
|
+
* (promisesOrValues.length - howMany) + 1 input promises reject.
|
394
|
+
*
|
395
|
+
* @param {Array} promisesOrValues array of anything, may contain a mix
|
396
|
+
* of promises and values
|
397
|
+
* @param howMany {number} number of promisesOrValues to resolve
|
398
|
+
* @param {function?} [onFulfilled] resolution handler
|
399
|
+
* @param {function?} [onRejected] rejection handler
|
400
|
+
* @param {function?} [onProgress] progress handler
|
401
|
+
* @returns {Promise} promise that will resolve to an array of howMany values that
|
402
|
+
* resolved first, or will reject with an array of (promisesOrValues.length - howMany) + 1
|
403
|
+
* rejection reasons.
|
404
|
+
*/
|
405
|
+
function some(promisesOrValues, howMany, onFulfilled, onRejected, onProgress) {
|
406
|
+
|
407
|
+
checkCallbacks(2, arguments);
|
408
|
+
|
409
|
+
return when(promisesOrValues, function(promisesOrValues) {
|
410
|
+
|
411
|
+
var toResolve, toReject, values, reasons, deferred, fulfillOne, rejectOne, progress, len, i;
|
412
|
+
|
413
|
+
len = promisesOrValues.length >>> 0;
|
414
|
+
|
415
|
+
toResolve = Math.max(0, Math.min(howMany, len));
|
416
|
+
values = [];
|
417
|
+
|
418
|
+
toReject = (len - toResolve) + 1;
|
419
|
+
reasons = [];
|
420
|
+
|
421
|
+
deferred = defer();
|
422
|
+
|
423
|
+
// No items in the input, resolve immediately
|
424
|
+
if (!toResolve) {
|
425
|
+
deferred.resolve(values);
|
426
|
+
|
427
|
+
} else {
|
428
|
+
progress = deferred.progress;
|
429
|
+
|
430
|
+
rejectOne = function(reason) {
|
431
|
+
reasons.push(reason);
|
432
|
+
if(!--toReject) {
|
433
|
+
fulfillOne = rejectOne = noop;
|
434
|
+
deferred.reject(reasons);
|
435
|
+
}
|
436
|
+
};
|
437
|
+
|
438
|
+
fulfillOne = function(val) {
|
439
|
+
// This orders the values based on promise resolution order
|
440
|
+
// Another strategy would be to use the original position of
|
441
|
+
// the corresponding promise.
|
442
|
+
values.push(val);
|
443
|
+
|
444
|
+
if (!--toResolve) {
|
445
|
+
fulfillOne = rejectOne = noop;
|
446
|
+
deferred.resolve(values);
|
447
|
+
}
|
448
|
+
};
|
449
|
+
|
450
|
+
for(i = 0; i < len; ++i) {
|
451
|
+
if(i in promisesOrValues) {
|
452
|
+
when(promisesOrValues[i], fulfiller, rejecter, progress);
|
453
|
+
}
|
454
|
+
}
|
455
|
+
}
|
456
|
+
|
457
|
+
return deferred.then(onFulfilled, onRejected, onProgress);
|
458
|
+
|
459
|
+
function rejecter(reason) {
|
460
|
+
rejectOne(reason);
|
461
|
+
}
|
462
|
+
|
463
|
+
function fulfiller(val) {
|
464
|
+
fulfillOne(val);
|
465
|
+
}
|
466
|
+
|
467
|
+
});
|
468
|
+
}
|
469
|
+
|
470
|
+
/**
|
471
|
+
* Initiates a competitive race, returning a promise that will resolve when
|
472
|
+
* any one of the supplied promisesOrValues has resolved or will reject when
|
473
|
+
* *all* promisesOrValues have rejected.
|
474
|
+
*
|
475
|
+
* @param {Array|Promise} promisesOrValues array of anything, may contain a mix
|
476
|
+
* of {@link Promise}s and values
|
477
|
+
* @param {function?} [onFulfilled] resolution handler
|
478
|
+
* @param {function?} [onRejected] rejection handler
|
479
|
+
* @param {function?} [onProgress] progress handler
|
480
|
+
* @returns {Promise} promise that will resolve to the value that resolved first, or
|
481
|
+
* will reject with an array of all rejected inputs.
|
482
|
+
*/
|
483
|
+
function any(promisesOrValues, onFulfilled, onRejected, onProgress) {
|
484
|
+
|
485
|
+
function unwrapSingleResult(val) {
|
486
|
+
return onFulfilled ? onFulfilled(val[0]) : val[0];
|
487
|
+
}
|
488
|
+
|
489
|
+
return some(promisesOrValues, 1, unwrapSingleResult, onRejected, onProgress);
|
490
|
+
}
|
491
|
+
|
492
|
+
/**
|
493
|
+
* Return a promise that will resolve only once all the supplied promisesOrValues
|
494
|
+
* have resolved. The resolution value of the returned promise will be an array
|
495
|
+
* containing the resolution values of each of the promisesOrValues.
|
496
|
+
* @memberOf when
|
497
|
+
*
|
498
|
+
* @param {Array|Promise} promisesOrValues array of anything, may contain a mix
|
499
|
+
* of {@link Promise}s and values
|
500
|
+
* @param {function?} [onFulfilled] resolution handler
|
501
|
+
* @param {function?} [onRejected] rejection handler
|
502
|
+
* @param {function?} [onProgress] progress handler
|
503
|
+
* @returns {Promise}
|
504
|
+
*/
|
505
|
+
function all(promisesOrValues, onFulfilled, onRejected, onProgress) {
|
506
|
+
checkCallbacks(1, arguments);
|
507
|
+
return map(promisesOrValues, identity).then(onFulfilled, onRejected, onProgress);
|
508
|
+
}
|
509
|
+
|
510
|
+
/**
|
511
|
+
* Joins multiple promises into a single returned promise.
|
512
|
+
* @return {Promise} a promise that will fulfill when *all* the input promises
|
513
|
+
* have fulfilled, or will reject when *any one* of the input promises rejects.
|
514
|
+
*/
|
515
|
+
function join(/* ...promises */) {
|
516
|
+
return map(arguments, identity);
|
517
|
+
}
|
518
|
+
|
519
|
+
/**
|
520
|
+
* Traditional map function, similar to `Array.prototype.map()`, but allows
|
521
|
+
* input to contain {@link Promise}s and/or values, and mapFunc may return
|
522
|
+
* either a value or a {@link Promise}
|
523
|
+
*
|
524
|
+
* @param {Array|Promise} promise array of anything, may contain a mix
|
525
|
+
* of {@link Promise}s and values
|
526
|
+
* @param {function} mapFunc mapping function mapFunc(value) which may return
|
527
|
+
* either a {@link Promise} or value
|
528
|
+
* @returns {Promise} a {@link Promise} that will resolve to an array containing
|
529
|
+
* the mapped output values.
|
530
|
+
*/
|
531
|
+
function map(promise, mapFunc) {
|
532
|
+
return when(promise, function(array) {
|
533
|
+
var results, len, toResolve, resolve, i, d;
|
534
|
+
|
535
|
+
// Since we know the resulting length, we can preallocate the results
|
536
|
+
// array to avoid array expansions.
|
537
|
+
toResolve = len = array.length >>> 0;
|
538
|
+
results = [];
|
539
|
+
d = defer();
|
540
|
+
|
541
|
+
if(!toResolve) {
|
542
|
+
d.resolve(results);
|
543
|
+
} else {
|
544
|
+
|
545
|
+
resolve = function resolveOne(item, i) {
|
546
|
+
when(item, mapFunc).then(function(mapped) {
|
547
|
+
results[i] = mapped;
|
548
|
+
|
549
|
+
if(!--toResolve) {
|
550
|
+
d.resolve(results);
|
551
|
+
}
|
552
|
+
}, d.reject);
|
553
|
+
};
|
554
|
+
|
555
|
+
// Since mapFunc may be async, get all invocations of it into flight
|
556
|
+
for(i = 0; i < len; i++) {
|
557
|
+
if(i in array) {
|
558
|
+
resolve(array[i], i);
|
559
|
+
} else {
|
560
|
+
--toResolve;
|
561
|
+
}
|
562
|
+
}
|
563
|
+
|
564
|
+
}
|
565
|
+
|
566
|
+
return d.promise;
|
567
|
+
|
568
|
+
});
|
569
|
+
}
|
570
|
+
|
571
|
+
/**
|
572
|
+
* Traditional reduce function, similar to `Array.prototype.reduce()`, but
|
573
|
+
* input may contain promises and/or values, and reduceFunc
|
574
|
+
* may return either a value or a promise, *and* initialValue may
|
575
|
+
* be a promise for the starting value.
|
576
|
+
*
|
577
|
+
* @param {Array|Promise} promise array or promise for an array of anything,
|
578
|
+
* may contain a mix of promises and values.
|
579
|
+
* @param {function} reduceFunc reduce function reduce(currentValue, nextValue, index, total),
|
580
|
+
* where total is the total number of items being reduced, and will be the same
|
581
|
+
* in each call to reduceFunc.
|
582
|
+
* @returns {Promise} that will resolve to the final reduced value
|
583
|
+
*/
|
584
|
+
function reduce(promise, reduceFunc /*, initialValue */) {
|
585
|
+
var args = slice.call(arguments, 1);
|
586
|
+
|
587
|
+
return when(promise, function(array) {
|
588
|
+
var total;
|
589
|
+
|
590
|
+
total = array.length;
|
591
|
+
|
592
|
+
// Wrap the supplied reduceFunc with one that handles promises and then
|
593
|
+
// delegates to the supplied.
|
594
|
+
args[0] = function (current, val, i) {
|
595
|
+
return when(current, function (c) {
|
596
|
+
return when(val, function (value) {
|
597
|
+
return reduceFunc(c, value, i, total);
|
598
|
+
});
|
599
|
+
});
|
600
|
+
};
|
601
|
+
|
602
|
+
return reduceArray.apply(array, args);
|
603
|
+
});
|
604
|
+
}
|
605
|
+
|
606
|
+
/**
|
607
|
+
* Ensure that resolution of promiseOrValue will trigger resolver with the
|
608
|
+
* value or reason of promiseOrValue, or instead with resolveValue if it is provided.
|
609
|
+
*
|
610
|
+
* @param promiseOrValue
|
611
|
+
* @param {Object} resolver
|
612
|
+
* @param {function} resolver.resolve
|
613
|
+
* @param {function} resolver.reject
|
614
|
+
* @param {*} [resolveValue]
|
615
|
+
* @returns {Promise}
|
616
|
+
*/
|
617
|
+
function chain(promiseOrValue, resolver, resolveValue) {
|
618
|
+
var useResolveValue = arguments.length > 2;
|
619
|
+
|
620
|
+
return when(promiseOrValue,
|
621
|
+
function(val) {
|
622
|
+
val = useResolveValue ? resolveValue : val;
|
623
|
+
resolver.resolve(val);
|
624
|
+
return val;
|
625
|
+
},
|
626
|
+
function(reason) {
|
627
|
+
resolver.reject(reason);
|
628
|
+
return rejected(reason);
|
629
|
+
},
|
630
|
+
resolver.progress
|
631
|
+
);
|
632
|
+
}
|
633
|
+
|
634
|
+
//
|
635
|
+
// Utility functions
|
636
|
+
//
|
637
|
+
|
638
|
+
/**
|
639
|
+
* Apply all functions in queue to value
|
640
|
+
* @param {Array} queue array of functions to execute
|
641
|
+
* @param {*} value argument passed to each function
|
642
|
+
*/
|
643
|
+
function processQueue(queue, value) {
|
644
|
+
var handler, i = 0;
|
645
|
+
|
646
|
+
while (handler = queue[i++]) {
|
647
|
+
handler(value);
|
648
|
+
}
|
649
|
+
}
|
650
|
+
|
651
|
+
/**
|
652
|
+
* Helper that checks arrayOfCallbacks to ensure that each element is either
|
653
|
+
* a function, or null or undefined.
|
654
|
+
* @private
|
655
|
+
* @param {number} start index at which to start checking items in arrayOfCallbacks
|
656
|
+
* @param {Array} arrayOfCallbacks array to check
|
657
|
+
* @throws {Error} if any element of arrayOfCallbacks is something other than
|
658
|
+
* a functions, null, or undefined.
|
659
|
+
*/
|
660
|
+
function checkCallbacks(start, arrayOfCallbacks) {
|
661
|
+
// TODO: Promises/A+ update type checking and docs
|
662
|
+
var arg, i = arrayOfCallbacks.length;
|
663
|
+
|
664
|
+
while(i > start) {
|
665
|
+
arg = arrayOfCallbacks[--i];
|
666
|
+
|
667
|
+
if (arg != null && typeof arg != 'function') {
|
668
|
+
throw new Error('arg '+i+' must be a function');
|
669
|
+
}
|
670
|
+
}
|
671
|
+
}
|
672
|
+
|
673
|
+
/**
|
674
|
+
* No-Op function used in method replacement
|
675
|
+
* @private
|
676
|
+
*/
|
677
|
+
function noop() {}
|
678
|
+
|
679
|
+
slice = [].slice;
|
680
|
+
|
681
|
+
// ES5 reduce implementation if native not available
|
682
|
+
// See: http://es5.github.com/#x15.4.4.21 as there are many
|
683
|
+
// specifics and edge cases.
|
684
|
+
reduceArray = [].reduce ||
|
685
|
+
function(reduceFunc /*, initialValue */) {
|
686
|
+
/*jshint maxcomplexity: 7*/
|
687
|
+
|
688
|
+
// ES5 dictates that reduce.length === 1
|
689
|
+
|
690
|
+
// This implementation deviates from ES5 spec in the following ways:
|
691
|
+
// 1. It does not check if reduceFunc is a Callable
|
692
|
+
|
693
|
+
var arr, args, reduced, len, i;
|
694
|
+
|
695
|
+
i = 0;
|
696
|
+
// This generates a jshint warning, despite being valid
|
697
|
+
// "Missing 'new' prefix when invoking a constructor."
|
698
|
+
// See https://github.com/jshint/jshint/issues/392
|
699
|
+
arr = Object(this);
|
700
|
+
len = arr.length >>> 0;
|
701
|
+
args = arguments;
|
702
|
+
|
703
|
+
// If no initialValue, use first item of array (we know length !== 0 here)
|
704
|
+
// and adjust i to start at second item
|
705
|
+
if(args.length <= 1) {
|
706
|
+
// Skip to the first real element in the array
|
707
|
+
for(;;) {
|
708
|
+
if(i in arr) {
|
709
|
+
reduced = arr[i++];
|
710
|
+
break;
|
711
|
+
}
|
712
|
+
|
713
|
+
// If we reached the end of the array without finding any real
|
714
|
+
// elements, it's a TypeError
|
715
|
+
if(++i >= len) {
|
716
|
+
throw new TypeError();
|
717
|
+
}
|
718
|
+
}
|
719
|
+
} else {
|
720
|
+
// If initialValue provided, use it
|
721
|
+
reduced = args[1];
|
722
|
+
}
|
723
|
+
|
724
|
+
// Do the actual reduce
|
725
|
+
for(;i < len; ++i) {
|
726
|
+
// Skip holes
|
727
|
+
if(i in arr) {
|
728
|
+
reduced = reduceFunc(reduced, arr[i], i, arr);
|
729
|
+
}
|
730
|
+
}
|
731
|
+
|
732
|
+
return reduced;
|
733
|
+
};
|
734
|
+
|
735
|
+
function identity(x) {
|
736
|
+
return x;
|
737
|
+
}
|
738
|
+
|
739
|
+
return when;
|
740
|
+
});
|
741
|
+
})(typeof define == 'function' && define.amd
|
742
|
+
? define
|
743
|
+
: function (factory) { typeof exports === 'object'
|
744
|
+
? (module.exports = factory())
|
745
|
+
: (this.when = factory());
|
746
|
+
}
|
747
|
+
// Boilerplate for AMD, Node, and browser global
|
748
|
+
);
|