yard-gherkin-turnip 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.rspec +3 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.yardopts +1 -0
  7. data/Gemfile +6 -0
  8. data/Gemfile.lock +48 -0
  9. data/History.txt +293 -0
  10. data/LICENSE.txt +22 -0
  11. data/README.md +182 -0
  12. data/Rakefile +24 -0
  13. data/example/README.md +8 -0
  14. data/example/child_feature/README.md +21 -0
  15. data/example/child_feature/child.feature +11 -0
  16. data/example/child_feature/grandchild_feature/grandchild.feature +12 -0
  17. data/example/empty.feature +2 -0
  18. data/example/placeholder.feature +34 -0
  19. data/example/scenario.feature +63 -0
  20. data/example/scenario_outline.feature +100 -0
  21. data/example/scenario_outline_multi.feature +15 -0
  22. data/example/step_definitions/customer.step.rb +16 -0
  23. data/example/step_definitions/duck.step.rb +6 -0
  24. data/example/step_definitions/placeholder.step.rb +70 -0
  25. data/example/step_definitions/text.step.rb +11 -0
  26. data/example/tags.feature +18 -0
  27. data/lib/cucumber/city_builder.rb +412 -0
  28. data/lib/docserver/default/fulldoc/html/js/cucumber.js +88 -0
  29. data/lib/docserver/default/layout/html/headers.erb +13 -0
  30. data/lib/docserver/doc_server/full_list/html/full_list.erb +39 -0
  31. data/lib/docserver/doc_server/full_list/html/setup.rb +18 -0
  32. data/lib/templates/default/feature/html/feature.erb +39 -0
  33. data/lib/templates/default/feature/html/no_steps_defined.erb +1 -0
  34. data/lib/templates/default/feature/html/outline.erb +59 -0
  35. data/lib/templates/default/feature/html/pystring.erb +3 -0
  36. data/lib/templates/default/feature/html/scenario.erb +55 -0
  37. data/lib/templates/default/feature/html/setup.rb +54 -0
  38. data/lib/templates/default/feature/html/steps.erb +39 -0
  39. data/lib/templates/default/feature/html/table.erb +20 -0
  40. data/lib/templates/default/featuredirectory/html/alpha_table.erb +30 -0
  41. data/lib/templates/default/featuredirectory/html/directory.erb +32 -0
  42. data/lib/templates/default/featuredirectory/html/setup.rb +41 -0
  43. data/lib/templates/default/featuretags/html/namespace.erb +159 -0
  44. data/lib/templates/default/featuretags/html/setup.rb +34 -0
  45. data/lib/templates/default/fulldoc/html/css/cucumber.css +226 -0
  46. data/lib/templates/default/fulldoc/html/directories.erb +27 -0
  47. data/lib/templates/default/fulldoc/html/full_list_featuredirectories.erb +11 -0
  48. data/lib/templates/default/fulldoc/html/full_list_features.erb +37 -0
  49. data/lib/templates/default/fulldoc/html/full_list_stepdefinitions.erb +20 -0
  50. data/lib/templates/default/fulldoc/html/full_list_steps.erb +20 -0
  51. data/lib/templates/default/fulldoc/html/full_list_tags.erb +16 -0
  52. data/lib/templates/default/fulldoc/html/js/cucumber.js +331 -0
  53. data/lib/templates/default/fulldoc/html/setup.rb +208 -0
  54. data/lib/templates/default/layout/html/setup.rb +131 -0
  55. data/lib/templates/default/requirements/html/alpha_table.erb +26 -0
  56. data/lib/templates/default/requirements/html/requirements.erb +50 -0
  57. data/lib/templates/default/requirements/html/setup.rb +51 -0
  58. data/lib/templates/default/steptransformers/html/header.erb +12 -0
  59. data/lib/templates/default/steptransformers/html/index.erb +10 -0
  60. data/lib/templates/default/steptransformers/html/placeholders.erb +79 -0
  61. data/lib/templates/default/steptransformers/html/setup.rb +107 -0
  62. data/lib/templates/default/steptransformers/html/step_definitions.erb +79 -0
  63. data/lib/templates/default/steptransformers/html/undefined_steps.erb +26 -0
  64. data/lib/templates/default/tag/html/alpha_table.erb +33 -0
  65. data/lib/templates/default/tag/html/setup.rb +27 -0
  66. data/lib/templates/default/tag/html/tag.erb +35 -0
  67. data/lib/yard-gherkin-turnip.rb +42 -0
  68. data/lib/yard-gherkin-turnip/version.rb +3 -0
  69. data/lib/yard/code_objects/cucumber/base.rb +24 -0
  70. data/lib/yard/code_objects/cucumber/feature.rb +16 -0
  71. data/lib/yard/code_objects/cucumber/namespace_object.rb +55 -0
  72. data/lib/yard/code_objects/cucumber/scenario.rb +22 -0
  73. data/lib/yard/code_objects/cucumber/scenario_outline.rb +68 -0
  74. data/lib/yard/code_objects/cucumber/step.rb +46 -0
  75. data/lib/yard/code_objects/cucumber/tag.rb +31 -0
  76. data/lib/yard/code_objects/placeholder.rb +45 -0
  77. data/lib/yard/code_objects/step_definition.rb +46 -0
  78. data/lib/yard/code_objects/step_transformer.rb +32 -0
  79. data/lib/yard/handlers/cucumber/base.rb +21 -0
  80. data/lib/yard/handlers/cucumber/feature_handler.rb +96 -0
  81. data/lib/yard/handlers/placeholder_handler.rb +28 -0
  82. data/lib/yard/handlers/placeholder_match_handler.rb +17 -0
  83. data/lib/yard/handlers/step_definition_handler.rb +55 -0
  84. data/lib/yard/parser/cucumber/feature.rb +72 -0
  85. data/lib/yard/server/adapter.rb +43 -0
  86. data/lib/yard/server/commands/list_command.rb +31 -0
  87. data/lib/yard/server/router.rb +31 -0
  88. data/lib/yard/templates/helpers/base_helper.rb +26 -0
  89. data/yard-gherkin-turnip.gemspec +67 -0
  90. metadata +216 -0
