6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/watizzle/locators/element/selector_builder/sizzle.rb', line 6
def build(selectors)
if selectors.empty?
sizzle = '*'
else
sizzle = ''
sizzle << (selectors.delete(:tag_name) || '')
end
klass = selectors.delete(:class)
if klass
if klass.is_a?(String)
if klass.include? ' '
sizzle << %([class="#{escape_quotes(klass)}"])
else
sizzle << ".#{klass}"
end
else
sizzle << %(:regexp(class, #{klass.inspect}))
end
end
href = selectors.delete(:href)
if href
if href.is_a?(String)
sizzle << %([href~="#{escape_quotes(href)}"])
else
sizzle << %(:regexp(href, #{href.inspect}))
end
end
text = selectors.delete(:text)
if text
if text.is_a?(String)
sizzle << %(:contains("#{escape_quotes(text)}"))
else
sizzle << %(:regexp(text, #{text.inspect}))
end
end
if selectors.key?(:visible)
sizzle << (selectors.delete(:visible) ? ':visible' : ':hidden')
end
index = selectors.delete(:index)
selectors.each do |key, value|
key = key.to_s.tr("_", "-")
case value
when String, Fixnum
sizzle << %([#{key}="#{escape_quotes(value)}"])
when Regexp
sizzle << %(:regexp(#{key}, #{value.inspect}))
end
end
if index
sizzle << %(:eq(#{index}))
end
p sizzle: sizzle, selectors: selectors if $DEBUG
[:sizzle, sizzle]
end
|