habaki 0.5.8 → 0.5.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 53fe14ebdd6dd692db34dc3a59a3dbe2fc9761d085cd1bcd756080e06483e4c0
4
- data.tar.gz: 6481a5a4591a6e6ebbea3eb6e241eac1baa48ca9812541d8cef184e10f2800a4
3
+ metadata.gz: 5b752847b2b1e6ed4c15611eb4708b178e5ee694349c817b05c732881d98ac10
4
+ data.tar.gz: 1e528a6e2154bb1d19baea93e8a34fc2e796441374859142a109b652f54132ea
5
5
  SHA512:
6
- metadata.gz: ce923e584db6917510237761e67f3bdc9ac3153f220ace405a2a9ab2eb7940321239e844d9f7ded97290961780e79aa005cbd7c3962bf68c6f294651d514b73e
7
- data.tar.gz: d3befa18c61f461d0f568a859e93d465248990938d9ecf7bd13109887debeb1b3a753a7fe8ee5ad5cdc9ea9dba3062f1d6dd3ab01b2c7181c9b3f906b8f3111e
6
+ metadata.gz: 1fa028e795d97f0da9d6ad16b45a2613943c278beed4009e3f7aac7ddc830c190519efdc89544f3373c5d2254c523ed7c5193a71e7d7071cc96f305968c66dcc
7
+ data.tar.gz: c50e2538f949bc17cf2716be6d3c9f603f67d89724f3d721f9286a6f07de3156a097dec9b699d98e32f905dfdeac902276aab673b4a86042204e929221466db0
data/lib/habaki/rules.rb CHANGED
@@ -26,9 +26,9 @@ module Habaki
26
26
  class_or_id = ".#{class_name}" if class_name
27
27
  class_or_id = "##{id_name}" if id_name
28
28
 
29
- @hash_tree[args][tag_name||"*"] ||= {}
30
- @hash_tree[args][tag_name||"*"][class_or_id] ||= Set.new
31
- @hash_tree[args][tag_name||"*"][class_or_id] << rule
29
+ @hash_tree[args][tag_name || "*"] ||= {}
30
+ @hash_tree[args][tag_name || "*"][class_or_id] ||= Set.new
31
+ @hash_tree[args][tag_name || "*"][class_or_id] << rule
32
32
  end
33
33
  end
34
34
  end
@@ -42,9 +42,21 @@ module Habaki
42
42
  classes_names = class_name.split(" ") if class_name
43
43
 
44
44
  classes_names.each do |p_class_name|
45
- class_or_id = nil
46
- class_or_id = ".#{p_class_name}" if p_class_name
47
- class_or_id = "##{id_name}" if id_name
45
+ if p_class_name
46
+ class_or_id = ".#{p_class_name}"
47
+
48
+ @hash_tree[args].dig("*", class_or_id)&.each do |rule|
49
+ block.call rule
50
+ end
51
+
52
+ @hash_tree[args].dig(tag_name, class_or_id)&.each do |rule|
53
+ block.call rule
54
+ end
55
+ end
56
+ end
57
+
58
+ if id_name
59
+ class_or_id = "##{id_name}"
48
60
 
49
61
  @hash_tree[args].dig("*", class_or_id)&.each do |rule|
50
62
  block.call rule
@@ -47,7 +47,7 @@ module Habaki
47
47
  end
48
48
  return false unless sub_match
49
49
  else
50
- # STDERR.puts "unknown relation #{current_sub_selector.relation}"
50
+ # STDERR.puts "Habaki: unknown relation #{current_sub_selector.relation}"
51
51
  return false
52
52
  end
53
53
  else
@@ -12,12 +12,12 @@ module Habaki
12
12
  class SubSelector < Node
13
13
  # @return [Symbol]
14
14
  attr_accessor :match
15
- # @return [String]
15
+ # @return [QualifiedName]
16
16
  attr_accessor :tag
17
17
  # @return [Symbol]
18
18
  attr_accessor :pseudo
19
19
 
20
- # @return [String]
20
+ # @return [QualifiedName]
21
21
  attr_accessor :attribute
22
22
  # @return [String]
23
23
  attr_accessor :value
@@ -44,8 +44,7 @@ module Habaki
44
44
  when :tag
45
45
  tag_match?(element.tag_name, specificity)
46
46
  when :class
47
- classes_names = element.class_name ? element.class_name.split(" ") : [nil]
48
- classes_names.map{|p_class_name| class_match?(p_class_name, specificity)}.any?
47
+ element.class_names.any?{|p_class_name| class_match?(p_class_name, specificity)}
49
48
  when :id
50
49
  id_match?(element.id_name, specificity)
51
50
  when :pseudo_class
@@ -151,8 +150,13 @@ module Habaki
151
150
  !@selectors.element_match?(element)
152
151
  when :not_parsed, :unknown
153
152
  true
153
+ when :link
154
+ # All a elements that have an href attribute must match one of :link and :visited.
155
+ # for now, always match :link
156
+ true
154
157
  else
155
- # STDERR.puts "unsupported pseudo #{sub_sel.pseudo}"
158
+ # TODO
159
+ # STDERR.puts "Habaki: unsupported pseudo #{@pseudo}"
156
160
  false
157
161
  end, specificity, 10)
158
162
  end
@@ -12,6 +12,12 @@ module Habaki
12
12
  def class_name
13
13
  end
14
14
 
15
+ # element class names array
16
+ # @return [Array<String>]
17
+ def class_names
18
+ []
19
+ end
20
+
15
21
  # element id name
16
22
  # @return [String]
17
23
  def id_name
@@ -15,6 +15,10 @@ module Habaki
15
15
  @element["class"]
16
16
  end
17
17
 
18
+ def class_names
19
+ @element.classes
20
+ end
21
+
18
22
  def id_name
19
23
  @element["id"]
20
24
  end
@@ -37,13 +41,13 @@ module Habaki
37
41
 
38
42
  def children
39
43
  @element.children.map do |child|
40
- child.is_a?(Nokogiri::XML::Element) ? Visitor::NokogiriElement.new(child) : nil
44
+ child.element? ? Visitor::NokogiriElement.new(child) : nil
41
45
  end.compact
42
46
  end
43
47
 
44
48
  def traverse &block
45
49
  @element.traverse do |el|
46
- next unless el.is_a?(Nokogiri::XML::Element)
50
+ next unless el.element?
47
51
  block.call Visitor::NokogiriElement.new(el)
48
52
  end
49
53
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: habaki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.8
4
+ version: 0.5.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Boulnois
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-17 00:00:00.000000000 Z
11
+ date: 2023-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri