opal 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (325) hide show
  1. data/.gitignore +5 -10
  2. data/LICENSE +75 -0
  3. data/README.md +55 -3
  4. data/Rakefile +62 -139
  5. data/bin/opal +7 -10
  6. data/gems/core/README.md +5 -0
  7. data/gems/core/Rakefile +7 -0
  8. data/gems/core/core.gemspec +13 -0
  9. data/gems/core/lib/core.rb +33 -0
  10. data/gems/core/lib/core/array.rb +1470 -0
  11. data/gems/core/lib/core/basic_object.rb +15 -0
  12. data/gems/core/lib/core/class.rb +31 -0
  13. data/gems/core/lib/core/dir.rb +26 -0
  14. data/gems/core/lib/core/error.rb +43 -0
  15. data/gems/core/lib/core/false_class.rb +21 -0
  16. data/gems/core/lib/core/file.rb +54 -0
  17. data/gems/core/lib/core/hash.rb +725 -0
  18. data/gems/core/lib/core/kernel.rb +240 -0
  19. data/gems/core/lib/core/module.rb +98 -0
  20. data/gems/core/lib/core/nil_class.rb +41 -0
  21. data/gems/core/lib/core/numeric.rb +370 -0
  22. data/gems/core/lib/core/proc.rb +11 -0
  23. data/gems/core/lib/core/range.rb +17 -0
  24. data/gems/core/lib/core/regexp.rb +18 -0
  25. data/gems/core/lib/core/string.rb +328 -0
  26. data/gems/core/lib/core/symbol.rb +15 -0
  27. data/gems/core/lib/core/top_self.rb +8 -0
  28. data/gems/core/lib/core/true_class.rb +20 -0
  29. data/gems/core/lib/core/vm.rb +16 -0
  30. data/{opals/opal/opal → gems/core}/spec/core/array/append_spec.rb +0 -0
  31. data/{opals/opal/opal → gems/core}/spec/core/array/assoc_spec.rb +0 -0
  32. data/{opals/opal/opal → gems/core}/spec/core/array/at_spec.rb +0 -0
  33. data/{opals/opal/opal → gems/core}/spec/core/array/clear_spec.rb +1 -1
  34. data/{opals/opal/opal → gems/core}/spec/core/array/collect_bang_spec.rb +0 -0
  35. data/{opals/opal/opal → gems/core}/spec/core/array/collect_spec.rb +0 -0
  36. data/gems/core/spec/core/array/compact_spec.rb +41 -0
  37. data/{opals/opal/opal → gems/core}/spec/core/array/concat_spec.rb +0 -0
  38. data/{opals/opal/opal → gems/core}/spec/core/array/constructor_spec.rb +0 -0
  39. data/{opals/opal/opal → gems/core}/spec/core/array/each_spec.rb +0 -0
  40. data/{opals/opal/opal → gems/core}/spec/core/array/element_reference_spec.rb +0 -0
  41. data/{opals/opal/opal → gems/core}/spec/core/array/first_spec.rb +1 -1
  42. data/{opals/opal/opal → gems/core}/spec/core/array/include_spec.rb +0 -0
  43. data/gems/core/spec/core/array/join_spec.rb +6 -0
  44. data/gems/core/spec/core/array/last_spec.rb +51 -0
  45. data/gems/core/spec/core/array/length_spec.rb +6 -0
  46. data/{opals/opal/opal → gems/core}/spec/core/array/map_spec.rb +2 -0
  47. data/gems/core/spec/core/array/reverse_spec.rb +6 -0
  48. data/{opals/opal/opal → gems/core}/spec/core/builtin_constants/builtin_constants_spec.rb +0 -0
  49. data/{opals/opal/opal → gems/core}/spec/core/false/and_spec.rb +0 -0
  50. data/{opals/opal/opal → gems/core}/spec/core/false/inspect_spec.rb +0 -0
  51. data/{opals/opal/opal → gems/core}/spec/core/false/or_spec.rb +0 -0
  52. data/{opals/opal/opal → gems/core}/spec/core/false/to_s_spec.rb +0 -0
  53. data/{opals/opal/opal → gems/core}/spec/core/false/xor_spec.rb +0 -0
  54. data/{opals/opal/opal → gems/core}/spec/core/file/join_spec.rb +1 -1
  55. data/gems/core/spec/core/hash/assoc_spec.rb +32 -0
  56. data/{opals/opal/opal → gems/core}/spec/core/kernel/instance_eval_spec.rb +0 -0
  57. data/{opals/opal/opal → gems/core}/spec/core/kernel/loop_spec.rb +0 -0
  58. data/{opals/opal/opal → gems/core}/spec/core/kernel/raise_spec.rb +0 -0
  59. data/{opals/opal/opal → gems/core}/spec/core/module/attr_accessor_spec.rb +0 -0
  60. data/{opals/opal/opal → gems/core}/spec/core/number/lt_spec.rb +0 -0
  61. data/gems/core/spec/core/string/sub_spec.rb +24 -0
  62. data/{opals/opal/opal → gems/core}/spec/core/true/and_spec.rb +0 -0
  63. data/{opals/opal/opal → gems/core}/spec/core/true/inspect_spec.rb +0 -0
  64. data/{opals/opal/opal → gems/core}/spec/core/true/or_spec.rb +0 -0
  65. data/{opals/opal/opal → gems/core}/spec/core/true/to_s_spec.rb +0 -0
  66. data/{opals/opal/opal → gems/core}/spec/core/true/xor_spec.rb +0 -0
  67. data/{opals/opal/opal → gems/core}/spec/language/and_spec.rb +2 -3
  68. data/{opals/opal/opal → gems/core}/spec/language/array_spec.rb +21 -5
  69. data/gems/core/spec/language/block_spec.rb +38 -0
  70. data/{opals/opal/opal → gems/core}/spec/language/break_spec.rb +0 -0
  71. data/gems/core/spec/language/case_spec.rb +103 -0
  72. data/{opals/opal/opal → gems/core}/spec/language/def_spec.rb +11 -1
  73. data/{opals/opal/opal → gems/core}/spec/language/eigenclass_spec.rb +0 -0
  74. data/gems/core/spec/language/file_spec.rb +13 -0
  75. data/gems/core/spec/language/fixtures/block.rb +21 -0
  76. data/gems/core/spec/language/fixtures/super.rb +293 -0
  77. data/{opals/opal/opal → gems/core}/spec/language/hash_spec.rb +0 -0
  78. data/{opals/opal/opal → gems/core}/spec/language/if_spec.rb +0 -0
  79. data/{opals/opal/opal → gems/core}/spec/language/loop_spec.rb +0 -0
  80. data/gems/core/spec/language/metaclass_spec.rb +21 -0
  81. data/{opals/opal/opal → gems/core}/spec/language/method_spec.rb +60 -0
  82. data/{opals/opal/opal → gems/core}/spec/language/next_spec.rb +0 -0
  83. data/{opals/opal/opal → gems/core}/spec/language/or_spec.rb +0 -0
  84. data/{opals/opal/opal → gems/core}/spec/language/redo_spec.rb +0 -0
  85. data/gems/core/spec/language/regexp_spec.rb +26 -0
  86. data/{opals/opal/opal → gems/core}/spec/language/rescue_spec.rb +0 -0
  87. data/{opals/opal/opal → gems/core}/spec/language/return_spec.rb +0 -0
  88. data/{opals/opal/opal → gems/core}/spec/language/string_spec.rb +0 -0
  89. data/gems/core/spec/language/super_spec.rb +32 -0
  90. data/{opals/opal/opal → gems/core}/spec/language/until_spec.rb +47 -47
  91. data/gems/core/spec/language/variables_spec.rb +155 -0
  92. data/{opals/opal/opal → gems/core}/spec/language/while_spec.rb +47 -47
  93. data/{opals/opal/opal → gems/core}/spec/spec_helper.rb +1 -1
  94. data/gems/core_fs/README.md +19 -0
  95. data/gems/dev/Rakefile +5 -0
  96. data/gems/dev/lib/dev.js +99 -0
  97. data/gems/dev/lib/dev/generator.js +1264 -0
  98. data/gems/dev/lib/dev/parser.js +979 -0
  99. data/gems/dev/lib/dev/ruby_parser.js +1088 -0
  100. data/gems/dev/lib/dev/ruby_parser.y +1267 -0
  101. data/gems/dev/lib/dev/string_scanner.js +38 -0
  102. data/gems/dev/tools/racc2js/README.md +39 -0
  103. data/gems/dev/tools/racc2js/math_parser.js +222 -0
  104. data/gems/dev/tools/racc2js/math_parser.rb +133 -0
  105. data/gems/dev/tools/racc2js/math_parser.y +28 -0
  106. data/gems/dev/tools/racc2js/parser.js +218 -0
  107. data/gems/dev/tools/racc2js/racc2js.rb +153 -0
  108. data/gems/json/README.md +4 -0
  109. data/gems/json/json.gemspec +14 -0
  110. data/gems/json/lib/json.rb +64 -0
  111. data/gems/json/lib/json/ext.rb +51 -0
  112. data/{opals/opal/browser/lib/browser/json_parse.js → gems/json/lib/json/json2.js} +197 -37
  113. data/gems/ospec/README.md +0 -0
  114. data/gems/ospec/lib/ospec.rb +6 -0
  115. data/gems/ospec/lib/ospec/autorun.rb +3 -0
  116. data/gems/ospec/lib/ospec/dsl.rb +15 -0
  117. data/gems/ospec/lib/ospec/example.rb +11 -0
  118. data/gems/ospec/lib/ospec/example/before_and_after_hooks.rb +56 -0
  119. data/gems/ospec/lib/ospec/example/errors.rb +17 -0
  120. data/gems/ospec/lib/ospec/example/example_group.rb +12 -0
  121. data/gems/ospec/lib/ospec/example/example_group_factory.rb +21 -0
  122. data/gems/ospec/lib/ospec/example/example_group_hierarchy.rb +20 -0
  123. data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/example/example_group_methods.rb +26 -68
  124. data/gems/ospec/lib/ospec/example/example_group_proxy.rb +14 -0
  125. data/gems/ospec/lib/ospec/example/example_methods.rb +46 -0
  126. data/gems/ospec/lib/ospec/example/example_proxy.rb +18 -0
  127. data/gems/ospec/lib/ospec/expectations.rb +19 -0
  128. data/gems/ospec/lib/ospec/expectations/errors.rb +8 -0
  129. data/gems/ospec/lib/ospec/expectations/fail_with.rb +8 -0
  130. data/gems/ospec/lib/ospec/expectations/handler.rb +27 -0
  131. data/gems/ospec/lib/ospec/matchers.rb +24 -0
  132. data/{opals/opal/Rakefile → gems/ospec/lib/ospec/matchers/be.rb} +0 -0
  133. data/gems/ospec/lib/ospec/matchers/generated_descriptions.rb +20 -0
  134. data/gems/ospec/lib/ospec/matchers/operator_matcher.rb +52 -0
  135. data/gems/ospec/lib/ospec/runner.rb +40 -0
  136. data/gems/ospec/lib/ospec/runner/example_group_runner.rb +44 -0
  137. data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/formatter/html_formatter.rb +31 -40
  138. data/gems/ospec/lib/ospec/runner/formatter/terminal_formatter.rb +48 -0
  139. data/gems/ospec/lib/ospec/runner/options.rb +36 -0
  140. data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/reporter.rb +23 -55
  141. data/gems/ospec/ospec.gemspec +0 -0
  142. data/gems/rquery/README.md +9 -0
  143. data/gems/rquery/lib/rquery.rb +10 -0
  144. data/gems/rquery/lib/rquery/ajax.rb +4 -0
  145. data/gems/rquery/lib/rquery/css.rb +96 -0
  146. data/gems/rquery/lib/rquery/document.rb +25 -0
  147. data/gems/rquery/lib/rquery/element.rb +292 -0
  148. data/gems/rquery/lib/rquery/event.rb +108 -0
  149. data/gems/rquery/lib/rquery/jquery.js +8177 -0
  150. data/gems/rquery/lib/rquery/request.rb +138 -0
  151. data/gems/rquery/lib/rquery/response.rb +49 -0
  152. data/gems/rquery/rquery.gemspec +16 -0
  153. data/lib/opal.js +1597 -0
  154. data/lib/opal.rb +6 -69
  155. data/lib/opal/builder.rb +115 -0
  156. data/lib/opal/bundle.rb +131 -0
  157. data/lib/opal/command.rb +11 -0
  158. data/lib/opal/context.rb +69 -0
  159. data/lib/opal/context/console.rb +12 -0
  160. data/lib/opal/context/file_system.rb +19 -0
  161. data/lib/opal/context/loader.rb +117 -0
  162. data/lib/opal/gem.rb +153 -0
  163. data/lib/opal/ruby/nodes.rb +1302 -0
  164. data/lib/opal/ruby/parser.rb +780 -0
  165. data/lib/opal/ruby/ruby_parser.rb +5170 -0
  166. data/lib/opal/ruby/ruby_parser.y +1298 -0
  167. data/opal.gemspec +11 -256
  168. metadata +179 -240
  169. data/.gitmodules +0 -6
  170. data/Opalfile +0 -384
  171. data/VERSION +0 -1
  172. data/demos/apps/browser_demo/index.html +0 -11
  173. data/demos/apps/browser_demo/lib/browser_demo.rb +0 -31
  174. data/demos/apps/simple_opal/Opalfile +0 -13
  175. data/demos/apps/simple_opal/index.html +0 -11
  176. data/demos/apps/simple_opal/lib/app_controller.rb +0 -62
  177. data/demos/apps/simple_opal/lib/main_window.rb +0 -146
  178. data/demos/browser/request/index.html +0 -52
  179. data/demos/browser/request/request.rb +0 -48
  180. data/gen/browser/__PROJECT_NAME__/Rakefile +0 -12
  181. data/gen/browser/__PROJECT_NAME__/index.html +0 -11
  182. data/gen/browser/__PROJECT_NAME__/javascripts/opal.debug.js +0 -4687
  183. data/gen/browser/__PROJECT_NAME__/javascripts/opal.min.js +0 -175
  184. data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +0 -1
  185. data/lib/opal/builders/base.rb +0 -50
  186. data/lib/opal/builders/css.rb +0 -46
  187. data/lib/opal/builders/javascript.rb +0 -44
  188. data/lib/opal/builders/opal.rb +0 -79
  189. data/lib/opal/builders/ruby.rb +0 -50
  190. data/lib/opal/builders/ruby/generate.rb +0 -1851
  191. data/lib/opal/builders/ruby/nodes.rb +0 -210
  192. data/lib/opal/builders/ruby/ruby.rb +0 -916
  193. data/lib/opal/builders/ruby/ruby_parser.rb +0 -6008
  194. data/lib/opal/builders/ruby/ruby_parser.rb.y +0 -1451
  195. data/lib/opal/models/build_item.rb +0 -104
  196. data/lib/opal/models/hash_struct.rb +0 -40
  197. data/lib/opal/models/project.rb +0 -252
  198. data/lib/opal/models/struct_accessors.rb +0 -58
  199. data/lib/opal/models/target.rb +0 -176
  200. data/lib/opal/opal/build.rb +0 -169
  201. data/lib/opal/opal/env/console.rb +0 -66
  202. data/lib/opal/opal/env/fs.rb +0 -98
  203. data/lib/opal/opal/env/object.rb +0 -48
  204. data/lib/opal/opal/environment.rb +0 -139
  205. data/lib/opal/opal/gen.rb +0 -62
  206. data/lib/opal/opal/opal.rb +0 -75
  207. data/lib/opal/opal/repl.rb +0 -38
  208. data/lib/opal/opalfile/dsl.rb +0 -62
  209. data/lib/opal/opalfile/opalfile.rb +0 -133
  210. data/lib/opal/opalfile/task.rb +0 -96
  211. data/lib/opal/opalfile/task_manager.rb +0 -63
  212. data/lib/opal/opalfile/task_scope.rb +0 -52
  213. data/lib/opal/rack/app_server.rb +0 -119
  214. data/lib/opal/rake/opal_task.rb +0 -34
  215. data/opals/opal/README.md +0 -37
  216. data/opals/opal/browser/Opalfile +0 -11
  217. data/opals/opal/browser/README.md +0 -146
  218. data/opals/opal/browser/SIZZLE_LICESNSE.txt +0 -148
  219. data/opals/opal/browser/lib/browser.rb +0 -118
  220. data/opals/opal/browser/lib/browser/builder.rb +0 -41
  221. data/opals/opal/browser/lib/browser/canvas_context.rb +0 -115
  222. data/opals/opal/browser/lib/browser/dimensions.rb +0 -50
  223. data/opals/opal/browser/lib/browser/document.rb +0 -146
  224. data/opals/opal/browser/lib/browser/element.rb +0 -487
  225. data/opals/opal/browser/lib/browser/element/attributes.rb +0 -88
  226. data/opals/opal/browser/lib/browser/element/css.rb +0 -290
  227. data/opals/opal/browser/lib/browser/element/form.rb +0 -146
  228. data/opals/opal/browser/lib/browser/event/dom_events.rb +0 -81
  229. data/opals/opal/browser/lib/browser/event/event.rb +0 -177
  230. data/opals/opal/browser/lib/browser/event/trigger_events.rb +0 -53
  231. data/opals/opal/browser/lib/browser/geometry.rb +0 -97
  232. data/opals/opal/browser/lib/browser/json.rb +0 -32
  233. data/opals/opal/browser/lib/browser/request/request.rb +0 -201
  234. data/opals/opal/browser/lib/browser/sizzle.js +0 -1068
  235. data/opals/opal/browser/lib/browser/string.rb +0 -42
  236. data/opals/opal/browser/lib/browser/touch.rb +0 -37
  237. data/opals/opal/browser/lib/browser/vml_context.js +0 -33
  238. data/opals/opal/browser/lib/browser/window.rb +0 -36
  239. data/opals/opal/browser/spec/browser/browser_detection_spec.rb +0 -7
  240. data/opals/opal/browser/spec/document/aref_spec.rb +0 -110
  241. data/opals/opal/browser/spec/document/ready_spec.rb +0 -16
  242. data/opals/opal/browser/spec/element/body_spec.rb +0 -11
  243. data/opals/opal/browser/spec/element/clear_spec.rb +0 -26
  244. data/opals/opal/browser/spec/element/empty_spec.rb +0 -29
  245. data/opals/opal/browser/spec/element/has_class_spec.rb +0 -40
  246. data/opals/opal/browser/spec/element/hidden_spec.rb +0 -23
  247. data/opals/opal/browser/spec/element/hide_spec.rb +0 -31
  248. data/opals/opal/browser/spec/element/remove_spec.rb +0 -25
  249. data/opals/opal/browser/spec/element/show_spec.rb +0 -31
  250. data/opals/opal/browser/spec/element/style_spec.rb +0 -69
  251. data/opals/opal/browser/spec/element/toggle_spec.rb +0 -31
  252. data/opals/opal/browser/spec/element/visible_spec.rb +0 -23
  253. data/opals/opal/browser/spec/spec_helper.rb +0 -1
  254. data/opals/opal/opal/Opalfile +0 -14
  255. data/opals/opal/opal/spec/core/array/compact_spec.rb +0 -15
  256. data/opals/opal/opal/spec/fixtures/super.rb +0 -70
  257. data/opals/opal/opal/spec/language/____temp_remove_this.rb +0 -12
  258. data/opals/opal/opal/spec/language/block_spec.rb +0 -18
  259. data/opals/opal/opal/spec/language/case_spec.rb +0 -103
  260. data/opals/opal/opal/spec/language/metaclass_spec.rb +0 -21
  261. data/opals/opal/opal/spec/language/super_spec.rb +0 -26
  262. data/opals/opal/runtime/Opalfile +0 -78
  263. data/opals/opal/runtime/README.md +0 -12
  264. data/opals/opal/runtime/docs/debugging.md +0 -51
  265. data/opals/opal/runtime/lib/array.rb +0 -1516
  266. data/opals/opal/runtime/lib/basic_object.rb +0 -49
  267. data/opals/opal/runtime/lib/class.rb +0 -54
  268. data/opals/opal/runtime/lib/dir.rb +0 -36
  269. data/opals/opal/runtime/lib/error.rb +0 -49
  270. data/opals/opal/runtime/lib/false_class.rb +0 -52
  271. data/opals/opal/runtime/lib/file.rb +0 -79
  272. data/opals/opal/runtime/lib/hash.rb +0 -791
  273. data/opals/opal/runtime/lib/io.rb +0 -39
  274. data/opals/opal/runtime/lib/kernel.rb +0 -288
  275. data/opals/opal/runtime/lib/match_data.rb +0 -36
  276. data/opals/opal/runtime/lib/module.rb +0 -109
  277. data/opals/opal/runtime/lib/nil_class.rb +0 -69
  278. data/opals/opal/runtime/lib/number.rb +0 -398
  279. data/opals/opal/runtime/lib/proc.rb +0 -77
  280. data/opals/opal/runtime/lib/range.rb +0 -63
  281. data/opals/opal/runtime/lib/regexp.rb +0 -111
  282. data/opals/opal/runtime/lib/ruby.rb +0 -30
  283. data/opals/opal/runtime/lib/string.rb +0 -328
  284. data/opals/opal/runtime/lib/symbol.rb +0 -40
  285. data/opals/opal/runtime/lib/top_self.rb +0 -33
  286. data/opals/opal/runtime/lib/true_class.rb +0 -45
  287. data/opals/opal/runtime/runtime/browser.js +0 -287
  288. data/opals/opal/runtime/runtime/debug.js +0 -180
  289. data/opals/opal/runtime/runtime/opal.js +0 -1008
  290. data/opals/opal/runtime/runtime/post_opal.js +0 -1
  291. data/opals/opal/runtime/runtime/pre_opal.js +0 -2
  292. data/opals/opal/runtime/runtime/server_side.js +0 -50
  293. data/opals/opal/spec/LICENSE.txt +0 -26
  294. data/opals/opal/spec/Opalfile +0 -5
  295. data/opals/opal/spec/bin/spec.rb +0 -43
  296. data/opals/opal/spec/lib/spec.rb +0 -33
  297. data/opals/opal/spec/lib/spec/dsl.rb +0 -41
  298. data/opals/opal/spec/lib/spec/example.rb +0 -35
  299. data/opals/opal/spec/lib/spec/example/before_and_after_hooks.rb +0 -81
  300. data/opals/opal/spec/lib/spec/example/errors.rb +0 -42
  301. data/opals/opal/spec/lib/spec/example/example_group.rb +0 -37
  302. data/opals/opal/spec/lib/spec/example/example_group_factory.rb +0 -43
  303. data/opals/opal/spec/lib/spec/example/example_group_hierarchy.rb +0 -45
  304. data/opals/opal/spec/lib/spec/example/example_group_proxy.rb +0 -41
  305. data/opals/opal/spec/lib/spec/example/example_methods.rb +0 -73
  306. data/opals/opal/spec/lib/spec/example/example_proxy.rb +0 -48
  307. data/opals/opal/spec/lib/spec/expectations.rb +0 -46
  308. data/opals/opal/spec/lib/spec/expectations/errors.rb +0 -35
  309. data/opals/opal/spec/lib/spec/expectations/fail_with.rb +0 -37
  310. data/opals/opal/spec/lib/spec/expectations/handler.rb +0 -48
  311. data/opals/opal/spec/lib/spec/matchers.rb +0 -50
  312. data/opals/opal/spec/lib/spec/matchers/be.rb +0 -26
  313. data/opals/opal/spec/lib/spec/matchers/generated_descriptions.rb +0 -47
  314. data/opals/opal/spec/lib/spec/matchers/operator_matcher.rb +0 -66
  315. data/opals/opal/spec/lib/spec/runner.rb +0 -48
  316. data/opals/opal/spec/lib/spec/runner/example_group_runner.rb +0 -71
  317. data/opals/opal/spec/lib/spec/runner/formatter/terminal_formatter.rb +0 -82
  318. data/opals/opal/spec/lib/spec/runner/options.rb +0 -63
  319. data/opals/opal/spec/resources/index.html +0 -25
  320. data/opals/opal/spec/resources/spec.css +0 -132
  321. data/spec/cherry_kit/iseq_spec.rb +0 -38
  322. data/spec/spec_helper.rb +0 -16
  323. data/spec/vienna_spec.rb +0 -7
  324. data/yard/index.html +0 -43
  325. data/yard/style.css +0 -765