@@ -0,0 +1,32 @@
1
+ <% if @directory %>
2
+
3
+ <div class="requirements">
4
+ <div class="title">
5
+ <span class="pre">Directory:</span>
6
+ <span class="name"><%= h @directory.name.to_s.capitalize %></span>
7
+ </div>
8
+
9
+ <div class="readme">
10
+ <%= markdown @directory.description %>
11
+ </div>
12
+
13
+ <% if features && !features.empty? %>
14
+ <%= alpha_table(features) %>
15
+ <% end %>
16
+
17
+ <div id="directory">
18
+ <div class="title"><span class="name">Tags</span></div>
19
+ </div>
20
+ <div class="tags">
21
+ <%= tags.collect {|tag| linkify(tag,tag.value) }.join(",\n") %>
22
+ </div>
23
+
24
+ <% if directories && !directories.empty? %>
25
+ <div id="directory">
26
+ <div class="title"><span class="name">Subdirectories</span></div>
27
+ </div>
28
+ <%= alpha_table(directories) %>
29
+ <% end %>
30
+ </div>
31
+
32
+ <% end %>
@@ -0,0 +1,41 @@
1
+ def init
2
+ super
3
+ sections.push :directory
4
+ @directory = object
5
+ end
6
+
7
+ def markdown(text)
8
+ htmlify(text,:markdown) rescue h(text)
9
+ end
10
+
11
+ def htmlify_with_newlines(text)
12
+ text.split("\n").collect {|c| h(c).gsub(/\s/,'&nbsp;') }.join("<br/>")
13
+ end
14
+
15
+ def directories
16
+ @directories ||= @directory.subdirectories
17
+ end
18
+
19
+ def features
20
+ @features ||= @directory.features + directories.collect {|d| d.features }.flatten
21
+ end
22
+
23
+ def scenarios
24
+ @scenarios ||= features.collect {|feature| feature.scenarios }.flatten
25
+ end
26
+
27
+ def tags
28
+ @tags ||= (features.collect{|feature| feature.tags } + scenarios.collect {|scenario| scenario.tags }).flatten.uniq.sort_by {|l| l.value.to_s }
29
+ end
30
+
31
+ def alpha_table(objects)
32
+ @elements = Hash.new
33
+
34
+ objects = run_verifier(objects)
35
+ objects.each {|o| (@elements[o.value.to_s[0,1].upcase] ||= []) << o }
36
+ @elements.values.each {|v| v.sort! {|a,b| b.value.to_s <=> a.value.to_s } }
37
+ @elements = @elements.sort_by {|l,o| l.to_s }
38
+
39
+ @elements.each {|letter,objects| objects.sort! {|a,b| b.value.to_s <=> a.value.to_s }}
40
+ erb(:alpha_table)
41
+ end
@@ -0,0 +1,159 @@
1
+ <% if @namespace %>
2
+ <% count = 0 %>
3
+ <% features.each {|f| count += f.total_scenarios } %>
4
+
5
+ <div id="tags" class="requirements">
6
+ <script type="text/javascript" charset="utf-8">
7
+ var tag_list = [ <%= tags.collect{|t| "'#{t.value}'" }.join(',') %> ];
8
+
9
+ $(function() {
10
+
11
+ // On focus, remove all the shortcut keys
12
+ $("#tag_search").focus(function() {
13
+ $(document).unbind('keypress');
14
+ });
15
+
16
+ // On blur, return all the shortcut keys
17
+ $("#tag_search").blur(function() {
18
+ $(document).bind('keypress',keyboardShortcuts);
19
+ $(document).bind('keypress',cucumberKeyboardShortcuts);
20
+ });
21
+
22
+ $("#tag_search").keyup(function(evt) {
23
+ updateTagFiltering($("#tag_search")[0].value);
24
+ updateScenarioCount();
25
+ });
26
+
27
+
28
+ $("#tag_search").keyup(function(evt) {
29
+ updateTagFiltering($("#tag_search")[0].value);
30
+ updateScenarioCount();
31
+ });
32
+
33
+ $(".tag").click(function(evt) {
34
+ if (typeof evt !== "undefined") {
35
+
36
+ if (evt.shiftKey === true) {
37
+ window.location = $(this).attr("href");
38
+ return true;
39
+ }
40
+
41
+ var tagSearchElement = $("#tag_search")[0];
42
+
43
+ var tagToAdd = this.innerHTML;
44
+ var tagModifer = "";
45
+
46
+ if (evt.altKey === true ) {
47
+ tagToAdd = "~" + tagToAdd;
48
+ }
49
+
50
+ if (evt.ctrlKey === true ) {
51
+ tagModifier = ",";
52
+ } else {
53
+ tagModifier = " ";
54
+ }
55
+
56
+ tagSearchElement.value = (tagSearchElement.value != "" ? tagSearchElement.value + tagModifier : "") + tagToAdd;
57
+ updateTagFiltering(tagSearchElement.value);
58
+ updateScenarioCount();
59
+
60
+ }
61
+ });
62
+ });
63
+ </script>
64
+
65
+ <div class="title">
66
+ <span class="name">Tags</span>
67
+ </div>
68
+
69
+ <div id="tag_filtering" >
70
+ <span style="font-size: 18px;">Tag Filtering <a href="https://github.com/cucumber/cucumber/wiki/Tags" target="_blank">?</a></span>
71
+
72
+ <div style="clear: both"></div>
73
+
74
+ <div style="float: left; margin-top: 10px; padding-left: 5px; line-height: 1.5; font-size: 10px; font-style: italic;">
75
+ Type in tags with spaces between to 'AND' and commas between to 'OR'<br/>
76
+ LEFT CLICK to AND tags; CTRL+LEFT CLICK to OR tags; hold ALT for inverse (~) tags
77
+ </div>
78
+
79
+ <div style="clear: both;"></div>
80
+
81
+ <div style="float: right;">
82
+ <a href="#" onclick="clearTagFiltering(); $('#tag_search')[0].value = ''; return true;">clear</a>
83
+ </div>
84
+
85
+ <div style="clear: both"></div>
86
+
87
+ <input id="tag_search" type="text" />
88
+ <span>Example command line execution:</span>
89
+ <div id="command_example">cucumber</div>
90
+ </div>
91
+
92
+ <div class="tags" style="margin-top: 20px;"><span class="name">Tags:</span>
93
+ <%= tags.collect {|tag| tagify(tag) }.join(",\n") %>
94
+ </div>
95
+
96
+ <div id="features">
97
+ <div class="title">
98
+ <span class="name">Features<span id="scenario_count"> (<%= count %>)</span></span>
99
+ </div>
100
+ <% n = 1 %>
101
+ <ul style="padding-left: 0px;">
102
+ <% features.each do |feature| %>
103
+ <li class="feature <%= n % 2 == 0 ? 'even' : 'odd' %> <%= feature.tags.collect {|t| t.value}.join(" ") %>">
104
+ <%= linkify feature, feature.value %>
105
+ <% ftags = feature.tags.collect{|t| tagify(t) }.join(", ") %>
106
+ <% if ftags && ftags != "" %>
107
+ - <small><%= ftags %></small>
108
+ <% end %>
109
+ </li>
110
+ <% n = n == 2 ? 1 : 2 %>
111
+ <% if feature.scenarios %>
112
+ <ul style="padding-left: 20px;">
113
+ <% feature.scenarios.each do |scenario| %>
114
+ <li class="scenario <%= n % 2 == 0 ? 'even' : 'odd' %> <%= feature.tags.collect{|t| t.value }.join(" ") %> <%= scenario.tags.collect{|t| t.value }.join(" ") %>" count="<%= scenario.outline? ? 0 : 1 %>">
115
+ <span class='object_link'>
116
+ <a href="<%= url_for(scenario.feature,"scenario_#{scenario.feature.scenarios.index(scenario) }") %>">
117
+ <%= h scenario.value %>
118
+ </a>
119
+ </span>
120
+ <% stags = scenario.tags.collect{|t| tagify(t) }.join(", ") %>
121
+ <% if stags && stags != "" %>
122
+ - <small><%= stags %></small>
123
+ <% end %>
124
+ </li>
125
+
126
+ <% n = n == 2 ? 1 : 2 %>
127
+
128
+ <% if scenario.outline? %>
129
+ <ul style="padding-left: 40px;">
130
+ <% scenario.examples.each do |example| %>
131
+ <li class="scenario <%= n % 2 == 0 ? 'even' : 'odd' %> <%= feature.tags.collect{|t| t.value }.join(" ") %> <%= scenario.tags.collect{|t| t.value }.join(" ") %> <%= example.tags.collect{|t| t.value }.join(" ") %>" count="<%= example.data.size %>">
132
+
133
+ <span class='object_link'>
134
+ <a href="<%= url_for(scenario.feature,"scenario_#{scenario.feature.scenarios.index(scenario) }") %>">
135
+ <%= example.name.nil? || example.name.empty? ? "Examples" : example.name %>
136
+ </a>
137
+ </span>
138
+
139
+ <% etags = example.tags.collect{|t| tagify(t) }.join(", ") %>
140
+ <% if etags && etags != "" %>
141
+ - <small><%= etags %></small>
142
+ <% end %>
143
+ </li>
144
+ <% n = n == 2 ? 1 : 2 %>
145
+ <% end %>
146
+ </ul>
147
+ <% end %>
148
+ <% end %>
149
+ </ul>
150
+ <% end %>
151
+ <% end %>
152
+ </ul>
153
+ <div class="undefined" style="display:none;">No Features or Scenarios match the Tag Expression</div>
154
+ </div>
155
+
156
+ </div>
157
+ <% end %>
158
+
159
+
@@ -0,0 +1,34 @@
1
+ def init
2
+ super
3
+ sections.push :namespace
4
+ @namespace = object
5
+ end
6
+
7
+ def namespace
8
+ erb(:namespace)
9
+ end
10
+
11
+ def all_tags_by_letter
12
+ hash = {}
13
+ objects = tags
14
+ objects = run_verifier(objects)
15
+ objects.each {|o| (hash[o.value.to_s[1,1].upcase] ||= []) << o }
16
+ hash
17
+ end
18
+
19
+ def tags
20
+ @tags ||= Registry.all(:tag).sort_by {|l| l.value.to_s }
21
+ end
22
+
23
+ def features
24
+ @features ||= Registry.all(:feature).sort {|x,y| x.value.to_s <=> y.value.to_s }
25
+ end
26
+
27
+ def feature_tags_with_all_scenario_tags(feature)
28
+ feature.tags.collect {|t| t.value} + feature.scenarios.collect {|s| s.tags.collect {|t| t.value} }.flatten.uniq
29
+ end
30
+
31
+
32
+ def tagify(tag)
33
+ %{<span class="tag" href="#{url_for tag}">#{tag.value}</span>}
34
+ end
@@ -0,0 +1,226 @@
1
+ .summary { margin: 20px 20px 10px 20px; padding-left: 0px; }
2
+ .summary * { padding: 5px 0px 5px 10px; }
3
+ .feature {}
4
+ .tags { font-family: monospace; font-size: 14px; }
5
+ .title { padding: 10px; font-size: 24px; }
6
+
7
+ .control { float: right; font-size: 13px; color: #05A; vertical-align: bottom; font-family: monospace; font-size: 14px; cursor: pointer; }
8
+
9
+ .title { margin: 20px 20px 10px 20px; padding-left: 0px; border-bottom: 1px solid #E3E3E3; }
10
+ .scenario .title { height: 20px; }
11
+ .noborder { border: none; }
12
+ #header * .title { padding: 10px; margin: 0px; border: none; }
13
+
14
+ .meta .file { float: right; margin-top: 5px; margin-right: 20px; }
15
+ .title .pre { color: #696969; }
16
+ .title .name { font-weight: bold; color: #3F3F3F; }
17
+
18
+ .meta { margin-left: 30px; color: gray; }
19
+ .scenario .meta .tags { margin-left: 0px; }
20
+ .feature .meta .tags { float: right; margin-right: 20px; }
21
+
22
+ .suggestion { color: #ff686e; }
23
+
24
+ .readme { margin: 0px 20px 0px 30px; padding: 0px; }
25
+ .readme h1:first-child { border-top: none; }
26
+
27
+
28
+ .feature .description, .requirements .summary {
29
+ margin: 10px 20px 0px 30px;
30
+ padding: 10px 20px 20px 10px;
31
+ color: #343332;
32
+ font-size: 16px;
33
+ font-family: 'Trebuchet MS', Arial, Helvetica;
34
+ }
35
+
36
+ .summary .name, .tags .name { color: gray; }
37
+
38
+ .odd { background-color: #F0F6F9; }
39
+ .even { background-color: #FFFFFF; }
40
+ .selected { background-color: #FFCC80; }
41
+
42
+
43
+ #features, #scenarios { margin-top: 10px; margin-left: 20px; }
44
+
45
+
46
+ #directory { margin-top: 20px; margin-left: 20px; }
47
+
48
+ .scenario { margin-top: 40px; margin-left: 20px; }
49
+ .requirements * .scenario { margin-top: 0px; margin-left: 0px; }
50
+
51
+ .scenario .title, .transformer .title {
52
+ font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace;
53
+ padding: 6px 10px; margin-top: 18px;
54
+ background: #e5e8ff; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
55
+ }
56
+ .nodefinitions .title {
57
+ background-color: #F5EADD; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
58
+ }
59
+ .pending .title {
60
+ background-color: #ffffc0; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
61
+ }
62
+
63
+
64
+
65
+ .scenario .title { border: none; }
66
+ .background .title { background: #cbddeb; }
67
+
68
+ #directory .title, #features .title, #scenarios .title { padding-left: 0px; margin-left: 10px; border-bottom: 1px solid #E3E3E3; }
69
+ #directory .title .name, #features .title .name, #scenarios .title .name { font-weight: normal; }
70
+
71
+ .scenario .title .pre { color: #00AAD2; }
72
+ .background .title .pre { color: #346F97; }
73
+
74
+ .requirements .tags, .requirements .steptransformers { margin-left: 50px; margin-right: 30px; }
75
+ .scenario .tags { float: right; margin-right: 20px; margin-top: 5px; }
76
+
77
+
78
+ * ul.alpha { font-size: 1.1em; }
79
+ * ul.alpha { padding-bottom: 10px; list-style: none; }
80
+ * ul.alpha li.letter { font-size: 1.4em; padding-bottom: 10px; }
81
+ * ul.alpha ul { padding-left: 15px; }
82
+ * ul small { color: #666; font-size: 0.7em; }
83
+
84
+ .scenario .steps {
85
+ margin: 0px 20px 0px 30px;
86
+ font-size: 12px;
87
+ }
88
+
89
+ .scenario .step, .steps .none {
90
+ margin-top: 4px;
91
+ padding: 4px;
92
+ font-size: 14px;
93
+ font-weight: bold;
94
+ }
95
+ .steps .none { color: #5D5C5B; }
96
+
97
+ .scenario .description {
98
+ padding: 10px;
99
+ color: #444444;
100
+ margin-right: 20px;
101
+ margin-left: 20px;
102
+ }
103
+
104
+ .comments { margin-left: 25px; color: gray; padding: 5px; font-size: 13px; }
105
+ .scenario .steps .comments { margin-left: 0px; }
106
+ .feature .comments { margin-left: 30px; padding: 10px 20px 20px 10px; }
107
+
108
+ .step .predicate { color: #5D5C5B; }
109
+ .step .defined {}
110
+ div.undefined { padding: 6px; }
111
+ .step .definition { float: right; color: #343332; }
112
+ .step .details .pre {}
113
+ .step .details .name { font-family: monospace; color: black; }
114
+ .step .defined .match { color: #346F97; }
115
+
116
+ .multiline, .text { margin-top: 10px; margin-left: 20px; }
117
+ .text {
118
+ padding: 20px;
119
+ background-color: #F8F8FF;
120
+ color: #444444;
121
+ border: 1px solid #DEDEDE;
122
+ }
123
+
124
+ /* Scenario Outline Table */
125
+ .outline {
126
+ margin-top: 20px;
127
+ margin-left: 40px;
128
+ }
129
+ .outline .keyword {
130
+ float: left;
131
+ margin-top: 20px;
132
+ padding: 4px;
133
+ font-weight: bold;
134
+ font-size: 16px;
135
+ }
136
+ .outline .example-group-name {
137
+ float: left;
138
+ margin-top: 20px;
139
+ padding: 4px 4px 4px 20px;
140
+ font-size: 14px;
141
+ color: #343332;
142
+ }
143
+ .multiline table tr, .outline table tr {
144
+ padding: 4px;
145
+ }
146
+ .multiline table thead tr th, .outline table thead tr th {
147
+ text-align: left;
148
+ padding: 4px;
149
+ background-color: #C4E0C7;
150
+ }
151
+ .multiline table tr td, .outline table tr td {
152
+ min-width: 100px;
153
+ padding: 4px 10px 4px 10px;
154
+ }
155
+
156
+
157
+ /* Tag page */
158
+ #tags #features, #tags #scenarios { margin-right: 20px;}
159
+ #tags * .tag { font-family: monospace; font-size: 14px; cursor: pointer; }
160
+
161
+ /* Overrides for scenarios in the tag view */
162
+ .tag .feature { margin-left: 20px; }
163
+ .tag .scenario { margin-top: 0px; margin-left: 20px; padding-left: 30px; }
164
+ .tag .scenario .title { border-bottom: none; }
165
+ .tag .scenario .meta { margin-top: 0px; }
166
+
167
+
168
+ /* Step Transformer Page */
169
+ .transformer { margin-top: 20px; }
170
+ .transformer * .docstring { margin-left: 20px; margin-top: 10px; padding: 5px 5px 5px 10px; }
171
+ .transformer .steps, .method_details_list, .steps, .method_details_list, .showSteps { margin: 10px 20px 0px 30px; }
172
+ .transformer .steps .step { padding: 6px; font-size: 14px; }
173
+
174
+ .showSteps { font-size: 0.9em; }
175
+ .showSteps a:link, .showSteps a:visited { text-decoration: none; color: #666; }
176
+
177
+ /* Tag Search Page */
178
+ #tags * li { padding: 5px; padding-left: 12px; margin: 0 0 0 10px; font-size: 1.1em; list-style: none; }
179
+ #tag_search { margin: 10px 0px 10px 0px; width: 100%; min-width: 200px; height: 20px; }
180
+ #tag_filtering {
181
+ margin: 10px 20px 0px 30px;
182
+ font-weight: bold;
183
+ padding: 20px;
184
+ background-color: #F8F8FF;
185
+ color: #444444;
186
+ border: 1px solid #DEDEDE; -moz-border-radius: 3px; -webkit-border-radius: 3px;
187
+ }
188
+
189
+ #command_example {
190
+ margin-top: 10px;
191
+ margin-left: 0px;
192
+ font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace;
193
+ color: #333;
194
+ padding: 8px 10px;
195
+ background: #A8E795; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
196
+ }
197
+
198
+
199
+ #cukes_links {
200
+ margin: 10px auto 10px auto;
201
+ border-bottom: 1px solid #E3E3E3;
202
+ width: 762px; text-align: center;
203
+ padding: 10px;
204
+ }
205
+
206
+ /* Logo Image and Step Status Images */
207
+
208
+ #cukes_logo {
209
+ margin: 0px auto 10px auto;
210
+ width: 762px;
211
+ height: 190px;
212
+ background: url(data:image/png;base64,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%3D) no-repeat center left;
213
+ }
214
+
215
+ .valid {
216
+ width: 15px;
217
+ height: 15px;
218
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAACXBIWXMAAA86AAAPOgGXOdvCAAABVklEQVQoFS2RO1IEMQxEJY+zzSDZlCNwAQIOxJm4DReAnICIIuFTW7U7lsxreTUzHltqtVqyPzw/HQ+3Oaebpc16EospszJ+OfP7/NePh5vHu/sRMfHw2RwxLjHOcQnlJHg42L9+vncIImOPQTbQOXPPHBmRE3o5RQMZwexmvig5pxFTMkqoLllaSZa/5ewgAoA4QEgrgXqXc9ELvbs1iItVNMCh4RgW1GzWoAaHEXV3lJjzwFeiqXD1OAjXUrjmzMw70MbrqFI5WBaTUKUbnDcW4TUTpIugcmBjg5wliRblb0gSoMO1ApxKkWrzXadmtrl6K98UN/takaLJMEGmFMtHmtMRHXCma8kXWd0cN5L7HHtdPIIJ1fAlFevcDcrFJ2JmPFYdVimTJOnQFZq45S9Xeb1tbettU6+a9WqnemLeX6ffl483BcjFdN01eyFFVHK0/FxO/9H/ezlUKYH7AAAAAElFTkSuQmCC) no-repeat center;
219
+
220
+ }
221
+
222
+ .invalid {
223
+ width: 15px;
224
+ height: 15px;
225
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAACXBIWXMAAA86AAAPOgGXOdvCAAABWUlEQVQoFS2SvVEEMQyFJdkspFcCVAAVUREZXVAHHRAwZOQwQ3YM67X4nnwe3+3afn+S18/P9366s5yZ042R6c3c3bRKDw+WwZxf791Pt/3hMcev5QBpFtauPLoBYrYr6zcem/Xr8frUbc4c59zPPoekQeSesTm47IaD74kfTjnDbNqxC5pTzrJfQcCFBQClIh7bIdDc9S+6E8WIQXTl9somfA1S4iJVbUnJmyOhJT+51AMRkXVArMtBdUNLGcpmaReDdSIGHw4m2iyNIiMslTWqBvMuZSVZB4QhMRRp6IUjzYuPctvq3TpWumq2sIfNw/KQ3DwomfIv6aVBT+ZQMFKxhB8uLfhlzkO3Sstlwh1ja3+oEKVuqipGHhMztEGvvlZEQHwyMKPD1NDtrrpBR3jbalv90hWzo05FBr1vlKGXtvGF9fz5HG8vFRpK1a5yV0/KVuZSzO+Pf3G6tVs/+L00AAAAAElFTkSuQmCC) no-repeat center;
226
+ }