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.
- data/.gitignore +5 -10
- data/LICENSE +75 -0
- data/README.md +55 -3
- data/Rakefile +62 -139
- data/bin/opal +7 -10
- data/gems/core/README.md +5 -0
- data/gems/core/Rakefile +7 -0
- data/gems/core/core.gemspec +13 -0
- data/gems/core/lib/core.rb +33 -0
- data/gems/core/lib/core/array.rb +1470 -0
- data/gems/core/lib/core/basic_object.rb +15 -0
- data/gems/core/lib/core/class.rb +31 -0
- data/gems/core/lib/core/dir.rb +26 -0
- data/gems/core/lib/core/error.rb +43 -0
- data/gems/core/lib/core/false_class.rb +21 -0
- data/gems/core/lib/core/file.rb +54 -0
- data/gems/core/lib/core/hash.rb +725 -0
- data/gems/core/lib/core/kernel.rb +240 -0
- data/gems/core/lib/core/module.rb +98 -0
- data/gems/core/lib/core/nil_class.rb +41 -0
- data/gems/core/lib/core/numeric.rb +370 -0
- data/gems/core/lib/core/proc.rb +11 -0
- data/gems/core/lib/core/range.rb +17 -0
- data/gems/core/lib/core/regexp.rb +18 -0
- data/gems/core/lib/core/string.rb +328 -0
- data/gems/core/lib/core/symbol.rb +15 -0
- data/gems/core/lib/core/top_self.rb +8 -0
- data/gems/core/lib/core/true_class.rb +20 -0
- data/gems/core/lib/core/vm.rb +16 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/append_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/assoc_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/at_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/clear_spec.rb +1 -1
- data/{opals/opal/opal → gems/core}/spec/core/array/collect_bang_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/collect_spec.rb +0 -0
- data/gems/core/spec/core/array/compact_spec.rb +41 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/concat_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/constructor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/each_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/element_reference_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/first_spec.rb +1 -1
- data/{opals/opal/opal → gems/core}/spec/core/array/include_spec.rb +0 -0
- data/gems/core/spec/core/array/join_spec.rb +6 -0
- data/gems/core/spec/core/array/last_spec.rb +51 -0
- data/gems/core/spec/core/array/length_spec.rb +6 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/map_spec.rb +2 -0
- data/gems/core/spec/core/array/reverse_spec.rb +6 -0
- data/{opals/opal/opal → gems/core}/spec/core/builtin_constants/builtin_constants_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/and_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/inspect_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/to_s_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/xor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/file/join_spec.rb +1 -1
- data/gems/core/spec/core/hash/assoc_spec.rb +32 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/instance_eval_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/loop_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/raise_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/module/attr_accessor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/number/lt_spec.rb +0 -0
- data/gems/core/spec/core/string/sub_spec.rb +24 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/and_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/inspect_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/to_s_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/xor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/and_spec.rb +2 -3
- data/{opals/opal/opal → gems/core}/spec/language/array_spec.rb +21 -5
- data/gems/core/spec/language/block_spec.rb +38 -0
- data/{opals/opal/opal → gems/core}/spec/language/break_spec.rb +0 -0
- data/gems/core/spec/language/case_spec.rb +103 -0
- data/{opals/opal/opal → gems/core}/spec/language/def_spec.rb +11 -1
- data/{opals/opal/opal → gems/core}/spec/language/eigenclass_spec.rb +0 -0
- data/gems/core/spec/language/file_spec.rb +13 -0
- data/gems/core/spec/language/fixtures/block.rb +21 -0
- data/gems/core/spec/language/fixtures/super.rb +293 -0
- data/{opals/opal/opal → gems/core}/spec/language/hash_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/if_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/loop_spec.rb +0 -0
- data/gems/core/spec/language/metaclass_spec.rb +21 -0
- data/{opals/opal/opal → gems/core}/spec/language/method_spec.rb +60 -0
- data/{opals/opal/opal → gems/core}/spec/language/next_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/redo_spec.rb +0 -0
- data/gems/core/spec/language/regexp_spec.rb +26 -0
- data/{opals/opal/opal → gems/core}/spec/language/rescue_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/return_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/string_spec.rb +0 -0
- data/gems/core/spec/language/super_spec.rb +32 -0
- data/{opals/opal/opal → gems/core}/spec/language/until_spec.rb +47 -47
- data/gems/core/spec/language/variables_spec.rb +155 -0
- data/{opals/opal/opal → gems/core}/spec/language/while_spec.rb +47 -47
- data/{opals/opal/opal → gems/core}/spec/spec_helper.rb +1 -1
- data/gems/core_fs/README.md +19 -0
- data/gems/dev/Rakefile +5 -0
- data/gems/dev/lib/dev.js +99 -0
- data/gems/dev/lib/dev/generator.js +1264 -0
- data/gems/dev/lib/dev/parser.js +979 -0
- data/gems/dev/lib/dev/ruby_parser.js +1088 -0
- data/gems/dev/lib/dev/ruby_parser.y +1267 -0
- data/gems/dev/lib/dev/string_scanner.js +38 -0
- data/gems/dev/tools/racc2js/README.md +39 -0
- data/gems/dev/tools/racc2js/math_parser.js +222 -0
- data/gems/dev/tools/racc2js/math_parser.rb +133 -0
- data/gems/dev/tools/racc2js/math_parser.y +28 -0
- data/gems/dev/tools/racc2js/parser.js +218 -0
- data/gems/dev/tools/racc2js/racc2js.rb +153 -0
- data/gems/json/README.md +4 -0
- data/gems/json/json.gemspec +14 -0
- data/gems/json/lib/json.rb +64 -0
- data/gems/json/lib/json/ext.rb +51 -0
- data/{opals/opal/browser/lib/browser/json_parse.js → gems/json/lib/json/json2.js} +197 -37
- data/gems/ospec/README.md +0 -0
- data/gems/ospec/lib/ospec.rb +6 -0
- data/gems/ospec/lib/ospec/autorun.rb +3 -0
- data/gems/ospec/lib/ospec/dsl.rb +15 -0
- data/gems/ospec/lib/ospec/example.rb +11 -0
- data/gems/ospec/lib/ospec/example/before_and_after_hooks.rb +56 -0
- data/gems/ospec/lib/ospec/example/errors.rb +17 -0
- data/gems/ospec/lib/ospec/example/example_group.rb +12 -0
- data/gems/ospec/lib/ospec/example/example_group_factory.rb +21 -0
- data/gems/ospec/lib/ospec/example/example_group_hierarchy.rb +20 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/example/example_group_methods.rb +26 -68
- data/gems/ospec/lib/ospec/example/example_group_proxy.rb +14 -0
- data/gems/ospec/lib/ospec/example/example_methods.rb +46 -0
- data/gems/ospec/lib/ospec/example/example_proxy.rb +18 -0
- data/gems/ospec/lib/ospec/expectations.rb +19 -0
- data/gems/ospec/lib/ospec/expectations/errors.rb +8 -0
- data/gems/ospec/lib/ospec/expectations/fail_with.rb +8 -0
- data/gems/ospec/lib/ospec/expectations/handler.rb +27 -0
- data/gems/ospec/lib/ospec/matchers.rb +24 -0
- data/{opals/opal/Rakefile → gems/ospec/lib/ospec/matchers/be.rb} +0 -0
- data/gems/ospec/lib/ospec/matchers/generated_descriptions.rb +20 -0
- data/gems/ospec/lib/ospec/matchers/operator_matcher.rb +52 -0
- data/gems/ospec/lib/ospec/runner.rb +40 -0
- data/gems/ospec/lib/ospec/runner/example_group_runner.rb +44 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/formatter/html_formatter.rb +31 -40
- data/gems/ospec/lib/ospec/runner/formatter/terminal_formatter.rb +48 -0
- data/gems/ospec/lib/ospec/runner/options.rb +36 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/reporter.rb +23 -55
- data/gems/ospec/ospec.gemspec +0 -0
- data/gems/rquery/README.md +9 -0
- data/gems/rquery/lib/rquery.rb +10 -0
- data/gems/rquery/lib/rquery/ajax.rb +4 -0
- data/gems/rquery/lib/rquery/css.rb +96 -0
- data/gems/rquery/lib/rquery/document.rb +25 -0
- data/gems/rquery/lib/rquery/element.rb +292 -0
- data/gems/rquery/lib/rquery/event.rb +108 -0
- data/gems/rquery/lib/rquery/jquery.js +8177 -0
- data/gems/rquery/lib/rquery/request.rb +138 -0
- data/gems/rquery/lib/rquery/response.rb +49 -0
- data/gems/rquery/rquery.gemspec +16 -0
- data/lib/opal.js +1597 -0
- data/lib/opal.rb +6 -69
- data/lib/opal/builder.rb +115 -0
- data/lib/opal/bundle.rb +131 -0
- data/lib/opal/command.rb +11 -0
- data/lib/opal/context.rb +69 -0
- data/lib/opal/context/console.rb +12 -0
- data/lib/opal/context/file_system.rb +19 -0
- data/lib/opal/context/loader.rb +117 -0
- data/lib/opal/gem.rb +153 -0
- data/lib/opal/ruby/nodes.rb +1302 -0
- data/lib/opal/ruby/parser.rb +780 -0
- data/lib/opal/ruby/ruby_parser.rb +5170 -0
- data/lib/opal/ruby/ruby_parser.y +1298 -0
- data/opal.gemspec +11 -256
- metadata +179 -240
- data/.gitmodules +0 -6
- data/Opalfile +0 -384
- data/VERSION +0 -1
- data/demos/apps/browser_demo/index.html +0 -11
- data/demos/apps/browser_demo/lib/browser_demo.rb +0 -31
- data/demos/apps/simple_opal/Opalfile +0 -13
- data/demos/apps/simple_opal/index.html +0 -11
- data/demos/apps/simple_opal/lib/app_controller.rb +0 -62
- data/demos/apps/simple_opal/lib/main_window.rb +0 -146
- data/demos/browser/request/index.html +0 -52
- data/demos/browser/request/request.rb +0 -48
- data/gen/browser/__PROJECT_NAME__/Rakefile +0 -12
- data/gen/browser/__PROJECT_NAME__/index.html +0 -11
- data/gen/browser/__PROJECT_NAME__/javascripts/opal.debug.js +0 -4687
- data/gen/browser/__PROJECT_NAME__/javascripts/opal.min.js +0 -175
- data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +0 -1
- data/lib/opal/builders/base.rb +0 -50
- data/lib/opal/builders/css.rb +0 -46
- data/lib/opal/builders/javascript.rb +0 -44
- data/lib/opal/builders/opal.rb +0 -79
- data/lib/opal/builders/ruby.rb +0 -50
- data/lib/opal/builders/ruby/generate.rb +0 -1851
- data/lib/opal/builders/ruby/nodes.rb +0 -210
- data/lib/opal/builders/ruby/ruby.rb +0 -916
- data/lib/opal/builders/ruby/ruby_parser.rb +0 -6008
- data/lib/opal/builders/ruby/ruby_parser.rb.y +0 -1451
- data/lib/opal/models/build_item.rb +0 -104
- data/lib/opal/models/hash_struct.rb +0 -40
- data/lib/opal/models/project.rb +0 -252
- data/lib/opal/models/struct_accessors.rb +0 -58
- data/lib/opal/models/target.rb +0 -176
- data/lib/opal/opal/build.rb +0 -169
- data/lib/opal/opal/env/console.rb +0 -66
- data/lib/opal/opal/env/fs.rb +0 -98
- data/lib/opal/opal/env/object.rb +0 -48
- data/lib/opal/opal/environment.rb +0 -139
- data/lib/opal/opal/gen.rb +0 -62
- data/lib/opal/opal/opal.rb +0 -75
- data/lib/opal/opal/repl.rb +0 -38
- data/lib/opal/opalfile/dsl.rb +0 -62
- data/lib/opal/opalfile/opalfile.rb +0 -133
- data/lib/opal/opalfile/task.rb +0 -96
- data/lib/opal/opalfile/task_manager.rb +0 -63
- data/lib/opal/opalfile/task_scope.rb +0 -52
- data/lib/opal/rack/app_server.rb +0 -119
- data/lib/opal/rake/opal_task.rb +0 -34
- data/opals/opal/README.md +0 -37
- data/opals/opal/browser/Opalfile +0 -11
- data/opals/opal/browser/README.md +0 -146
- data/opals/opal/browser/SIZZLE_LICESNSE.txt +0 -148
- data/opals/opal/browser/lib/browser.rb +0 -118
- data/opals/opal/browser/lib/browser/builder.rb +0 -41
- data/opals/opal/browser/lib/browser/canvas_context.rb +0 -115
- data/opals/opal/browser/lib/browser/dimensions.rb +0 -50
- data/opals/opal/browser/lib/browser/document.rb +0 -146
- data/opals/opal/browser/lib/browser/element.rb +0 -487
- data/opals/opal/browser/lib/browser/element/attributes.rb +0 -88
- data/opals/opal/browser/lib/browser/element/css.rb +0 -290
- data/opals/opal/browser/lib/browser/element/form.rb +0 -146
- data/opals/opal/browser/lib/browser/event/dom_events.rb +0 -81
- data/opals/opal/browser/lib/browser/event/event.rb +0 -177
- data/opals/opal/browser/lib/browser/event/trigger_events.rb +0 -53
- data/opals/opal/browser/lib/browser/geometry.rb +0 -97
- data/opals/opal/browser/lib/browser/json.rb +0 -32
- data/opals/opal/browser/lib/browser/request/request.rb +0 -201
- data/opals/opal/browser/lib/browser/sizzle.js +0 -1068
- data/opals/opal/browser/lib/browser/string.rb +0 -42
- data/opals/opal/browser/lib/browser/touch.rb +0 -37
- data/opals/opal/browser/lib/browser/vml_context.js +0 -33
- data/opals/opal/browser/lib/browser/window.rb +0 -36
- data/opals/opal/browser/spec/browser/browser_detection_spec.rb +0 -7
- data/opals/opal/browser/spec/document/aref_spec.rb +0 -110
- data/opals/opal/browser/spec/document/ready_spec.rb +0 -16
- data/opals/opal/browser/spec/element/body_spec.rb +0 -11
- data/opals/opal/browser/spec/element/clear_spec.rb +0 -26
- data/opals/opal/browser/spec/element/empty_spec.rb +0 -29
- data/opals/opal/browser/spec/element/has_class_spec.rb +0 -40
- data/opals/opal/browser/spec/element/hidden_spec.rb +0 -23
- data/opals/opal/browser/spec/element/hide_spec.rb +0 -31
- data/opals/opal/browser/spec/element/remove_spec.rb +0 -25
- data/opals/opal/browser/spec/element/show_spec.rb +0 -31
- data/opals/opal/browser/spec/element/style_spec.rb +0 -69
- data/opals/opal/browser/spec/element/toggle_spec.rb +0 -31
- data/opals/opal/browser/spec/element/visible_spec.rb +0 -23
- data/opals/opal/browser/spec/spec_helper.rb +0 -1
- data/opals/opal/opal/Opalfile +0 -14
- data/opals/opal/opal/spec/core/array/compact_spec.rb +0 -15
- data/opals/opal/opal/spec/fixtures/super.rb +0 -70
- data/opals/opal/opal/spec/language/____temp_remove_this.rb +0 -12
- data/opals/opal/opal/spec/language/block_spec.rb +0 -18
- data/opals/opal/opal/spec/language/case_spec.rb +0 -103
- data/opals/opal/opal/spec/language/metaclass_spec.rb +0 -21
- data/opals/opal/opal/spec/language/super_spec.rb +0 -26
- data/opals/opal/runtime/Opalfile +0 -78
- data/opals/opal/runtime/README.md +0 -12
- data/opals/opal/runtime/docs/debugging.md +0 -51
- data/opals/opal/runtime/lib/array.rb +0 -1516
- data/opals/opal/runtime/lib/basic_object.rb +0 -49
- data/opals/opal/runtime/lib/class.rb +0 -54
- data/opals/opal/runtime/lib/dir.rb +0 -36
- data/opals/opal/runtime/lib/error.rb +0 -49
- data/opals/opal/runtime/lib/false_class.rb +0 -52
- data/opals/opal/runtime/lib/file.rb +0 -79
- data/opals/opal/runtime/lib/hash.rb +0 -791
- data/opals/opal/runtime/lib/io.rb +0 -39
- data/opals/opal/runtime/lib/kernel.rb +0 -288
- data/opals/opal/runtime/lib/match_data.rb +0 -36
- data/opals/opal/runtime/lib/module.rb +0 -109
- data/opals/opal/runtime/lib/nil_class.rb +0 -69
- data/opals/opal/runtime/lib/number.rb +0 -398
- data/opals/opal/runtime/lib/proc.rb +0 -77
- data/opals/opal/runtime/lib/range.rb +0 -63
- data/opals/opal/runtime/lib/regexp.rb +0 -111
- data/opals/opal/runtime/lib/ruby.rb +0 -30
- data/opals/opal/runtime/lib/string.rb +0 -328
- data/opals/opal/runtime/lib/symbol.rb +0 -40
- data/opals/opal/runtime/lib/top_self.rb +0 -33
- data/opals/opal/runtime/lib/true_class.rb +0 -45
- data/opals/opal/runtime/runtime/browser.js +0 -287
- data/opals/opal/runtime/runtime/debug.js +0 -180
- data/opals/opal/runtime/runtime/opal.js +0 -1008
- data/opals/opal/runtime/runtime/post_opal.js +0 -1
- data/opals/opal/runtime/runtime/pre_opal.js +0 -2
- data/opals/opal/runtime/runtime/server_side.js +0 -50
- data/opals/opal/spec/LICENSE.txt +0 -26
- data/opals/opal/spec/Opalfile +0 -5
- data/opals/opal/spec/bin/spec.rb +0 -43
- data/opals/opal/spec/lib/spec.rb +0 -33
- data/opals/opal/spec/lib/spec/dsl.rb +0 -41
- data/opals/opal/spec/lib/spec/example.rb +0 -35
- data/opals/opal/spec/lib/spec/example/before_and_after_hooks.rb +0 -81
- data/opals/opal/spec/lib/spec/example/errors.rb +0 -42
- data/opals/opal/spec/lib/spec/example/example_group.rb +0 -37
- data/opals/opal/spec/lib/spec/example/example_group_factory.rb +0 -43
- data/opals/opal/spec/lib/spec/example/example_group_hierarchy.rb +0 -45
- data/opals/opal/spec/lib/spec/example/example_group_proxy.rb +0 -41
- data/opals/opal/spec/lib/spec/example/example_methods.rb +0 -73
- data/opals/opal/spec/lib/spec/example/example_proxy.rb +0 -48
- data/opals/opal/spec/lib/spec/expectations.rb +0 -46
- data/opals/opal/spec/lib/spec/expectations/errors.rb +0 -35
- data/opals/opal/spec/lib/spec/expectations/fail_with.rb +0 -37
- data/opals/opal/spec/lib/spec/expectations/handler.rb +0 -48
- data/opals/opal/spec/lib/spec/matchers.rb +0 -50
- data/opals/opal/spec/lib/spec/matchers/be.rb +0 -26
- data/opals/opal/spec/lib/spec/matchers/generated_descriptions.rb +0 -47
- data/opals/opal/spec/lib/spec/matchers/operator_matcher.rb +0 -66
- data/opals/opal/spec/lib/spec/runner.rb +0 -48
- data/opals/opal/spec/lib/spec/runner/example_group_runner.rb +0 -71
- data/opals/opal/spec/lib/spec/runner/formatter/terminal_formatter.rb +0 -82
- data/opals/opal/spec/lib/spec/runner/options.rb +0 -63
- data/opals/opal/spec/resources/index.html +0 -25
- data/opals/opal/spec/resources/spec.css +0 -132
- data/spec/cherry_kit/iseq_spec.rb +0 -38
- data/spec/spec_helper.rb +0 -16
- data/spec/vienna_spec.rb +0 -7
- data/yard/index.html +0 -43
- data/yard/style.css +0 -765
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# document.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
|
-
# The [Document] module.
|
|
28
|
-
module Document
|
|
29
|
-
|
|
30
|
-
# Search the DOM using the given CSS3 `selector`. This will return a single
|
|
31
|
-
# element when used with a symbol or a string representing an id, or an array
|
|
32
|
-
# otherwise.
|
|
33
|
-
#
|
|
34
|
-
# @example HTML
|
|
35
|
-
# !!!plain
|
|
36
|
-
# <div id="foo" class="a"></div>
|
|
37
|
-
# <div class="b"></div>
|
|
38
|
-
# <div class="a"></div>
|
|
39
|
-
#
|
|
40
|
-
# @example Ruby
|
|
41
|
-
# Document[:foo]
|
|
42
|
-
# # => #<Element div, id="foo">
|
|
43
|
-
# Document [:baz]
|
|
44
|
-
# # => nil
|
|
45
|
-
#
|
|
46
|
-
# Document['#foo']
|
|
47
|
-
# # => #<Element div, id="foo", class="a">
|
|
48
|
-
# Document['#bar']
|
|
49
|
-
# # => nil
|
|
50
|
-
# Document['.a']
|
|
51
|
-
# # => [#<Element div, id="foo", class="a">, #<Element div, class="a">]
|
|
52
|
-
# Document['.b']
|
|
53
|
-
# # => [#<Element div, class="b">]
|
|
54
|
-
# Document['.c']
|
|
55
|
-
# # => nil
|
|
56
|
-
#
|
|
57
|
-
# @param [String, Symbol] selector the selector to search
|
|
58
|
-
# @return [Array, Element] the result
|
|
59
|
-
def self.[](selector)
|
|
60
|
-
# puts "checking #{selector}"
|
|
61
|
-
case selector
|
|
62
|
-
when Symbol
|
|
63
|
-
# puts "need to find symbol #{selector}"
|
|
64
|
-
find_by_id selector
|
|
65
|
-
# puts "and here"
|
|
66
|
-
when /^#/
|
|
67
|
-
# puts "need to find id"
|
|
68
|
-
find_by_id selector.slice(1, selector.length)
|
|
69
|
-
else
|
|
70
|
-
# puts "need to find array of things"
|
|
71
|
-
Element.find_in_context selector, self
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def self.find_by_id(id)
|
|
76
|
-
# puts "finding by id #{id}"
|
|
77
|
-
Element.from_native `document.getElementById(#{id.to_s})`
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
@on_ready_actions = []
|
|
81
|
-
@__ready__ = false
|
|
82
|
-
|
|
83
|
-
def self.ready?(&proc)
|
|
84
|
-
if block_given?
|
|
85
|
-
if @__ready__
|
|
86
|
-
yield
|
|
87
|
-
else
|
|
88
|
-
@on_ready_actions << proc
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
@__ready__
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
# private method for when we are now ready to go! (Document is ready)
|
|
96
|
-
#
|
|
97
|
-
# @private
|
|
98
|
-
#
|
|
99
|
-
def self.__make_ready
|
|
100
|
-
@__ready__ = true
|
|
101
|
-
|
|
102
|
-
@on_ready_actions.each do |action|
|
|
103
|
-
action.call
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
# The body element of the page
|
|
108
|
-
#
|
|
109
|
-
# @return [Element] body element of document
|
|
110
|
-
def self.body
|
|
111
|
-
Element.from_native `document.body`
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
# traverse the document looking for elements matching the given conditions.
|
|
115
|
-
# This is mostly a private method? - uses js node names instead of opal/ruby
|
|
116
|
-
#
|
|
117
|
-
# @param [Element] element the element to begin with
|
|
118
|
-
# @param [String] path the path to lookup
|
|
119
|
-
# @param [String] stop_state
|
|
120
|
-
# @param [true, false] all boolean whether we want all results, or just first
|
|
121
|
-
# @return [Element, Array<Element>] single element, or all results (all?)
|
|
122
|
-
def self.traverse(element, path, stop_state, all)
|
|
123
|
-
`var result = [];
|
|
124
|
-
var working = #{element}.__element__[#{path}];
|
|
125
|
-
while (working && (working.nodeType == 1)) {
|
|
126
|
-
//console.log("working is:");
|
|
127
|
-
//console.log(working);
|
|
128
|
-
if (!#{all}.r) {
|
|
129
|
-
return #{Element}.$from_native(working);
|
|
130
|
-
} else {
|
|
131
|
-
result.push(#{Element}.$from_native(working));
|
|
132
|
-
}
|
|
133
|
-
working = working[path];
|
|
134
|
-
}
|
|
135
|
-
return result`
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
# Quick hack/snippet to make document ready when opal receives triggers
|
|
139
|
-
`opal.setDocumentReadyListener(function() {
|
|
140
|
-
#{Document.__make_ready};
|
|
141
|
-
});`
|
|
142
|
-
|
|
143
|
-
# Document should represen the native 'document'
|
|
144
|
-
`#{self}.__element__ = document;`
|
|
145
|
-
|
|
146
|
-
end
|
|
@@ -1,487 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# element.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
|
-
# Represents a DOM element in the browser.
|
|
28
|
-
#
|
|
29
|
-
# ## Implementation Details
|
|
30
|
-
#
|
|
31
|
-
# Native Elements are not extended due to cross browser issues. Instead,
|
|
32
|
-
# instances of this class will have an instance property '__element__' which
|
|
33
|
-
# is the native javascript element. Extensions to this class should access
|
|
34
|
-
# the element in this way for modification etc. In future, this class will
|
|
35
|
-
# cache some information on the element, such as class name etc in an aim to
|
|
36
|
-
# speed up performance by reducing hits to the DOM.
|
|
37
|
-
class Element
|
|
38
|
-
|
|
39
|
-
# @group Managing Elements in the Document
|
|
40
|
-
|
|
41
|
-
# Creates a new element of the specified type.
|
|
42
|
-
#
|
|
43
|
-
# @param [Symbol, String] type the tag name for the +Element+ to have
|
|
44
|
-
# @param [Hash] options a set of options given to {#set}
|
|
45
|
-
# @return [Element] returns the new element
|
|
46
|
-
def initialize(type, options = {})
|
|
47
|
-
`if (!#{options}) { #{options} = vnH()}`
|
|
48
|
-
# puts "creating new element #{type}"
|
|
49
|
-
`#{self}.__element__ = document.createElement(#{type.to_s});`
|
|
50
|
-
set options
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Return an instance with the passed native element as the instance's own
|
|
54
|
-
# element. This is used to return the body element, for instance
|
|
55
|
-
#
|
|
56
|
-
# Element.from_native(..some native element pointer..)
|
|
57
|
-
# # => element
|
|
58
|
-
#
|
|
59
|
-
# @note The given element MUST be a Javascript element, not an Opal one.
|
|
60
|
-
#
|
|
61
|
-
# @param [Native Element] element
|
|
62
|
-
# @return [Element]
|
|
63
|
-
#
|
|
64
|
-
def self.from_native(native_element)
|
|
65
|
-
#`console.log("loogking up for " + #{native_element});`
|
|
66
|
-
`if(!#{native_element}) return #{nil};`
|
|
67
|
-
element = allocate
|
|
68
|
-
`#{element}.__element__ = #{native_element};`
|
|
69
|
-
element
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
# Return the body element for the document. The body element is an instance
|
|
73
|
-
# of this class, with some singleton methods defined, such as inspect so
|
|
74
|
-
# that it gets some nicer inspect properties.
|
|
75
|
-
#
|
|
76
|
-
# @return [Element] body element
|
|
77
|
-
#
|
|
78
|
-
def self.body
|
|
79
|
-
return @body_element if @body_element
|
|
80
|
-
|
|
81
|
-
@body_element = from_native(`document.body`)
|
|
82
|
-
# def @body_element.inspect
|
|
83
|
-
# "#<Element body>"
|
|
84
|
-
# end
|
|
85
|
-
|
|
86
|
-
@body_element
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
# Find the DOM selector in the given context. Context should always be
|
|
90
|
-
# given.
|
|
91
|
-
#
|
|
92
|
-
# Element.find_in_context('.first', Element.body)
|
|
93
|
-
#
|
|
94
|
-
# @param [String|Synbol] selector
|
|
95
|
-
# @param [Element] context
|
|
96
|
-
# @return [Array]
|
|
97
|
-
#
|
|
98
|
-
def self.find_in_context(selector, context)
|
|
99
|
-
selector = `'#' + #{selector.to_s}` if selector.is_a? Symbol
|
|
100
|
-
elements = `Sizzle(#{selector}, #{context}.__element__);`
|
|
101
|
-
# if elements.length == 1
|
|
102
|
-
# `return #{Element}.$from_native(#{elements}[0]);`
|
|
103
|
-
# else
|
|
104
|
-
# `console.log(#{elements});`
|
|
105
|
-
# raise "need to handle find_in_context array"
|
|
106
|
-
# end
|
|
107
|
-
|
|
108
|
-
elements.map do |e|
|
|
109
|
-
from_native e
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
def find(selector)
|
|
114
|
-
self.class.find_in_context selector, self
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# Returns the tag name of the Element as a symbol, in lower case.
|
|
118
|
-
#
|
|
119
|
-
# @example HTML
|
|
120
|
-
# <div id="my_div"></div>
|
|
121
|
-
#
|
|
122
|
-
# @example Ruby
|
|
123
|
-
# Document[:my_div].tag
|
|
124
|
-
# # => :div
|
|
125
|
-
#
|
|
126
|
-
# @return [Symbol] tag name of the element
|
|
127
|
-
def tag
|
|
128
|
-
@tag ||= `#{self}.Y(#{self}.__element__.tagName.toLowerCase())`
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
# Sets the innerHTML of the receiver.
|
|
132
|
-
#
|
|
133
|
-
# @example HTML
|
|
134
|
-
# <div id="foo"></foo>
|
|
135
|
-
#
|
|
136
|
-
# @example Ruby
|
|
137
|
-
# Document[:foo].html = "<div></div>"
|
|
138
|
-
#
|
|
139
|
-
# @example Result
|
|
140
|
-
# <div id="foo">
|
|
141
|
-
# <div></div>
|
|
142
|
-
# </div>
|
|
143
|
-
#
|
|
144
|
-
# @param [String] html the html string to set
|
|
145
|
-
# @return [Elements] returns the receiver
|
|
146
|
-
def html=(html)
|
|
147
|
-
`#{self}.__element__.innerHTML = #{html};`
|
|
148
|
-
self
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
# Returns the text content of the receiver.
|
|
152
|
-
#
|
|
153
|
-
# @example HTML
|
|
154
|
-
# <div id="foo">bar</div>
|
|
155
|
-
#
|
|
156
|
-
# @example Ruby
|
|
157
|
-
# Document[:foo].text # => "bar"
|
|
158
|
-
#
|
|
159
|
-
# @return [String] the receivers text content
|
|
160
|
-
def text
|
|
161
|
-
`var e = #{self}.__element__;
|
|
162
|
-
return e.innerText == null ? e.textContent : e.innerText;`
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
# Set the inner text content of the receiver.
|
|
166
|
-
#
|
|
167
|
-
# @example HTML
|
|
168
|
-
# <div id="foo"></div>
|
|
169
|
-
#
|
|
170
|
-
# @example Ruby
|
|
171
|
-
# Document[:foo].text = "bar"
|
|
172
|
-
#
|
|
173
|
-
# @example Result
|
|
174
|
-
# <div id="foo">bar</div>
|
|
175
|
-
#
|
|
176
|
-
# @param [String] text the text content to set
|
|
177
|
-
# @return [Element] returns the receiver
|
|
178
|
-
def text=(text)
|
|
179
|
-
`var e = #{self}.__element__;
|
|
180
|
-
if (e.textContent !== undefined) {
|
|
181
|
-
e.textContent = #{text}.toString();
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
e.innerText = #{text}.toString();
|
|
185
|
-
}`
|
|
186
|
-
self
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
alias_method :content=, :text=
|
|
190
|
-
|
|
191
|
-
# Set the id of the receiver
|
|
192
|
-
#
|
|
193
|
-
# @example HTML
|
|
194
|
-
# <div class="foo"></div>
|
|
195
|
-
#
|
|
196
|
-
# @example Ruby
|
|
197
|
-
# Document['.foo'].first.id = "bar"
|
|
198
|
-
#
|
|
199
|
-
# @example Result
|
|
200
|
-
# <div class="foo" id="bar"></div>
|
|
201
|
-
#
|
|
202
|
-
# @param [String, Symbol] id the id to set on the element
|
|
203
|
-
# @return [Element] returns the receiver
|
|
204
|
-
def id=(id)
|
|
205
|
-
`#{self}.__element__.id = #{id.to_s};`
|
|
206
|
-
self
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
# Returns the id of the receiver as a +Symbol+, or +nil+ if no id is defined.
|
|
210
|
-
#
|
|
211
|
-
# @example HTML
|
|
212
|
-
# <div id="foo" class="bar"><div>
|
|
213
|
-
# <div class="baz"</div>
|
|
214
|
-
#
|
|
215
|
-
# @example Ruby
|
|
216
|
-
# Document['.bar'].first.id # => :foo
|
|
217
|
-
# Document['.baz'].first.id # => nil
|
|
218
|
-
#
|
|
219
|
-
# @return [Symbol, nil] returns the id of the receiver
|
|
220
|
-
def id
|
|
221
|
-
`return #{self}.__element__.id || #{nil};`
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
# Returns +true+ if the receiver is the body element, +false+ otherwise
|
|
225
|
-
#
|
|
226
|
-
# @example Testing Elements
|
|
227
|
-
# Document[:foo].body? # => false
|
|
228
|
-
# Document.body.body? # => true
|
|
229
|
-
#
|
|
230
|
-
# @return [true, false] whether the receiver is the body element
|
|
231
|
-
def body?
|
|
232
|
-
false
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
def inspect
|
|
236
|
-
description = ["#<Element #{tag}"]
|
|
237
|
-
description << " class_name='#{class_name}'" unless class_name == ""
|
|
238
|
-
description << " id='#{id}'" unless id == ""
|
|
239
|
-
description << ">"
|
|
240
|
-
description.join ""
|
|
241
|
-
end
|
|
242
|
-
|
|
243
|
-
# Set some options on the element
|
|
244
|
-
#
|
|
245
|
-
# @example
|
|
246
|
-
# element.set :class_name => "adam", :id => "beynon"
|
|
247
|
-
#
|
|
248
|
-
# ## Valid keys:
|
|
249
|
-
#
|
|
250
|
-
# - class / class_name
|
|
251
|
-
# - id
|
|
252
|
-
# - text /content
|
|
253
|
-
# - html
|
|
254
|
-
#
|
|
255
|
-
# @param [Hash] options to set
|
|
256
|
-
# @return [Element] returns the receiver
|
|
257
|
-
def set(options)
|
|
258
|
-
options.each do |key, value|
|
|
259
|
-
__send__ "#{key}=", value
|
|
260
|
-
end
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
# =========================================
|
|
264
|
-
# = Inserting/appending/removing children =
|
|
265
|
-
# =========================================
|
|
266
|
-
|
|
267
|
-
# Insert the given element in location :bottom
|
|
268
|
-
#
|
|
269
|
-
# @param [Element] element the element to insert
|
|
270
|
-
# @return [Element] returns the receiver
|
|
271
|
-
def <<(element)
|
|
272
|
-
append element
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
# Insert the given +element+ at the bottom of the receiver
|
|
276
|
-
#
|
|
277
|
-
# @param [Element] element the element to append
|
|
278
|
-
# @return [Element] returns the receiver
|
|
279
|
-
def append(element)
|
|
280
|
-
`#{self}.__element__.appendChild(#{element}.__element__);`
|
|
281
|
-
self
|
|
282
|
-
end
|
|
283
|
-
|
|
284
|
-
# Insert the given +element+ before the receiver
|
|
285
|
-
#
|
|
286
|
-
# @param [Element] element the element to insert
|
|
287
|
-
# @return [Element] returns the receiver
|
|
288
|
-
def before(element)
|
|
289
|
-
`var parent = #{self}.__element__.parentNode;
|
|
290
|
-
if (parent) {
|
|
291
|
-
parent.insertBefore(#{element}.__element__, #{self}.__element__);
|
|
292
|
-
}`
|
|
293
|
-
self
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
# Insert the given +element+ after the receiver, but before the next sibling
|
|
297
|
-
#
|
|
298
|
-
# @param [Element] element the element to insert
|
|
299
|
-
# @return [Element] returns the receiver
|
|
300
|
-
def after(element)
|
|
301
|
-
`var parent = #{self}.__element__.parentNode;
|
|
302
|
-
if (parent) {
|
|
303
|
-
parent.insertBefore(#{element}.__element__, #{self}.__element__.nextSibling);
|
|
304
|
-
}`
|
|
305
|
-
self
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
# Removes the receiver from the DOM, and then returns it.
|
|
311
|
-
#
|
|
312
|
-
# @example HTML
|
|
313
|
-
# !!!plain
|
|
314
|
-
# <div id="foo"></div>
|
|
315
|
-
# <div id="bar"></div>
|
|
316
|
-
#
|
|
317
|
-
# @example Ruby
|
|
318
|
-
# Document[:foo].dispose
|
|
319
|
-
#
|
|
320
|
-
# @example Result
|
|
321
|
-
# !!!plain
|
|
322
|
-
# <div id="bar"></div>
|
|
323
|
-
#
|
|
324
|
-
# @return [Element] returns the receiver.
|
|
325
|
-
def remove
|
|
326
|
-
`var e = #{self}.__element__;
|
|
327
|
-
if (e.parentNode) {
|
|
328
|
-
e.parentNode.removeChild(e);
|
|
329
|
-
}`
|
|
330
|
-
self
|
|
331
|
-
end
|
|
332
|
-
|
|
333
|
-
# Removes all children from the receiver and then removes the receiver itself
|
|
334
|
-
# from the DOM tree
|
|
335
|
-
#
|
|
336
|
-
# @return [nil] returns nil
|
|
337
|
-
def destroy
|
|
338
|
-
# FIXME: we do not do this properly.
|
|
339
|
-
remove
|
|
340
|
-
end
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
# Returns `true` if the receiver is empty (contains only whitespace), `false`
|
|
344
|
-
# otherwise.
|
|
345
|
-
#
|
|
346
|
-
# @example HTML
|
|
347
|
-
# !!!plain
|
|
348
|
-
# <div id="foo"></div>
|
|
349
|
-
# <div id="bar"><p></p></div>
|
|
350
|
-
# <div id="baz"> </baz>
|
|
351
|
-
#
|
|
352
|
-
# @example Ruby
|
|
353
|
-
# Document[:foo].empty?
|
|
354
|
-
# # => true
|
|
355
|
-
# Document[:bar].empty?
|
|
356
|
-
# # => false
|
|
357
|
-
# Document[:baz].empty?
|
|
358
|
-
# # => true
|
|
359
|
-
#
|
|
360
|
-
# @return [Boolean]
|
|
361
|
-
def empty?
|
|
362
|
-
`return /^\s*$/.test(#{self}.__element__.innerHTML) ? #{true} : #{false};`
|
|
363
|
-
end
|
|
364
|
-
|
|
365
|
-
# Removes all child elements from the receiver, and then returns self.
|
|
366
|
-
#
|
|
367
|
-
# @example HTML
|
|
368
|
-
# !!!plain
|
|
369
|
-
# <div id="foo">
|
|
370
|
-
# <span class="bar"></span>
|
|
371
|
-
# <div class="baz"></div>
|
|
372
|
-
# </div>
|
|
373
|
-
#
|
|
374
|
-
# @example Ruby
|
|
375
|
-
# Document[:foo].empty
|
|
376
|
-
# # => #<Element div, id='foo'>
|
|
377
|
-
#
|
|
378
|
-
# @example Result
|
|
379
|
-
# !!!plain
|
|
380
|
-
# <div id="foo"></div>
|
|
381
|
-
#
|
|
382
|
-
# @return [Element] returns receiver
|
|
383
|
-
def clear
|
|
384
|
-
`var e = #{self}.__element__;
|
|
385
|
-
for (var children = e.childNodes, i = children.length; i > 0;) {
|
|
386
|
-
var child = children[--i];
|
|
387
|
-
if (child.parentNode) {
|
|
388
|
-
child.parentNode.removeChild(child);
|
|
389
|
-
}
|
|
390
|
-
}`
|
|
391
|
-
self
|
|
392
|
-
end
|
|
393
|
-
|
|
394
|
-
# Return the graphics context of the receiver, which will be an instance of
|
|
395
|
-
# [CanvasContext] or a subclass (for VML browsers). Everytime this method is
|
|
396
|
-
# called, the native 'getContext' method is applied for complaince with its
|
|
397
|
-
# side effects (clearing context etc)
|
|
398
|
-
#
|
|
399
|
-
# @return [CanvasContext] the canvas context for the receiver
|
|
400
|
-
def context
|
|
401
|
-
CanvasContext.new self
|
|
402
|
-
end
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
# ========================
|
|
406
|
-
# = Parent, children etc =
|
|
407
|
-
# ========================
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
# Get the parent of the receiver
|
|
411
|
-
#
|
|
412
|
-
# @return [Element] the parent
|
|
413
|
-
def parent(selector=nil)
|
|
414
|
-
Document.traverse self, 'parentNode', nil, false
|
|
415
|
-
end
|
|
416
|
-
|
|
417
|
-
def parents(selector=nil)
|
|
418
|
-
Document.traverse self, 'parentNode', nil, true
|
|
419
|
-
end
|
|
420
|
-
|
|
421
|
-
def next(selector=nil)
|
|
422
|
-
Document.traverse self, 'nextSibling', nil, false
|
|
423
|
-
end
|
|
424
|
-
|
|
425
|
-
def prev(selector=nil)
|
|
426
|
-
Document.traverse self, 'previousSibling', nil, false
|
|
427
|
-
end
|
|
428
|
-
|
|
429
|
-
def first(selector=nil)
|
|
430
|
-
Document.traverse self, 'firstChild', nil, false
|
|
431
|
-
end
|
|
432
|
-
|
|
433
|
-
def last(selector=nil)
|
|
434
|
-
Document.traverse self, 'lastChild', nil, false
|
|
435
|
-
end
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
# Append the element. If string passed, then add as html content
|
|
439
|
-
#
|
|
440
|
-
def <<(elem)
|
|
441
|
-
append elem
|
|
442
|
-
self
|
|
443
|
-
end
|
|
444
|
-
|
|
445
|
-
# Returns the offset of the element, taking into account the parents, scroll
|
|
446
|
-
# values, etc etc. needs improving, not 100% for all browsers
|
|
447
|
-
#
|
|
448
|
-
# @return [Hash] :left/:top => Number
|
|
449
|
-
#
|
|
450
|
-
def element_offset
|
|
451
|
-
left = 0
|
|
452
|
-
top = 0
|
|
453
|
-
|
|
454
|
-
`var element = #{self}.__element__;
|
|
455
|
-
var parent = element;
|
|
456
|
-
while (parent) {
|
|
457
|
-
#{left} += parent.offsetLeft;
|
|
458
|
-
#{top} += parent.offsetTop;
|
|
459
|
-
parent = parent.offsetParent;
|
|
460
|
-
}
|
|
461
|
-
`
|
|
462
|
-
Point.new left, top
|
|
463
|
-
end
|
|
464
|
-
|
|
465
|
-
# All valid html tags. These are looped over so each element instance has
|
|
466
|
-
# an instance method of the same name to construct an element of that type
|
|
467
|
-
# with some given options
|
|
468
|
-
VALID_HTML_TAGS = [
|
|
469
|
-
:html, :head, :title, :base, :meta, :link, :style, :script, :body, :div,
|
|
470
|
-
:dl, :dt, :dd, :span, :pre
|
|
471
|
-
]
|
|
472
|
-
|
|
473
|
-
VALID_HTML_TAGS.each do |tag_name|
|
|
474
|
-
define_method(tag_name) do |options|
|
|
475
|
-
# options are the options to se
|
|
476
|
-
e = Element.new tag_name, options
|
|
477
|
-
# now add to self
|
|
478
|
-
self << e
|
|
479
|
-
# return new element (for chaining)
|
|
480
|
-
e
|
|
481
|
-
end
|
|
482
|
-
end
|
|
483
|
-
end
|
|
484
|
-
|
|
485
|
-
require 'browser/element/attributes'
|
|
486
|
-
require 'browser/element/css'
|
|
487
|
-
require 'browser/element/form'
|