nokolexbor 0.3.1-x86_64-darwin → 0.3.3-x86_64-darwin
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nokolexbor/2.6/nokolexbor.bundle +0 -0
- data/lib/nokolexbor/2.7/nokolexbor.bundle +0 -0
- data/lib/nokolexbor/3.0/nokolexbor.bundle +0 -0
- data/lib/nokolexbor/3.1/nokolexbor.bundle +0 -0
- data/lib/nokolexbor/document.rb +4 -0
- data/lib/nokolexbor/document_fragment.rb +31 -0
- data/lib/nokolexbor/node.rb +49 -1
- data/lib/nokolexbor/node_set.rb +17 -0
- data/lib/nokolexbor/version.rb +1 -1
- data/lib/nokolexbor.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cead1d5973dbabeb2bac9e3e413d21e7dbe4e36e42e58fdf22ad110e02f3decf
|
4
|
+
data.tar.gz: 443c22b64508e785863c7e552ead72cc00f71369b216f6ea38d2e29d10bb4f8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82efd32a9058e2e3ee63e1215dddfa3bb24fbe11a81d50f795738d10406b0d09eed48d00e301aab44796124150e7cf3d6cfd11295d833f0edfda3b21a50a5bb5
|
7
|
+
data.tar.gz: abce68297cb6cdfd144291d1ad40b8c1c5d16b512400890e5405eedf16976e3d8434a79838cab2690ebb54763f3770c996c1c4b5926b5196efb1ed25f3116524
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/nokolexbor/document.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nokolexbor
|
4
|
+
class DocumentFragment < Nokolexbor::Node
|
5
|
+
def self.parse(tags)
|
6
|
+
new(Nokolexbor::Document.new, tags, nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(document, tags = nil, ctx = nil)
|
10
|
+
return self unless tags
|
11
|
+
|
12
|
+
ctx ||= document
|
13
|
+
node_set = ctx.parse(tags)
|
14
|
+
node_set.each { |child| child.parent = self } unless node_set.empty?
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def name
|
19
|
+
"#document-fragment"
|
20
|
+
end
|
21
|
+
|
22
|
+
alias_method :outer_html, :inner_html
|
23
|
+
alias_method :to_html, :outer_html
|
24
|
+
alias_method :to_s, :outer_html
|
25
|
+
alias_method :serialize, :outer_html
|
26
|
+
|
27
|
+
def fragment(data)
|
28
|
+
document.fragment(data)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/nokolexbor/node.rb
CHANGED
@@ -182,6 +182,10 @@ module Nokolexbor
|
|
182
182
|
end
|
183
183
|
end
|
184
184
|
|
185
|
+
def fragment(tags)
|
186
|
+
Nokolexbor::DocumentFragment.new(document, tags, self)
|
187
|
+
end
|
188
|
+
|
185
189
|
alias_method :inner_html=, :children=
|
186
190
|
|
187
191
|
def css(*args)
|
@@ -192,6 +196,16 @@ module Nokolexbor
|
|
192
196
|
at_css_impl(args.join(', '))
|
193
197
|
end
|
194
198
|
|
199
|
+
def nokogiri_css(*args)
|
200
|
+
rules, handler, ns, _ = extract_params(args)
|
201
|
+
|
202
|
+
nokogiri_css_internal(self, rules, handler, ns)
|
203
|
+
end
|
204
|
+
|
205
|
+
def nokogiri_at_css(*args)
|
206
|
+
nokogiri_css(*args).first
|
207
|
+
end
|
208
|
+
|
195
209
|
def xpath(*args)
|
196
210
|
paths, handler, ns, binds = extract_params(args)
|
197
211
|
|
@@ -299,6 +313,10 @@ module Nokolexbor
|
|
299
313
|
|
300
314
|
private
|
301
315
|
|
316
|
+
def nokogiri_css_internal(node, rules, handler, ns)
|
317
|
+
xpath_internal(node, css_rules_to_xpath(rules, ns), handler, ns, nil)
|
318
|
+
end
|
319
|
+
|
302
320
|
def xpath_internal(node, paths, handler, ns, binds)
|
303
321
|
# document = node.document
|
304
322
|
# return NodeSet.new(document) unless document
|
@@ -326,6 +344,34 @@ module Nokolexbor
|
|
326
344
|
ctx.evaluate(path, handler)
|
327
345
|
end
|
328
346
|
|
347
|
+
def css_rules_to_xpath(rules, ns)
|
348
|
+
rules.map { |rule| xpath_query_from_css_rule(rule, ns) }
|
349
|
+
end
|
350
|
+
|
351
|
+
def ensure_nokogiri
|
352
|
+
unless defined?(Nokogiri) && defined?(Nokogiri::CSS)
|
353
|
+
require 'nokogiri'
|
354
|
+
end
|
355
|
+
rescue LoadError
|
356
|
+
fail('nokogiri_css and nokogiri_at_css require Nokogiri to be installed')
|
357
|
+
end
|
358
|
+
|
359
|
+
def xpath_query_from_css_rule(rule, ns)
|
360
|
+
ensure_nokogiri
|
361
|
+
if defined? Nokogiri::CSS::XPathVisitor::BuiltinsConfig
|
362
|
+
visitor = Nokogiri::CSS::XPathVisitor.new(
|
363
|
+
builtins: Nokogiri::CSS::XPathVisitor::BuiltinsConfig::OPTIMAL,
|
364
|
+
doctype: :html4,
|
365
|
+
)
|
366
|
+
else
|
367
|
+
visitor = Nokogiri::CSS::XPathVisitorOptimallyUseBuiltins.new
|
368
|
+
end
|
369
|
+
self.class::IMPLIED_XPATH_CONTEXTS.map do |implied_xpath_context|
|
370
|
+
Nokogiri::CSS.xpath_for(rule.to_s, { prefix: implied_xpath_context, ns: ns,
|
371
|
+
visitor: visitor, })
|
372
|
+
end.join(" | ")
|
373
|
+
end
|
374
|
+
|
329
375
|
def extract_params(params)
|
330
376
|
handler = params.find do |param|
|
331
377
|
![Hash, String, Symbol].include?(param.class)
|
@@ -344,5 +390,7 @@ module Nokolexbor
|
|
344
390
|
|
345
391
|
[params, handler, ns, binds]
|
346
392
|
end
|
393
|
+
|
394
|
+
IMPLIED_XPATH_CONTEXTS = [".//"].freeze
|
347
395
|
end
|
348
|
-
end
|
396
|
+
end
|
data/lib/nokolexbor/node_set.rb
CHANGED
@@ -126,6 +126,23 @@ module Nokolexbor
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
end
|
129
|
+
|
130
|
+
def nokogiri_css(*args)
|
131
|
+
rules, handler, ns, _ = extract_params(args)
|
132
|
+
paths = css_rules_to_xpath(rules, ns)
|
133
|
+
|
134
|
+
NodeSet.new(@document) do |set|
|
135
|
+
each do |node|
|
136
|
+
node.send(:xpath_internal, node, paths, handler, ns, nil).each do |inner_node|
|
137
|
+
set << inner_node
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
private
|
144
|
+
|
145
|
+
IMPLIED_XPATH_CONTEXTS = [".//", "self::"].freeze # :nodoc:
|
129
146
|
|
130
147
|
end
|
131
148
|
end
|
data/lib/nokolexbor/version.rb
CHANGED
data/lib/nokolexbor.rb
CHANGED
@@ -25,6 +25,7 @@ require 'nokolexbor/version'
|
|
25
25
|
require 'nokolexbor/node'
|
26
26
|
require 'nokolexbor/document'
|
27
27
|
require 'nokolexbor/node_set'
|
28
|
+
require 'nokolexbor/document_fragment'
|
28
29
|
require 'nokolexbor/attribute'
|
29
30
|
require 'nokolexbor/xpath'
|
30
31
|
require 'nokolexbor/xpath_context'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nokolexbor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: x86_64-darwin
|
6
6
|
authors:
|
7
7
|
- Yicheng Zhou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- lib/nokolexbor/3.1/nokolexbor.bundle
|
53
53
|
- lib/nokolexbor/attribute.rb
|
54
54
|
- lib/nokolexbor/document.rb
|
55
|
+
- lib/nokolexbor/document_fragment.rb
|
55
56
|
- lib/nokolexbor/node.rb
|
56
57
|
- lib/nokolexbor/node_set.rb
|
57
58
|
- lib/nokolexbor/version.rb
|