opal 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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