@@ -1,88 +0,0 @@
1
- #
2
- # attributes.rb
3
- # vienna
4
- #
5
- # Created by Adam Beynon.
6
- # Copyright 2010 Adam Beynon.
7
- #
8
- # Permission is hereby granted, free of charge, to any person obtaining a copy
9
- # of this software and associated documentation files (the "Software"), to deal
10
- # in the Software without restriction, including without limitation the rights
11
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
- # copies of the Software, and to permit persons to whom the Software is
13
- # furnished to do so, subject to the following conditions:
14
- #
15
- # The above copyright notice and this permission notice shall be included in
16
- # all copies or substantial portions of the Software.
17
- #
18
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
- # THE SOFTWARE.
25
- #
26
-
27
-
28
- class Element
29
-
30
- # @group Accessing Element Attributes
31
-
32
- # Retreive the {DataAttributeAccessor} instance for this element.
33
- #
34
- # The returned object can then be used to modify/retrieve data items from the
35
- # element itself.
36
- #
37
- # @example HTML
38
- # !!!plain
39
- # <div id="some_id" data-method="delete"></div>
40
- #
41
- # @example Accessing data attributes
42
- # elem = Document[:some_id]
43
- # puts elem.data[:method]
44
- # # => "delete"
45
- #
46
- # @return [DataAttributeAccessor] the attribute accessor
47
- def data
48
- @data ||= DataAttributeAccessor.new self
49
- end
50
-
51
- class DataAttributeAccessor
52
-
53
- def initialize(element)
54
- @element = element
55
- `#{self}.__element__ = #{element}.__element__;`
56
- end
57
-
58
- # Retrieve the given `key`. Returns the key as a {String} if it exists, or
59
- # `nil` otherwise.
60
- #
61
- # @return [String, nil] the data from the element.
62
- def [](key)
63
- nil
64
- end
65
-
66
- # Sets the new value for the given key
67
- #
68
- # @param [String, Symbol] key
69
- # @param [String] value
70
- def []=(key, value)
71
- nil
72
- end
73
-
74
- def has_key?(key)
75
- false
76
- end
77
-
78
- def include?(key)
79
- has_key? key
80
- end
81
-
82
- def member?(key)
83
- has_key? key
84
- end
85
- end
86
-
87
- # @endgroup
88
- end
@@ -1,290 +0,0 @@
1
- #
2
- # css.rb
3
- # vienna
4
- #
5
- # Created by Adam Beynon.
6
- # Copyright 2010 Adam Beynon.
7
- #
8
- # Permission is hereby granted, free of charge, to any person obtaining a copy
9
- # of this software and associated documentation files (the "Software"), to deal
10
- # in the Software without restriction, including without limitation the rights
11
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
- # copies of the Software, and to permit persons to whom the Software is
13
- # furnished to do so, subject to the following conditions:
14
- #
15
- # The above copyright notice and this permission notice shall be included in
16
- # all copies or substantial portions of the Software.
17
- #
18
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
- # THE SOFTWARE.
25
- #
26
-
27
-
28
- class Element
29
-
30
- # @group Styling of the Element
31
-
32
- # Set the given style property +name+ to the given +value+ for +element+.
33
- # Name should/can be ruby case, or css-property or camelcase. Every property
34
- # will be converted to the correct format within this method.
35
- #
36
- # @param [Element] element the element to set the style on
37
- # @param [Symbol, String] name the style property name to set
38
- # @param [String, Number] value the value to set
39
- # @return [Element] returns +element+
40
- def self.css(element, name, value = false)
41
- # FIXME: should really check if comment or text node, and then skip if so.
42
-
43
- # make sure we are dealing with a string
44
- name = name.to_s
45
- # get the actual style property (IE uses the element itself)
46
- style = `#{element}.__element__.style || #{element}.__element__`
47
- # convert to camelCaseStyle
48
- name = `#{name}.replace(/[_-]\D/g, function(res) {
49
- return res.charAt(1).toUpperCase();
50
- });`
51
-
52
- if value == false
53
- # no value, so retrieve (nil is a good value: set to :none)
54
- `return #{style}[#{name}] || "";`
55
- else
56
- # set style property
57
- `return #{style}[#{name}] = #{value};`
58
- end
59
- end
60
-
61
- #
62
- # @param {Hash} styles
63
- #
64
- def css(styles = nil)
65
- case styles
66
- when nil
67
- @style ||= StyleDeclaration.new self
68
- when Hash
69
- styles.each { |style, value| Element.css self, style, value }
70
- when String, Symbol
71
- Element.css self, styles
72
- end
73
- end
74
-
75
- alias_method :style, :css
76
-
77
- # Checks whether the receiver has the passed in class_name
78
- #
79
- # @example Checking for classes
80
- # # Assuming the following HTML
81
- # # <div id="some_id" class="first second"></div>
82
- #
83
- # elem = Document['some_id']
84
- #
85
- # elem.has_class? 'first'
86
- # # => true
87
- #
88
- # elem.has_class? 'third'
89
- # # => false
90
- #
91
- # @param [String, Symbol] class_name the class_name to check
92
- # @return [true, false] if the element has the given class_name
93
- def has_class?(class_name)
94
- self.class_name.__contains__ class_name.to_s, " "
95
- end
96
-
97
- # Adds the given class_name to the receivers' classes, unless the class
98
- # already have the class
99
- #
100
- # @param [String, Symbol] class_name the class_name to add
101
- # @return [Element] returns the receiver
102
- def add_class(class_name)
103
- self.class_name += " #{class_name}" unless has_class? class_name
104
- self
105
- end
106
-
107
- # Adds each of the given class_names using {#add_class}.
108
- #
109
- # @param [Array<String, Symbol>] class_names the list of class_names
110
- # @return [Element] returns the receiver
111
- def add_classes(*class_names)
112
- class_names.each do |class_name|
113
- add_class class_name
114
- end
115
- self
116
- end
117
-
118
- # Remove the given class_name from the element, if it has the class_name
119
- #
120
- # @param [String, Symbol] class_name the class_name to remove
121
- # @return [Element] returns the receiver
122
- def remove_class(class_name)
123
- class_name = class_name.to_s
124
- `#{self}.__element__.className = #{self.class_name}.replace(new RegExp('(^|\\s)' + #{class_name} + '(?:\\s|$)'), '$1');`
125
- self
126
- end
127
-
128
- # Adds the given class_name to the receiver if it does not already have the
129
- # class_name, otherwise removes it.
130
- #
131
- # @param [String, Symbol] class_name the class_name to toggle
132
- # @return [Element] returns the receiver
133
- def toggle_class(class_name)
134
- class_name = class_name.to_s
135
- has_class?(class_name) ? remove_class(class_name) : add_class(class_name)
136
- self
137
- end
138
-
139
- # As we overwrite #class, this allows us to still access its functionality
140
- alias_method :__class__, :class
141
-
142
- # Set the class name. Here we do not append, just rewrite the entire class
143
- # name.
144
- #
145
- # @param [String] class_name the class to set
146
- # @return [Elements] returns the receiver
147
- def class_name=(class_name)
148
- `#{self}.__element__.className = #{class_name}.toString();`
149
- self
150
- end
151
-
152
- alias_method `#{self}.Y('class=')`, :class_name=
153
-
154
- # Returns the CSS class name for the receiver. See {#__class__} for default
155
- # access.
156
- #
157
- # @return [String] returns class name
158
- def class
159
- `return #{self}.__element__.className || "";`
160
- end
161
-
162
- alias_method :class_name, :class
163
-
164
- # set class names from hash
165
- def set_class_names(class_names)
166
- current = self.class_name.split ' '
167
-
168
- class_names.each do |name, flag|
169
- if current.include? name
170
- unless flag
171
- current.delete name
172
- end
173
- else
174
- if flag
175
- current << name
176
- end
177
- end
178
- end
179
-
180
- self.class_name = current.join(" ")
181
- end
182
-
183
- # Returns `true` if the receiver is visible, or `false` otherwise.
184
- #
185
- # @example HTML
186
- # !!!plain
187
- # <div id="foo" style="display: none;"></div>
188
- # <div id="bar"></div>
189
- #
190
- # @example Ruby
191
- # Document[:foo].visible?
192
- # # => false
193
- # Document[:bar].visible?
194
- # # => true
195
- #
196
- # @return [Boolean]
197
- def visible?
198
- Element.css(self, 'display') != "none"
199
- end
200
-
201
- # Returns `true` if the receiver is hidden, `false` otherwise.
202
- #
203
- # @example HTML
204
- # !!!plain
205
- # <div id="foo" style="display: none;"></div>
206
- # <div id="bar"></div>
207
- #
208
- # @example Ruby
209
- # Document[:foo].hidden?
210
- # # => true
211
- # Document[:bar].hidden?
212
- # # => false
213
- #
214
- # @return [Boolean]
215
- def hidden?
216
- Element.css(self, 'display') == "none"
217
- end
218
-
219
- # Hides the receiver in the DOM using the `display = none;` property. Returns
220
- # the receiver for chaining.
221
- #
222
- # @example HTML
223
- # !!!plain
224
- # <div id='foo'></div>
225
- #
226
- # @example Ruby
227
- # Document[:foo].hide
228
- # # => #<Element div, id='foo'> (and is now hidden)
229
- #
230
- # @return [Element] returns the receiver
231
- def hide
232
- Element.css self, :display, 'none'
233
- self
234
- end
235
-
236
- # Shows the receiver in the DOM using the `display = ''` property. Returns the
237
- # receiver for chaining.
238
- #
239
- # @example HTML
240
- # !!!plain
241
- # <div id='foo' style='display:none'></div>
242
- #
243
- # @example Ruby
244
- # Document[:foo].show
245
- # # => #<Element div, id='foo'> (and is now visible)
246
- #
247
- # @return [Element] returns the receiver
248
- def show
249
- Element.css self, :display, ''
250
- self
251
- end
252
-
253
- # Toggles the visible state of the receiver by checking its current
254
- # {#visible?} state. If currently visible, the element will become hidden, or
255
- # if currently hidden, the element will become visible.
256
- #
257
- # @return [Element] returns the receiver
258
- def toggle
259
- visible? ? hide : show
260
- self
261
- end
262
-
263
- # Set the opacity of the receiver
264
- #
265
- # @return [Element] returns the receiver
266
- def opacity=(opacity)
267
- raise "not implemented"
268
- end
269
-
270
- # A hash like interface for setting and retreiving CSS properties for the
271
- # dom element it represents.
272
- class StyleDeclaration
273
-
274
- # Initialize witht he given {Element} instance.
275
- #
276
- # @param [Element] element
277
- def initialize(element)
278
- `#{self}.__element__ = #{element}.__element__;`
279
- `#{self}.__style__ = #{element}.__element__.style || #{element}.__element__;`
280
- end
281
-
282
- def [](style_name)
283
- Element.css self, style_name
284
- end
285
-
286
- def []=(style_name, value)
287
- Element.css self, style_name, value
288
- end
289
- end
290
- end
@@ -1,146 +0,0 @@
1
- #
2
- # form.rb
3
- # vienna
4
- #
5
- # Created by Adam Beynon.
6
- # Copyright 2010 Adam Beynon.
7
- #
8
- # Permission is hereby granted, free of charge, to any person obtaining a copy
9
- # of this software and associated documentation files (the "Software"), to deal
10
- # in the Software without restriction, including without limitation the rights
11
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
- # copies of the Software, and to permit persons to whom the Software is
13
- # furnished to do so, subject to the following conditions:
14
- #
15
- # The above copyright notice and this permission notice shall be included in
16
- # all copies or substantial portions of the Software.
17
- #
18
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
- # THE SOFTWARE.
25
- #
26
-
27
-
28
- class Element
29
- # @group Dealing with Forms and Input Elements
30
-
31
- # Disables the receiver. The status of this property can be checked with
32
- # either {#enabled?} or {#disabled?}.
33
- #
34
- # @return [Element] returns self
35
- def disable
36
- `#{self}.__element__.disabled = true;`
37
- self
38
- end
39
-
40
- # Enables the receiver. The status of this property can be checked with
41
- # either {#enabled?} or {#disabled?}.
42
- #
43
- # @return [Element] returns self
44
- def enable
45
- `#{self}.__element__.disabled = false;`
46
- self
47
- end
48
-
49
- # Enables or disables the receiver as appropriate. This is a generic method
50
- # to achieve the functionality of {#disable} and {#enable}.
51
- #
52
- # @return [Element] returns self
53
- def enabled=(flag)
54
- flag ? enable : disable
55
- end
56
-
57
- # Returns `true` if the receiver is enabled, `false` otherwise.
58
- #
59
- # @return [Boolean]
60
- def enabled?
61
- `return #{self}.__element__.disabled ? #{false} : #{true};`
62
- end
63
-
64
- # Returns `true` if the receiver is disabled, `false` otherwise.
65
- #
66
- # @return [Boolean]
67
- def disabled?
68
- `return #{self}.__element__.disabled ? #{true} : #{false};`
69
- end
70
-
71
- # Gives the receiver keyboard focus, and then returns the receiver.
72
- #
73
- # @return [Element] returns receiver
74
- def focus
75
- `#{self}.__element__.focus();`
76
- self
77
- end
78
-
79
- # Selects all the text in the receiver, and then returns `self`.
80
- #
81
- # @return [Element] returns receiver
82
- def select
83
- `#{self}.__element__.select();`
84
- self
85
- end
86
-
87
- def value=(value)
88
- `var elem = #{self}.__element__, tag = elem.tagName.toLowerCase();
89
- if (tag === 'input') {
90
- var type = #{self}.__element__.type.toLowerCase();
91
- if (type == 'checkbox' || type == 'radio') {
92
- throw "need to handle checkbox/radio";
93
- } else {
94
- #{self}.__element__.value = #{value};
95
- }
96
- } else if (tag == 'textarea') {
97
- elem.value = #{value};
98
- }`
99
- value
100
- end
101
-
102
- # Returns the value of the receiver, whose type will depend on the receiver.
103
- # Text inputs and textareas will return a string, checkboxes and radio buttons
104
- # will return a boolean.
105
- #
106
- # @return [Object] value of receiver
107
- def value
108
- `var elem = #{self}.__element__, tag = elem.tagName.toLowerCase();
109
- if (tag == 'input') {
110
- var type = elem.type.toLowerCase();
111
- if (type == 'checkbox' || type == 'radio') {
112
- throw "need to handle checkbox.radio"
113
- } else {
114
- return elem.value;
115
- }
116
- } else if (tag == 'textarea') {
117
- return elem.value;
118
- }
119
- `
120
- end
121
-
122
- # Checkboxes and radio buttons can be checked, and this returns their state.
123
- # The result of this method is undetermined for normal input elements that do
124
- # not have a checked state.
125
- #
126
- # @return [Boolean]
127
- def checked?
128
- `return #{self}.__element__.checked ? #{true} : #{false};`
129
- end
130
-
131
- # Same as above
132
- def on?
133
- checked?
134
- end
135
-
136
- # see above
137
- def off?
138
- !checked?
139
- end
140
-
141
- def checked=(flag)
142
- # ...
143
- end
144
-
145
- # @endgroup
146
- end