javascriptmvc 3.0.0.pre15

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 (550) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/README.markdown +15 -0
  4. data/Rakefile +17 -0
  5. data/VERSION +1 -0
  6. data/bin/jmvc-build +4 -0
  7. data/bin/jmvc-gen +4 -0
  8. data/bin/jmvc-get +4 -0
  9. data/bin/jmvc-init +4 -0
  10. data/bin/jmvc-update +4 -0
  11. data/lib/javascriptmvc.rb +97 -0
  12. data/lib/javascriptmvc/documentjs/README +0 -0
  13. data/lib/javascriptmvc/documentjs/add.js +76 -0
  14. data/lib/javascriptmvc/documentjs/application.js +285 -0
  15. data/lib/javascriptmvc/documentjs/attribute.js +61 -0
  16. data/lib/javascriptmvc/documentjs/baseclass.js +537 -0
  17. data/lib/javascriptmvc/documentjs/class.js +141 -0
  18. data/lib/javascriptmvc/documentjs/constructor.js +145 -0
  19. data/lib/javascriptmvc/documentjs/directives.js +394 -0
  20. data/lib/javascriptmvc/documentjs/distance.js +49 -0
  21. data/lib/javascriptmvc/documentjs/document +21 -0
  22. data/lib/javascriptmvc/documentjs/documentjs.js +76 -0
  23. data/lib/javascriptmvc/documentjs/file.js +55 -0
  24. data/lib/javascriptmvc/documentjs/function.js +112 -0
  25. data/lib/javascriptmvc/documentjs/jmvcdoc/images/close.png +0 -0
  26. data/lib/javascriptmvc/documentjs/jmvcdoc/images/download.png +0 -0
  27. data/lib/javascriptmvc/documentjs/jmvcdoc/images/fav-off.png +0 -0
  28. data/lib/javascriptmvc/documentjs/jmvcdoc/images/fav-on.png +0 -0
  29. data/lib/javascriptmvc/documentjs/jmvcdoc/images/favicon.ico +0 -0
  30. data/lib/javascriptmvc/documentjs/jmvcdoc/images/logo.png +0 -0
  31. data/lib/javascriptmvc/documentjs/jmvcdoc/images/pre.png +0 -0
  32. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  33. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  34. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  35. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  36. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  37. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  38. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  39. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  40. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-icons_222222_256x240.png +0 -0
  41. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-icons_2e83ff_256x240.png +0 -0
  42. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-icons_454545_256x240.png +0 -0
  43. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-icons_888888_256x240.png +0 -0
  44. data/lib/javascriptmvc/documentjs/jmvcdoc/images/ui-icons_cd0a0a_256x240.png +0 -0
  45. data/lib/javascriptmvc/documentjs/jmvcdoc/images/video.png +0 -0
  46. data/lib/javascriptmvc/documentjs/jmvcdoc/production.js +552 -0
  47. data/lib/javascriptmvc/documentjs/jmvcdoc/style.css +354 -0
  48. data/lib/javascriptmvc/documentjs/jmvcdoc/summary.ejs +134 -0
  49. data/lib/javascriptmvc/documentjs/json.js +172 -0
  50. data/lib/javascriptmvc/documentjs/page.js +107 -0
  51. data/lib/javascriptmvc/documentjs/pair.js +302 -0
  52. data/lib/javascriptmvc/documentjs/prototype.js +13 -0
  53. data/lib/javascriptmvc/documentjs/scripts/build.js +6 -0
  54. data/lib/javascriptmvc/documentjs/static.js +25 -0
  55. data/lib/javascriptmvc/documentjs/test/docs/Something.json +1 -0
  56. data/lib/javascriptmvc/documentjs/test/docs/searchData.json +1 -0
  57. data/lib/javascriptmvc/documentjs/test/something.js +8 -0
  58. data/lib/javascriptmvc/documentjs/test/test.html +6 -0
  59. data/lib/javascriptmvc/documentjs/test_doc.html +1 -0
  60. data/lib/javascriptmvc/documentjs/update +5 -0
  61. data/lib/javascriptmvc/funcunit/README +17 -0
  62. data/lib/javascriptmvc/funcunit/autosuggest/auto_suggest.js +495 -0
  63. data/lib/javascriptmvc/funcunit/autosuggest/autosuggest.css +24 -0
  64. data/lib/javascriptmvc/funcunit/autosuggest/autosuggest.html +26 -0
  65. data/lib/javascriptmvc/funcunit/autosuggest/autosuggest.js +17 -0
  66. data/lib/javascriptmvc/funcunit/autosuggest/autosuggest_test.js +14 -0
  67. data/lib/javascriptmvc/funcunit/autosuggest/funcunit.html +15 -0
  68. data/lib/javascriptmvc/funcunit/build.js +54 -0
  69. data/lib/javascriptmvc/funcunit/drivers/selenium.js +129 -0
  70. data/lib/javascriptmvc/funcunit/drivers/standard.js +169 -0
  71. data/lib/javascriptmvc/funcunit/envjs +13 -0
  72. data/lib/javascriptmvc/funcunit/envjs.bat +28 -0
  73. data/lib/javascriptmvc/funcunit/funcunit.html +20 -0
  74. data/lib/javascriptmvc/funcunit/funcunit.js +1509 -0
  75. data/lib/javascriptmvc/funcunit/java/selenium-java-client-driver.jar +0 -0
  76. data/lib/javascriptmvc/funcunit/java/selenium-server.jar +0 -0
  77. data/lib/javascriptmvc/funcunit/qunit.html +22 -0
  78. data/lib/javascriptmvc/funcunit/qunit/qunit.css +119 -0
  79. data/lib/javascriptmvc/funcunit/qunit/qunit.js +1124 -0
  80. data/lib/javascriptmvc/funcunit/qunit/rhino/rhino.js +24 -0
  81. data/lib/javascriptmvc/funcunit/qunit/test/qunit.html +18 -0
  82. data/lib/javascriptmvc/funcunit/qunit/test/test.js +7 -0
  83. data/lib/javascriptmvc/funcunit/resources/funcunit.js +31 -0
  84. data/lib/javascriptmvc/funcunit/resources/jquery.js +6378 -0
  85. data/lib/javascriptmvc/funcunit/resources/json.js +201 -0
  86. data/lib/javascriptmvc/funcunit/resources/selenium_start.js +43 -0
  87. data/lib/javascriptmvc/funcunit/scripts/run.js +36 -0
  88. data/lib/javascriptmvc/funcunit/scripts/test.js +55 -0
  89. data/lib/javascriptmvc/funcunit/settings.js +10 -0
  90. data/lib/javascriptmvc/funcunit/synthetic/browsers.js +151 -0
  91. data/lib/javascriptmvc/funcunit/synthetic/demo.html +150 -0
  92. data/lib/javascriptmvc/funcunit/synthetic/demo/record.js +254 -0
  93. data/lib/javascriptmvc/funcunit/synthetic/drag/drag.html +41 -0
  94. data/lib/javascriptmvc/funcunit/synthetic/drag/drag.js +268 -0
  95. data/lib/javascriptmvc/funcunit/synthetic/drag/qunit.html +20 -0
  96. data/lib/javascriptmvc/funcunit/synthetic/drag/test/qunit/drag_test.js +195 -0
  97. data/lib/javascriptmvc/funcunit/synthetic/drag/test/qunit/qunit.js +7 -0
  98. data/lib/javascriptmvc/funcunit/synthetic/key.js +832 -0
  99. data/lib/javascriptmvc/funcunit/synthetic/mouse.js +291 -0
  100. data/lib/javascriptmvc/funcunit/synthetic/qunit.html +22 -0
  101. data/lib/javascriptmvc/funcunit/synthetic/recorder.html +303 -0
  102. data/lib/javascriptmvc/funcunit/synthetic/synthetic.html +85 -0
  103. data/lib/javascriptmvc/funcunit/synthetic/synthetic.js +796 -0
  104. data/lib/javascriptmvc/funcunit/synthetic/test/qunit/key_test.js +391 -0
  105. data/lib/javascriptmvc/funcunit/synthetic/test/qunit/mouse_test.js +233 -0
  106. data/lib/javascriptmvc/funcunit/synthetic/test/qunit/qunit.js +6 -0
  107. data/lib/javascriptmvc/funcunit/synthetic/test/qunit/synthetic_test.js +91 -0
  108. data/lib/javascriptmvc/funcunit/synthetic/test/submit.html +29 -0
  109. data/lib/javascriptmvc/funcunit/synthetic/test/submitted.html +3 -0
  110. data/lib/javascriptmvc/funcunit/template.html +18 -0
  111. data/lib/javascriptmvc/funcunit/test/drag.html +63 -0
  112. data/lib/javascriptmvc/funcunit/test/funcunit/funcunit.js +3 -0
  113. data/lib/javascriptmvc/funcunit/test/funcunit/funcunit_test.js +87 -0
  114. data/lib/javascriptmvc/funcunit/test/funcunit/open_test.js +28 -0
  115. data/lib/javascriptmvc/funcunit/test/funcunit/protodrag_test.js +13 -0
  116. data/lib/javascriptmvc/funcunit/test/funcunit/syn_test.js +41 -0
  117. data/lib/javascriptmvc/funcunit/test/jquery.event.drag.js +801 -0
  118. data/lib/javascriptmvc/funcunit/test/jquery.event.drop.js +439 -0
  119. data/lib/javascriptmvc/funcunit/test/jquery.js +6360 -0
  120. data/lib/javascriptmvc/funcunit/test/myapp.html +103 -0
  121. data/lib/javascriptmvc/funcunit/test/myotherapp.html +15 -0
  122. data/lib/javascriptmvc/funcunit/test/protodrag/dragdrop.js +974 -0
  123. data/lib/javascriptmvc/funcunit/test/protodrag/effects.js +1123 -0
  124. data/lib/javascriptmvc/funcunit/test/protodrag/funcunit_test.js +20 -0
  125. data/lib/javascriptmvc/funcunit/test/protodrag/myapp.html +63 -0
  126. data/lib/javascriptmvc/funcunit/test/protodrag/prototype.js +4874 -0
  127. data/lib/javascriptmvc/funcunit/test/protodrag/scriptaculous.js +68 -0
  128. data/lib/javascriptmvc/funcunit/update +5 -0
  129. data/lib/javascriptmvc/jquery/README +24 -0
  130. data/lib/javascriptmvc/jquery/build.js +73 -0
  131. data/lib/javascriptmvc/jquery/class/class.html +109 -0
  132. data/lib/javascriptmvc/jquery/class/class.js +627 -0
  133. data/lib/javascriptmvc/jquery/class/qunit.html +15 -0
  134. data/lib/javascriptmvc/jquery/class/test/qunit/class_test.js +146 -0
  135. data/lib/javascriptmvc/jquery/class/test/qunit/qunit.js +5 -0
  136. data/lib/javascriptmvc/jquery/class/test/qunit/test.html +20 -0
  137. data/lib/javascriptmvc/jquery/controller/controller.html +89 -0
  138. data/lib/javascriptmvc/jquery/controller/controller.js +735 -0
  139. data/lib/javascriptmvc/jquery/controller/history/history.html +44 -0
  140. data/lib/javascriptmvc/jquery/controller/history/history.js +177 -0
  141. data/lib/javascriptmvc/jquery/controller/qunit.html +21 -0
  142. data/lib/javascriptmvc/jquery/controller/subscribe/funcunit.html +21 -0
  143. data/lib/javascriptmvc/jquery/controller/subscribe/scripts/compress.js +6 -0
  144. data/lib/javascriptmvc/jquery/controller/subscribe/scripts/docs.js +6 -0
  145. data/lib/javascriptmvc/jquery/controller/subscribe/subscribe.html +56 -0
  146. data/lib/javascriptmvc/jquery/controller/subscribe/subscribe.js +27 -0
  147. data/lib/javascriptmvc/jquery/controller/subscribe/test/funcunit/funcunit.js +3 -0
  148. data/lib/javascriptmvc/jquery/controller/subscribe/test/funcunit/run.js +10 -0
  149. data/lib/javascriptmvc/jquery/controller/subscribe/test/funcunit/subscribe_test.js +11 -0
  150. data/lib/javascriptmvc/jquery/controller/subscribe/test/qunit/qunit.html +21 -0
  151. data/lib/javascriptmvc/jquery/controller/subscribe/test/qunit/qunit.js +9 -0
  152. data/lib/javascriptmvc/jquery/controller/subscribe/test/qunit/run.js +2 -0
  153. data/lib/javascriptmvc/jquery/controller/subscribe/test/qunit/subscribe_test.js +4 -0
  154. data/lib/javascriptmvc/jquery/controller/test/qunit/controller_test.js +170 -0
  155. data/lib/javascriptmvc/jquery/controller/test/qunit/qunit.js +9 -0
  156. data/lib/javascriptmvc/jquery/controller/view/qunit.html +21 -0
  157. data/lib/javascriptmvc/jquery/controller/view/test/qunit/controller_view_test.js +15 -0
  158. data/lib/javascriptmvc/jquery/controller/view/test/qunit/qunit.js +6 -0
  159. data/lib/javascriptmvc/jquery/controller/view/test/qunit/views/init.micro +1 -0
  160. data/lib/javascriptmvc/jquery/controller/view/view.js +102 -0
  161. data/lib/javascriptmvc/jquery/dom/closest/closest.html +23 -0
  162. data/lib/javascriptmvc/jquery/dom/closest/closest.js +47 -0
  163. data/lib/javascriptmvc/jquery/dom/closest/funcunit.html +20 -0
  164. data/lib/javascriptmvc/jquery/dom/closest/qunit.html +22 -0
  165. data/lib/javascriptmvc/jquery/dom/closest/scripts/compress.js +3 -0
  166. data/lib/javascriptmvc/jquery/dom/closest/scripts/doc.js +4 -0
  167. data/lib/javascriptmvc/jquery/dom/closest/scripts/test.js +55 -0
  168. data/lib/javascriptmvc/jquery/dom/closest/settings.js +40 -0
  169. data/lib/javascriptmvc/jquery/dom/closest/test/funcunit/funcunit.js +3 -0
  170. data/lib/javascriptmvc/jquery/dom/closest/test/funcunit/tests/basic.js +11 -0
  171. data/lib/javascriptmvc/jquery/dom/closest/test/qunit/qunit.js +4 -0
  172. data/lib/javascriptmvc/jquery/dom/closest/test/qunit/tests/basic.js +4 -0
  173. data/lib/javascriptmvc/jquery/dom/compare/compare.html +88 -0
  174. data/lib/javascriptmvc/jquery/dom/compare/compare.js +67 -0
  175. data/lib/javascriptmvc/jquery/dom/compare/qunit.html +20 -0
  176. data/lib/javascriptmvc/jquery/dom/compare/test/qunit/compare_test.js +19 -0
  177. data/lib/javascriptmvc/jquery/dom/compare/test/qunit/qunit.js +5 -0
  178. data/lib/javascriptmvc/jquery/dom/cookie/cookie.html +25 -0
  179. data/lib/javascriptmvc/jquery/dom/cookie/cookie.js +119 -0
  180. data/lib/javascriptmvc/jquery/dom/cookie/scripts/compress.js +6 -0
  181. data/lib/javascriptmvc/jquery/dom/cookie/scripts/doc.js +6 -0
  182. data/lib/javascriptmvc/jquery/dom/cookie/test/funcunit/cookie_test.js +11 -0
  183. data/lib/javascriptmvc/jquery/dom/cookie/test/funcunit/funcunit.html +21 -0
  184. data/lib/javascriptmvc/jquery/dom/cookie/test/funcunit/funcunit.js +3 -0
  185. data/lib/javascriptmvc/jquery/dom/cookie/test/funcunit/run.js +10 -0
  186. data/lib/javascriptmvc/jquery/dom/cookie/test/qunit/cookie_test.js +4 -0
  187. data/lib/javascriptmvc/jquery/dom/cookie/test/qunit/qunit.html +21 -0
  188. data/lib/javascriptmvc/jquery/dom/cookie/test/qunit/qunit.js +9 -0
  189. data/lib/javascriptmvc/jquery/dom/cookie/test/qunit/run.js +2 -0
  190. data/lib/javascriptmvc/jquery/dom/cur_styles/cur_styles.html +71 -0
  191. data/lib/javascriptmvc/jquery/dom/cur_styles/cur_styles.js +120 -0
  192. data/lib/javascriptmvc/jquery/dom/cur_styles/qunit.html +22 -0
  193. data/lib/javascriptmvc/jquery/dom/cur_styles/test/qunit/curStyles.micro +3 -0
  194. data/lib/javascriptmvc/jquery/dom/cur_styles/test/qunit/cur_styles_test.js +22 -0
  195. data/lib/javascriptmvc/jquery/dom/cur_styles/test/qunit/outer.micro +0 -0
  196. data/lib/javascriptmvc/jquery/dom/cur_styles/test/qunit/qunit.js +4 -0
  197. data/lib/javascriptmvc/jquery/dom/dimensions/curstyles.html +22 -0
  198. data/lib/javascriptmvc/jquery/dom/dimensions/dimensions.html +132 -0
  199. data/lib/javascriptmvc/jquery/dom/dimensions/dimensions.js +140 -0
  200. data/lib/javascriptmvc/jquery/dom/dimensions/qunit.html +22 -0
  201. data/lib/javascriptmvc/jquery/dom/dimensions/test/qunit/curStyles.micro +3 -0
  202. data/lib/javascriptmvc/jquery/dom/dimensions/test/qunit/dimensions_test.js +8 -0
  203. data/lib/javascriptmvc/jquery/dom/dimensions/test/qunit/outer.micro +0 -0
  204. data/lib/javascriptmvc/jquery/dom/dimensions/test/qunit/qunit.js +4 -0
  205. data/lib/javascriptmvc/jquery/dom/dom.js +7 -0
  206. data/lib/javascriptmvc/jquery/dom/fixture/fixture.html +143 -0
  207. data/lib/javascriptmvc/jquery/dom/fixture/fixture.js +521 -0
  208. data/lib/javascriptmvc/jquery/dom/fixture/fixtures/messages.html +31 -0
  209. data/lib/javascriptmvc/jquery/dom/fixture/fixtures/test.json +3 -0
  210. data/lib/javascriptmvc/jquery/dom/fixture/qunit.html +22 -0
  211. data/lib/javascriptmvc/jquery/dom/fixture/test/qunit/fixture_test.js +50 -0
  212. data/lib/javascriptmvc/jquery/dom/fixture/test/qunit/qunit.js +4 -0
  213. data/lib/javascriptmvc/jquery/dom/form_params/form_params.html +57 -0
  214. data/lib/javascriptmvc/jquery/dom/form_params/form_params.js +106 -0
  215. data/lib/javascriptmvc/jquery/dom/form_params/qunit.html +22 -0
  216. data/lib/javascriptmvc/jquery/dom/form_params/test/qunit/basics.micro +27 -0
  217. data/lib/javascriptmvc/jquery/dom/form_params/test/qunit/checkbox.micro +20 -0
  218. data/lib/javascriptmvc/jquery/dom/form_params/test/qunit/form_params_test.js +43 -0
  219. data/lib/javascriptmvc/jquery/dom/form_params/test/qunit/qunit.js +4 -0
  220. data/lib/javascriptmvc/jquery/dom/form_params/test/qunit/truthy.micro +8 -0
  221. data/lib/javascriptmvc/jquery/dom/within/within.js +67 -0
  222. data/lib/javascriptmvc/jquery/error/background.png +0 -0
  223. data/lib/javascriptmvc/jquery/error/error.html +31 -0
  224. data/lib/javascriptmvc/jquery/error/error.js +227 -0
  225. data/lib/javascriptmvc/jquery/error/setup.js +4 -0
  226. data/lib/javascriptmvc/jquery/error/test/test.html +23 -0
  227. data/lib/javascriptmvc/jquery/error/test/test.js +4 -0
  228. data/lib/javascriptmvc/jquery/event/default/compress.js +7 -0
  229. data/lib/javascriptmvc/jquery/event/default/default.html +85 -0
  230. data/lib/javascriptmvc/jquery/event/default/default.js +193 -0
  231. data/lib/javascriptmvc/jquery/event/default/defaultjquery.html +117 -0
  232. data/lib/javascriptmvc/jquery/event/default/qunit.html +22 -0
  233. data/lib/javascriptmvc/jquery/event/default/test/qunit/default_test.js +104 -0
  234. data/lib/javascriptmvc/jquery/event/default/test/qunit/html.micro +8 -0
  235. data/lib/javascriptmvc/jquery/event/default/test/qunit/qunit.js +6 -0
  236. data/lib/javascriptmvc/jquery/event/default/test/qunit/run.js +2 -0
  237. data/lib/javascriptmvc/jquery/event/destroyed/destroyed.html +24 -0
  238. data/lib/javascriptmvc/jquery/event/destroyed/destroyed.js +40 -0
  239. data/lib/javascriptmvc/jquery/event/destroyed/destroyed_menu.html +96 -0
  240. data/lib/javascriptmvc/jquery/event/destroyed/qunit.html +21 -0
  241. data/lib/javascriptmvc/jquery/event/destroyed/test/qunit/destroyed_test.js +12 -0
  242. data/lib/javascriptmvc/jquery/event/destroyed/test/qunit/qunit.js +6 -0
  243. data/lib/javascriptmvc/jquery/event/drag/drag.html +105 -0
  244. data/lib/javascriptmvc/jquery/event/drag/drag.js +466 -0
  245. data/lib/javascriptmvc/jquery/event/drag/limit/limit.html +74 -0
  246. data/lib/javascriptmvc/jquery/event/drag/limit/limit.js +56 -0
  247. data/lib/javascriptmvc/jquery/event/drag/limit/scripts/compress.js +6 -0
  248. data/lib/javascriptmvc/jquery/event/drag/limit/scripts/doc.js +6 -0
  249. data/lib/javascriptmvc/jquery/event/drag/limit/test/funcunit/funcunit.html +21 -0
  250. data/lib/javascriptmvc/jquery/event/drag/limit/test/funcunit/funcunit.js +3 -0
  251. data/lib/javascriptmvc/jquery/event/drag/limit/test/funcunit/limit_test.js +11 -0
  252. data/lib/javascriptmvc/jquery/event/drag/limit/test/funcunit/run.js +10 -0
  253. data/lib/javascriptmvc/jquery/event/drag/limit/test/qunit/limit_test.js +4 -0
  254. data/lib/javascriptmvc/jquery/event/drag/limit/test/qunit/qunit.html +21 -0
  255. data/lib/javascriptmvc/jquery/event/drag/limit/test/qunit/qunit.js +9 -0
  256. data/lib/javascriptmvc/jquery/event/drag/limit/test/qunit/run.js +2 -0
  257. data/lib/javascriptmvc/jquery/event/drag/qunit.html +16 -0
  258. data/lib/javascriptmvc/jquery/event/drag/scroll/scroll.js +120 -0
  259. data/lib/javascriptmvc/jquery/event/drag/test/qunit/drag_test.js +130 -0
  260. data/lib/javascriptmvc/jquery/event/drag/test/qunit/qunit.js +4 -0
  261. data/lib/javascriptmvc/jquery/event/drop/drop.html +74 -0
  262. data/lib/javascriptmvc/jquery/event/drop/drop.js +301 -0
  263. data/lib/javascriptmvc/jquery/event/event.js +6 -0
  264. data/lib/javascriptmvc/jquery/event/hashchange/hashchange.js +245 -0
  265. data/lib/javascriptmvc/jquery/event/hover/compress.js +7 -0
  266. data/lib/javascriptmvc/jquery/event/hover/hover.html +56 -0
  267. data/lib/javascriptmvc/jquery/event/hover/hover.js +219 -0
  268. data/lib/javascriptmvc/jquery/event/hover/qunit.html +16 -0
  269. data/lib/javascriptmvc/jquery/event/hover/test/qunit/hover_test.js +55 -0
  270. data/lib/javascriptmvc/jquery/event/hover/test/qunit/qunit.js +4 -0
  271. data/lib/javascriptmvc/jquery/event/livehack/compress.js +7 -0
  272. data/lib/javascriptmvc/jquery/event/livehack/funcunit.html +21 -0
  273. data/lib/javascriptmvc/jquery/event/livehack/livehack.html +25 -0
  274. data/lib/javascriptmvc/jquery/event/livehack/livehack.js +167 -0
  275. data/lib/javascriptmvc/jquery/event/offline/funcunit.html +20 -0
  276. data/lib/javascriptmvc/jquery/event/offline/offline.html +26 -0
  277. data/lib/javascriptmvc/jquery/event/offline/offline.js +36 -0
  278. data/lib/javascriptmvc/jquery/event/offline/qunit.html +22 -0
  279. data/lib/javascriptmvc/jquery/event/offline/scripts/compress.js +3 -0
  280. data/lib/javascriptmvc/jquery/event/offline/scripts/doc.js +4 -0
  281. data/lib/javascriptmvc/jquery/event/offline/settings.js +41 -0
  282. data/lib/javascriptmvc/jquery/event/offline/test/funcunit/funcunit.js +3 -0
  283. data/lib/javascriptmvc/jquery/event/offline/test/funcunit/tests/basic.js +11 -0
  284. data/lib/javascriptmvc/jquery/event/offline/test/qunit/qunit.js +4 -0
  285. data/lib/javascriptmvc/jquery/event/offline/test/qunit/tests/basic.js +4 -0
  286. data/lib/javascriptmvc/jquery/event/resize/funcunit.html +20 -0
  287. data/lib/javascriptmvc/jquery/event/resize/qunit.html +22 -0
  288. data/lib/javascriptmvc/jquery/event/resize/resize.html +23 -0
  289. data/lib/javascriptmvc/jquery/event/resize/resize.js +50 -0
  290. data/lib/javascriptmvc/jquery/event/resize/scripts/compress.js +3 -0
  291. data/lib/javascriptmvc/jquery/event/resize/scripts/doc.js +4 -0
  292. data/lib/javascriptmvc/jquery/event/resize/scripts/test.js +55 -0
  293. data/lib/javascriptmvc/jquery/event/resize/settings.js +40 -0
  294. data/lib/javascriptmvc/jquery/event/resize/test/funcunit/funcunit.js +3 -0
  295. data/lib/javascriptmvc/jquery/event/resize/test/funcunit/tests/basic.js +11 -0
  296. data/lib/javascriptmvc/jquery/event/resize/test/qunit/qunit.js +4 -0
  297. data/lib/javascriptmvc/jquery/event/resize/test/qunit/tests/basic.js +4 -0
  298. data/lib/javascriptmvc/jquery/event/select/scripts/compress.js +6 -0
  299. data/lib/javascriptmvc/jquery/event/select/scripts/doc.js +6 -0
  300. data/lib/javascriptmvc/jquery/event/select/select.html +63 -0
  301. data/lib/javascriptmvc/jquery/event/select/select.js +65 -0
  302. data/lib/javascriptmvc/jquery/event/select/test/funcunit/funcunit.html +21 -0
  303. data/lib/javascriptmvc/jquery/event/select/test/funcunit/funcunit.js +3 -0
  304. data/lib/javascriptmvc/jquery/event/select/test/funcunit/run.js +10 -0
  305. data/lib/javascriptmvc/jquery/event/select/test/funcunit/select_test.js +11 -0
  306. data/lib/javascriptmvc/jquery/event/select/test/qunit/qunit.html +21 -0
  307. data/lib/javascriptmvc/jquery/event/select/test/qunit/qunit.js +5 -0
  308. data/lib/javascriptmvc/jquery/event/select/test/qunit/run.js +2 -0
  309. data/lib/javascriptmvc/jquery/event/select/test/qunit/select_test.js +4 -0
  310. data/lib/javascriptmvc/jquery/generate/app +23 -0
  311. data/lib/javascriptmvc/jquery/generate/controller +21 -0
  312. data/lib/javascriptmvc/jquery/generate/model +26 -0
  313. data/lib/javascriptmvc/jquery/generate/page +20 -0
  314. data/lib/javascriptmvc/jquery/generate/plugin +20 -0
  315. data/lib/javascriptmvc/jquery/generate/scaffold +23 -0
  316. data/lib/javascriptmvc/jquery/generate/templates/app/(application_name).css.ejs +4 -0
  317. data/lib/javascriptmvc/jquery/generate/templates/app/(application_name).html.ejs +23 -0
  318. data/lib/javascriptmvc/jquery/generate/templates/app/(application_name).js.ejs +21 -0
  319. data/lib/javascriptmvc/jquery/generate/templates/app/controllers/.ignore +0 -0
  320. data/lib/javascriptmvc/jquery/generate/templates/app/docs/.ignore +0 -0
  321. data/lib/javascriptmvc/jquery/generate/templates/app/fixtures/.ignore +0 -0
  322. data/lib/javascriptmvc/jquery/generate/templates/app/funcunit.html.ejs +15 -0
  323. data/lib/javascriptmvc/jquery/generate/templates/app/models/.ignore +0 -0
  324. data/lib/javascriptmvc/jquery/generate/templates/app/qunit.html.ejs +20 -0
  325. data/lib/javascriptmvc/jquery/generate/templates/app/resources/.ignore +0 -0
  326. data/lib/javascriptmvc/jquery/generate/templates/app/scripts/build.js.ejs +6 -0
  327. data/lib/javascriptmvc/jquery/generate/templates/app/scripts/clean.js.ejs +6 -0
  328. data/lib/javascriptmvc/jquery/generate/templates/app/scripts/docs.js.ejs +4 -0
  329. data/lib/javascriptmvc/jquery/generate/templates/app/test/funcunit/(application_name)_test.js.ejs +9 -0
  330. data/lib/javascriptmvc/jquery/generate/templates/app/test/funcunit/funcunit.js.ejs +3 -0
  331. data/lib/javascriptmvc/jquery/generate/templates/app/test/qunit/(application_name)_test.js.ejs +5 -0
  332. data/lib/javascriptmvc/jquery/generate/templates/app/test/qunit/qunit.js.ejs +3 -0
  333. data/lib/javascriptmvc/jquery/generate/templates/app/views/.ignore +0 -0
  334. data/lib/javascriptmvc/jquery/generate/templates/controller/controllers/(underscore)_controller.js.ejs +12 -0
  335. data/lib/javascriptmvc/jquery/generate/templates/model/fixtures.link +1 -0
  336. data/lib/javascriptmvc/jquery/generate/templates/model/models.link +1 -0
  337. data/lib/javascriptmvc/jquery/generate/templates/model/test/qunit.link +1 -0
  338. data/lib/javascriptmvc/jquery/generate/templates/page.ejs +23 -0
  339. data/lib/javascriptmvc/jquery/generate/templates/plugin/(application_name).html.ejs +23 -0
  340. data/lib/javascriptmvc/jquery/generate/templates/plugin/(application_name).js.ejs +3 -0
  341. data/lib/javascriptmvc/jquery/generate/templates/plugin/fixtures/.ignore +0 -0
  342. data/lib/javascriptmvc/jquery/generate/templates/plugin/funcunit.html.ejs +15 -0
  343. data/lib/javascriptmvc/jquery/generate/templates/plugin/qunit.html.ejs +20 -0
  344. data/lib/javascriptmvc/jquery/generate/templates/plugin/resources/.ignore +0 -0
  345. data/lib/javascriptmvc/jquery/generate/templates/plugin/scripts.link +1 -0
  346. data/lib/javascriptmvc/jquery/generate/templates/plugin/test.link +1 -0
  347. data/lib/javascriptmvc/jquery/generate/templates/plugin/views/.ignore +0 -0
  348. data/lib/javascriptmvc/jquery/generate/templates/scaffold/controllers/(underscore)_controller.js.ejs +96 -0
  349. data/lib/javascriptmvc/jquery/generate/templates/scaffold/fixtures/(plural).json.get.ejs +3 -0
  350. data/lib/javascriptmvc/jquery/generate/templates/scaffold/models/(underscore).js.ejs +83 -0
  351. data/lib/javascriptmvc/jquery/generate/templates/scaffold/test/funcunit/(underscore)_controller_test.js.ejs +63 -0
  352. data/lib/javascriptmvc/jquery/generate/templates/scaffold/test/qunit/(underscore)_test.js.ejs +45 -0
  353. data/lib/javascriptmvc/jquery/generate/templates/scaffold/views/(underscore)/edit.ejs.ejs +10 -0
  354. data/lib/javascriptmvc/jquery/generate/templates/scaffold/views/(underscore)/init.ejs.ejs +26 -0
  355. data/lib/javascriptmvc/jquery/generate/templates/scaffold/views/(underscore)/list.ejs.ejs +5 -0
  356. data/lib/javascriptmvc/jquery/generate/templates/scaffold/views/(underscore)/show.ejs.ejs +10 -0
  357. data/lib/javascriptmvc/jquery/jquery.js +6360 -0
  358. data/lib/javascriptmvc/jquery/lang/json/json.html +25 -0
  359. data/lib/javascriptmvc/jquery/lang/json/json.js +201 -0
  360. data/lib/javascriptmvc/jquery/lang/json/scripts/compress.js +6 -0
  361. data/lib/javascriptmvc/jquery/lang/json/scripts/doc.js +6 -0
  362. data/lib/javascriptmvc/jquery/lang/json/test/funcunit/funcunit.html +21 -0
  363. data/lib/javascriptmvc/jquery/lang/json/test/funcunit/funcunit.js +3 -0
  364. data/lib/javascriptmvc/jquery/lang/json/test/funcunit/json_test.js +11 -0
  365. data/lib/javascriptmvc/jquery/lang/json/test/funcunit/run.js +10 -0
  366. data/lib/javascriptmvc/jquery/lang/json/test/qunit/json_test.js +4 -0
  367. data/lib/javascriptmvc/jquery/lang/json/test/qunit/qunit.html +21 -0
  368. data/lib/javascriptmvc/jquery/lang/json/test/qunit/qunit.js +9 -0
  369. data/lib/javascriptmvc/jquery/lang/json/test/qunit/run.js +2 -0
  370. data/lib/javascriptmvc/jquery/lang/lang.html +27 -0
  371. data/lib/javascriptmvc/jquery/lang/lang.js +104 -0
  372. data/lib/javascriptmvc/jquery/lang/openajax/openajax.js +202 -0
  373. data/lib/javascriptmvc/jquery/lang/rsplit/rsplit.js +31 -0
  374. data/lib/javascriptmvc/jquery/lang/vector/vector.js +167 -0
  375. data/lib/javascriptmvc/jquery/model/associations/associations.html +25 -0
  376. data/lib/javascriptmvc/jquery/model/associations/associations.js +46 -0
  377. data/lib/javascriptmvc/jquery/model/associations/qunit.html +21 -0
  378. data/lib/javascriptmvc/jquery/model/associations/test/qunit/associations_test.js +51 -0
  379. data/lib/javascriptmvc/jquery/model/associations/test/qunit/qunit.js +9 -0
  380. data/lib/javascriptmvc/jquery/model/associations/test/qunit/run.js +2 -0
  381. data/lib/javascriptmvc/jquery/model/backup/backup.js +82 -0
  382. data/lib/javascriptmvc/jquery/model/json_rest/json_rest.js +91 -0
  383. data/lib/javascriptmvc/jquery/model/list/list.js +148 -0
  384. data/lib/javascriptmvc/jquery/model/list/qunit.html +16 -0
  385. data/lib/javascriptmvc/jquery/model/list/test/qunit/list_test.js +58 -0
  386. data/lib/javascriptmvc/jquery/model/list/test/qunit/qunit.js +6 -0
  387. data/lib/javascriptmvc/jquery/model/list/test/qunit/run.js +0 -0
  388. data/lib/javascriptmvc/jquery/model/model.js +537 -0
  389. data/lib/javascriptmvc/jquery/model/qunit.html +17 -0
  390. data/lib/javascriptmvc/jquery/model/store/store.js +66 -0
  391. data/lib/javascriptmvc/jquery/model/test/qunit/model_test.js +71 -0
  392. data/lib/javascriptmvc/jquery/model/test/qunit/qunit.js +5 -0
  393. data/lib/javascriptmvc/jquery/qunit.html +15 -0
  394. data/lib/javascriptmvc/jquery/test/funcunit/funcunit.html +21 -0
  395. data/lib/javascriptmvc/jquery/test/funcunit/funcunit.js +3 -0
  396. data/lib/javascriptmvc/jquery/test/funcunit/jquerytest_test.js +11 -0
  397. data/lib/javascriptmvc/jquery/test/funcunit/run.js +10 -0
  398. data/lib/javascriptmvc/jquery/test/qunit/qunit.js +22 -0
  399. data/lib/javascriptmvc/jquery/update +5 -0
  400. data/lib/javascriptmvc/jquery/view/compress.js +7 -0
  401. data/lib/javascriptmvc/jquery/view/ejs/ejs.html +25 -0
  402. data/lib/javascriptmvc/jquery/view/ejs/ejs.js +489 -0
  403. data/lib/javascriptmvc/jquery/view/ejs/funcunit.html +21 -0
  404. data/lib/javascriptmvc/jquery/view/ejs/test/funcunit/ejs_test.js +11 -0
  405. data/lib/javascriptmvc/jquery/view/ejs/test/funcunit/funcunit.js +3 -0
  406. data/lib/javascriptmvc/jquery/view/ejs/test/funcunit/run.js +10 -0
  407. data/lib/javascriptmvc/jquery/view/ejs/test/qunit/ejs_test.js +4 -0
  408. data/lib/javascriptmvc/jquery/view/ejs/test/qunit/qunit.html +21 -0
  409. data/lib/javascriptmvc/jquery/view/ejs/test/qunit/qunit.js +9 -0
  410. data/lib/javascriptmvc/jquery/view/ejs/test/qunit/run.js +2 -0
  411. data/lib/javascriptmvc/jquery/view/fulljslint.js +3774 -0
  412. data/lib/javascriptmvc/jquery/view/helpers/helpers.js +338 -0
  413. data/lib/javascriptmvc/jquery/view/jaml/compress.js +7 -0
  414. data/lib/javascriptmvc/jquery/view/jaml/funcunit.html +21 -0
  415. data/lib/javascriptmvc/jquery/view/jaml/jaml.html +25 -0
  416. data/lib/javascriptmvc/jquery/view/jaml/jaml.js +73 -0
  417. data/lib/javascriptmvc/jquery/view/jaml/node.js +149 -0
  418. data/lib/javascriptmvc/jquery/view/jaml/template.js +131 -0
  419. data/lib/javascriptmvc/jquery/view/jaml/test/funcunit/funcunit.js +3 -0
  420. data/lib/javascriptmvc/jquery/view/jaml/test/funcunit/jaml_test.js +11 -0
  421. data/lib/javascriptmvc/jquery/view/jaml/test/funcunit/run.js +10 -0
  422. data/lib/javascriptmvc/jquery/view/jaml/test/qunit/jaml_test.js +4 -0
  423. data/lib/javascriptmvc/jquery/view/jaml/test/qunit/qunit.html +21 -0
  424. data/lib/javascriptmvc/jquery/view/jaml/test/qunit/qunit.js +9 -0
  425. data/lib/javascriptmvc/jquery/view/jaml/test/qunit/run.js +2 -0
  426. data/lib/javascriptmvc/jquery/view/micro/compress.js +7 -0
  427. data/lib/javascriptmvc/jquery/view/micro/funcunit.html +21 -0
  428. data/lib/javascriptmvc/jquery/view/micro/micro.html +25 -0
  429. data/lib/javascriptmvc/jquery/view/micro/micro.js +57 -0
  430. data/lib/javascriptmvc/jquery/view/micro/test/funcunit/funcunit.js +3 -0
  431. data/lib/javascriptmvc/jquery/view/micro/test/funcunit/micro_test.js +11 -0
  432. data/lib/javascriptmvc/jquery/view/micro/test/funcunit/run.js +10 -0
  433. data/lib/javascriptmvc/jquery/view/micro/test/qunit/micro_test.js +4 -0
  434. data/lib/javascriptmvc/jquery/view/micro/test/qunit/qunit.html +21 -0
  435. data/lib/javascriptmvc/jquery/view/micro/test/qunit/qunit.js +9 -0
  436. data/lib/javascriptmvc/jquery/view/micro/test/qunit/run.js +2 -0
  437. data/lib/javascriptmvc/jquery/view/qunit.html +16 -0
  438. data/lib/javascriptmvc/jquery/view/test/compression/compression.html +12 -0
  439. data/lib/javascriptmvc/jquery/view/test/compression/compression.js +11 -0
  440. data/lib/javascriptmvc/jquery/view/test/compression/run.js +36 -0
  441. data/lib/javascriptmvc/jquery/view/test/funcunit/funcunit.js +3 -0
  442. data/lib/javascriptmvc/jquery/view/test/funcunit/run.js +10 -0
  443. data/lib/javascriptmvc/jquery/view/test/funcunit/view_test.js +11 -0
  444. data/lib/javascriptmvc/jquery/view/test/qunit/nested_plugin.ejs +1 -0
  445. data/lib/javascriptmvc/jquery/view/test/qunit/plugin.ejs +1 -0
  446. data/lib/javascriptmvc/jquery/view/test/qunit/qunit.js +9 -0
  447. data/lib/javascriptmvc/jquery/view/test/qunit/template.ejs +1 -0
  448. data/lib/javascriptmvc/jquery/view/test/qunit/template.jaml +3 -0
  449. data/lib/javascriptmvc/jquery/view/test/qunit/template.micro +1 -0
  450. data/lib/javascriptmvc/jquery/view/test/qunit/template.tmpl +1 -0
  451. data/lib/javascriptmvc/jquery/view/test/qunit/view_test.js +24 -0
  452. data/lib/javascriptmvc/jquery/view/tmpl/tmpl.js +150 -0
  453. data/lib/javascriptmvc/jquery/view/view.html +65 -0
  454. data/lib/javascriptmvc/jquery/view/view.js +296 -0
  455. data/lib/javascriptmvc/js +56 -0
  456. data/lib/javascriptmvc/js.bat +57 -0
  457. data/lib/javascriptmvc/steal/README +26 -0
  458. data/lib/javascriptmvc/steal/build/apps/apps.js +208 -0
  459. data/lib/javascriptmvc/steal/build/apps/test.js +4 -0
  460. data/lib/javascriptmvc/steal/build/build.js +281 -0
  461. data/lib/javascriptmvc/steal/build/pluginify.js +73 -0
  462. data/lib/javascriptmvc/steal/build/scripts/compiler.jar +0 -0
  463. data/lib/javascriptmvc/steal/build/scripts/scripts.js +155 -0
  464. data/lib/javascriptmvc/steal/build/styles/cssmin.js +17 -0
  465. data/lib/javascriptmvc/steal/build/styles/styles.js +84 -0
  466. data/lib/javascriptmvc/steal/build/test/basicpage.html +6 -0
  467. data/lib/javascriptmvc/steal/build/test/basicproduction.js +1 -0
  468. data/lib/javascriptmvc/steal/build/test/basicsource.js +6 -0
  469. data/lib/javascriptmvc/steal/build/test/css/css/css1.css +1 -0
  470. data/lib/javascriptmvc/steal/build/test/css/css/justin.png +0 -0
  471. data/lib/javascriptmvc/steal/build/test/css/css2.css +5 -0
  472. data/lib/javascriptmvc/steal/build/test/css/page.html +9 -0
  473. data/lib/javascriptmvc/steal/build/test/css/production.css +1 -0
  474. data/lib/javascriptmvc/steal/build/test/css/test.js +7 -0
  475. data/lib/javascriptmvc/steal/build/test/css/upload.PNG +0 -0
  476. data/lib/javascriptmvc/steal/build/test/foreign.html +6 -0
  477. data/lib/javascriptmvc/steal/build/test/foreign.js +2 -0
  478. data/lib/javascriptmvc/steal/build/test/removecode.js +11 -0
  479. data/lib/javascriptmvc/steal/build/test/run.js +57 -0
  480. data/lib/javascriptmvc/steal/build/test/stealpage.html +10 -0
  481. data/lib/javascriptmvc/steal/build/test/stealprodpage.html +10 -0
  482. data/lib/javascriptmvc/steal/build/test/test.js +3 -0
  483. data/lib/javascriptmvc/steal/buildjs +21 -0
  484. data/lib/javascriptmvc/steal/clean/beautify.js +1108 -0
  485. data/lib/javascriptmvc/steal/clean/clean.js +179 -0
  486. data/lib/javascriptmvc/steal/clean/jslint.js +5662 -0
  487. data/lib/javascriptmvc/steal/clean/test.js +7 -0
  488. data/lib/javascriptmvc/steal/cleanjs +5 -0
  489. data/lib/javascriptmvc/steal/coffee/coffee-script.js +9 -0
  490. data/lib/javascriptmvc/steal/coffee/coffee.js +56 -0
  491. data/lib/javascriptmvc/steal/dev/dev.js +83 -0
  492. data/lib/javascriptmvc/steal/end.js +1 -0
  493. data/lib/javascriptmvc/steal/generate/app +23 -0
  494. data/lib/javascriptmvc/steal/generate/ejs.js +470 -0
  495. data/lib/javascriptmvc/steal/generate/generate.js +211 -0
  496. data/lib/javascriptmvc/steal/generate/inflector.js +117 -0
  497. data/lib/javascriptmvc/steal/generate/system.js +33 -0
  498. data/lib/javascriptmvc/steal/generate/templates/app/(application_name).css.ejs +10 -0
  499. data/lib/javascriptmvc/steal/generate/templates/app/(application_name).html.ejs +18 -0
  500. data/lib/javascriptmvc/steal/generate/templates/app/(application_name).js.ejs +10 -0
  501. data/lib/javascriptmvc/steal/generate/templates/app/docs/.ignore +0 -0
  502. data/lib/javascriptmvc/steal/generate/templates/app/resources/.ignore +0 -0
  503. data/lib/javascriptmvc/steal/generate/templates/app/resources/example.coffee.ejs +5 -0
  504. data/lib/javascriptmvc/steal/generate/templates/app/resources/example.js.ejs +13 -0
  505. data/lib/javascriptmvc/steal/generate/templates/app/resources/example.less.ejs +9 -0
  506. data/lib/javascriptmvc/steal/generate/templates/app/scripts/build.js.ejs +6 -0
  507. data/lib/javascriptmvc/steal/generate/templates/app/scripts/clean.js.ejs +6 -0
  508. data/lib/javascriptmvc/steal/generate/templates/app/test/.ignore +0 -0
  509. data/lib/javascriptmvc/steal/generate/templates/page.ejs +23 -0
  510. data/lib/javascriptmvc/steal/generate/test/test.js +92 -0
  511. data/lib/javascriptmvc/steal/get/get.js +163 -0
  512. data/lib/javascriptmvc/steal/get/gets.json +10 -0
  513. data/lib/javascriptmvc/steal/get/getter.js +115 -0
  514. data/lib/javascriptmvc/steal/get/github.js +134 -0
  515. data/lib/javascriptmvc/steal/get/json.js +172 -0
  516. data/lib/javascriptmvc/steal/getjs +5 -0
  517. data/lib/javascriptmvc/steal/js +56 -0
  518. data/lib/javascriptmvc/steal/js.bat +57 -0
  519. data/lib/javascriptmvc/steal/less/less.js +117 -0
  520. data/lib/javascriptmvc/steal/less/less_engine.js +2529 -0
  521. data/lib/javascriptmvc/steal/rhino/blank.html +6 -0
  522. data/lib/javascriptmvc/steal/rhino/build.js +31 -0
  523. data/lib/javascriptmvc/steal/rhino/docs.js +68 -0
  524. data/lib/javascriptmvc/steal/rhino/empty.html +12 -0
  525. data/lib/javascriptmvc/steal/rhino/env.js +11537 -0
  526. data/lib/javascriptmvc/steal/rhino/file.js +299 -0
  527. data/lib/javascriptmvc/steal/rhino/js.jar +0 -0
  528. data/lib/javascriptmvc/steal/rhino/loader.js +8 -0
  529. data/lib/javascriptmvc/steal/rhino/prompt.js +49 -0
  530. data/lib/javascriptmvc/steal/rhino/steal.js +122 -0
  531. data/lib/javascriptmvc/steal/rhino/test.js +16 -0
  532. data/lib/javascriptmvc/steal/steal.js +1317 -0
  533. data/lib/javascriptmvc/steal/steal.production.js +23 -0
  534. data/lib/javascriptmvc/steal/test/absoluteurl.html +7 -0
  535. data/lib/javascriptmvc/steal/test/absoluteurl/absoluteurl.js +1 -0
  536. data/lib/javascriptmvc/steal/test/absoluteurl/alert.js +1 -0
  537. data/lib/javascriptmvc/steal/test/another/two.js +2 -0
  538. data/lib/javascriptmvc/steal/test/one/four.js +1 -0
  539. data/lib/javascriptmvc/steal/test/one/one.js +6 -0
  540. data/lib/javascriptmvc/steal/test/qunit/qunit.html +22 -0
  541. data/lib/javascriptmvc/steal/test/qunit/qunit.js +3 -0
  542. data/lib/javascriptmvc/steal/test/qunit/steal_test.js +197 -0
  543. data/lib/javascriptmvc/steal/test/run.js +12 -0
  544. data/lib/javascriptmvc/steal/test/steal.html +37 -0
  545. data/lib/javascriptmvc/steal/test/test.js +82 -0
  546. data/lib/javascriptmvc/steal/test/three.js +3 -0
  547. data/lib/javascriptmvc/steal/testing/test.html +20 -0
  548. data/lib/javascriptmvc/steal/testing/testing.js +48 -0
  549. data/lib/javascriptmvc/steal/update +5 -0
  550. metadata +622 -0
