cesium 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
);
|