jax 0.0.0.1

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 (446) hide show
  1. data/.gitignore +12 -0
  2. data/.gitmodules +3 -0
  3. data/.rvmrc +7 -0
  4. data/Gemfile +4 -0
  5. data/README.rdoc +32 -0
  6. data/Rakefile +144 -0
  7. data/bin/jax +11 -0
  8. data/builtin/shaders/basic/common.ejs +11 -0
  9. data/builtin/shaders/basic/fragment.ejs +5 -0
  10. data/builtin/shaders/basic/vertex.ejs +13 -0
  11. data/builtin/shaders/depthmap/common.ejs +1 -0
  12. data/builtin/shaders/depthmap/fragment.ejs +5 -0
  13. data/builtin/shaders/depthmap/vertex.ejs +7 -0
  14. data/builtin/shaders/fog/common.ejs +7 -0
  15. data/builtin/shaders/fog/fragment.ejs +23 -0
  16. data/builtin/shaders/fog/manifest.yml +12 -0
  17. data/builtin/shaders/fog/material.js +34 -0
  18. data/builtin/shaders/fog/vertex.ejs +10 -0
  19. data/builtin/shaders/functions/depth_map.ejs +24 -0
  20. data/builtin/shaders/functions/lights.ejs +155 -0
  21. data/builtin/shaders/lighting/common.ejs +5 -0
  22. data/builtin/shaders/lighting/fragment.ejs +34 -0
  23. data/builtin/shaders/lighting/manifest.yml +4 -0
  24. data/builtin/shaders/lighting/material.js +26 -0
  25. data/builtin/shaders/lighting/vertex.ejs +7 -0
  26. data/builtin/shaders/normal_map/common.ejs +12 -0
  27. data/builtin/shaders/normal_map/fragment.ejs +26 -0
  28. data/builtin/shaders/normal_map/manifest.yml +17 -0
  29. data/builtin/shaders/normal_map/material.js +16 -0
  30. data/builtin/shaders/normal_map/vertex.ejs +57 -0
  31. data/builtin/shaders/paraboloid-depthmap/common.ejs +6 -0
  32. data/builtin/shaders/paraboloid-depthmap/fragment.ejs +8 -0
  33. data/builtin/shaders/paraboloid-depthmap/material.js +15 -0
  34. data/builtin/shaders/paraboloid-depthmap/vertex.ejs +26 -0
  35. data/builtin/shaders/shadow_map/common.ejs +14 -0
  36. data/builtin/shaders/shadow_map/fragment.ejs +66 -0
  37. data/builtin/shaders/shadow_map/manifest.yml +1 -0
  38. data/builtin/shaders/shadow_map/material.js +26 -0
  39. data/builtin/shaders/shadow_map/vertex.ejs +46 -0
  40. data/builtin/shaders/texture/common.ejs +4 -0
  41. data/builtin/shaders/texture/fragment.ejs +11 -0
  42. data/builtin/shaders/texture/manifest.yml +17 -0
  43. data/builtin/shaders/texture/material.js +18 -0
  44. data/builtin/shaders/texture/vertex.ejs +9 -0
  45. data/guides/assets/images/book_icon.gif +0 -0
  46. data/guides/assets/images/bullet.gif +0 -0
  47. data/guides/assets/images/chapters_icon.gif +0 -0
  48. data/guides/assets/images/check_bullet.gif +0 -0
  49. data/guides/assets/images/credits_pic_blank.gif +0 -0
  50. data/guides/assets/images/edge_badge.png +0 -0
  51. data/guides/assets/images/feature_tile.gif +0 -0
  52. data/guides/assets/images/footer_tile.gif +0 -0
  53. data/guides/assets/images/getting_started/clean_passing_jasmine_suite.png +0 -0
  54. data/guides/assets/images/getting_started/rock.png +0 -0
  55. data/guides/assets/images/getting_started/rock_normal.png +0 -0
  56. data/guides/assets/images/grey_bullet.gif +0 -0
  57. data/guides/assets/images/header_backdrop.png +0 -0
  58. data/guides/assets/images/header_tile.gif +0 -0
  59. data/guides/assets/images/icons/README +5 -0
  60. data/guides/assets/images/icons/callouts/1.png +0 -0
  61. data/guides/assets/images/icons/callouts/10.png +0 -0
  62. data/guides/assets/images/icons/callouts/11.png +0 -0
  63. data/guides/assets/images/icons/callouts/12.png +0 -0
  64. data/guides/assets/images/icons/callouts/13.png +0 -0
  65. data/guides/assets/images/icons/callouts/14.png +0 -0
  66. data/guides/assets/images/icons/callouts/15.png +0 -0
  67. data/guides/assets/images/icons/callouts/2.png +0 -0
  68. data/guides/assets/images/icons/callouts/3.png +0 -0
  69. data/guides/assets/images/icons/callouts/4.png +0 -0
  70. data/guides/assets/images/icons/callouts/5.png +0 -0
  71. data/guides/assets/images/icons/callouts/6.png +0 -0
  72. data/guides/assets/images/icons/callouts/7.png +0 -0
  73. data/guides/assets/images/icons/callouts/8.png +0 -0
  74. data/guides/assets/images/icons/callouts/9.png +0 -0
  75. data/guides/assets/images/icons/caution.png +0 -0
  76. data/guides/assets/images/icons/example.png +0 -0
  77. data/guides/assets/images/icons/home.png +0 -0
  78. data/guides/assets/images/icons/important.png +0 -0
  79. data/guides/assets/images/icons/next.png +0 -0
  80. data/guides/assets/images/icons/note.png +0 -0
  81. data/guides/assets/images/icons/prev.png +0 -0
  82. data/guides/assets/images/icons/tip.png +0 -0
  83. data/guides/assets/images/icons/up.png +0 -0
  84. data/guides/assets/images/icons/warning.png +0 -0
  85. data/guides/assets/images/nav_arrow.gif +0 -0
  86. data/guides/assets/images/tab_grey.gif +0 -0
  87. data/guides/assets/images/tab_info.gif +0 -0
  88. data/guides/assets/images/tab_note.gif +0 -0
  89. data/guides/assets/images/tab_red.gif +0 -0
  90. data/guides/assets/images/tab_yellow.gif +0 -0
  91. data/guides/assets/images/tab_yellow.png +0 -0
  92. data/guides/assets/javascripts/guides.js +7 -0
  93. data/guides/assets/javascripts/syntaxhighlighter/shBrushAS3.js +59 -0
  94. data/guides/assets/javascripts/syntaxhighlighter/shBrushAppleScript.js +75 -0
  95. data/guides/assets/javascripts/syntaxhighlighter/shBrushBash.js +59 -0
  96. data/guides/assets/javascripts/syntaxhighlighter/shBrushCSharp.js +65 -0
  97. data/guides/assets/javascripts/syntaxhighlighter/shBrushColdFusion.js +100 -0
  98. data/guides/assets/javascripts/syntaxhighlighter/shBrushCpp.js +97 -0
  99. data/guides/assets/javascripts/syntaxhighlighter/shBrushCss.js +91 -0
  100. data/guides/assets/javascripts/syntaxhighlighter/shBrushDelphi.js +55 -0
  101. data/guides/assets/javascripts/syntaxhighlighter/shBrushDiff.js +41 -0
  102. data/guides/assets/javascripts/syntaxhighlighter/shBrushErlang.js +52 -0
  103. data/guides/assets/javascripts/syntaxhighlighter/shBrushGroovy.js +67 -0
  104. data/guides/assets/javascripts/syntaxhighlighter/shBrushJScript.js +52 -0
  105. data/guides/assets/javascripts/syntaxhighlighter/shBrushJava.js +57 -0
  106. data/guides/assets/javascripts/syntaxhighlighter/shBrushJavaFX.js +58 -0
  107. data/guides/assets/javascripts/syntaxhighlighter/shBrushPerl.js +72 -0
  108. data/guides/assets/javascripts/syntaxhighlighter/shBrushPhp.js +88 -0
  109. data/guides/assets/javascripts/syntaxhighlighter/shBrushPlain.js +33 -0
  110. data/guides/assets/javascripts/syntaxhighlighter/shBrushPowerShell.js +74 -0
  111. data/guides/assets/javascripts/syntaxhighlighter/shBrushPython.js +64 -0
  112. data/guides/assets/javascripts/syntaxhighlighter/shBrushRuby.js +55 -0
  113. data/guides/assets/javascripts/syntaxhighlighter/shBrushSass.js +94 -0
  114. data/guides/assets/javascripts/syntaxhighlighter/shBrushScala.js +51 -0
  115. data/guides/assets/javascripts/syntaxhighlighter/shBrushSql.js +66 -0
  116. data/guides/assets/javascripts/syntaxhighlighter/shBrushVb.js +56 -0
  117. data/guides/assets/javascripts/syntaxhighlighter/shBrushXml.js +69 -0
  118. data/guides/assets/javascripts/syntaxhighlighter/shCore.js +17 -0
  119. data/guides/assets/stylesheets/fixes.css +16 -0
  120. data/guides/assets/stylesheets/main.css +445 -0
  121. data/guides/assets/stylesheets/print.css +52 -0
  122. data/guides/assets/stylesheets/reset.css +43 -0
  123. data/guides/assets/stylesheets/style.css +13 -0
  124. data/guides/assets/stylesheets/syntaxhighlighter/shCore.css +226 -0
  125. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDefault.css +328 -0
  126. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDjango.css +331 -0
  127. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEclipse.css +339 -0
  128. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEmacs.css +324 -0
  129. data/guides/assets/stylesheets/syntaxhighlighter/shCoreFadeToGrey.css +328 -0
  130. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMDUltra.css +324 -0
  131. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMidnight.css +324 -0
  132. data/guides/assets/stylesheets/syntaxhighlighter/shCoreRDark.css +324 -0
  133. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDefault.css +117 -0
  134. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDjango.css +120 -0
  135. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEclipse.css +128 -0
  136. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEmacs.css +113 -0
  137. data/guides/assets/stylesheets/syntaxhighlighter/shThemeFadeToGrey.css +117 -0
  138. data/guides/assets/stylesheets/syntaxhighlighter/shThemeJaxGuides.css +116 -0
  139. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMDUltra.css +113 -0
  140. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMidnight.css +113 -0
  141. data/guides/assets/stylesheets/syntaxhighlighter/shThemeRDark.css +113 -0
  142. data/guides/jax_guides.rb +41 -0
  143. data/guides/jax_guides/common.rb +7 -0
  144. data/guides/jax_guides/generator.rb +287 -0
  145. data/guides/jax_guides/helpers.rb +29 -0
  146. data/guides/jax_guides/indexer.rb +69 -0
  147. data/guides/jax_guides/levenshtein.rb +31 -0
  148. data/guides/jax_guides/textile_extensions.rb +61 -0
  149. data/guides/source/getting_started.textile +1171 -0
  150. data/guides/source/index.html.erb +50 -0
  151. data/guides/source/layout.html.erb +158 -0
  152. data/guides/source/lighting.textile +5 -0
  153. data/guides/source/materials.textile +5 -0
  154. data/guides/source/shaders.textile +5 -0
  155. data/guides/source/testing.textile +5 -0
  156. data/guides/w3c_validator.rb +91 -0
  157. data/jax.gems +1 -0
  158. data/jax.gemspec +40 -0
  159. data/lib/jax.rb +28 -0
  160. data/lib/jax/application.rb +92 -0
  161. data/lib/jax/application/configuration.rb +27 -0
  162. data/lib/jax/generators/app.rb +17 -0
  163. data/lib/jax/generators/app/app_generator.rb +78 -0
  164. data/lib/jax/generators/app/templates/Gemfile.tt +3 -0
  165. data/lib/jax/generators/app/templates/Rakefile +6 -0
  166. data/lib/jax/generators/app/templates/app/controllers/application_controller.js.tt +5 -0
  167. data/lib/jax/generators/app/templates/app/helpers/application_helper.js.tt +3 -0
  168. data/lib/jax/generators/app/templates/app/models/.empty_directory +0 -0
  169. data/lib/jax/generators/app/templates/app/resources/.empty_directory +0 -0
  170. data/lib/jax/generators/app/templates/app/views/.empty_directory +0 -0
  171. data/lib/jax/generators/app/templates/config/application.rb.tt +6 -0
  172. data/lib/jax/generators/app/templates/config/boot.rb +13 -0
  173. data/lib/jax/generators/app/templates/config/routes.rb.tt +5 -0
  174. data/lib/jax/generators/app/templates/public/javascripts/jax.js +7561 -0
  175. data/lib/jax/generators/app/templates/public/webgl_not_supported.html +26 -0
  176. data/lib/jax/generators/app/templates/script/jax +7 -0
  177. data/lib/jax/generators/app/templates/spec/javascripts/controllers/application_controller_spec.js +11 -0
  178. data/lib/jax/generators/app/templates/spec/javascripts/helpers/application_helper_spec.js +12 -0
  179. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine.yml +90 -0
  180. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_config.rb +23 -0
  181. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_runner.rb +32 -0
  182. data/lib/jax/generators/app/templates/spec/javascripts/support/spec_helpers/jax_spec_helper.js +216 -0
  183. data/lib/jax/generators/app/templates/spec/javascripts/support/spec_layout.html.erb +63 -0
  184. data/lib/jax/generators/commands.rb +81 -0
  185. data/lib/jax/generators/controller/USAGE +9 -0
  186. data/lib/jax/generators/controller/controller_generator.rb +59 -0
  187. data/lib/jax/generators/controller/templates/controller_source.js.tt +16 -0
  188. data/lib/jax/generators/controller/templates/controller_test.js.tt +11 -0
  189. data/lib/jax/generators/controller/templates/helper.js.tt +3 -0
  190. data/lib/jax/generators/controller/templates/helper_test.js.tt +12 -0
  191. data/lib/jax/generators/controller/templates/view.js.tt +4 -0
  192. data/lib/jax/generators/light_source/USAGE +14 -0
  193. data/lib/jax/generators/light_source/light_source_generator.rb +47 -0
  194. data/lib/jax/generators/light_source/templates/light.yml.tt +39 -0
  195. data/lib/jax/generators/material/USAGE +29 -0
  196. data/lib/jax/generators/material/material_generator.rb +81 -0
  197. data/lib/jax/generators/material/templates/append.yml.tt +7 -0
  198. data/lib/jax/generators/material/templates/material.yml.tt +33 -0
  199. data/lib/jax/generators/model/USAGE +5 -0
  200. data/lib/jax/generators/model/model_generator.rb +42 -0
  201. data/lib/jax/generators/model/templates/model.js.tt +11 -0
  202. data/lib/jax/generators/model/templates/test.js.tt +11 -0
  203. data/lib/jax/generators/script_jax_loader.rb +32 -0
  204. data/lib/jax/monkeypatch/jasmine.rb +3 -0
  205. data/lib/jax/monkeypatch/jasmine/config.rb +21 -0
  206. data/lib/jax/monkeypatch/jasmine/server.rb +50 -0
  207. data/lib/jax/packager.rb +58 -0
  208. data/lib/jax/packager/sprockets_template.rb +49 -0
  209. data/lib/jax/resource_compiler.rb +50 -0
  210. data/lib/jax/routes.rb +61 -0
  211. data/lib/jax/shader.rb +158 -0
  212. data/lib/jax/tasks/rake.rb +34 -0
  213. data/lib/jax/version.rb +12 -0
  214. data/public/images/brickwall.jpg +0 -0
  215. data/public/images/jacks.jpg +0 -0
  216. data/public/images/normal_map.jpg +0 -0
  217. data/public/images/rock.png +0 -0
  218. data/public/images/rockNormal.png +0 -0
  219. data/public/images/rss.png +0 -0
  220. data/public/webgl_not_supported.html +26 -0
  221. data/spec/example_app/Gemfile +1 -0
  222. data/spec/example_app/Rakefile +15 -0
  223. data/spec/example_app/app/controllers/application_controller.js +5 -0
  224. data/spec/example_app/app/controllers/courthouse_controller.js +24 -0
  225. data/spec/example_app/app/controllers/lighting_controller.js +69 -0
  226. data/spec/example_app/app/controllers/shadows_controller.js +130 -0
  227. data/spec/example_app/app/controllers/textures_controller.js +52 -0
  228. data/spec/example_app/app/helpers/application_helper.js +3 -0
  229. data/spec/example_app/app/helpers/textures_helper.js +3 -0
  230. data/spec/example_app/app/models/character.js +23 -0
  231. data/spec/example_app/app/models/door.js +10 -0
  232. data/spec/example_app/app/models/scene.js +19 -0
  233. data/spec/example_app/app/resources/characters/judge.yml +3 -0
  234. data/spec/example_app/app/resources/doors/courthouse_door.yml +5 -0
  235. data/spec/example_app/app/resources/light_sources/directional_light.yml +13 -0
  236. data/spec/example_app/app/resources/light_sources/point_light.yml +31 -0
  237. data/spec/example_app/app/resources/light_sources/spot_light.yml +15 -0
  238. data/spec/example_app/app/resources/light_sources/sun.yml +7 -0
  239. data/spec/example_app/app/resources/light_sources/textures_point.yml +34 -0
  240. data/spec/example_app/app/resources/materials/bricks.yml +36 -0
  241. data/spec/example_app/app/resources/materials/lighting_with_shadows.yml +27 -0
  242. data/spec/example_app/app/resources/scenes/courthouse.yml +4 -0
  243. data/spec/example_app/app/views/courthouse/index.js +4 -0
  244. data/spec/example_app/app/views/lighting/index.js +4 -0
  245. data/spec/example_app/app/views/shadows/index.js +6 -0
  246. data/spec/example_app/app/views/textures/index.js +4 -0
  247. data/spec/example_app/config/application.rb +6 -0
  248. data/spec/example_app/config/boot.rb +13 -0
  249. data/spec/example_app/config/routes.rb +6 -0
  250. data/spec/example_app/public/images/185__normalmap.png +0 -0
  251. data/spec/example_app/public/images/face_norm.jpg +0 -0
  252. data/spec/example_app/public/images/rock.png +0 -0
  253. data/spec/example_app/public/images/rockNormal.png +0 -0
  254. data/spec/example_app/public/images/rss.png +0 -0
  255. data/spec/example_app/public/webgl_not_supported.html +26 -0
  256. data/spec/example_app/script/jax +7 -0
  257. data/spec/example_app/spec/javascripts/controllers/textures_controller_spec.js +11 -0
  258. data/spec/example_app/spec/javascripts/helpers/application_helper_spec.js +12 -0
  259. data/spec/example_app/spec/javascripts/resources/directional_light_spec.js +16 -0
  260. data/spec/example_app/spec/javascripts/resources/point_light_spec.js +17 -0
  261. data/spec/example_app/spec/javascripts/resources/spot_light_spec.js +18 -0
  262. data/spec/example_app/spec/javascripts/support/jasmine.yml +89 -0
  263. data/spec/example_app/spec/javascripts/support/jasmine_runner.rb +32 -0
  264. data/spec/example_app/spec/javascripts/support/spec_helpers/jax_spec_helper.js +93 -0
  265. data/spec/example_app/spec/javascripts/support/spec_layout.html.erb +84 -0
  266. data/spec/generators/app_generator_spec.rb +46 -0
  267. data/spec/generators/controller_generator_spec.rb +68 -0
  268. data/spec/generators/light_generator_spec.rb +51 -0
  269. data/spec/generators/material_generator_spec.rb +35 -0
  270. data/spec/generators/model_generator_spec.rb +43 -0
  271. data/spec/javascripts/Player.js +58 -0
  272. data/spec/javascripts/helpers/SpecHelper.js +216 -0
  273. data/spec/javascripts/jax/builtin/materials/core_materials_spec.js +41 -0
  274. data/spec/javascripts/jax/builtin/materials/dual_paraboloid_spec.js +37 -0
  275. data/spec/javascripts/jax/builtin/materials/fog_spec.js +19 -0
  276. data/spec/javascripts/jax/builtin/materials/lighting_spec.js +19 -0
  277. data/spec/javascripts/jax/builtin/materials/normal_map_spec.js +19 -0
  278. data/spec/javascripts/jax/builtin/materials/shadow_map_spec.js +19 -0
  279. data/spec/javascripts/jax/builtin/materials/texture_spec.js +19 -0
  280. data/spec/javascripts/jax/builtin/meshes/cube_spec.js +10 -0
  281. data/spec/javascripts/jax/builtin/meshes/plane_spec.js +8 -0
  282. data/spec/javascripts/jax/builtin/meshes/quad_spec.js +8 -0
  283. data/spec/javascripts/jax/builtin/meshes/sphere_spec.js +8 -0
  284. data/spec/javascripts/jax/builtin/meshes/teapot_spec.js +8 -0
  285. data/spec/javascripts/jax/builtin/meshes/torus_spec.js +8 -0
  286. data/spec/javascripts/jax/compatibility_spec.js +50 -0
  287. data/spec/javascripts/jax/context_spec.js +82 -0
  288. data/spec/javascripts/jax/controller_spec.js +145 -0
  289. data/spec/javascripts/jax/core/delegation_spec.js +48 -0
  290. data/spec/javascripts/jax/core/events_spec.js +17 -0
  291. data/spec/javascripts/jax/core/matrix_stack_spec.js +28 -0
  292. data/spec/javascripts/jax/core/utils_spec.js +256 -0
  293. data/spec/javascripts/jax/helper_spec.js +33 -0
  294. data/spec/javascripts/jax/model_spec.js +87 -0
  295. data/spec/javascripts/jax/optimizations/material_limitations_spec.js +87 -0
  296. data/spec/javascripts/jax/optimizations/shaders/basic_spec.js +68 -0
  297. data/spec/javascripts/jax/prototype/extensions_spec.js +34 -0
  298. data/spec/javascripts/jax/route_set_spec.js +67 -0
  299. data/spec/javascripts/jax/view_manager_spec.js +17 -0
  300. data/spec/javascripts/jax/webgl/camera_spec.js +159 -0
  301. data/spec/javascripts/jax/webgl/framebuffer_spec.js +46 -0
  302. data/spec/javascripts/jax/webgl/lighting_spec.js +61 -0
  303. data/spec/javascripts/jax/webgl/material_spec.js +118 -0
  304. data/spec/javascripts/jax/webgl/mesh_spec.js +86 -0
  305. data/spec/javascripts/jax/webgl/shader/manifest_spec.js +60 -0
  306. data/spec/javascripts/jax/webgl/shader_chain_spec.js +192 -0
  307. data/spec/javascripts/jax/webgl/shader_spec.js +276 -0
  308. data/spec/javascripts/jax/webgl/tangent_space_spec.js +142 -0
  309. data/spec/javascripts/jax/webgl/texture_spec.js +162 -0
  310. data/spec/javascripts/jax/webgl_spec.js +5 -0
  311. data/spec/javascripts/jax/world_spec.js +88 -0
  312. data/spec/javascripts/jax_spec.js +27 -0
  313. data/spec/javascripts/support/jasmine.yml +85 -0
  314. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  315. data/spec/lib/jax/routes_spec.rb +24 -0
  316. data/spec/lib/jax/shader_spec.rb +57 -0
  317. data/spec/lib/jax/tasks/jax_rake_spec.rb +79 -0
  318. data/spec/spec_helper.rb +11 -0
  319. data/spec/support/file_exist_matcher.rb +23 -0
  320. data/spec/support/spec_shell.rb +97 -0
  321. data/src/jax.js +84 -0
  322. data/src/jax/anim_frame.js +47 -0
  323. data/src/jax/builtin/all.js +7 -0
  324. data/src/jax/builtin/meshes/cube.js +62 -0
  325. data/src/jax/builtin/meshes/plane.js +36 -0
  326. data/src/jax/builtin/meshes/quad.js +80 -0
  327. data/src/jax/builtin/meshes/sphere.js +46 -0
  328. data/src/jax/builtin/meshes/teapot.js +38 -0
  329. data/src/jax/builtin/meshes/torus.js +46 -0
  330. data/src/jax/compatibility.js +140 -0
  331. data/src/jax/context.js +253 -0
  332. data/src/jax/controller.js +157 -0
  333. data/src/jax/core.js +39 -0
  334. data/src/jax/core/math.js +40 -0
  335. data/src/jax/core/matrix_stack.js +306 -0
  336. data/src/jax/core/util.js +226 -0
  337. data/src/jax/events.js +179 -0
  338. data/src/jax/geometry.js +3 -0
  339. data/src/jax/geometry/plane.js +59 -0
  340. data/src/jax/helper.js +8 -0
  341. data/src/jax/model.js +163 -0
  342. data/src/jax/prototype/class.js +78 -0
  343. data/src/jax/prototype/core.js +112 -0
  344. data/src/jax/prototype/extensions.js +124 -0
  345. data/src/jax/route_set.js +125 -0
  346. data/src/jax/vendor/ejs.js +4 -0
  347. data/src/jax/vendor/glMatrix.js +3 -0
  348. data/src/jax/view.js +37 -0
  349. data/src/jax/view_manager.js +46 -0
  350. data/src/jax/webgl.js +98 -0
  351. data/src/jax/webgl/camera.js +526 -0
  352. data/src/jax/webgl/core.js +6 -0
  353. data/src/jax/webgl/core/buffer.js +161 -0
  354. data/src/jax/webgl/core/edge.js +6 -0
  355. data/src/jax/webgl/core/events.js +25 -0
  356. data/src/jax/webgl/core/face.js +8 -0
  357. data/src/jax/webgl/core/framebuffer.js +206 -0
  358. data/src/jax/webgl/material.js +375 -0
  359. data/src/jax/webgl/mesh.js +412 -0
  360. data/src/jax/webgl/scene.js +11 -0
  361. data/src/jax/webgl/scene/frustum.js +260 -0
  362. data/src/jax/webgl/scene/light_manager.js +112 -0
  363. data/src/jax/webgl/scene/light_source.js +248 -0
  364. data/src/jax/webgl/shader.js +282 -0
  365. data/src/jax/webgl/shader/delegator.js +13 -0
  366. data/src/jax/webgl/shader/delegator/attribute.js +53 -0
  367. data/src/jax/webgl/shader/delegator/uniform.js +71 -0
  368. data/src/jax/webgl/shader/manifest.js +64 -0
  369. data/src/jax/webgl/shader/program.js +140 -0
  370. data/src/jax/webgl/shader_chain.js +256 -0
  371. data/src/jax/webgl/texture.js +312 -0
  372. data/src/jax/webgl/world.js +119 -0
  373. data/vendor/ejs/.svn/all-wcprops +17 -0
  374. data/vendor/ejs/.svn/entries +114 -0
  375. data/vendor/ejs/.svn/text-base/Eratta.txt.svn-base +3 -0
  376. data/vendor/ejs/.svn/text-base/license.txt.svn-base +21 -0
  377. data/vendor/ejs/Eratta.txt +3 -0
  378. data/vendor/ejs/example/.svn/all-wcprops +29 -0
  379. data/vendor/ejs/example/.svn/entries +164 -0
  380. data/vendor/ejs/example/.svn/prop-base/ejs.gif.svn-base +5 -0
  381. data/vendor/ejs/example/.svn/text-base/demo.html.svn-base +54 -0
  382. data/vendor/ejs/example/.svn/text-base/ejs.gif.svn-base +0 -0
  383. data/vendor/ejs/example/.svn/text-base/example.css.svn-base +31 -0
  384. data/vendor/ejs/example/.svn/text-base/example.js.svn-base +88 -0
  385. data/vendor/ejs/example/demo.html +54 -0
  386. data/vendor/ejs/example/ejs.gif +0 -0
  387. data/vendor/ejs/example/example.css +31 -0
  388. data/vendor/ejs/example/example.js +88 -0
  389. data/vendor/ejs/lib/.svn/all-wcprops +11 -0
  390. data/vendor/ejs/lib/.svn/entries +62 -0
  391. data/vendor/ejs/lib/.svn/text-base/ejs_fulljslint.js.svn-base +3774 -0
  392. data/vendor/ejs/lib/ejs_fulljslint.js +3774 -0
  393. data/vendor/ejs/license.txt +21 -0
  394. data/vendor/ejs/script/.svn/all-wcprops +17 -0
  395. data/vendor/ejs/script/.svn/entries +96 -0
  396. data/vendor/ejs/script/.svn/prop-base/yuicompressor-2.2.4.jar.svn-base +5 -0
  397. data/vendor/ejs/script/.svn/text-base/production.bat.svn-base +4 -0
  398. data/vendor/ejs/script/.svn/text-base/yuicompressor-2.2.4.jar.svn-base +0 -0
  399. data/vendor/ejs/script/production.bat +4 -0
  400. data/vendor/ejs/script/yuicompressor-2.2.4.jar +0 -0
  401. data/vendor/ejs/src/.svn/all-wcprops +17 -0
  402. data/vendor/ejs/src/.svn/entries +96 -0
  403. data/vendor/ejs/src/.svn/text-base/ejs.js.svn-base +505 -0
  404. data/vendor/ejs/src/.svn/text-base/view.js.svn-base +200 -0
  405. data/vendor/ejs/src/ejs.js +505 -0
  406. data/vendor/ejs/src/view.js +200 -0
  407. data/vendor/ejs/test/.svn/all-wcprops +23 -0
  408. data/vendor/ejs/test/.svn/entries +139 -0
  409. data/vendor/ejs/test/.svn/text-base/index.html.svn-base +18 -0
  410. data/vendor/ejs/test/.svn/text-base/setup_test.html.svn-base +44 -0
  411. data/vendor/ejs/test/.svn/text-base/sidebar.html.svn-base +28 -0
  412. data/vendor/ejs/test/included/.svn/all-wcprops +23 -0
  413. data/vendor/ejs/test/included/.svn/entries +130 -0
  414. data/vendor/ejs/test/included/.svn/text-base/prototype.js.svn-base +4184 -0
  415. data/vendor/ejs/test/included/.svn/text-base/test.css.svn-base +44 -0
  416. data/vendor/ejs/test/included/.svn/text-base/unittest.js.svn-base +564 -0
  417. data/vendor/ejs/test/included/prototype.js +4184 -0
  418. data/vendor/ejs/test/included/test.css +44 -0
  419. data/vendor/ejs/test/included/unittest.js +564 -0
  420. data/vendor/ejs/test/index.html +18 -0
  421. data/vendor/ejs/test/setup_test.html +44 -0
  422. data/vendor/ejs/test/sidebar.html +28 -0
  423. data/vendor/ejs/test/templates/.svn/all-wcprops +11 -0
  424. data/vendor/ejs/test/templates/.svn/entries +62 -0
  425. data/vendor/ejs/test/templates/.svn/text-base/test.ejs.svn-base +3 -0
  426. data/vendor/ejs/test/templates/test.ejs +3 -0
  427. data/vendor/ejs/test/tests/.svn/all-wcprops +23 -0
  428. data/vendor/ejs/test/tests/.svn/entries +130 -0
  429. data/vendor/ejs/test/tests/.svn/text-base/rendering.js.svn-base +94 -0
  430. data/vendor/ejs/test/tests/.svn/text-base/templating.js.svn-base +43 -0
  431. data/vendor/ejs/test/tests/.svn/text-base/views.js.svn-base +100 -0
  432. data/vendor/ejs/test/tests/rendering.js +94 -0
  433. data/vendor/ejs/test/tests/templating.js +43 -0
  434. data/vendor/ejs/test/tests/views.js +100 -0
  435. data/vendor/glmatrix/benchmark/js/CanvasMatrix.js +722 -0
  436. data/vendor/glmatrix/benchmark/js/EWGL_math.js +742 -0
  437. data/vendor/glmatrix/benchmark/js/mjs.js +1230 -0
  438. data/vendor/glmatrix/benchmark/matrix_benchmark.html +419 -0
  439. data/vendor/glmatrix/glMatrix-min.js +32 -0
  440. data/vendor/glmatrix/glMatrix.js +1815 -0
  441. data/vendor/glmatrix/unit tests/glMatrix-test.js +74 -0
  442. data/vendor/glmatrix/unit tests/qunit.css +119 -0
  443. data/vendor/glmatrix/unit tests/qunit.js +1069 -0
  444. data/vendor/glmatrix/unit tests/test_glMatrix.html +21 -0
  445. data/vendor/yuicompressor-2.4.2.jar +0 -0
  446. metadata +748 -0