@@ -0,0 +1,85 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2
+ "http://www.w3.org/TR/html4/strict.dtd">
3
+ <html lang="en">
4
+ <head>
5
+ <title>Synthetic Demo</title>
6
+ <style type='text/css'>
7
+ body {font-family: verdana; padding: 0px; margin: 0px;}
8
+
9
+ #app {
10
+
11
+ border-left: none;
12
+ border-right: none;
13
+ border-top: none;
14
+ border-bottom: solid 2px black;
15
+ overflow: hidden;
16
+ top: 0px;
17
+
18
+
19
+ width: 100%;
20
+ }
21
+
22
+
23
+ iframe {
24
+ height: 100%;
25
+ border: none;
26
+ width: 100%;
27
+ padding: 0px;
28
+ margin: 0px;
29
+ }
30
+ #code {
31
+
32
+ padding: 0px;
33
+ margin: 0 0 0 210px;
34
+ border: none;
35
+ overflow: auto;
36
+ height: 100%;
37
+ }
38
+
39
+ a {
40
+ outline: none
41
+ }
42
+ #bottom {
43
+ /*position: fixed;*/
44
+ width: 100%;
45
+ bottom: 0px;
46
+ height: 196px;
47
+ border-top: solid 2px #E7ECEE;
48
+ border-bottom: solid 2px #E7ECEE;
49
+ }
50
+ #run {
51
+ float: left;
52
+ padding-top: 80px;
53
+ height: 118px;
54
+ width: 196px;
55
+ display: block;
56
+ text-align: center;
57
+ vertical-align: center;
58
+ font-size: 1.4em;
59
+ font-weight: bolder;
60
+ border-right: solid 2px #E7ECEE;
61
+ border-left: solid 2px #E7ECEE;
62
+ text-decoration: none;
63
+ }
64
+ #run:hover {
65
+ text-decoration: underline;
66
+ }
67
+ </style>
68
+ </head>
69
+ <body>
70
+ <div id='app'></div>
71
+ <div id='bottom'>
72
+ <a href="javascript://" id='run'>Replay ></a>
73
+ <pre id='code'>Click the tabs above to create replay code.</pre>
74
+
75
+ </div>
76
+ <script type='text/javascript' src='../../steal/steal.js'></script>
77
+ <script type='text/javascript'>
78
+ steal.plugins('funcunit/synthetic','phui/filler').start();
79
+ </script>
80
+ <script type='text/javascript' src='demo/record.js'></script>
81
+ <script type='text/javascript' id="demo-source">
82
+
83
+ </script>
84
+ </body>
85
+ </html>
@@ -0,0 +1,796 @@
1
+ steal.then(function(){
2
+
3
+
4
+ var extend = function(d, s) { for (var p in s) d[p] = s[p]; return d;},
5
+ // only uses browser detection for key events
6
+ browser = {
7
+ msie: !!(window.attachEvent && !window.opera),
8
+ opera: !!window.opera,
9
+ webkit : navigator.userAgent.indexOf('AppleWebKit/') > -1,
10
+ safari: navigator.userAgent.indexOf('AppleWebKit/') > -1 && navigator.userAgent.indexOf('Chrome/') == -1,
11
+ gecko: navigator.userAgent.indexOf('Gecko') > -1,
12
+ mobilesafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/),
13
+ rhino : navigator.userAgent.match(/Rhino/) && true
14
+ },
15
+ createEventObject = function(type, options, element){
16
+ var event = element.ownerDocument.createEventObject();
17
+ return extend(event, options);
18
+ },
19
+ data = {},
20
+ id = 0,
21
+ expando = "_synthetic"+(new Date() - 0),
22
+ bind,
23
+ unbind,
24
+ key = /keypress|keyup|keydown/,
25
+ page = /load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll/,
26
+
27
+ /**
28
+ * @constructor Syn
29
+ * @download funcunit/dist/syn.js
30
+ * @test funcunit/synthetic/qunit.html
31
+ * Syn is used to simulate user actions. It creates synthetic events and
32
+ * performs their default behaviors.
33
+ *
34
+ * <h2>Basic Use</h2>
35
+ * The following clicks an input element with <code>id='description'</code>
36
+ * and then types <code>'Hello World'</code>.
37
+ *
38
+ @codestart
39
+ Syn.click({},'description')
40
+ .type("Hello World")
41
+ @codeend
42
+ * <h2>User Actions and Events</h2>
43
+ * <p>Syn is typically used to simulate user actions as opposed to triggering events. Typing characters
44
+ * is an example of a user action. The keypress that represents an <code>'a'</code>
45
+ * character being typed is an example of an event.
46
+ * </p>
47
+ * <p>
48
+ * While triggering events is supported, it's much more useful to simulate actual user behavior. The
49
+ * following actions are supported by Syn:
50
+ * </p>
51
+ * <ul>
52
+ * <li><code>[Syn.prototype.click click]</code> - a mousedown, focus, mouseup, and click.</li>
53
+ * <li><code>[Syn.prototype.dblclick dblclick]</code> - two <code>click!</code> events followed by a <code>dblclick</code>.</li>
54
+ * <li><code>[Syn.prototype.key key]</code> - types a single character (keydown, keypress, keyup).</li>
55
+ * <li><code>[Syn.prototype.type type]</code> - types multiple characters into an element.</li>
56
+ * <li><code>[Syn.prototype.move move]</code> - moves the mouse from one position to another (triggering mouseover / mouseouts).</li>
57
+ * <li><code>[Syn.prototype.drag drag]</code> - a mousedown, followed by mousemoves, and a mouseup.</li>
58
+ * </ul>
59
+ * All actions run asynchronously.
60
+ * Click on the links above for more
61
+ * information on how to use the specific action.
62
+ * <h2>Asynchronous Callbacks</h2>
63
+ * Actions don't complete immediately. This is almost
64
+ * entirely because <code>focus()</code>
65
+ * doesn't run immediately in IE.
66
+ * If you provide a callback function to Syn, it will
67
+ * be called after the action is completed.
68
+ * <br/>The following checks that "Hello World" was entered correctly:
69
+ @codestart
70
+ Syn.click({},'description')
71
+ .type("Hello World", function(){
72
+
73
+ ok("Hello World" == document.getElementById('description').value)
74
+ })
75
+ @codeend
76
+ <h2>Asynchronous Chaining</h2>
77
+ <p>You might have noticed the [Syn.prototype.then then] method. It provides chaining
78
+ so you can do a sequence of events with a single (final) callback.
79
+ </p><p>
80
+ If an element isn't provided to then, it uses the previous Syn's element.
81
+ </p>
82
+ The following does a lot of stuff before checking the result:
83
+ @codestart
84
+ Syn.type('ice water','title')
85
+ .type('ice and water','description')
86
+ .click({},'create')
87
+ .drag({to: 'favorites'},'newRecipe',
88
+ function(){
89
+ ok($('#newRecipe').parents('#favorites').length);
90
+ })
91
+ @codeend
92
+
93
+ <h2>jQuery Helper</h2>
94
+ If jQuery is present, Syn adds a triggerSyn helper you can use like:
95
+ @codestart
96
+ $("#description").triggerSyn("type","Hello World");
97
+ @codeend
98
+ * <h2>Key Event Recording</h2>
99
+ * <p>Every browser has very different rules for dispatching key events.
100
+ * As there is no way to feature detect how a browser handles key events,
101
+ * synthetic uses a description of how the browser behaves generated
102
+ * by a recording application. </p>
103
+ * <p>
104
+ * If you want to support a browser not currently supported, you can
105
+ * record that browser's key event description and add it to
106
+ * <code>Syn.key.browsers</code> by it's navigator agent.
107
+ * </p>
108
+ @codestart
109
+ Syn.key.browsers["Envjs\ Resig/20070309 PilotFish/1.2.0.10\1.6"] = {
110
+ 'prevent':
111
+ {"keyup":[],"keydown":["char","keypress"],"keypress":["char"]},
112
+ 'character':
113
+ { ... }
114
+ }
115
+ @codeend
116
+ * <h2>Limitations</h2>
117
+ * Syn fully supports IE 6+, FF 3+, Chrome, Safari, Opera 10+.
118
+ * With FF 1+, drag / move events are only partially supported. They will
119
+ * not trigger mouseover / mouseout events.<br/>
120
+ * Safari crashes when a mousedown is triggered on a select. Syn will not
121
+ * create this event.
122
+ * <h2>Contributing to Syn</h2>
123
+ * Have we missed something? We happily accept patches. The following are
124
+ * important objects and properties of Syn:
125
+ * <ul>
126
+ * <li><code>Syn.create</code> - contains methods to setup, convert options, and create an event of a specific type.</li>
127
+ * <li><code>Syn.defaults</code> - default behavior by event type (except for keys).</li>
128
+ * <li><code>Syn.key.defaults</code> - default behavior by key.</li>
129
+ * <li><code>Syn.keycodes</code> - supported keys you can type.</li>
130
+ * </ul>
131
+ * <h2>Roll Your Own Functional Test Framework</h2>
132
+ * <p>Syn is really the foundation of JavaScriptMVC's functional testing framework - [FuncUnit].
133
+ * But, we've purposely made Syn work without any dependencies in the hopes that other frameworks or
134
+ * testing solutions can use it as well.
135
+ * </p>
136
+ * @init
137
+ * Creates a synthetic event on the element.
138
+ * @param {Object} type
139
+ * @param {Object} options
140
+ * @param {Object} element
141
+ * @param {Object} callback
142
+ * @return Syn
143
+ */
144
+ Syn = function(type, options, element, callback){
145
+ return ( new Syn.init(type, options, element, callback) )
146
+ }
147
+
148
+ if(window.addEventListener){ // Mozilla, Netscape, Firefox
149
+ bind = function(el, ev, f){
150
+ el.addEventListener(ev, f, false)
151
+ }
152
+ unbind = function(el, ev, f){
153
+ el.removeEventListener(ev, f, false)
154
+ }
155
+ }else{
156
+ bind = function(el, ev, f){
157
+ el.attachEvent("on"+ev, f)
158
+ }
159
+ unbind = function(el, ev, f){
160
+ el.detachEvent("on"+ev, f)
161
+ }
162
+ }
163
+ /**
164
+ * @Static
165
+ */
166
+ extend(Syn,{
167
+ /**
168
+ * Creates a new synthetic event instance
169
+ * @hide
170
+ * @param {Object} type
171
+ * @param {Object} options
172
+ * @param {Object} element
173
+ * @param {Object} callback
174
+ */
175
+ init: function( type, options, element, callback ) {
176
+ var args = Syn.args(options,element, callback),
177
+ self = this;
178
+ this.queue = [];
179
+ this.element = args.element;
180
+
181
+ //run event
182
+ if(typeof this[type] == "function") {
183
+ this[type](args.options, args.element, function(defaults,el ){
184
+ args.callback && args.callback.apply(self, arguments);
185
+ self.done.apply(self, arguments)
186
+ })
187
+ }else{
188
+ this.result = Syn.trigger(type, args.options, args.element);
189
+ args.callback && args.callback.call(this, args.element, this.result);
190
+ }
191
+ },
192
+ jquery: function( el, fast ) {
193
+ if(window.FuncUnit && window.FuncUnit.jquery){
194
+ return window.FuncUnit.jquery
195
+ } if (el){
196
+ return Syn.helpers.getWindow(el).jQuery || window.jQuery
197
+ }
198
+ else{
199
+ return window.jQuery
200
+ }
201
+ },
202
+ /**
203
+ * Returns an object with the args for a Syn.
204
+ * @hide
205
+ * @return {Object}
206
+ */
207
+ args: function() {
208
+ var res = {}
209
+ for(var i=0; i < arguments.length; i++){
210
+ if(typeof arguments[i] == 'function'){
211
+ res.callback = arguments[i]
212
+ }else if(arguments[i] && arguments[i].jquery){
213
+ res.element = arguments[i][0];
214
+ }else if(arguments[i] && arguments[i].nodeName){
215
+ res.element = arguments[i];
216
+ }else if(res.options && typeof arguments[i] == 'string'){ //we can get by id
217
+ res.element = document.getElementById(arguments[i])
218
+ }
219
+ else if(arguments[i]){
220
+ res.options = arguments[i];
221
+ }
222
+ }
223
+ return res;
224
+ },
225
+ click: function( options, element, callback ) {
226
+ Syn('click!',options,element, callback);
227
+ },
228
+ /**
229
+ * @attribute defaults
230
+ * Default actions for events. Each default function is called with this as its
231
+ * element. It should return true if a timeout
232
+ * should happen after it. If it returns an element, a timeout will happen
233
+ * and the next event will happen on that element.
234
+ */
235
+ defaults : {
236
+ focus: function() {
237
+ if(!Syn.support.focusChanges){
238
+ var element = this,
239
+ nodeName = element.nodeName.toLowerCase();
240
+ Syn.data(element,"syntheticvalue", element.value)
241
+
242
+ if(nodeName == "input"){
243
+
244
+ bind(element, "blur", function(){
245
+
246
+ if( Syn.data(element,"syntheticvalue") != element.value){
247
+
248
+ Syn.trigger("change", {}, element);
249
+ }
250
+ unbind(element,"blur", arguments.callee)
251
+ })
252
+
253
+ }
254
+ }
255
+ },
256
+ submit: function() {
257
+ Syn.onParents(this, function(el){
258
+ if( el.nodeName.toLowerCase() == 'form'){
259
+ el.submit()
260
+ return false;
261
+ }
262
+ });
263
+ }
264
+ },
265
+ changeOnBlur: function( element, prop, value ) {
266
+
267
+ bind(element, "blur", function(){
268
+ if( value != element[prop]){
269
+ Syn.trigger("change", {}, element);
270
+ }
271
+ unbind(element,"blur", arguments.callee)
272
+ })
273
+
274
+ },
275
+ /**
276
+ * Returns the closest element of a particular type.
277
+ * @hide
278
+ * @param {Object} el
279
+ * @param {Object} type
280
+ */
281
+ closest: function( el, type ) {
282
+ while(el && el.nodeName.toLowerCase() != type.toLowerCase()){
283
+ el = el.parentNode
284
+ }
285
+ return el;
286
+ },
287
+ /**
288
+ * adds jQuery like data (adds an expando) and data exists FOREVER :)
289
+ * @hide
290
+ * @param {Object} el
291
+ * @param {Object} key
292
+ * @param {Object} value
293
+ */
294
+ data: function( el, key, value ) {
295
+ var d;
296
+ if(!el[expando]){
297
+ el[expando] = id++;
298
+ }
299
+ if(!data[el[expando]]){
300
+ data[el[expando]] = {};
301
+ }
302
+ d = data[el[expando]]
303
+ if(value){
304
+ data[el[expando]][key] = value;
305
+ }else{
306
+ return data[el[expando]][key];
307
+ }
308
+ },
309
+ /**
310
+ * Calls a function on the element and all parents of the element until the function returns
311
+ * false.
312
+ * @hide
313
+ * @param {Object} el
314
+ * @param {Object} func
315
+ */
316
+ onParents: function( el, func ) {
317
+ var res;
318
+ while(el && res !== false){
319
+ res = func(el)
320
+ el = el.parentNode
321
+ }
322
+ return el;
323
+ },
324
+ //regex to match focusable elements
325
+ focusable : /^(a|area|frame|iframe|label|input|select|textarea|button|html|object)$/i,
326
+ /**
327
+ * Returns if an element is focusable
328
+ * @hide
329
+ * @param {Object} elem
330
+ */
331
+ isFocusable: function( elem ) {
332
+ var attributeNode;
333
+ return ( this.focusable.test(elem.nodeName) || (
334
+ (attributeNode = elem.getAttributeNode( "tabIndex" )) && attributeNode.specified ) )
335
+ && Syn.isVisible(elem)
336
+ },
337
+ /**
338
+ * Returns if an element is visible or not
339
+ * @hide
340
+ * @param {Object} elem
341
+ */
342
+ isVisible: function( elem ) {
343
+ return (elem.offsetWidth && elem.offsetHeight) || (elem.clientWidth && elem.clientHeight)
344
+ },
345
+ /**
346
+ * Gets the tabIndex as a number or null
347
+ * @hide
348
+ * @param {Object} elem
349
+ */
350
+ tabIndex: function( elem ) {
351
+ var attributeNode = elem.getAttributeNode( "tabIndex" );
352
+ return attributeNode && attributeNode.specified && ( parseInt( elem.getAttribute('tabIndex') ) || 0 )
353
+ },
354
+ bind : bind,
355
+ unbind : unbind,
356
+ browser: browser,
357
+ //some generic helpers
358
+ helpers : {
359
+ createEventObject : createEventObject,
360
+ createBasicStandardEvent: function( type, defaults ) {
361
+ var event;
362
+ try {
363
+ event = document.createEvent("Events");
364
+ } catch(e2) {
365
+ event = document.createEvent("UIEvents");
366
+ } finally {
367
+ event.initEvent(type, true, true);
368
+ extend(event, defaults);
369
+ }
370
+ return event;
371
+ },
372
+ inArray: function( item, array ) {
373
+ for(var i =0; i < array.length; i++){
374
+ if(array[i] == item){
375
+ return i;
376
+ }
377
+ }
378
+ return -1;
379
+ },
380
+ getWindow: function( element ) {
381
+ return element.ownerDocument.defaultView || element.ownerDocument.parentWindow
382
+ },
383
+ extend: extend,
384
+ scrollOffset: function( win ) {
385
+ var doc = win.document.documentElement,
386
+ body = win.document.body;
387
+ return {
388
+ left : (doc && doc.scrollLeft || body && body.scrollLeft || 0) + (doc.clientLeft || 0),
389
+ top : (doc && doc.scrollTop || body && body.scrollTop || 0) + (doc.clientTop || 0)
390
+ }
391
+
392
+ },
393
+ addOffset: function( options, el ) {
394
+ var jq = Syn.jquery(el)
395
+ if(typeof options == 'object' &&
396
+ options.clientX === undefined &&
397
+ options.clientY === undefined &&
398
+ options.pageX === undefined &&
399
+ options.pageY === undefined && jq){
400
+ var el = jq(el)
401
+ off = el.offset();
402
+ options.pageX = off.left + el.width() /2 ;
403
+ options.pageY = off.top + el.height() /2 ;
404
+ }
405
+ }
406
+ },
407
+ // place for key data
408
+ key : {
409
+ ctrlKey : null,
410
+ altKey : null,
411
+ shiftKey : null,
412
+ metaKey : null
413
+ },
414
+ //triggers an event on an element, returns true if default events should be run
415
+ /**
416
+ * Dispatches an event and returns true if default events should be run.
417
+ * @hide
418
+ * @param {Object} event
419
+ * @param {Object} element
420
+ * @param {Object} type
421
+ * @param {Object} autoPrevent
422
+ */
423
+ dispatch : (document.documentElement.dispatchEvent ?
424
+ function(event, element, type, autoPrevent){
425
+ var preventDefault = event.preventDefault,
426
+ prevents = autoPrevent ? -1 : 0;
427
+
428
+ //automatically prevents the default behavior for this event
429
+ //this is to protect agianst nasty browser freezing bug in safari
430
+ if(autoPrevent){
431
+ bind(element, type, function(ev){
432
+ ev.preventDefault()
433
+ unbind(this, type, arguments.callee)
434
+ })
435
+ }
436
+
437
+
438
+ event.preventDefault = function(){
439
+ prevents++;
440
+ if(++prevents > 0){
441
+ preventDefault.apply(this,[]);
442
+ }
443
+ }
444
+ element.dispatchEvent(event)
445
+ return prevents <= 0;
446
+ } :
447
+ function(event, element, type){
448
+ try {window.event = event;}catch(e) {}
449
+ //source element makes sure element is still in the document
450
+ return element.sourceIndex <= 0 || element.fireEvent('on'+type, event)
451
+ }
452
+ ),
453
+ /**
454
+ * @attribute
455
+ * @hide
456
+ * An object of eventType -> function that create that event.
457
+ */
458
+ create : {
459
+ //-------- PAGE EVENTS ---------------------
460
+ page : {
461
+ event : document.createEvent ? function(type, options, element){
462
+ var event = element.ownerDocument.createEvent("Events");
463
+ event.initEvent(type, true, true );
464
+ return event;
465
+ } : createEventObject
466
+ },
467
+ // unique events
468
+ focus : {
469
+ event: function( type, options, element ) {
470
+ Syn.onParents(element, function(el){
471
+ if( Syn.isFocusable(el)){
472
+ if(el.nodeName.toLowerCase() != 'html'){
473
+ el.focus();
474
+ }
475
+ return false
476
+ }
477
+ });
478
+ return true;
479
+ }
480
+ }
481
+ },
482
+ /**
483
+ * @attribute support
484
+ * Feature detected properties of a browser's event system.
485
+ * Support has the following properties:
486
+ * <ul>
487
+ * <li><code>clickChanges</code> - clicking on an option element creates a change event.</li>
488
+ * <li><code>clickSubmits</code> - clicking on a form button submits the form.</li>
489
+ * <li><code>mouseupSubmits</code> - a mouseup on a form button submits the form.</li>
490
+ * <li><code>radioClickChanges</code> - clicking a radio button changes the radio.</li>
491
+ * <li><code>focusChanges</code> - focus/blur creates a change event.</li>
492
+ * <li><code>linkHrefJS</code> - An achor's href JavaScript is run.</li>
493
+ * <li><code>mouseDownUpClicks</code> - A mousedown followed by mouseup creates a click event.</li>
494
+ * <li><code>tabKeyTabs</code> - A tab key changes tabs.</li>
495
+ * <li><code>keypressOnAnchorClicks</code> - Keying enter on an anchor triggers a click.</li>
496
+ * </ul>
497
+ */
498
+ support : {
499
+ clickChanges : false,
500
+ clickSubmits : false,
501
+ keypressSubmits : false,
502
+ mouseupSubmits: false,
503
+ radioClickChanges : false,
504
+ focusChanges : false,
505
+ linkHrefJS : false,
506
+ keyCharacters : false,
507
+ backspaceWorks : false,
508
+ mouseDownUpClicks : false,
509
+ tabKeyTabs : false,
510
+ keypressOnAnchorClicks : false,
511
+ optionClickBubbles : false
512
+ },
513
+ /**
514
+ * Creates a synthetic event and dispatches it on the element.
515
+ * This will run any default actions for the element.
516
+ * Typically you want to use Syn, but if you want the return value, use this.
517
+ * @param {String} type
518
+ * @param {Object} options
519
+ * @param {HTMLElement} element
520
+ * @return {Boolean} true if default events were run, false if otherwise.
521
+ */
522
+ trigger: function( type, options, element ) {
523
+ options || (options = {});
524
+
525
+ var create = Syn.create,
526
+ setup = create[type] && create[type].setup,
527
+ kind = key.test(type) ?
528
+ 'key' :
529
+ ( page.test(type) ?
530
+ "page" : "mouse" ),
531
+ createType = create[type] || {},
532
+ createKind = create[kind],
533
+ event,
534
+ ret,
535
+ autoPrevent = options._autoPrevent,
536
+ dispatchEl = element;
537
+
538
+ //any setup code?
539
+ Syn.support.ready && setup && setup(type, options, element);
540
+
541
+
542
+ //get kind
543
+
544
+ delete options._autoPrevent;
545
+
546
+ if(createType.event){
547
+ ret = createType.event(type, options, element)
548
+ }else{
549
+ //convert options
550
+ options = createKind.options ? createKind.options(type,options,element) : options;
551
+
552
+ if(!Syn.support.changeBubbles && /option/i.test(element.nodeName)){
553
+ dispatchEl = element.parentNode; //jQuery expects clicks on select
554
+ }
555
+
556
+ //create the event
557
+ event = createKind.event(type,options,dispatchEl)
558
+
559
+ //send the event
560
+ ret = Syn.dispatch(event, dispatchEl, type, autoPrevent)
561
+ }
562
+
563
+ //run default behavior
564
+ ret && Syn.support.ready
565
+ && Syn.defaults[type]
566
+ && Syn.defaults[type].call(element, options, autoPrevent);
567
+ return ret;
568
+ },
569
+ eventSupported: function( eventName ) {
570
+ var el = document.createElement("div");
571
+ eventName = "on" + eventName;
572
+
573
+ var isSupported = (eventName in el);
574
+ if ( !isSupported ) {
575
+ el.setAttribute(eventName, "return;");
576
+ isSupported = typeof el[eventName] === "function";
577
+ }
578
+ el = null;
579
+
580
+ return isSupported;
581
+ }
582
+
583
+ });
584
+ var h = Syn.helpers;
585
+ /**
586
+ * @Prototype
587
+ */
588
+ extend(Syn.init.prototype,{
589
+ /**
590
+ * @function then
591
+ * <p>
592
+ * Then is used to chain a sequence of actions to be run one after the other.
593
+ * This is useful when many asynchronous actions need to be performed before some
594
+ * final check needs to be made.
595
+ * </p>
596
+ * <p>The following clicks and types into the <code>id='age'</code> element and then checks that only numeric characters can be entered.</p>
597
+ * <h3>Example</h3>
598
+ * @codestart
599
+ * Syn('click',{},'age')
600
+ * .then('type','I am 12',function(){
601
+ * equals($('#age').val(),"12")
602
+ * })
603
+ * @codeend
604
+ * If the element argument is undefined, then the last element is used.
605
+ *
606
+ * @param {String} type The type of event or action to create: "_click", "_dblclick", "_drag", "_type".
607
+ * @param {Object} options Optiosn to pass to the event.
608
+ * @param {String|HTMLElement} [element] A element's id or an element. If undefined, defaults to the previous element.
609
+ * @param {Function} [callback] A function to callback after the action has run, but before any future chained actions are run.
610
+ */
611
+ then: function( type, options, element, callback ) {
612
+ if(Syn.autoDelay){
613
+ this.delay();
614
+ }
615
+ var args = Syn.args(options,element, callback),
616
+ self = this;
617
+
618
+
619
+ //if stack is empty run right away
620
+
621
+ //otherwise ... unshift it
622
+ this.queue.unshift(function(el, prevented){
623
+
624
+ if(typeof this[type] == "function") {
625
+ this.element = args.element || el;
626
+ this[type](args.options, this.element, function(defaults, el){
627
+ args.callback && args.callback.apply(self, arguments);
628
+ self.done.apply(self, arguments)
629
+ })
630
+ }else{
631
+ this.result = Syn.trigger(type, args.options, args.element);
632
+ args.callback && args.callback.call(this, args.element, this.result);
633
+ return this;
634
+ }
635
+ })
636
+ return this;
637
+ },
638
+ /**
639
+ * Delays the next command a set timeout.
640
+ * @param {Number} [timeout]
641
+ * @param {Function} [callback]
642
+ */
643
+ delay: function( timeout, callback ) {
644
+ if(typeof timeout == 'function'){
645
+ callback = timeout;
646
+ timeout = null;
647
+ }
648
+ timeout = timeout || 600
649
+ var self = this;
650
+ this.queue.unshift(function(){
651
+ setTimeout(function(){
652
+ callback && callback.apply(self,[])
653
+ self.done.apply(self, arguments)
654
+ },timeout)
655
+ })
656
+ return this;
657
+ },
658
+ done: function( defaults, el ) {
659
+ el && (this.element = el);;
660
+ if(this.queue.length){
661
+ this.queue.pop().call(this, this.element, defaults);
662
+ }
663
+
664
+ },
665
+ /**
666
+ * @function click
667
+ * Clicks an element by triggering a mousedown,
668
+ * mouseup,
669
+ * and a click event.
670
+ * <h3>Example</h3>
671
+ * @codestart
672
+ * Syn.click({},'create',function(){
673
+ * //check something
674
+ * })
675
+ * @codeend
676
+ * You can also provide the coordinates of the click.
677
+ * If jQuery is present, it will set clientX and clientY
678
+ * for you. Here's how to set it yourself:
679
+ * @codestart
680
+ * Syn.click(
681
+ * {clientX: 20, clientY: 100},
682
+ * 'create',
683
+ * function(){
684
+ * //check something
685
+ * })
686
+ * @codeend
687
+ * You can also provide pageX and pageY and Syn will convert it for you.
688
+ * @param {Object} options
689
+ * @param {HTMLElement} element
690
+ * @param {Function} callback
691
+ */
692
+ "_click" : function( options, element, callback, force ) {
693
+ Syn.helpers.addOffset(options, element);
694
+ Syn.trigger("mousedown", options, element);
695
+
696
+ //timeout is b/c IE is stupid and won't call focus handlers
697
+ setTimeout(function(){
698
+ Syn.trigger("mouseup", options, element)
699
+ if(!Syn.support.mouseDownUpClicks || force){
700
+ Syn.trigger("click", options, element)
701
+ callback(true)
702
+ }else{
703
+ //we still have to run the default (presumably)
704
+ Syn.create.click.setup('click',options,element)
705
+ Syn.defaults.click.call(element)
706
+ //must give time for callback
707
+ setTimeout(function(){
708
+ callback(true)
709
+ },1)
710
+ }
711
+
712
+ },1)
713
+ },
714
+ /**
715
+ * Right clicks in browsers that support it (everyone but opera).
716
+ * @param {Object} options
717
+ * @param {Object} element
718
+ * @param {Object} callback
719
+ */
720
+ "_rightClick" : function( options, element, callback ) {
721
+ Syn.helpers.addOffset(options, element);
722
+ var mouseopts = extend( extend({},Syn.mouse.browser.right.mouseup ), options)
723
+
724
+ Syn.trigger("mousedown", mouseopts, element);
725
+
726
+ //timeout is b/c IE is stupid and won't call focus handlers
727
+ setTimeout(function(){
728
+ Syn.trigger("mouseup", mouseopts, element)
729
+ if (Syn.mouse.browser.contextmenu) {
730
+ Syn.trigger("contextmenu",
731
+ extend( extend({},Syn.mouse.browser.right.contextmenu ), options),
732
+ element)
733
+ }
734
+ callback(true)
735
+ },1)
736
+ },
737
+ /**
738
+ * @function dblclick
739
+ * Dblclicks an element. This runs two [Syn.prototype.click click] events followed by
740
+ * a dblclick on the element.
741
+ * <h3>Example</h3>
742
+ * @codestart
743
+ * Syn.dblclick({},'open')
744
+ * @codeend
745
+ * @param {Object} options
746
+ * @param {HTMLElement} element
747
+ * @param {Function} callback
748
+ */
749
+ "_dblclick" : function( options, element, callback ) {
750
+ Syn.helpers.addOffset(options, element);
751
+ var self = this;
752
+ this._click(options, element, function(){
753
+ setTimeout(function(){
754
+ self._click(options, element, function(){
755
+ Syn.trigger("dblclick", options, element)
756
+ callback(true)
757
+ },true)
758
+ },2)
759
+
760
+ })
761
+ }
762
+ })
763
+
764
+ var actions = ["click","dblclick","move","drag","key","type",'rightClick'],
765
+ makeAction = function(name){
766
+ Syn[name] = function(options, element, callback){
767
+ return Syn("_"+name, options, element, callback)
768
+ }
769
+ Syn.init.prototype[name] = function(options, element, callback){
770
+ return this.then("_"+name, options, element, callback)
771
+ }
772
+ }
773
+ for(var i=0; i < actions.length; i++){
774
+ makeAction(actions[i]);
775
+ }
776
+ /**
777
+ * Used for creating and dispatching synthetic events.
778
+ * @codestart
779
+ * new MVC.Syn('click').send(MVC.$E('id'))
780
+ * @codeend
781
+ * @init Sets up a synthetic event.
782
+ * @param {String} type type of event, ex: 'click'
783
+ * @param {optional:Object} options
784
+ */
785
+
786
+ if (window.jQuery || (window.FuncUnit && window.FuncUnit.jquery)) {
787
+ (window.jQuery || window.FuncUnit.jquery).fn.triggerSyn = function(type, options, callback){
788
+ Syn(type, options, this[0], callback)
789
+ return this;
790
+ };
791
+ }
792
+
793
+ window.Syn = Syn;
794
+
795
+ }).then('mouse','browsers','key','drag/drag');
796
+