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.
Files changed (491) hide show
  1. data/LICENSE.md +259 -0
  2. data/README.rdoc +90 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/Assets/Assets.profile.js +8 -0
  5. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
  6. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
  7. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
  8. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
  9. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
  10. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
  11. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
  12. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
  13. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
  14. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
  15. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
  16. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
  17. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
  18. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
  19. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
  20. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
  21. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
  22. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
  23. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
  24. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
  25. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
  26. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
  27. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
  28. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
  29. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
  30. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
  31. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
  32. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
  33. data/app/assets/javascripts/Assets/Textures/NE2_LR_LC_SR_W_DR_2048.jpg +0 -0
  34. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  35. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  36. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  37. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  38. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  39. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  40. data/app/assets/javascripts/Assets/Textures/waterNormals.jpg +0 -0
  41. data/app/assets/javascripts/Assets/package.json +6 -0
  42. data/app/assets/javascripts/Cesium.js +320 -0
  43. data/app/assets/javascripts/Core/AnimationController.js +148 -0
  44. data/app/assets/javascripts/Core/AxisAlignedBoundingBox.js +243 -0
  45. data/app/assets/javascripts/Core/BoundingRectangle.js +364 -0
  46. data/app/assets/javascripts/Core/BoundingSphere.js +819 -0
  47. data/app/assets/javascripts/Core/BoxTessellator.js +93 -0
  48. data/app/assets/javascripts/Core/Cartesian2.js +762 -0
  49. data/app/assets/javascripts/Core/Cartesian3.js +861 -0
  50. data/app/assets/javascripts/Core/Cartesian4.js +762 -0
  51. data/app/assets/javascripts/Core/Cartographic.js +211 -0
  52. data/app/assets/javascripts/Core/CatmullRomSpline.js +232 -0
  53. data/app/assets/javascripts/Core/Clock.js +195 -0
  54. data/app/assets/javascripts/Core/ClockRange.js +37 -0
  55. data/app/assets/javascripts/Core/ClockStep.js +32 -0
  56. data/app/assets/javascripts/Core/Color.js +1629 -0
  57. data/app/assets/javascripts/Core/ComponentDatatype.js +119 -0
  58. data/app/assets/javascripts/Core/Core.profile.js +8 -0
  59. data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +198 -0
  60. data/app/assets/javascripts/Core/CubicRealPolynomial.js +251 -0
  61. data/app/assets/javascripts/Core/DefaultProxy.js +30 -0
  62. data/app/assets/javascripts/Core/DeveloperError.js +60 -0
  63. data/app/assets/javascripts/Core/EarthOrientationParameters.js +383 -0
  64. data/app/assets/javascripts/Core/EarthOrientationParametersSample.js +50 -0
  65. data/app/assets/javascripts/Core/Ellipsoid.js +539 -0
  66. data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +207 -0
  67. data/app/assets/javascripts/Core/EllipsoidalOccluder.js +151 -0
  68. data/app/assets/javascripts/Core/EncodedCartesian3.js +197 -0
  69. data/app/assets/javascripts/Core/Enumeration.js +67 -0
  70. data/app/assets/javascripts/Core/Event.js +122 -0
  71. data/app/assets/javascripts/Core/Extent.js +383 -0
  72. data/app/assets/javascripts/Core/ExtentTessellator.js +384 -0
  73. data/app/assets/javascripts/Core/FAR.js +13 -0
  74. data/app/assets/javascripts/Core/FeatureDetection.js +126 -0
  75. data/app/assets/javascripts/Core/Fullscreen.js +235 -0
  76. data/app/assets/javascripts/Core/GeographicProjection.js +107 -0
  77. data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +176 -0
  78. data/app/assets/javascripts/Core/HermiteSpline.js +234 -0
  79. data/app/assets/javascripts/Core/Iau2006XysData.js +259 -0
  80. data/app/assets/javascripts/Core/Iau2006XysSample.js +36 -0
  81. data/app/assets/javascripts/Core/IndexDatatype.js +28 -0
  82. data/app/assets/javascripts/Core/Intersect.js +40 -0
  83. data/app/assets/javascripts/Core/IntersectionTests.js +359 -0
  84. data/app/assets/javascripts/Core/Interval.js +27 -0
  85. data/app/assets/javascripts/Core/Iso8601.js +46 -0
  86. data/app/assets/javascripts/Core/JulianDate.js +1228 -0
  87. data/app/assets/javascripts/Core/KeyboardEventModifier.js +38 -0
  88. data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +96 -0
  89. data/app/assets/javascripts/Core/LeapSecond.js +158 -0
  90. data/app/assets/javascripts/Core/LinearApproximation.js +98 -0
  91. data/app/assets/javascripts/Core/Math.js +532 -0
  92. data/app/assets/javascripts/Core/Matrix2.js +833 -0
  93. data/app/assets/javascripts/Core/Matrix3.js +1099 -0
  94. data/app/assets/javascripts/Core/Matrix4.js +2164 -0
  95. data/app/assets/javascripts/Core/MeshFilters.js +568 -0
  96. data/app/assets/javascripts/Core/Occluder.js +474 -0
  97. data/app/assets/javascripts/Core/OrientationInterpolator.js +109 -0
  98. data/app/assets/javascripts/Core/PlaneTessellator.js +74 -0
  99. data/app/assets/javascripts/Core/PolygonPipeline.js +792 -0
  100. data/app/assets/javascripts/Core/PolylinePipeline.js +90 -0
  101. data/app/assets/javascripts/Core/PrimitiveType.js +80 -0
  102. data/app/assets/javascripts/Core/QuadraticRealPolynomial.js +146 -0
  103. data/app/assets/javascripts/Core/QuarticRealPolynomial.js +339 -0
  104. data/app/assets/javascripts/Core/Quaternion.js +947 -0
  105. data/app/assets/javascripts/Core/Queue.js +95 -0
  106. data/app/assets/javascripts/Core/Ray.js +64 -0
  107. data/app/assets/javascripts/Core/ReferenceFrame.js +25 -0
  108. data/app/assets/javascripts/Core/RequestErrorEvent.js +35 -0
  109. data/app/assets/javascripts/Core/RuntimeError.js +59 -0
  110. data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +658 -0
  111. data/app/assets/javascripts/Core/ScreenSpaceEventType.js +149 -0
  112. data/app/assets/javascripts/Core/Shapes.js +230 -0
  113. data/app/assets/javascripts/Core/Spherical.js +192 -0
  114. data/app/assets/javascripts/Core/TaskProcessor.js +131 -0
  115. data/app/assets/javascripts/Core/TimeConstants.js +85 -0
  116. data/app/assets/javascripts/Core/TimeInterval.js +305 -0
  117. data/app/assets/javascripts/Core/TimeIntervalCollection.js +543 -0
  118. data/app/assets/javascripts/Core/TimeStandard.js +31 -0
  119. data/app/assets/javascripts/Core/Tipsify.js +285 -0
  120. data/app/assets/javascripts/Core/Transforms.js +614 -0
  121. data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +102 -0
  122. data/app/assets/javascripts/Core/Visibility.js +38 -0
  123. data/app/assets/javascripts/Core/WebMercatorProjection.js +154 -0
  124. data/app/assets/javascripts/Core/WindingOrder.js +40 -0
  125. data/app/assets/javascripts/Core/binarySearch.js +69 -0
  126. data/app/assets/javascripts/Core/buildModuleUrl.js +77 -0
  127. data/app/assets/javascripts/Core/clone.js +21 -0
  128. data/app/assets/javascripts/Core/combine.js +81 -0
  129. data/app/assets/javascripts/Core/computeSunPosition.js +116 -0
  130. data/app/assets/javascripts/Core/createGuid.js +25 -0
  131. data/app/assets/javascripts/Core/defaultValue.js +22 -0
  132. data/app/assets/javascripts/Core/destroyObject.js +61 -0
  133. data/app/assets/javascripts/Core/freezeObject.js +20 -0
  134. data/app/assets/javascripts/Core/getImagePixels.js +46 -0
  135. data/app/assets/javascripts/Core/isLeapYear.js +30 -0
  136. data/app/assets/javascripts/Core/jsonp.js +116 -0
  137. data/app/assets/javascripts/Core/loadArrayBuffer.js +76 -0
  138. data/app/assets/javascripts/Core/loadImage.js +85 -0
  139. data/app/assets/javascripts/Core/loadJson.js +54 -0
  140. data/app/assets/javascripts/Core/loadText.js +78 -0
  141. data/app/assets/javascripts/Core/loadXML.js +76 -0
  142. data/app/assets/javascripts/Core/package.json +6 -0
  143. data/app/assets/javascripts/Core/pointInsideTriangle2D.js +41 -0
  144. data/app/assets/javascripts/Core/requestAnimationFrame.js +61 -0
  145. data/app/assets/javascripts/Core/throttleRequestByServer.js +74 -0
  146. data/app/assets/javascripts/Core/writeTextToCanvas.js +92 -0
  147. data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +254 -0
  148. data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +57 -0
  149. data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +96 -0
  150. data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +99 -0
  151. data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +125 -0
  152. data/app/assets/javascripts/DynamicScene/CzmlColor.js +127 -0
  153. data/app/assets/javascripts/DynamicScene/CzmlDefaults.js +135 -0
  154. data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +59 -0
  155. data/app/assets/javascripts/DynamicScene/CzmlImage.js +61 -0
  156. data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +59 -0
  157. data/app/assets/javascripts/DynamicScene/CzmlNumber.js +82 -0
  158. data/app/assets/javascripts/DynamicScene/CzmlString.js +56 -0
  159. data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +99 -0
  160. data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +172 -0
  161. data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +98 -0
  162. data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +59 -0
  163. data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +245 -0
  164. data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +347 -0
  165. data/app/assets/javascripts/DynamicScene/DynamicColorMaterial.js +78 -0
  166. data/app/assets/javascripts/DynamicScene/DynamicCone.js +291 -0
  167. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +350 -0
  168. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +389 -0
  169. data/app/assets/javascripts/DynamicScene/DynamicDirectionsProperty.js +163 -0
  170. data/app/assets/javascripts/DynamicScene/DynamicEllipsoid.js +158 -0
  171. data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +277 -0
  172. data/app/assets/javascripts/DynamicScene/DynamicImageMaterial.js +136 -0
  173. data/app/assets/javascripts/DynamicScene/DynamicLabel.js +286 -0
  174. data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +341 -0
  175. data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +125 -0
  176. data/app/assets/javascripts/DynamicScene/DynamicObject.js +364 -0
  177. data/app/assets/javascripts/DynamicScene/DynamicObjectCollection.js +137 -0
  178. data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +299 -0
  179. data/app/assets/javascripts/DynamicScene/DynamicPath.js +214 -0
  180. data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +402 -0
  181. data/app/assets/javascripts/DynamicScene/DynamicPoint.js +184 -0
  182. data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +323 -0
  183. data/app/assets/javascripts/DynamicScene/DynamicPolygon.js +138 -0
  184. data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +251 -0
  185. data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +183 -0
  186. data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +268 -0
  187. data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +525 -0
  188. data/app/assets/javascripts/DynamicScene/DynamicProperty.js +352 -0
  189. data/app/assets/javascripts/DynamicScene/DynamicPyramid.js +204 -0
  190. data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +302 -0
  191. data/app/assets/javascripts/DynamicScene/DynamicScene.profile.js +8 -0
  192. data/app/assets/javascripts/DynamicScene/DynamicVertexPositionsProperty.js +199 -0
  193. data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +155 -0
  194. data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +181 -0
  195. data/app/assets/javascripts/DynamicScene/package.json +6 -0
  196. data/app/assets/javascripts/DynamicScene/processCzml.js +77 -0
  197. data/app/assets/javascripts/Renderer/BlendEquation.js +52 -0
  198. data/app/assets/javascripts/Renderer/BlendFunction.js +158 -0
  199. data/app/assets/javascripts/Renderer/BlendingState.js +64 -0
  200. data/app/assets/javascripts/Renderer/Buffer.js +141 -0
  201. data/app/assets/javascripts/Renderer/BufferUsage.js +48 -0
  202. data/app/assets/javascripts/Renderer/ClearCommand.js +40 -0
  203. data/app/assets/javascripts/Renderer/CommandLists.js +42 -0
  204. data/app/assets/javascripts/Renderer/Context.js +2805 -0
  205. data/app/assets/javascripts/Renderer/CubeMap.js +358 -0
  206. data/app/assets/javascripts/Renderer/CubeMapFace.js +202 -0
  207. data/app/assets/javascripts/Renderer/CullFace.js +50 -0
  208. data/app/assets/javascripts/Renderer/DepthFunction.js +95 -0
  209. data/app/assets/javascripts/Renderer/DrawCommand.js +96 -0
  210. data/app/assets/javascripts/Renderer/Framebuffer.js +435 -0
  211. data/app/assets/javascripts/Renderer/MipmapHint.js +50 -0
  212. data/app/assets/javascripts/Renderer/PickFramebuffer.js +178 -0
  213. data/app/assets/javascripts/Renderer/PixelDatatype.js +86 -0
  214. data/app/assets/javascripts/Renderer/PixelFormat.js +113 -0
  215. data/app/assets/javascripts/Renderer/Renderbuffer.js +102 -0
  216. data/app/assets/javascripts/Renderer/RenderbufferFormat.js +77 -0
  217. data/app/assets/javascripts/Renderer/Renderer.profile.js +8 -0
  218. data/app/assets/javascripts/Renderer/ShaderCache.js +121 -0
  219. data/app/assets/javascripts/Renderer/ShaderProgram.js +2402 -0
  220. data/app/assets/javascripts/Renderer/StencilFunction.js +95 -0
  221. data/app/assets/javascripts/Renderer/StencilOperation.js +95 -0
  222. data/app/assets/javascripts/Renderer/Texture.js +395 -0
  223. data/app/assets/javascripts/Renderer/TextureAtlas.js +472 -0
  224. data/app/assets/javascripts/Renderer/TextureAtlasBuilder.js +133 -0
  225. data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +41 -0
  226. data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +77 -0
  227. data/app/assets/javascripts/Renderer/TextureWrap.js +50 -0
  228. data/app/assets/javascripts/Renderer/UniformDatatype.js +218 -0
  229. data/app/assets/javascripts/Renderer/UniformState.js +799 -0
  230. data/app/assets/javascripts/Renderer/VertexArray.js +365 -0
  231. data/app/assets/javascripts/Renderer/VertexArrayFacade.js +574 -0
  232. data/app/assets/javascripts/Renderer/VertexLayout.js +49 -0
  233. data/app/assets/javascripts/Renderer/loadCubeMap.js +92 -0
  234. data/app/assets/javascripts/Renderer/package.json +6 -0
  235. data/app/assets/javascripts/Scene/AnimationCollection.js +249 -0
  236. data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +384 -0
  237. data/app/assets/javascripts/Scene/Billboard.js +680 -0
  238. data/app/assets/javascripts/Scene/BillboardCollection.js +1209 -0
  239. data/app/assets/javascripts/Scene/BingMapsImageryProvider.js +460 -0
  240. data/app/assets/javascripts/Scene/BingMapsStyle.js +55 -0
  241. data/app/assets/javascripts/Scene/Camera.js +358 -0
  242. data/app/assets/javascripts/Scene/CameraColumbusViewMode.js +30 -0
  243. data/app/assets/javascripts/Scene/CameraController.js +1258 -0
  244. data/app/assets/javascripts/Scene/CameraEventAggregator.js +270 -0
  245. data/app/assets/javascripts/Scene/CameraEventType.js +53 -0
  246. data/app/assets/javascripts/Scene/CameraFlightPath.js +495 -0
  247. data/app/assets/javascripts/Scene/CentralBody.js +817 -0
  248. data/app/assets/javascripts/Scene/CentralBodySurface.js +1120 -0
  249. data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +107 -0
  250. data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +511 -0
  251. data/app/assets/javascripts/Scene/CompositePrimitive.js +454 -0
  252. data/app/assets/javascripts/Scene/CullingVolume.js +59 -0
  253. data/app/assets/javascripts/Scene/CustomSensorVolume.js +440 -0
  254. data/app/assets/javascripts/Scene/DiscardMissingTileImagePolicy.js +134 -0
  255. data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +412 -0
  256. data/app/assets/javascripts/Scene/EllipsoidTerrainProvider.js +182 -0
  257. data/app/assets/javascripts/Scene/FrameState.js +86 -0
  258. data/app/assets/javascripts/Scene/FrustumCommands.js +32 -0
  259. data/app/assets/javascripts/Scene/GeographicTilingScheme.js +265 -0
  260. data/app/assets/javascripts/Scene/HorizontalOrigin.js +39 -0
  261. data/app/assets/javascripts/Scene/Imagery.js +85 -0
  262. data/app/assets/javascripts/Scene/ImageryLayer.js +876 -0
  263. data/app/assets/javascripts/Scene/ImageryLayerCollection.js +403 -0
  264. data/app/assets/javascripts/Scene/ImageryProvider.js +185 -0
  265. data/app/assets/javascripts/Scene/ImageryProviderError.js +149 -0
  266. data/app/assets/javascripts/Scene/ImageryState.js +20 -0
  267. data/app/assets/javascripts/Scene/Label.js +706 -0
  268. data/app/assets/javascripts/Scene/LabelCollection.js +697 -0
  269. data/app/assets/javascripts/Scene/LabelStyle.js +39 -0
  270. data/app/assets/javascripts/Scene/Material.js +1177 -0
  271. data/app/assets/javascripts/Scene/NeverTileDiscardPolicy.js +38 -0
  272. data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +282 -0
  273. data/app/assets/javascripts/Scene/OrthographicFrustum.js +345 -0
  274. data/app/assets/javascripts/Scene/PerformanceDisplay.js +183 -0
  275. data/app/assets/javascripts/Scene/PerspectiveFrustum.js +239 -0
  276. data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +394 -0
  277. data/app/assets/javascripts/Scene/Polygon.js +886 -0
  278. data/app/assets/javascripts/Scene/Polyline.js +441 -0
  279. data/app/assets/javascripts/Scene/PolylineCollection.js +1532 -0
  280. data/app/assets/javascripts/Scene/Projections.js +93 -0
  281. data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +224 -0
  282. data/app/assets/javascripts/Scene/Scene.js +632 -0
  283. data/app/assets/javascripts/Scene/Scene.profile.js +8 -0
  284. data/app/assets/javascripts/Scene/SceneMode.js +51 -0
  285. data/app/assets/javascripts/Scene/SceneTransitioner.js +776 -0
  286. data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1063 -0
  287. data/app/assets/javascripts/Scene/SensorVolumeCollection.js +192 -0
  288. data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +295 -0
  289. data/app/assets/javascripts/Scene/SkyAtmosphere.js +239 -0
  290. data/app/assets/javascripts/Scene/SkyBox.js +231 -0
  291. data/app/assets/javascripts/Scene/TerrainProvider.js +229 -0
  292. data/app/assets/javascripts/Scene/TexturePool.js +154 -0
  293. data/app/assets/javascripts/Scene/Tile.js +322 -0
  294. data/app/assets/javascripts/Scene/TileDiscardPolicy.js +42 -0
  295. data/app/assets/javascripts/Scene/TileImagery.js +36 -0
  296. data/app/assets/javascripts/Scene/TileLoadQueue.js +123 -0
  297. data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +337 -0
  298. data/app/assets/javascripts/Scene/TileReplacementQueue.js +139 -0
  299. data/app/assets/javascripts/Scene/TileState.js +19 -0
  300. data/app/assets/javascripts/Scene/TilingScheme.js +213 -0
  301. data/app/assets/javascripts/Scene/VerticalOrigin.js +39 -0
  302. data/app/assets/javascripts/Scene/ViewportQuad.js +256 -0
  303. data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +374 -0
  304. data/app/assets/javascripts/Scene/WebMercatorTilingScheme.js +291 -0
  305. data/app/assets/javascripts/Scene/package.json +6 -0
  306. data/app/assets/javascripts/Shaders/BillboardCollectionFS.glsl +30 -0
  307. data/app/assets/javascripts/Shaders/BillboardCollectionFS.js +31 -0
  308. data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +68 -0
  309. data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +54 -0
  310. data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +927 -0
  311. data/app/assets/javascripts/Shaders/BuiltinFunctions.js +322 -0
  312. data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +106 -0
  313. data/app/assets/javascripts/Shaders/CentralBodyFS.js +82 -0
  314. data/app/assets/javascripts/Shaders/CentralBodyFSDepth.glsl +20 -0
  315. data/app/assets/javascripts/Shaders/CentralBodyFSDepth.js +22 -0
  316. data/app/assets/javascripts/Shaders/CentralBodyFSPole.glsl +29 -0
  317. data/app/assets/javascripts/Shaders/CentralBodyFSPole.js +28 -0
  318. data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +88 -0
  319. data/app/assets/javascripts/Shaders/CentralBodyVS.js +69 -0
  320. data/app/assets/javascripts/Shaders/CentralBodyVSDepth.glsl +9 -0
  321. data/app/assets/javascripts/Shaders/CentralBodyVSDepth.js +13 -0
  322. data/app/assets/javascripts/Shaders/CentralBodyVSPole.glsl +12 -0
  323. data/app/assets/javascripts/Shaders/CentralBodyVSPole.js +15 -0
  324. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +448 -0
  325. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +361 -0
  326. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +19 -0
  327. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +20 -0
  328. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +886 -0
  329. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +586 -0
  330. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +126 -0
  331. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +95 -0
  332. data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.glsl +14 -0
  333. data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.js +18 -0
  334. data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +40 -0
  335. data/app/assets/javascripts/Shaders/EllipsoidFS.js +38 -0
  336. data/app/assets/javascripts/Shaders/EllipsoidVS.glsl +26 -0
  337. data/app/assets/javascripts/Shaders/EllipsoidVS.js +16 -0
  338. data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.glsl +25 -0
  339. data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.js +23 -0
  340. data/app/assets/javascripts/Shaders/Materials/BlobMaterial.glsl +18 -0
  341. data/app/assets/javascripts/Shaders/Materials/BlobMaterial.js +19 -0
  342. data/app/assets/javascripts/Shaders/Materials/BrickMaterial.glsl +42 -0
  343. data/app/assets/javascripts/Shaders/Materials/BrickMaterial.js +36 -0
  344. data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.glsl +29 -0
  345. data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.js +27 -0
  346. data/app/assets/javascripts/Shaders/Materials/CementMaterial.glsl +19 -0
  347. data/app/assets/javascripts/Shaders/Materials/CementMaterial.js +20 -0
  348. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +38 -0
  349. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +32 -0
  350. data/app/assets/javascripts/Shaders/Materials/DotMaterial.glsl +17 -0
  351. data/app/assets/javascripts/Shaders/Materials/DotMaterial.js +18 -0
  352. data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.glsl +23 -0
  353. data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.js +24 -0
  354. data/app/assets/javascripts/Shaders/Materials/FacetMaterial.glsl +18 -0
  355. data/app/assets/javascripts/Shaders/Materials/FacetMaterial.js +19 -0
  356. data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.glsl +12 -0
  357. data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.js +15 -0
  358. data/app/assets/javascripts/Shaders/Materials/GrassMaterial.glsl +28 -0
  359. data/app/assets/javascripts/Shaders/Materials/GrassMaterial.js +26 -0
  360. data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.glsl +19 -0
  361. data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.js +21 -0
  362. data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.glsl +13 -0
  363. data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.js +16 -0
  364. data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.glsl +14 -0
  365. data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.js +17 -0
  366. data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.glsl +18 -0
  367. data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.js +19 -0
  368. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +29 -0
  369. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +26 -0
  370. data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.glsl +17 -0
  371. data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.js +19 -0
  372. data/app/assets/javascripts/Shaders/Materials/Water.glsl +91 -0
  373. data/app/assets/javascripts/Shaders/Materials/Water.js +60 -0
  374. data/app/assets/javascripts/Shaders/Materials/WoodMaterial.glsl +36 -0
  375. data/app/assets/javascripts/Shaders/Materials/WoodMaterial.js +31 -0
  376. data/app/assets/javascripts/Shaders/Noise.glsl +453 -0
  377. data/app/assets/javascripts/Shaders/Noise.js +242 -0
  378. data/app/assets/javascripts/Shaders/PolygonFS.glsl +27 -0
  379. data/app/assets/javascripts/Shaders/PolygonFS.js +23 -0
  380. data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +6 -0
  381. data/app/assets/javascripts/Shaders/PolygonFSPick.js +11 -0
  382. data/app/assets/javascripts/Shaders/PolygonVS.glsl +38 -0
  383. data/app/assets/javascripts/Shaders/PolygonVS.js +39 -0
  384. data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +30 -0
  385. data/app/assets/javascripts/Shaders/PolygonVSPick.js +32 -0
  386. data/app/assets/javascripts/Shaders/PolylineFS.glsl +6 -0
  387. data/app/assets/javascripts/Shaders/PolylineFS.js +11 -0
  388. data/app/assets/javascripts/Shaders/PolylineVS.glsl +34 -0
  389. data/app/assets/javascripts/Shaders/PolylineVS.js +35 -0
  390. data/app/assets/javascripts/Shaders/Ray.glsl +532 -0
  391. data/app/assets/javascripts/Shaders/Ray.js +357 -0
  392. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +26 -0
  393. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +22 -0
  394. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +11 -0
  395. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +14 -0
  396. data/app/assets/javascripts/Shaders/SensorVolume.glsl +43 -0
  397. data/app/assets/javascripts/Shaders/SensorVolume.js +31 -0
  398. data/app/assets/javascripts/Shaders/Shaders.profile.js +8 -0
  399. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +70 -0
  400. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +62 -0
  401. data/app/assets/javascripts/Shaders/SkyAtmosphereVS.glsl +131 -0
  402. data/app/assets/javascripts/Shaders/SkyAtmosphereVS.js +115 -0
  403. data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +10 -0
  404. data/app/assets/javascripts/Shaders/SkyBoxFS.js +14 -0
  405. data/app/assets/javascripts/Shaders/SkyBoxVS.glsl +10 -0
  406. data/app/assets/javascripts/Shaders/SkyBoxVS.js +14 -0
  407. data/app/assets/javascripts/Shaders/ViewportQuadFS.glsl +16 -0
  408. data/app/assets/javascripts/Shaders/ViewportQuadFS.js +17 -0
  409. data/app/assets/javascripts/Shaders/ViewportQuadVS.glsl +10 -0
  410. data/app/assets/javascripts/Shaders/ViewportQuadVS.js +14 -0
  411. data/app/assets/javascripts/Shaders/package.json +6 -0
  412. data/app/assets/javascripts/ThirdParty/ThirdParty.profile.js +8 -0
  413. data/app/assets/javascripts/ThirdParty/Tween.js +678 -0
  414. data/app/assets/javascripts/ThirdParty/Uri.js +277 -0
  415. data/app/assets/javascripts/ThirdParty/measureText.js +197 -0
  416. data/app/assets/javascripts/ThirdParty/package.json +6 -0
  417. data/app/assets/javascripts/ThirdParty/sprintf.js +319 -0
  418. data/app/assets/javascripts/ThirdParty/when.js +748 -0
  419. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +175 -0
  420. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +52 -0
  421. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +1237 -0
  422. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +4 -0
  423. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +349 -0
  424. data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.css +1 -0
  425. data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.js +47 -0
  426. data/app/assets/javascripts/Widgets/Dojo/checkForChromeFrame.js +71 -0
  427. data/app/assets/javascripts/Widgets/Images/Bing_Logo_51x19_White.png +0 -0
  428. data/app/assets/javascripts/Widgets/Images/Cesium_Logo_overlay.png +0 -0
  429. data/app/assets/javascripts/Widgets/Images/TimelineIcons.png +0 -0
  430. data/app/assets/javascripts/Widgets/Images/ajax-loader.gif +0 -0
  431. data/app/assets/javascripts/Widgets/Images/animationBar.png +0 -0
  432. data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
  433. data/app/assets/javascripts/Widgets/Timeline.css +113 -0
  434. data/app/assets/javascripts/Widgets/Timeline.js +629 -0
  435. data/app/assets/javascripts/Widgets/TimelineHighlightRange.js +51 -0
  436. data/app/assets/javascripts/Widgets/TimelineTrack.js +54 -0
  437. data/app/assets/javascripts/Widgets/Widgets.profile.js +8 -0
  438. data/app/assets/javascripts/Widgets/package.json +6 -0
  439. data/app/assets/javascripts/Workers/Workers.profile.js +8 -0
  440. data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +2015 -0
  441. data/app/assets/javascripts/Workers/createTaskProcessorWorker.js +55 -0
  442. data/app/assets/javascripts/Workers/createVerticesFromExtent.js +24 -0
  443. data/app/assets/javascripts/Workers/package.json +6 -0
  444. data/app/assets/javascripts/copyrightHeader.js +22 -0
  445. data/app/assets/javascripts/main.js +10 -0
  446. data/app/assets/stylesheets/cesium.css +4 -0
  447. data/app/controllers/cesium_controller.rb +4 -0
  448. data/app/helpers/cesium_helper.rb +2 -0
  449. data/app/views/cesium/index.html.erb +3 -0
  450. data/config/routes.rb +3 -0
  451. data/lib/cesium.rb +4 -0
  452. data/lib/cesium/engine.rb +4 -0
  453. data/lib/cesium/version.rb +3 -0
  454. data/lib/tasks/cesium_tasks.rake +4 -0
  455. data/test/cesium_test.rb +7 -0
  456. data/test/dummy/README.rdoc +261 -0
  457. data/test/dummy/Rakefile +7 -0
  458. data/test/dummy/app/assets/javascripts/adapters/jquery-adapter.js.coffee +4 -0
  459. data/test/dummy/app/assets/javascripts/app.js.coffee +11 -0
  460. data/test/dummy/app/assets/javascripts/application.js.coffee +73 -0
  461. data/test/dummy/app/assets/stylesheets/application.css +12 -0
  462. data/test/dummy/app/controllers/application_controller.rb +4 -0
  463. data/test/dummy/app/helpers/application_helper.rb +2 -0
  464. data/test/dummy/app/views/layouts/application.html.erb +21 -0
  465. data/test/dummy/config.ru +4 -0
  466. data/test/dummy/config/application.rb +59 -0
  467. data/test/dummy/config/boot.rb +10 -0
  468. data/test/dummy/config/database.yml +25 -0
  469. data/test/dummy/config/environment.rb +5 -0
  470. data/test/dummy/config/environments/development.rb +37 -0
  471. data/test/dummy/config/environments/production.rb +67 -0
  472. data/test/dummy/config/environments/test.rb +37 -0
  473. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  474. data/test/dummy/config/initializers/inflections.rb +15 -0
  475. data/test/dummy/config/initializers/mime_types.rb +5 -0
  476. data/test/dummy/config/initializers/secret_token.rb +7 -0
  477. data/test/dummy/config/initializers/session_store.rb +8 -0
  478. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  479. data/test/dummy/config/locales/en.yml +5 -0
  480. data/test/dummy/config/requirejs.yml +10 -0
  481. data/test/dummy/config/routes.rb +3 -0
  482. data/test/dummy/public/404.html +26 -0
  483. data/test/dummy/public/422.html +26 -0
  484. data/test/dummy/public/500.html +25 -0
  485. data/test/dummy/public/favicon.ico +0 -0
  486. data/test/dummy/script/rails +6 -0
  487. data/test/functional/cesium_controller_test.rb +9 -0
  488. data/test/integration/navigation_test.rb +10 -0
  489. data/test/test_helper.rb +15 -0
  490. data/test/unit/helpers/cesium_helper_test.rb +4 -0
  491. metadata +641 -0
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "ThirdParty",
3
+ "description": "Cesium ThirdParty",
4
+ "version": "0.6.0",
5
+ "dojoBuild": "ThirdParty.profile.js"
6
+ }
@@ -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
+ );