@@ -0,0 +1,112 @@
1
+ /*
2
+ Core functions borrowed from Prototype. I don't think these are stepping on anyone's (e.g. jQuery's) toes,
3
+ but if I find out otherwise I'll have to tweak it. The goal here is to be totally compatible with other libraries
4
+ wherever possible.
5
+ */
6
+
7
+ Jax.$A = function(iterable) {
8
+ if (!iterable) return [];
9
+ if ('toArray' in Object(iterable)) return iterable.toArray();
10
+ var length = iterable.length || 0, results = new Array(length);
11
+ while (length--) results[length] = iterable[length];
12
+ return results;
13
+ };
14
+
15
+ /* TODO find a way to avoid polluting Object. */
16
+ Object.isFunction = function(arg) { return Object.prototype.toString.call(arg) === '[object Function]'; };
17
+ Object.isUndefined = function(object) { return typeof object === "undefined"; };
18
+ Object.isArray = function(object) { return Object.prototype.toString.call(object) === '[object Array]'; };
19
+ Object.extend = function(destination, source) {
20
+ for (var property in source)
21
+ destination[property] = source[property];
22
+ return destination;
23
+ };
24
+
25
+ Object.extend(Function.prototype, (function() {
26
+ var slice = Array.prototype.slice;
27
+
28
+ function update(array, args) {
29
+ var arrayLength = array.length, length = args.length;
30
+ while (length--) array[arrayLength + length] = args[length];
31
+ return array;
32
+ }
33
+
34
+ function merge(array, args) {
35
+ array = slice.call(array, 0);
36
+ return update(array, args);
37
+ }
38
+
39
+ function argumentNames() {
40
+ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
41
+ .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
42
+ .replace(/\s+/g, '').split(',');
43
+ return names.length == 1 && !names[0] ? [] : names;
44
+ }
45
+
46
+ function bind(context) {
47
+ if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
48
+ var __method = this, args = slice.call(arguments, 1);
49
+ return function() {
50
+ var a = merge(args, arguments);
51
+ return __method.apply(context, a);
52
+ }
53
+ }
54
+
55
+ function bindAsEventListener(context) {
56
+ var __method = this, args = slice.call(arguments, 1);
57
+ return function(event) {
58
+ var a = update([event || window.event], args);
59
+ return __method.apply(context, a);
60
+ }
61
+ }
62
+
63
+ function curry() {
64
+ if (!arguments.length) return this;
65
+ var __method = this, args = slice.call(arguments, 0);
66
+ return function() {
67
+ var a = merge(args, arguments);
68
+ return __method.apply(this, a);
69
+ }
70
+ }
71
+
72
+ function delay(timeout) {
73
+ var __method = this, args = slice.call(arguments, 1);
74
+ timeout = timeout * 1000;
75
+ return window.setTimeout(function() {
76
+ return __method.apply(__method, args);
77
+ }, timeout);
78
+ }
79
+
80
+ function defer() {
81
+ var args = update([0.01], arguments);
82
+ return this.delay.apply(this, args);
83
+ }
84
+
85
+ function wrap(wrapper) {
86
+ var __method = this;
87
+ return function() {
88
+ var a = update([__method.bind(this)], arguments);
89
+ return wrapper.apply(this, a);
90
+ }
91
+ }
92
+
93
+ function methodize() {
94
+ if (this._methodized) return this._methodized;
95
+ var __method = this;
96
+ return this._methodized = function() {
97
+ var a = update([this], arguments);
98
+ return __method.apply(null, a);
99
+ };
100
+ }
101
+
102
+ return {
103
+ argumentNames: argumentNames,
104
+ bind: bind,
105
+ bindAsEventListener: bindAsEventListener,
106
+ curry: curry,
107
+ delay: delay,
108
+ defer: defer,
109
+ wrap: wrap,
110
+ methodize: methodize
111
+ };
112
+ })());
@@ -0,0 +1,124 @@
1
+ /* My own custom extensions to Prototype */
2
+
3
+ //= require "class"
4
+
5
+ (function() {
6
+ /*
7
+ Delegator is instantiated by the class method #delegate with _this_ and _arguments_ as arguments.
8
+ It is effectively responsible for copying a set of methods into the destination object.
9
+
10
+ @see Jax.Class.Methods#delegate
11
+ */
12
+ var Delegator = Jax.Class.create({
13
+ initialize: function(target, methods) {
14
+ this.methods = methods;
15
+ this.target = target;
16
+ },
17
+
18
+ into: function(destination, dest_klass) {
19
+ /*
20
+ yes, we're using eval in here. But as this method is only called during setup, it's probably OK for the most
21
+ part. Note the caveat that if dest_klass is omitted and the dev is using regular expressions to match method
22
+ names, we have no choice but to put an eval into the alias chain for this.target#initialize. Not ideal but I
23
+ couldn't think of a better way to make it work.
24
+ */
25
+ var methods = {};
26
+ var method_name;
27
+ var alias_chain_regexps = [];
28
+
29
+ for (var i = 0; i < this.methods.length; i++) {
30
+ if (typeof(this.methods[i]) == "string") {
31
+ /* it's not a regexp so this case is pretty straightforward */
32
+ method_name = this.methods[i];
33
+ methods[method_name] =
34
+ eval("(function() { return this."+destination+"."+method_name+".apply(this."+destination+", arguments); })");
35
+ } else if (this.methods[i].test) {
36
+ var method_regexp = this.methods[i];
37
+ /*
38
+ regexp -- this is harder because we don't know what klass _destination_ points to.
39
+ we have two choices: require an explicit klass argument, or assume the dev is prepared
40
+ to pay the overhead price of testing regexps and calling #eval within #initialize.
41
+
42
+ let's do both: if explicit klass was given, use it. Else, set up an alias chain for #initialize.
43
+ */
44
+
45
+ if (dest_klass) {
46
+ for (method_name in dest_klass.prototype) {
47
+ if (method_regexp.test(method_name)) {
48
+ methods[method_name] =
49
+ eval("(function() { return this."+destination+"."+method_name+".apply(this."+destination+", arguments); })");
50
+ }
51
+ }
52
+ } else {
53
+ alias_chain_regexps.push(method_regexp);
54
+ }
55
+ }
56
+ }
57
+
58
+ /* add known methods */
59
+ this.target.addMethods(methods);
60
+
61
+ if (alias_chain_regexps.length > 0) {
62
+ if (!this.target.alias_chain_regexps)
63
+ {
64
+ /* alias chain doesn't yet exist -- create it */
65
+ this.target.alias_chain_regexps = {};
66
+ var original_initialize_method = this.target.prototype.initialize;
67
+ var fn = "(function(){" +
68
+ "if (original_initialize_method) original_initialize_method.apply(this, arguments);" +
69
+ "var i, j, method_name, destination, method_regexp, self = this;" +
70
+
71
+ "destination = this."+destination+";" +
72
+ "for (i = 0; i < this.klass.alias_chain_regexps['"+destination+"'].length; i++) {" +
73
+ "method_regexp = this.klass.alias_chain_regexps['"+destination+"'][i];" +
74
+ "for (j in destination) {" +
75
+ "method_name = j;" +
76
+ "if (method_regexp.test(method_name)) " +
77
+ "this[method_name] = eval('(function(){return self."+destination+".'+method_name+" +
78
+ "'.apply(self."+destination+", arguments);})');" +
79
+ "}" +
80
+ "}" +
81
+ "})";
82
+
83
+ this.target.prototype.initialize = eval(fn);
84
+ }
85
+ /* else, alias chain exists; we only have to add method regexps */
86
+
87
+ this.target.alias_chain_regexps[destination] = this.target.alias_chain_regexps[destination] || [];
88
+ for (i = 0; i < alias_chain_regexps.length; i++) {
89
+ this.target.alias_chain_regexps[destination].push(alias_chain_regexps[i]);
90
+ }
91
+ }
92
+ }
93
+ });
94
+
95
+ /*
96
+ Prototype doesn't seem to have a way to add instance methods to all classes (a generic base object would have
97
+ been nice) so we have to hack it in by aliasing ::create and then replacing it.
98
+ */
99
+ Jax.Class.InstanceMethods = {
100
+ isKindOf: function(klass) {
101
+ return(this instanceof klass);
102
+ }
103
+ };
104
+
105
+ var original_create = Jax.Class.create;
106
+ Jax.Class.create = function() {
107
+ var klass = original_create.apply(Jax.Class, arguments);
108
+ klass.prototype.klass = klass;
109
+ klass.addMethods(Jax.Class.InstanceMethods);
110
+ Jax.Util.addRequestedHelpers(klass);
111
+
112
+ return klass;
113
+ };
114
+
115
+ /*
116
+ class method #delegate
117
+ usages:
118
+ klass.delegate(/^(get|load|mult)(.*)Matrix$/).into("matrix_stack");
119
+ klass.delegate("getProjectionMatrix", "loadModelMatrix").into("matrix_stack");
120
+ */
121
+ Jax.Class.Methods.delegate = function() {
122
+ return new Delegator(this, arguments);
123
+ };
124
+ })();
@@ -0,0 +1,125 @@
1
+ /**
2
+ * class Jax.RouteSet
3
+ *
4
+ * Manages routing for Jax. All routes are mapped through the route set, and
5
+ * the route set is responsible for recognizing routes and dispatching them
6
+ * to the appropriate destination.
7
+ *
8
+ * A route is generally represented as a string of the form
9
+ * "controller_name/action_name", where controller_name is the short name of
10
+ * the controller and the action name is the action to be triggered. For
11
+ * example, a route matching the #index action of the WelcomeController
12
+ * would look like:
13
+ *
14
+ * "welcome/index"
15
+ *
16
+ * A special case is the root route, which is always mapped to "/". This is
17
+ * used to give Jax applications a default starting point. If omitted, it
18
+ * will be necessary to invoke the appropriate controller manually. You
19
+ * can do this by calling Jax.RouteSet#dispatch.
20
+ **/
21
+ Jax.RouteSet = (function() {
22
+ function set_route(self, path, route_descriptor) {
23
+ return self._map[path] = route_descriptor;
24
+ }
25
+
26
+ function find_route(self, path) {
27
+ return self._map[path] || null;
28
+ }
29
+
30
+ return Jax.Class.create({
31
+ initialize: function() {
32
+ this.clear();
33
+ },
34
+
35
+ clear: function() {
36
+ this._map = {};
37
+ },
38
+
39
+ /**
40
+ * Jax.RouteSet#root(controller, actionName) -> undefined
41
+ * - controller (Jax.Controller): the controller that will be routed to
42
+ * - actionName (String): the name of the action to be invoked by this route
43
+ *
44
+ * Note that the controller is expected to be a subclass of Jax.Controller.
45
+ *
46
+ * Example:
47
+ *
48
+ * Jax.routes.root(WelcomeController, "index");
49
+ *
50
+ **/
51
+ root: function() {
52
+ var args = [];
53
+ for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);
54
+ set_route(this, "/", this.getRouteDescriptor.apply(this, args));
55
+ },
56
+
57
+ /**
58
+ * Jax.RouteSet#map(path, controller, actionName) -> undefined
59
+ **/
60
+ map: function(path) {
61
+ var args = [];
62
+ for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);
63
+ set_route(this, path, this.getRouteDescriptor.apply(this, args));
64
+ },
65
+
66
+ getRouteDescriptor: function() {
67
+ var route_descriptor;
68
+ switch(arguments.length) {
69
+ case 1:
70
+ if (typeof(arguments[0]) == "object")
71
+ {
72
+ route_descriptor = arguments[0];
73
+ if (!route_descriptor.action) route_descriptor.action = "index";
74
+ return arguments[0];
75
+ }
76
+ else return { controller: arguments[0], action: "index" };
77
+ case 2: return { controller: arguments[0], action: arguments[1] };
78
+ case 3:
79
+ route_descriptor = arguments[3];
80
+ route_descriptor.controller = arguments[0];
81
+ route_descriptor.action = arguments[1];
82
+ return route_descriptor;
83
+ default: throw new Error("Invalid arguments");
84
+ };
85
+ },
86
+
87
+ /**
88
+ * Jax.RouteSet#recognize_route(path) -> Object
89
+ * - path (String): the route path to be recognized
90
+ *
91
+ * Recognizes the specified path, returning an object with properties
92
+ * 'controller' and 'action'. If the route cannot be recognized, an
93
+ * error is thrown.
94
+ **/
95
+ recognize_route: function(path) {
96
+ var route = find_route(this, path) || find_route(this, path+"/index");
97
+ if (!route) throw new Error("Route not recognized: '"+path+"'");
98
+ return route;
99
+ },
100
+
101
+ /**
102
+ * Jax.RouteSet#isRouted(path) -> Boolean
103
+ * - path (String): the route path to be recognized
104
+ *
105
+ * Returns true if the specified path can be routed, false otherwise.
106
+ **/
107
+ isRouted: function(path) {
108
+ return !!find_route(this, path);
109
+ },
110
+
111
+ /**
112
+ * Jax.RouteSet#dispatch(path) -> Jax.Controller
113
+ * - path (String): the route path to be recognized
114
+ *
115
+ * Recognizes the given path as a route and invokes its controller and action.
116
+ * After the controller has been invoked, the controller instance itself is
117
+ * returned.
118
+ **/
119
+ dispatch: function(path, context) {
120
+ var route = this.recognize_route(path);
121
+
122
+ return route.controller.invoke(route.action, context);
123
+ }
124
+ });
125
+ })();
@@ -0,0 +1,4 @@
1
+ {
2
+ //= require "../../../vendor/ejs/src/ejs"
3
+ //= require "../../../vendor/ejs/src/view"
4
+ };
@@ -0,0 +1,3 @@
1
+ {
2
+ //= require "../../../vendor/glmatrix/glMatrix"
3
+ };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * class Jax.View
3
+ *
4
+ * Provides a container class around which View functions can be stored.
5
+ *
6
+ * This is useful because other parts of Jax will set up helper methods and
7
+ * delegation methods for a View to make use of.
8
+ *
9
+ * For example, one of the most common tasks for a View is to clear the
10
+ * rendering canvas:
11
+ *
12
+ * this.glClear(GL_COLOR_BIT | GL_DEPTH_BUFFER_BIT);
13
+ *
14
+ * The _glClear_ method is delegated into the Jax.Context associated with
15
+ * this view.
16
+ *
17
+ * By default, in addition to all WebGL methods, the following delegates and
18
+ * properties are created by Jax:
19
+ *
20
+ * * *world* - the instance of Jax.World that houses all of the objects in
21
+ * the scene
22
+ * * *player* - the instance of Jax.Player for this context containing information
23
+ * about the human user.
24
+ * * *context* - the instance of Jax.Context that this view is associated with.
25
+ *
26
+ **/
27
+ Jax.View = (function() {
28
+ return Jax.Class.create({
29
+ initialize: function(view_func) {
30
+ this.view_func = view_func;
31
+ },
32
+
33
+ render: function() {
34
+ this.view_func();
35
+ }
36
+ });
37
+ })();
@@ -0,0 +1,46 @@
1
+ /**
2
+ * class Jax.ViewManager
3
+ *
4
+ **/
5
+ Jax.ViewManager = (function() {
6
+ return Jax.Class.create({
7
+ initialize: function() {
8
+ this.views = {};
9
+ },
10
+
11
+ /**
12
+ * Jax.ViewManager#push(path, view) -> undefined
13
+ * - path (String): the view path to be stored
14
+ * - view (Function): a function to be called when rendering the view
15
+ *
16
+ * If the path is already stored, the current one will be replaced.
17
+ **/
18
+ push: function(path, view) {
19
+ this.views[path] = view;
20
+ },
21
+
22
+ /**
23
+ * Jax.ViewManager#get(path) -> Object
24
+ * - path (String): the view path to be returned.
25
+ *
26
+ * Note that every call to this method produces a new instance of Jax.View,
27
+ * so be aware that this can cause efficiency problems and memory leaks
28
+ * if not handled appropriately.
29
+ **/
30
+ get: function(path) {
31
+ if (this.views[path])
32
+ return new Jax.View(this.views[path]);
33
+ else throw new Error("Could not find view at '"+path+"'!");
34
+ },
35
+
36
+ /** alias of: Jax.ViewManager#get
37
+ * Jax.ViewManager#find(path) -> Object
38
+ * - path (String): the view path to be returned.
39
+ *
40
+ * Note that every call to this method produces a new instance of Jax.View,
41
+ * so be aware that this can cause efficiency problems and memory leaks
42
+ * if not handled appropriately.
43
+ **/
44
+ find: function(path) { return this.get(path); }
45
+ });
46
+ })();