dommy 0.16.0 → 0.17.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.
- checksums.yaml +4 -4
- data/lib/dommy/animation.rb +1 -0
- data/lib/dommy/backend.rb +3 -0
- data/lib/dommy/blob.rb +6 -0
- data/lib/dommy/browser.rb +12 -4
- data/lib/dommy/character_data.rb +1 -13
- data/lib/dommy/cookie_store.rb +2 -1
- data/lib/dommy/document.rb +67 -30
- data/lib/dommy/element.rb +11 -0
- data/lib/dommy/element_internals.rb +12 -0
- data/lib/dommy/encodings/legacy_multibyte.rb +800 -0
- data/lib/dommy/encodings/multibyte_overrides.rb +76 -0
- data/lib/dommy/encodings/prescan.rb +234 -0
- data/lib/dommy/encodings.rb +121 -57
- data/lib/dommy/event.rb +107 -54
- data/lib/dommy/event_source.rb +1 -0
- data/lib/dommy/fetch.rb +244 -53
- data/lib/dommy/file_reader.rb +1 -0
- data/lib/dommy/form_data.rb +22 -9
- data/lib/dommy/form_entry_list.rb +3 -3
- data/lib/dommy/html_canvas_element.rb +85 -12
- data/lib/dommy/html_elements/base.rb +1 -0
- data/lib/dommy/html_elements/forms/input.rb +3 -0
- data/lib/dommy/html_elements/interactive.rb +56 -48
- data/lib/dommy/html_elements/metadata.rb +23 -0
- data/lib/dommy/interaction/form_submission.rb +24 -42
- data/lib/dommy/internal/accessibility_tree.rb +149 -162
- data/lib/dommy/internal/accessibility_visibility.rb +16 -17
- data/lib/dommy/internal/accessible_name.rb +231 -246
- data/lib/dommy/internal/aria_role.rb +182 -195
- data/lib/dommy/internal/aria_snapshot.rb +35 -38
- data/lib/dommy/internal/aria_state.rb +102 -118
- data/lib/dommy/internal/autofill.rb +75 -75
- data/lib/dommy/internal/backend_prefilter.rb +127 -130
- data/lib/dommy/internal/child_navigable.rb +86 -83
- data/lib/dommy/internal/close_watcher_manager.rb +1 -0
- data/lib/dommy/internal/css/ancestor_filter.rb +64 -64
- data/lib/dommy/internal/css/calc.rb +90 -71
- data/lib/dommy/internal/css/cascade.rb +69 -67
- data/lib/dommy/internal/css/color.rb +249 -187
- data/lib/dommy/internal/css/computed_style_builder.rb +34 -0
- data/lib/dommy/internal/css/computed_style_declaration.rb +50 -11
- data/lib/dommy/internal/css/counters.rb +67 -67
- data/lib/dommy/internal/css/custom_properties.rb +114 -114
- data/lib/dommy/internal/css/parser.rb +277 -239
- data/lib/dommy/internal/css/property_registry.rb +321 -302
- data/lib/dommy/internal/css/renderability.rb +37 -35
- data/lib/dommy/internal/css/rule_index.rb +2 -2
- data/lib/dommy/internal/css/rule_index_inputs.rb +2 -2
- data/lib/dommy/internal/css/supports.rb +115 -113
- data/lib/dommy/internal/css/ua_stylesheet.rb +55 -53
- data/lib/dommy/internal/css_rule_text.rb +121 -119
- data/lib/dommy/internal/css_source.rb +1 -3
- data/lib/dommy/internal/css_syntax.rb +157 -92
- data/lib/dommy/internal/declarative_shadow_roots.rb +1 -0
- data/lib/dommy/internal/directionality.rb +120 -123
- data/lib/dommy/internal/document_live_ranges.rb +26 -1
- data/lib/dommy/internal/dom_matching.rb +185 -184
- data/lib/dommy/internal/element_geometry.rb +8 -1
- data/lib/dommy/internal/element_matching.rb +71 -69
- data/lib/dommy/internal/element_shadow.rb +1 -13
- data/lib/dommy/internal/element_state.rb +255 -265
- data/lib/dommy/internal/event_handlers.rb +66 -64
- data/lib/dommy/internal/exception_report.rb +88 -86
- data/lib/dommy/internal/focusability.rb +205 -205
- data/lib/dommy/internal/global_functions.rb +49 -47
- data/lib/dommy/internal/idl_reflection.rb +99 -97
- data/lib/dommy/internal/js_number.rb +35 -33
- data/lib/dommy/internal/light_dismiss.rb +130 -132
- data/lib/dommy/internal/literal_lookup.rb +75 -75
- data/lib/dommy/internal/mime_type.rb +54 -49
- data/lib/dommy/internal/mutation_coordinator.rb +46 -0
- data/lib/dommy/internal/mutation_observer_microtask.rb +60 -0
- data/lib/dommy/internal/namespaces.rb +51 -49
- data/lib/dommy/internal/node_adopter.rb +25 -1
- data/lib/dommy/internal/node_equality.rb +61 -59
- data/lib/dommy/internal/post_insertion_steps.rb +1 -0
- data/lib/dommy/internal/referrer.rb +144 -0
- data/lib/dommy/internal/rendered_text/collector.rb +22 -3
- data/lib/dommy/internal/rendered_text/computed_box.rb +3 -2
- data/lib/dommy/internal/rendered_text/fragment.rb +37 -38
- data/lib/dommy/internal/rendered_text/items.rb +7 -5
- data/lib/dommy/internal/selector_matcher.rb +361 -359
- data/lib/dommy/internal/selector_parser.rb +74 -62
- data/lib/dommy/internal/sequential_focus_navigation.rb +150 -151
- data/lib/dommy/internal/shadow_root_registry.rb +7 -0
- data/lib/dommy/internal/slot_assignment.rb +117 -0
- data/lib/dommy/internal/slot_signals.rb +125 -0
- data/lib/dommy/internal/unsafe_html.rb +79 -77
- data/lib/dommy/internal/url_parser.rb +5 -29
- data/lib/dommy/internal/web_idl.rb +158 -153
- data/lib/dommy/internal/window_bound.rb +14 -0
- data/lib/dommy/internal/window_constructors.rb +3 -0
- data/lib/dommy/internal/xml_serialization.rb +298 -296
- data/lib/dommy/js/dom_interfaces.rb +13 -1
- data/lib/dommy/js/host_bridge.rb +23 -1
- data/lib/dommy/js/host_callbacks.rb +7 -0
- data/lib/dommy/js/host_runtime.js +625 -61
- data/lib/dommy/js/import_map.rb +1 -1
- data/lib/dommy/js/observable_runtime.js +295 -128
- data/lib/dommy/js/webidl_members.js +1 -1
- data/lib/dommy/js/webidl_signatures.js +35 -6
- data/lib/dommy/media_query_list.rb +1 -0
- data/lib/dommy/message_channel.rb +2 -0
- data/lib/dommy/mutation_observer.rb +25 -29
- data/lib/dommy/navigator.rb +4 -1
- data/lib/dommy/node.rb +4 -0
- data/lib/dommy/notification.rb +1 -0
- data/lib/dommy/promise.rb +12 -0
- data/lib/dommy/range.rb +20 -3
- data/lib/dommy/shadow_root.rb +25 -1
- data/lib/dommy/streams.rb +18 -0
- data/lib/dommy/style_declaration.rb +15 -4
- data/lib/dommy/text_codec.rb +7 -5
- data/lib/dommy/tree_walker.rb +68 -61
- data/lib/dommy/version.rb +1 -1
- data/lib/dommy/web_socket.rb +1 -0
- data/lib/dommy/window.rb +22 -4
- data/lib/dommy/worker.rb +1 -0
- data/lib/dommy/xml_http_request.rb +12 -2
- data/lib/dommy.rb +17 -2
- metadata +11 -3
|
@@ -179,7 +179,19 @@ module Dommy
|
|
|
179
179
|
%w[HTMLUnknownElement HTMLElement Element Node EventTarget],
|
|
180
180
|
%w[HTMLMediaElement HTMLElement Element Node EventTarget],
|
|
181
181
|
%w[HTMLAudioElement HTMLMediaElement HTMLElement Element Node EventTarget],
|
|
182
|
-
%w[HTMLVideoElement HTMLMediaElement HTMLElement Element Node EventTarget]
|
|
182
|
+
%w[HTMLVideoElement HTMLMediaElement HTMLElement Element Node EventTarget],
|
|
183
|
+
# The rest of the Window-exposed interfaces Dommy has a class for,
|
|
184
|
+
# which a script reaches through an instance (location, navigator,
|
|
185
|
+
# el.style, matchMedia(), …) rather than constructs: an interface
|
|
186
|
+
# object is a global before any instance has crossed.
|
|
187
|
+
%w[Window EventTarget], %w[Location], %w[History], %w[Navigator], %w[Screen], %w[BarProp],
|
|
188
|
+
%w[External], %w[CustomElementRegistry], %w[MimeTypeArray], %w[PluginArray],
|
|
189
|
+
%w[MessagePort EventTarget], %w[MediaQueryList EventTarget], %w[MediaQueryListEvent Event],
|
|
190
|
+
%w[CSSStyleDeclaration], %w[MediaList], %w[DOMStringMap], %w[NamedNodeMap],
|
|
191
|
+
%w[HTMLOptionsCollection HTMLCollection], %w[MutationRecord], %w[ValidityState],
|
|
192
|
+
%w[DataTransferItem], %w[DataTransferItemList], %w[TouchList],
|
|
193
|
+
%w[ImageData], %w[CanvasRenderingContext2D], %w[CanvasGradient], %w[TextMetrics],
|
|
194
|
+
%w[Crypto], %w[SubtleCrypto], %w[Performance], %w[DOMRect]
|
|
183
195
|
].freeze
|
|
184
196
|
|
|
185
197
|
module_function
|
data/lib/dommy/js/host_bridge.rb
CHANGED
|
@@ -96,6 +96,21 @@ module Dommy
|
|
|
96
96
|
obj
|
|
97
97
|
end
|
|
98
98
|
|
|
99
|
+
# Make the engine's global object the window `win` (`window ===
|
|
100
|
+
# globalThis`), in place of define_host_object("window", win): the
|
|
101
|
+
# window's members, named elements and event handler attributes resolve
|
|
102
|
+
# through globalThis's prototype chain, and wherever the host hands out
|
|
103
|
+
# `win`, JS gets globalThis. Only for an engine whose identifier
|
|
104
|
+
# resolution asks a Proxy on the global's prototype chain for `has`, so
|
|
105
|
+
# an unresolvable bare name still throws a ReferenceError (not QuickJS).
|
|
106
|
+
def unify_global_window(win)
|
|
107
|
+
@backend.call_js("__rbHost.unifyGlobalWindow", @codec.register(win))
|
|
108
|
+
win
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# The Window this realm's global is (nil before install_window).
|
|
112
|
+
attr_reader :window
|
|
113
|
+
|
|
99
114
|
# Bind the window the bridge draws on for JS constructors (new Event(...))
|
|
100
115
|
# and custom element registration. Called by Runtime#install_window — kept
|
|
101
116
|
# distinct from define_host_object so the generic binder has no hidden
|
|
@@ -454,7 +469,14 @@ module Dommy
|
|
|
454
469
|
@backend.define_host_function("__rb_run_microtask") do |id|
|
|
455
470
|
@profile.count(:__rb_run_microtask)
|
|
456
471
|
callback = @microtask_procs.delete(id)
|
|
457
|
-
|
|
472
|
+
# A Ruby proc (MutationObserver delivery) or a JS function the page
|
|
473
|
+
# queued with window.queueMicrotask. What a JS one throws is reported
|
|
474
|
+
# at the window, as HTML's microtask callback steps do.
|
|
475
|
+
begin
|
|
476
|
+
CallableInvoker.invoke_raising(callback) if callback
|
|
477
|
+
rescue Dommy::Bridge::ThrowValue => e
|
|
478
|
+
Internal::ExceptionReport.report_at(@window, e) if @window
|
|
479
|
+
end
|
|
458
480
|
nil
|
|
459
481
|
end
|
|
460
482
|
# Opt-in rejection diagnostics: __rbHost.installRejectionTracker (only run
|
|
@@ -40,6 +40,10 @@ module Dommy
|
|
|
40
40
|
@bridge.invoke_callback(@id, args)
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
+
# The Window that is the function's realm's global: whose `event` a
|
|
44
|
+
# listener sees set (DOM "inner invoke").
|
|
45
|
+
def __internal_window__ = @bridge.window
|
|
46
|
+
|
|
43
47
|
# The full invocation, with both of the choices a caller has:
|
|
44
48
|
#
|
|
45
49
|
# this: the receiver the JS function sees as `this` — a
|
|
@@ -75,6 +79,9 @@ module Dommy
|
|
|
75
79
|
def handle_event(event)
|
|
76
80
|
@bridge.invoke_js_ref_handle_event(@ref, event)
|
|
77
81
|
end
|
|
82
|
+
|
|
83
|
+
# See HostCallback#__internal_window__.
|
|
84
|
+
def __internal_window__ = @bridge.window
|
|
78
85
|
end
|
|
79
86
|
|
|
80
87
|
# A NodeFilter backed by a live JS object implementing the callback interface
|