dommy 0.7.0 → 0.8.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 +9 -1
- data/lib/dommy/attr.rb +192 -39
- data/lib/dommy/backend/nokogiri_adapter.rb +76 -0
- data/lib/dommy/backend/nokolexbor_adapter.rb +37 -0
- data/lib/dommy/backend.rb +46 -0
- data/lib/dommy/blob.rb +28 -9
- data/lib/dommy/bridge/constructor_registry.rb +28 -0
- data/lib/dommy/bridge/methods.rb +57 -0
- data/lib/dommy/bridge.rb +97 -0
- data/lib/dommy/callable_invoker.rb +36 -0
- data/lib/dommy/cookie_store.rb +3 -1
- data/lib/dommy/crypto.rb +7 -1
- data/lib/dommy/css.rb +46 -0
- data/lib/dommy/custom_elements.rb +27 -3
- data/lib/dommy/data_transfer.rb +4 -0
- data/lib/dommy/document.rb +615 -48
- data/lib/dommy/dom_parser.rb +28 -15
- data/lib/dommy/element.rb +999 -471
- data/lib/dommy/event.rb +260 -96
- data/lib/dommy/event_source.rb +6 -2
- data/lib/dommy/fetch.rb +505 -43
- data/lib/dommy/file_reader.rb +11 -3
- data/lib/dommy/form_data.rb +2 -0
- data/lib/dommy/history.rb +43 -8
- data/lib/dommy/html_collection.rb +55 -2
- data/lib/dommy/html_elements.rb +102 -1519
- data/lib/dommy/internal/css_pseudo_handlers.rb +109 -0
- data/lib/dommy/internal/global_functions.rb +26 -0
- data/lib/dommy/internal/idna.rb +16 -7
- data/lib/dommy/internal/ipv4_parser.rb +22 -7
- data/lib/dommy/internal/mutation_coordinator.rb +11 -2
- data/lib/dommy/internal/namespaces.rb +70 -0
- data/lib/dommy/internal/node_equality.rb +86 -0
- data/lib/dommy/internal/node_wrapper_cache.rb +62 -27
- data/lib/dommy/internal/observable_callback.rb +1 -5
- data/lib/dommy/internal/parent_node.rb +126 -0
- data/lib/dommy/internal/reflected_attributes.rb +103 -13
- data/lib/dommy/internal/selector_parser.rb +664 -0
- data/lib/dommy/internal/url_parser.rb +677 -0
- data/lib/dommy/intersection_observer.rb +2 -0
- data/lib/dommy/location.rb +2 -0
- data/lib/dommy/media_query_list.rb +7 -1
- data/lib/dommy/message_channel.rb +32 -2
- data/lib/dommy/mutation_observer.rb +55 -12
- data/lib/dommy/navigator.rb +26 -12
- data/lib/dommy/node.rb +158 -28
- data/lib/dommy/notification.rb +3 -1
- data/lib/dommy/performance.rb +4 -0
- data/lib/dommy/performance_observer.rb +2 -0
- data/lib/dommy/promise.rb +14 -14
- data/lib/dommy/range.rb +74 -5
- data/lib/dommy/resize_observer.rb +2 -0
- data/lib/dommy/scheduler.rb +34 -13
- data/lib/dommy/shadow_root.rb +23 -54
- data/lib/dommy/storage.rb +2 -0
- data/lib/dommy/streams.rb +18 -27
- data/lib/dommy/svg_elements.rb +204 -3606
- data/lib/dommy/text_codec.rb +174 -21
- data/lib/dommy/tree_walker.rb +255 -66
- data/lib/dommy/url.rb +287 -449
- data/lib/dommy/url_pattern.rb +2 -0
- data/lib/dommy/version.rb +1 -1
- data/lib/dommy/web_socket.rb +37 -7
- data/lib/dommy/window.rb +202 -213
- data/lib/dommy/worker.rb +7 -7
- data/lib/dommy/xml_http_request.rb +15 -5
- data/lib/dommy.rb +7 -0
- metadata +12 -3
data/lib/dommy/dom_parser.rb
CHANGED
|
@@ -22,9 +22,11 @@ module Dommy
|
|
|
22
22
|
when "text/html", ""
|
|
23
23
|
parse_html(str)
|
|
24
24
|
when "application/xhtml+xml", "application/xml", "text/xml", "image/svg+xml"
|
|
25
|
-
parse_xml(str)
|
|
25
|
+
parse_xml(str, mime_type.to_s.downcase)
|
|
26
26
|
else
|
|
27
|
-
|
|
27
|
+
# `type` is a WebIDL enum (DOMParserSupportedType); an out-of-enum value
|
|
28
|
+
# is a TypeError, not a DOMException.
|
|
29
|
+
raise Bridge::TypeError, "The provided value '#{mime_type}' is not a valid enum value of type DOMParserSupportedType."
|
|
28
30
|
end
|
|
29
31
|
end
|
|
30
32
|
|
|
@@ -34,6 +36,8 @@ module Dommy
|
|
|
34
36
|
nil
|
|
35
37
|
end
|
|
36
38
|
|
|
39
|
+
include Bridge::Methods
|
|
40
|
+
js_methods %w[parseFromString]
|
|
37
41
|
def __js_call__(method, args)
|
|
38
42
|
case method
|
|
39
43
|
when "parseFromString"
|
|
@@ -48,10 +52,11 @@ module Dommy
|
|
|
48
52
|
Document.new(nil, nokogiri_doc: nokogiri_doc)
|
|
49
53
|
end
|
|
50
54
|
|
|
51
|
-
def parse_xml(str)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
def parse_xml(str, mime_type = "application/xml")
|
|
56
|
+
nokogiri_doc = Backend.parse_xml(str.empty? ? "<root/>" : str)
|
|
57
|
+
doc = Document.new(nil, nokogiri_doc: nokogiri_doc)
|
|
58
|
+
doc.content_type = mime_type
|
|
59
|
+
doc
|
|
55
60
|
end
|
|
56
61
|
end
|
|
57
62
|
|
|
@@ -59,18 +64,24 @@ module Dommy
|
|
|
59
64
|
# XML output, SVG inlining, and "serialize this Element" patterns.
|
|
60
65
|
# For HTML, prefer `Element#outer_html` directly.
|
|
61
66
|
class XMLSerializer
|
|
67
|
+
# WHATWG "XML serialization" — produce XML (self-closing empty tags, real XML
|
|
68
|
+
# escaping) rather than the HTML serialization `outer_html` gives. Delegates
|
|
69
|
+
# to the backend's XML serializer (Nokogiri); namespace handling is whatever
|
|
70
|
+
# the backend produces. A Document serializes its root element.
|
|
62
71
|
def serialize_to_string(node)
|
|
63
72
|
return "" unless node
|
|
64
73
|
|
|
65
|
-
|
|
66
|
-
node.
|
|
67
|
-
|
|
68
|
-
node.__dommy_backend_node__
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
backend =
|
|
75
|
+
if node.respond_to?(:nokogiri_doc) && !node.respond_to?(:__dommy_backend_node__)
|
|
76
|
+
node.nokogiri_doc # a Document
|
|
77
|
+
elsif node.respond_to?(:__dommy_backend_node__)
|
|
78
|
+
node.__dommy_backend_node__
|
|
79
|
+
end
|
|
80
|
+
return node.to_s unless backend.respond_to?(:to_xml)
|
|
81
|
+
|
|
82
|
+
opts = ::Nokogiri::XML::Node::SaveOptions::AS_XML | ::Nokogiri::XML::Node::SaveOptions::NO_DECLARATION
|
|
83
|
+
target = backend.respond_to?(:root) && backend.respond_to?(:document?) && backend.document? ? backend.root : backend
|
|
84
|
+
target ? target.to_xml(save_with: opts) : ""
|
|
74
85
|
end
|
|
75
86
|
|
|
76
87
|
alias serializeToString serialize_to_string
|
|
@@ -79,6 +90,8 @@ module Dommy
|
|
|
79
90
|
nil
|
|
80
91
|
end
|
|
81
92
|
|
|
93
|
+
include Bridge::Methods
|
|
94
|
+
js_methods %w[serializeToString]
|
|
82
95
|
def __js_call__(method, args)
|
|
83
96
|
case method
|
|
84
97
|
when "serializeToString"
|