shoulda-matchers 4.0.0.rc1 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +72 -40
  4. data/lib/shoulda/matchers/action_controller.rb +2 -0
  5. data/lib/shoulda/matchers/active_model.rb +2 -3
  6. data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +1 -0
  7. data/lib/shoulda/matchers/active_record.rb +2 -0
  8. data/lib/shoulda/matchers/active_record/association_matcher.rb +34 -0
  9. data/lib/shoulda/matchers/active_record/association_matchers/optional_matcher.rb +27 -4
  10. data/lib/shoulda/matchers/active_record/association_matchers/required_matcher.rb +27 -4
  11. data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +1 -1
  12. data/lib/shoulda/matchers/independent.rb +2 -1
  13. data/lib/shoulda/matchers/rails_shim.rb +5 -9
  14. data/lib/shoulda/matchers/version.rb +1 -1
  15. data/lib/shoulda/matchers/warn.rb +1 -0
  16. data/shoulda-matchers.gemspec +11 -3
  17. metadata +13 -340
  18. data/.gitignore +0 -12
  19. data/.hound.yml +0 -3
  20. data/.hound/ruby.yml +0 -1062
  21. data/.python-version +0 -1
  22. data/.rubocop.yml +0 -15
  23. data/.travis.yml +0 -21
  24. data/.yardopts +0 -10
  25. data/Appraisals +0 -105
  26. data/CONTRIBUTING.md +0 -172
  27. data/Gemfile +0 -15
  28. data/Gemfile.lock +0 -59
  29. data/MAINTAINING.md +0 -250
  30. data/NEWS.md +0 -1235
  31. data/Rakefile +0 -46
  32. data/bin/setup +0 -190
  33. data/custom_plan.rb +0 -104
  34. data/doc_config/gh-pages/index.html.erb +0 -9
  35. data/doc_config/yard/setup.rb +0 -22
  36. data/doc_config/yard/templates/default/fulldoc/html/css/bootstrap.css +0 -5967
  37. data/doc_config/yard/templates/default/fulldoc/html/css/full_list.css +0 -12
  38. data/doc_config/yard/templates/default/fulldoc/html/css/global.css +0 -66
  39. data/doc_config/yard/templates/default/fulldoc/html/css/solarized.css +0 -69
  40. data/doc_config/yard/templates/default/fulldoc/html/css/style.css +0 -312
  41. data/doc_config/yard/templates/default/fulldoc/html/full_list.erb +0 -26
  42. data/doc_config/yard/templates/default/fulldoc/html/full_list_class.erb +0 -1
  43. data/doc_config/yard/templates/default/fulldoc/html/full_list_method.erb +0 -8
  44. data/doc_config/yard/templates/default/fulldoc/html/js/app.js +0 -281
  45. data/doc_config/yard/templates/default/fulldoc/html/js/full_list.js +0 -1
  46. data/doc_config/yard/templates/default/fulldoc/html/js/jquery.stickyheaders.js +0 -289
  47. data/doc_config/yard/templates/default/fulldoc/html/js/underscore.min.js +0 -6
  48. data/doc_config/yard/templates/default/fulldoc/html/setup.rb +0 -35
  49. data/doc_config/yard/templates/default/layout/html/breadcrumb.erb +0 -14
  50. data/doc_config/yard/templates/default/layout/html/fonts.erb +0 -1
  51. data/doc_config/yard/templates/default/layout/html/footer.erb +0 -6
  52. data/doc_config/yard/templates/default/layout/html/layout.erb +0 -23
  53. data/doc_config/yard/templates/default/layout/html/search.erb +0 -13
  54. data/doc_config/yard/templates/default/layout/html/setup.rb +0 -40
  55. data/doc_config/yard/templates/default/method_details/html/source.erb +0 -10
  56. data/doc_config/yard/templates/default/module/html/box_info.erb +0 -31
  57. data/gemfiles/4.2.gemfile +0 -39
  58. data/gemfiles/4.2.gemfile.lock +0 -246
  59. data/gemfiles/5.0.gemfile +0 -37
  60. data/gemfiles/5.0.gemfile.lock +0 -238
  61. data/gemfiles/5.1.gemfile +0 -38
  62. data/gemfiles/5.1.gemfile.lock +0 -254
  63. data/gemfiles/5.2.gemfile +0 -40
  64. data/gemfiles/5.2.gemfile.lock +0 -273
  65. data/script/install_gems_in_all_appraisals +0 -16
  66. data/script/run_all_tests +0 -16
  67. data/script/supported_ruby_versions +0 -7
  68. data/script/update_gem_in_all_appraisals +0 -17
  69. data/script/update_gems_in_all_appraisals +0 -16
  70. data/spec/acceptance/active_model_integration_spec.rb +0 -23
  71. data/spec/acceptance/independent_matchers_spec.rb +0 -125
  72. data/spec/acceptance/multiple_libraries_integration_spec.rb +0 -55
  73. data/spec/acceptance/rails_integration_spec.rb +0 -156
  74. data/spec/acceptance_spec_helper.rb +0 -23
  75. data/spec/doublespeak_spec_helper.rb +0 -2
  76. data/spec/report_warnings.rb +0 -7
  77. data/spec/spec_helper.rb +0 -20
  78. data/spec/support/acceptance/adds_shoulda_matchers_to_project.rb +0 -133
  79. data/spec/support/acceptance/helpers.rb +0 -33
  80. data/spec/support/acceptance/helpers/active_model_helpers.rb +0 -11
  81. data/spec/support/acceptance/helpers/array_helpers.rb +0 -13
  82. data/spec/support/acceptance/helpers/base_helpers.rb +0 -19
  83. data/spec/support/acceptance/helpers/command_helpers.rb +0 -68
  84. data/spec/support/acceptance/helpers/file_helpers.rb +0 -19
  85. data/spec/support/acceptance/helpers/gem_helpers.rb +0 -31
  86. data/spec/support/acceptance/helpers/minitest_helpers.rb +0 -11
  87. data/spec/support/acceptance/helpers/n_unit_helpers.rb +0 -25
  88. data/spec/support/acceptance/helpers/pluralization_helpers.rb +0 -13
  89. data/spec/support/acceptance/helpers/rails_migration_helpers.rb +0 -21
  90. data/spec/support/acceptance/helpers/rails_version_helpers.rb +0 -11
  91. data/spec/support/acceptance/helpers/rspec_helpers.rb +0 -24
  92. data/spec/support/acceptance/helpers/ruby_version_helpers.rb +0 -9
  93. data/spec/support/acceptance/helpers/step_helpers.rb +0 -127
  94. data/spec/support/acceptance/matchers/have_output.rb +0 -31
  95. data/spec/support/acceptance/matchers/indicate_number_of_tests_was_run_matcher.rb +0 -55
  96. data/spec/support/acceptance/matchers/indicate_that_tests_were_run_matcher.rb +0 -103
  97. data/spec/support/tests/bundle.rb +0 -94
  98. data/spec/support/tests/command_runner.rb +0 -230
  99. data/spec/support/tests/current_bundle.rb +0 -55
  100. data/spec/support/tests/database.rb +0 -28
  101. data/spec/support/tests/database_adapters/postgresql.rb +0 -25
  102. data/spec/support/tests/database_adapters/sqlite3.rb +0 -26
  103. data/spec/support/tests/database_configuration.rb +0 -33
  104. data/spec/support/tests/database_configuration_registry.rb +0 -28
  105. data/spec/support/tests/filesystem.rb +0 -100
  106. data/spec/support/tests/version.rb +0 -45
  107. data/spec/support/unit/active_record/create_table.rb +0 -54
  108. data/spec/support/unit/attribute.rb +0 -45
  109. data/spec/support/unit/capture.rb +0 -46
  110. data/spec/support/unit/change_value.rb +0 -111
  111. data/spec/support/unit/create_model_arguments/basic.rb +0 -135
  112. data/spec/support/unit/create_model_arguments/has_many.rb +0 -15
  113. data/spec/support/unit/create_model_arguments/uniqueness_matcher.rb +0 -74
  114. data/spec/support/unit/helpers/action_pack_versions.rb +0 -22
  115. data/spec/support/unit/helpers/active_model_helpers.rb +0 -27
  116. data/spec/support/unit/helpers/active_model_versions.rb +0 -32
  117. data/spec/support/unit/helpers/active_record_versions.rb +0 -44
  118. data/spec/support/unit/helpers/active_resource_builder.rb +0 -27
  119. data/spec/support/unit/helpers/allow_value_matcher_helpers.rb +0 -15
  120. data/spec/support/unit/helpers/class_builder.rb +0 -90
  121. data/spec/support/unit/helpers/column_type_helpers.rb +0 -26
  122. data/spec/support/unit/helpers/confirmation_matcher_helpers.rb +0 -17
  123. data/spec/support/unit/helpers/controller_builder.rb +0 -63
  124. data/spec/support/unit/helpers/database_helpers.rb +0 -20
  125. data/spec/support/unit/helpers/i18n_faker.rb +0 -15
  126. data/spec/support/unit/helpers/mailer_builder.rb +0 -12
  127. data/spec/support/unit/helpers/message_helpers.rb +0 -19
  128. data/spec/support/unit/helpers/model_builder.rb +0 -114
  129. data/spec/support/unit/helpers/rails_versions.rb +0 -42
  130. data/spec/support/unit/helpers/validation_matcher_scenario_helpers.rb +0 -44
  131. data/spec/support/unit/i18n.rb +0 -7
  132. data/spec/support/unit/load_environment.rb +0 -12
  133. data/spec/support/unit/matchers/deprecate.rb +0 -60
  134. data/spec/support/unit/matchers/fail_with_message_including_matcher.rb +0 -51
  135. data/spec/support/unit/matchers/fail_with_message_matcher.rb +0 -64
  136. data/spec/support/unit/matchers/print_warning_including.rb +0 -67
  137. data/spec/support/unit/model_creation_strategies/active_model.rb +0 -111
  138. data/spec/support/unit/model_creation_strategies/active_record.rb +0 -77
  139. data/spec/support/unit/model_creators.rb +0 -19
  140. data/spec/support/unit/model_creators/active_model.rb +0 -39
  141. data/spec/support/unit/model_creators/active_record.rb +0 -42
  142. data/spec/support/unit/model_creators/active_record/has_and_belongs_to_many.rb +0 -95
  143. data/spec/support/unit/model_creators/active_record/has_many.rb +0 -67
  144. data/spec/support/unit/model_creators/active_record/uniqueness_matcher.rb +0 -42
  145. data/spec/support/unit/model_creators/basic.rb +0 -102
  146. data/spec/support/unit/rails_application.rb +0 -151
  147. data/spec/support/unit/record_builder_with_i18n_validation_message.rb +0 -69
  148. data/spec/support/unit/record_validating_confirmation_builder.rb +0 -54
  149. data/spec/support/unit/record_with_different_error_attribute_builder.rb +0 -92
  150. data/spec/support/unit/shared_examples/ignoring_interference_by_writer.rb +0 -79
  151. data/spec/support/unit/shared_examples/numerical_submatcher.rb +0 -17
  152. data/spec/support/unit/shared_examples/set_session_or_flash.rb +0 -360
  153. data/spec/support/unit/validation_matcher_scenario.rb +0 -60
  154. data/spec/unit/shoulda/matchers/action_controller/callback_matcher_spec.rb +0 -82
  155. data/spec/unit/shoulda/matchers/action_controller/filter_param_matcher_spec.rb +0 -28
  156. data/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb +0 -629
  157. data/spec/unit/shoulda/matchers/action_controller/redirect_to_matcher_spec.rb +0 -42
  158. data/spec/unit/shoulda/matchers/action_controller/render_template_matcher_spec.rb +0 -76
  159. data/spec/unit/shoulda/matchers/action_controller/render_with_layout_matcher_spec.rb +0 -62
  160. data/spec/unit/shoulda/matchers/action_controller/rescue_from_matcher_spec.rb +0 -90
  161. data/spec/unit/shoulda/matchers/action_controller/respond_with_matcher_spec.rb +0 -31
  162. data/spec/unit/shoulda/matchers/action_controller/route_matcher_spec.rb +0 -330
  163. data/spec/unit/shoulda/matchers/action_controller/route_params_spec.rb +0 -30
  164. data/spec/unit/shoulda/matchers/action_controller/set_flash_matcher_spec.rb +0 -67
  165. data/spec/unit/shoulda/matchers/action_controller/set_session_matcher_spec.rb +0 -17
  166. data/spec/unit/shoulda/matchers/action_controller/set_session_or_flash_matcher_spec.rb +0 -562
  167. data/spec/unit/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb +0 -117
  168. data/spec/unit/shoulda/matchers/active_model/allow_value_matcher_spec.rb +0 -829
  169. data/spec/unit/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +0 -86
  170. data/spec/unit/shoulda/matchers/active_model/have_secure_password_matcher_spec.rb +0 -20
  171. data/spec/unit/shoulda/matchers/active_model/helpers_spec.rb +0 -162
  172. data/spec/unit/shoulda/matchers/active_model/validate_absence_of_matcher_spec.rb +0 -290
  173. data/spec/unit/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb +0 -109
  174. data/spec/unit/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb +0 -172
  175. data/spec/unit/shoulda/matchers/active_model/validate_exclusion_of_matcher_spec.rb +0 -264
  176. data/spec/unit/shoulda/matchers/active_model/validate_inclusion_of_matcher_spec.rb +0 -1049
  177. data/spec/unit/shoulda/matchers/active_model/validate_length_of_matcher_spec.rb +0 -335
  178. data/spec/unit/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +0 -1865
  179. data/spec/unit/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +0 -406
  180. data/spec/unit/shoulda/matchers/active_record/accept_nested_attributes_for_matcher_spec.rb +0 -107
  181. data/spec/unit/shoulda/matchers/active_record/association_matcher_spec.rb +0 -1672
  182. data/spec/unit/shoulda/matchers/active_record/association_matchers/model_reflection_spec.rb +0 -251
  183. data/spec/unit/shoulda/matchers/active_record/define_enum_for_matcher_spec.rb +0 -690
  184. data/spec/unit/shoulda/matchers/active_record/have_db_column_matcher_spec.rb +0 -111
  185. data/spec/unit/shoulda/matchers/active_record/have_db_index_matcher_spec.rb +0 -85
  186. data/spec/unit/shoulda/matchers/active_record/have_readonly_attributes_matcher_spec.rb +0 -41
  187. data/spec/unit/shoulda/matchers/active_record/have_secure_token_matcher_spec.rb +0 -169
  188. data/spec/unit/shoulda/matchers/active_record/serialize_matcher_spec.rb +0 -86
  189. data/spec/unit/shoulda/matchers/active_record/validate_uniqueness_of_matcher_spec.rb +0 -1682
  190. data/spec/unit/shoulda/matchers/doublespeak/double_collection_spec.rb +0 -190
  191. data/spec/unit/shoulda/matchers/doublespeak/double_implementation_registry_spec.rb +0 -21
  192. data/spec/unit/shoulda/matchers/doublespeak/double_spec.rb +0 -271
  193. data/spec/unit/shoulda/matchers/doublespeak/object_double_spec.rb +0 -77
  194. data/spec/unit/shoulda/matchers/doublespeak/proxy_implementation_spec.rb +0 -72
  195. data/spec/unit/shoulda/matchers/doublespeak/stub_implementation_spec.rb +0 -101
  196. data/spec/unit/shoulda/matchers/doublespeak/world_spec.rb +0 -78
  197. data/spec/unit/shoulda/matchers/doublespeak_spec.rb +0 -27
  198. data/spec/unit/shoulda/matchers/independent/delegate_method_matcher/stubbed_target_spec.rb +0 -43
  199. data/spec/unit/shoulda/matchers/independent/delegate_method_matcher_spec.rb +0 -650
  200. data/spec/unit/shoulda/matchers/routing/route_matcher_spec.rb +0 -406
  201. data/spec/unit/shoulda/matchers/util/word_wrap_spec.rb +0 -252
  202. data/spec/unit_spec_helper.rb +0 -54
  203. data/spec/warnings_spy.rb +0 -64
  204. data/spec/warnings_spy/filesystem.rb +0 -45
  205. data/spec/warnings_spy/partitioner.rb +0 -36
  206. data/spec/warnings_spy/reader.rb +0 -53
  207. data/spec/warnings_spy/reporter.rb +0 -88
  208. data/tasks/documentation.rb +0 -199
  209. data/zeus.json +0 -11
@@ -1,26 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html>
4
- <head>
5
- <meta http-equiv="Content-Type" content="text/html; charset=<%= charset %>" />
6
- <% stylesheets_full_list.each do |stylesheet| %>
7
- <link rel="stylesheet" href="<%= url_for(stylesheet) %>" type="text/css" media="screen" charset="utf-8" />
8
- <% end %>
9
-
10
- <% javascripts_full_list.each do |javascript| %>
11
- <script type="text/javascript" charset="utf-8" src="<%= url_for(javascript) %>"></script>
12
- <% end %>
13
-
14
- <title><%= @list_title %></title>
15
- <base id="base_target" target="_parent" />
16
- </head>
17
- <body>
18
- <div id="content">
19
- <h1 id="full_list_header"><%= @list_title %></h1>
20
-
21
- <ul id="full_list" class="<%= @list_class || @list_type %>">
22
- <%= erb "full_list_#{@list_type}" %>
23
- </ul>
24
- </div>
25
- </body>
26
- </html>
@@ -1,8 +0,0 @@
1
- <% n = 1 %>
2
- <% @items.each do |item| %>
3
- <li class="r<%= n %> <%= item.has_tag?(:deprecated) ? 'deprecated' : '' %>">
4
- <%= linkify item, h(item.name(true)) %>
5
- <small>(<%= item.namespace.title %>)</small>
6
- </li>
7
- <% n = n == 2 ? 1 : 2 %>
8
- <% end %>
@@ -1,281 +0,0 @@
1
- function createSourceLinks() {
2
- $('.method_details_list .source_code').
3
- before("<span class='showSource'>[<a href='#' class='toggleSource'>View source</a>]</span>");
4
- $('.toggleSource').toggle(function() {
5
- $(this).parent().nextAll('.source_code').show();
6
- $(this).text("Hide source");
7
- StickyHeaders.update();
8
- },
9
- function() {
10
- $(this).parent().nextAll('.source_code').hide();
11
- $(this).text("View source");
12
- StickyHeaders.update();
13
- });
14
- }
15
-
16
- function createDefineLinks() {
17
- var tHeight = 0;
18
- $('.defines').after(" <a href='#' class='toggleDefines'>more...</a>");
19
- $('.toggleDefines').toggle(function() {
20
- tHeight = $(this).parent().prev().height();
21
- $(this).prev().show();
22
- $(this).parent().prev().height($(this).parent().height());
23
- $(this).text("(less)");
24
- StickyHeaders.update();
25
- },
26
- function() {
27
- $(this).prev().hide();
28
- $(this).parent().prev().height(tHeight);
29
- $(this).text("more...");
30
- StickyHeaders.update();
31
- });
32
- }
33
-
34
- function createFullTreeLinks() {
35
- var tHeight = 0;
36
- $('.inheritanceTree').toggle(function() {
37
- tHeight = $(this).parent().prev().height();
38
- $(this).parent().toggleClass('showAll');
39
- $(this).text("(hide)");
40
- $(this).parent().prev().height($(this).parent().height());
41
- StickyHeaders.update();
42
- },
43
- function() {
44
- $(this).parent().toggleClass('showAll');
45
- $(this).parent().prev().height(tHeight);
46
- $(this).text("show all");
47
- StickyHeaders.update();
48
- });
49
- }
50
-
51
- function hideSearchFrameOnBlur() {
52
- $(document.body).on('click', hideSearchFrame);
53
- }
54
-
55
- function initSearchFrameLinks() {
56
- var search = $('.js-search');
57
- var items = search.find('li');
58
- var links = search.find('a');
59
- var frame = $('.js-search-frame');
60
-
61
- function listen() {
62
- links.on('click', function (event) {
63
- event.preventDefault();
64
- event.stopPropagation();
65
- toggle(this, this.href);
66
- });
67
-
68
- $(document).on('keydown', function (event) {
69
- if (event.which == 27) {
70
- close();
71
- }
72
- })
73
-
74
- $(document).on('click', function (event) {
75
- close();
76
- })
77
- }
78
-
79
- function toggle(link, frameSrc) {
80
- if (isOpen() && clickedOnSameLink(frameSrc)) {
81
- close();
82
- } else {
83
- open(link, frameSrc);
84
- }
85
- }
86
-
87
- function isOpen() {
88
- return frame.hasClass('open');
89
- }
90
-
91
- function clickedOnSameLink(location) {
92
- return frame.attr('src') === location;
93
- }
94
-
95
- function reset() {
96
- items.removeClass('active');
97
- }
98
-
99
- function open(link, location) {
100
- reset();
101
- $(link).parent().addClass('active');
102
- frame.attr('src', location).one('load', function () {
103
- frame.addClass('open');
104
- })
105
- }
106
-
107
- function close() {
108
- reset();
109
- frame.removeClass('open');
110
- }
111
-
112
- listen();
113
- }
114
-
115
-
116
- function linkSummaries() {
117
- $('.summary_signature').click(function() {
118
- document.location = $(this).find('a').attr('href');
119
- });
120
- }
121
-
122
- function keyboardShortcuts() {
123
- if (window.top.frames.main) return;
124
-
125
- $(document).keypress(function(evt) {
126
- if (evt.altKey || evt.ctrlKey || evt.metaKey || evt.shiftKey) return;
127
-
128
- if (
129
- typeof evt.target !== "undefined" &&
130
- (evt.target.nodeName == "INPUT" || evt.target.nodeName == "TEXTAREA")
131
- ) return;
132
-
133
- switch (evt.charCode) {
134
- case 67: case 99: $('#class_list_link').click(); break; // 'c'
135
- case 77: case 109: $('#method_list_link').click(); break; // 'm'
136
- case 70: case 102: $('#file_list_link').click(); break; // 'f'
137
- default: break;
138
- }
139
- });
140
- }
141
-
142
- function summaryToggle() {
143
- $('.summary_toggle').click(function() {
144
- if (localStorage) {
145
- localStorage.summaryCollapsed = $(this).text();
146
- }
147
- $('.summary_toggle').each(function() {
148
- $(this).text($(this).text() == "collapse" ? "expand" : "collapse");
149
- var next = $(this).parent().parent().nextAll('ul.summary').first();
150
- if (next.hasClass('compact')) {
151
- next.toggle();
152
- next.nextAll('ul.summary').first().toggle();
153
- }
154
- else if (next.hasClass('summary')) {
155
- var list = $('<ul class="summary compact" />');
156
- list.html(next.html());
157
- list.find('.summary_desc, .note').remove();
158
- list.find('a').each(function() {
159
- $(this).html($(this).find('strong').html());
160
- $(this).parent().html($(this)[0].outerHTML);
161
- });
162
- next.before(list);
163
- next.toggle();
164
- }
165
- });
166
- StickyHeaders.update();
167
- return false;
168
- });
169
- if (localStorage) {
170
- if (localStorage.summaryCollapsed == "collapse") {
171
- $('.summary_toggle').first().click();
172
- }
173
- else localStorage.summaryCollapsed = "expand";
174
- }
175
- }
176
-
177
- function fixOutsideWorldLinks() {
178
- $('a').each(function() {
179
- if (window.location.host != this.host) this.target = '_parent';
180
- });
181
- }
182
-
183
- function generateTOC() {
184
- if ($('#filecontents').length === 0) return;
185
- var _toc = $('<ol class="top"></ol>');
186
- var show = false;
187
- var toc = _toc;
188
- var counter = 0;
189
- var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
190
- var i;
191
- if ($('#filecontents h1').length > 1) tags.unshift('h1');
192
- for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
193
- var lastTag = parseInt(tags[0][1], 10);
194
- $(tags.join(', ')).each(function() {
195
- if ($(this).parents('.method_details .docstring').length != 0) return;
196
- if (this.id == "filecontents") return;
197
- show = true;
198
- var thisTag = parseInt(this.tagName[1], 10);
199
- if (this.id.length === 0) {
200
- var proposedId = $(this).attr('toc-id');
201
- if (typeof(proposedId) != "undefined") this.id = proposedId;
202
- else {
203
- var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_');
204
- if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; }
205
- this.id = proposedId;
206
- }
207
- }
208
- if (thisTag > lastTag) {
209
- for (i = 0; i < thisTag - lastTag; i++) {
210
- var tmp = $('<ol/>'); toc.append(tmp); toc = tmp;
211
- }
212
- }
213
- if (thisTag < lastTag) {
214
- for (i = 0; i < lastTag - thisTag; i++) toc = toc.parent();
215
- }
216
- var title = $(this).attr('toc-title');
217
- if (typeof(title) == "undefined") title = $(this).text();
218
- toc.append('<li><a href="#' + this.id + '">' + title + '</a></li>');
219
- lastTag = thisTag;
220
- });
221
- if (!show) return;
222
- html = '<div id="toc"><p class="title"><a class="hide_toc" href="#"><strong>Table of Contents</strong></a> <small>(<a href="#" class="float_toc">left</a>)</small></p></div>';
223
- $('#content').prepend(html);
224
- $('#toc').append(_toc);
225
- $('#toc .hide_toc').toggle(function() {
226
- $('#toc .top').slideUp('fast');
227
- $('#toc').toggleClass('hidden');
228
- $('#toc .title small').toggle();
229
- }, function() {
230
- $('#toc .top').slideDown('fast');
231
- $('#toc').toggleClass('hidden');
232
- $('#toc .title small').toggle();
233
- });
234
- $('#toc .float_toc').toggle(function() {
235
- $(this).text('float');
236
- $('#toc').toggleClass('nofloat');
237
- }, function() {
238
- $(this).text('left');
239
- $('#toc').toggleClass('nofloat');
240
- });
241
- }
242
-
243
- function removeDlBoxIfEmpty() {
244
- var $box = $('dl.box')
245
- if (!$box.text().trim()) {
246
- $box.remove();
247
- }
248
- }
249
-
250
- function makeHeadersSticky() {
251
- StickyHeaders
252
- .set({
253
- contentContainer: '#main',
254
- stickyHeaderContainer: '#header',
255
- switchOnCollisionWith: 'top',
256
- fillHeadersWith: function (node) {
257
- return $('<h3>').text(node.find('strong').text());
258
- }
259
- })
260
- .add('.method_details > h3')
261
- .activate();
262
- }
263
-
264
- function updateStickyHeaders() {
265
- setTimeout(function () {
266
- StickyHeaders.update()
267
- }, 100)
268
- }
269
-
270
- $(makeHeadersSticky);
271
- $(createSourceLinks);
272
- $(createDefineLinks);
273
- $(createFullTreeLinks);
274
- $(initSearchFrameLinks);
275
- $(linkSummaries);
276
- $(keyboardShortcuts);
277
- $(summaryToggle);
278
- $(fixOutsideWorldLinks);
279
- $(generateTOC);
280
- $(removeDlBoxIfEmpty);
281
- $(updateStickyHeaders);
@@ -1 +0,0 @@
1
- // Override with nothing
@@ -1,289 +0,0 @@
1
- window.StickyHeaders = (function ($) {
2
- var me = {},
3
- body, config, contentContainer, currentHeaderRangeIndex,
4
- currentScrollOffset, elem, headerRanges, headers, isScrolling,
5
- lastScrollOffset, selectors, stickyHeaderContainer;
6
-
7
- function init() {
8
- config = {
9
- switchOnCollisionWith: 'top',
10
- copy: 'element'
11
- };
12
- selectors = [];
13
- headers = [];
14
- headerRanges = [];
15
-
16
- currentHeaderRangeIndex = -1;
17
- currentScrollOffset = 0;
18
- lastScrollOffset = 0;
19
- isScrolling = false;
20
-
21
- createStickyHeader();
22
- }
23
-
24
- function createStickyHeader() {
25
- elem = $('<div>').attr('id', 'sticky-header');
26
- }
27
-
28
- function setHeaders() {
29
- var elements = [],
30
- stickyHeaderLineHeight = parseCssValue(elem.css('line-height')),
31
- stickyHeaderTopPadding;
32
-
33
- headers = [];
34
- $.each(selectors, function (_, selector) {
35
- contentContainer.find(selector).each(function (_, element) {
36
- var $element = $(element),
37
- fontSize = parseCssValue($element.css('font-size')),
38
- topOffset = (
39
- element.offsetTop +
40
- parseFloat($element.css('padding-top'), 10) +
41
- (- ((stickyHeaderLineHeight - fontSize) / 2))
42
- ),
43
- height = Math.round($element.height()),
44
- outerHeight = Math.round($element.outerHeight(true)),
45
- bottomOffset = topOffset + outerHeight;
46
-
47
- headers.push({
48
- element: element,
49
- $element: $element,
50
- topOffset: topOffset,
51
- bottomOffset: bottomOffset
52
- });
53
- })
54
- })
55
- }
56
-
57
- function setHeaderRanges() {
58
- var offsetProp = config.switchOnCollisionWith + 'Offset',
59
- start, end;
60
-
61
- headerRanges = [];
62
- for (var i = 0, len = headers.length; i < len; i++) {
63
- start = headers[i][offsetProp];
64
-
65
- if (headers[i+1]) {
66
- end = headers[i+1][offsetProp];
67
- } else {
68
- end = null;
69
- }
70
-
71
- headerRanges.push({
72
- start: start,
73
- end: end,
74
- element: headers[i].element
75
- });
76
- }
77
-
78
- //debugHeaderRanges();
79
- }
80
-
81
- function debugHeaderRanges() {
82
- contentContainer.find('.header-range-debug').remove();
83
-
84
- $.each(headerRanges, function (i, range) {
85
- var color = 'hsla('+(20*i)+', 100%, 50%, 0.15)',
86
- debug = $('<div>')
87
- .addClass('header-range-debug')
88
- .css({
89
- width: '100%',
90
- position: 'absolute',
91
- top: range.start + 'px',
92
- height: (range.end === null ? '1px' : (range.end - range.start) + 'px'),
93
- backgroundColor: color,
94
- borderTop: '1px solid black'
95
- })
96
- .appendTo(contentContainer)
97
-
98
- debug.append(
99
- $('<div>')
100
- .css({
101
- position: 'absolute',
102
- top: 0,
103
- right: 0,
104
- height: '2em',
105
- lineHeight: '2em',
106
- width: '40em',
107
- fontSize: '13px',
108
- backgroundColor: 'black',
109
- color: 'white',
110
- padding: '0 5px'
111
- })
112
- .text(headers[i].$element.text() + ' (#' + i + ')')
113
- )
114
- })
115
- }
116
-
117
- function setCurrentHeaderIndex() {
118
- var scrollTop = contentContainer.scrollTop();
119
-
120
- for (var i = 0, len = headers.length; i < len; i++) {
121
- if (scrollTop < headers[i].bottomOffset) {
122
- break;
123
- }
124
- currentHeaderIndex = i;
125
- }
126
- }
127
-
128
- function render() {
129
- var clonedHeader;
130
-
131
- if (currentHeaderRangeIndex < 0 || currentHeaderRangeIndex > headerRanges.length-1) {
132
- elem.removeClass('show');
133
- body.removeClass('has-sticky-header');
134
- }
135
- else {
136
- var realHeader = $(headerRanges[currentHeaderRangeIndex].element);
137
-
138
- if (typeof config.fillHeadersWith === 'function') {
139
- elem.html(config.fillHeadersWith(realHeader));
140
- } else if (config.fillHeadersWith === 'content') {
141
- elem.html(realHeader.clone().html());
142
- } else {
143
- elem.html(realHeader.clone());
144
- }
145
-
146
- elem.addClass('show');
147
- body.addClass('has-sticky-header');
148
- }
149
-
150
- return me;
151
- }
152
-
153
- function determineCurrentHeaderRangeIndex(startIndex, direction) {
154
- var index = startIndex;
155
- while (true) {
156
- currentHeaderRange = headerRanges[index];
157
- if (!currentHeaderRange || isWithinRange(currentScrollOffset, currentHeaderRange)) {
158
- break;
159
- } else {
160
- index += direction;
161
- }
162
- }
163
- return index;
164
- }
165
-
166
- function onScroll() {
167
- if (!headerRanges.length) {
168
- return;
169
- }
170
-
171
- currentScrollOffset = contentContainer.scrollTop();
172
-
173
- if (currentScrollOffset > headerRanges[0].start) {
174
- var newCurrentHeaderRangeIndex = currentHeaderRangeIndex;
175
- var currentHeaderRange = headerRanges[newCurrentHeaderRangeIndex];
176
-
177
- if (newCurrentHeaderRangeIndex < 0) {
178
- newCurrentHeaderRangeIndex = 0;
179
- }
180
-
181
- if (currentScrollOffset < lastScrollOffset) {
182
- // scrolling up
183
- newCurrentHeaderRangeIndex = determineCurrentHeaderRangeIndex(newCurrentHeaderRangeIndex, -1);
184
- } else {
185
- // scrolling down
186
- newCurrentHeaderRangeIndex = determineCurrentHeaderRangeIndex(newCurrentHeaderRangeIndex, +1);
187
- }
188
- } else {
189
- newCurrentHeaderRangeIndex = -1;
190
- }
191
-
192
- // only re-render when necessary
193
- if (newCurrentHeaderRangeIndex !== undefined && currentHeaderRangeIndex !== newCurrentHeaderRangeIndex) {
194
- currentHeaderRangeIndex = newCurrentHeaderRangeIndex;
195
- render();
196
- }
197
-
198
- lastScrollOffset = currentScrollOffset;
199
- }
200
-
201
- function listenToScroll(element, callback, options) {
202
- options = options || {};
203
-
204
- if (options.every) {
205
- element.on('scroll', function () {
206
- isScrolling = true;
207
- })
208
-
209
- setInterval(function () {
210
- if (isScrolling) {
211
- callback();
212
- isScrolling = false;
213
- }
214
- }, options.every);
215
- }
216
- else {
217
- element.on('scroll', callback);
218
- }
219
- }
220
-
221
- function isWithinRange(number, range) {
222
- return (
223
- number >= range.start &&
224
- (
225
- range.end === undefined ||
226
- range.end === null ||
227
- number <= range.end
228
- )
229
- );
230
- }
231
-
232
- function parseCssValue(value) {
233
- if (value === null || value === undefined) {
234
- return 0;
235
- } else {
236
- return parseInt(value, 10);
237
- }
238
- }
239
-
240
- me.setHeaders = setHeaders;
241
- me.setHeaderRanges = setHeaderRanges;
242
-
243
- me.set = function (/* key, value | config */) {
244
- if ($.isPlainObject(arguments[0])) {
245
- $.extend(config, arguments[0]);
246
- } else {
247
- config[arguments[0]] = arguments[1];
248
- }
249
- return me;
250
- }
251
-
252
- me.add = function (/* selectors... */) {
253
- selectors.push.apply(selectors, arguments);
254
- return me;
255
- }
256
-
257
- me.activate = function () {
258
- body = $('body');
259
- contentContainer = config.contentContainer ? $(config.contentContainer) : body;
260
- stickyHeaderContainer = config.stickyHeaderContainer ? $(config.stickyHeaderContainer) : contentContainer;
261
-
262
- stickyHeaderContainer.append(elem);
263
- setHeaders();
264
- setHeaderRanges();
265
- setCurrentHeaderIndex();
266
-
267
- return me;
268
- }
269
-
270
- me.update = function () {
271
- setHeaders();
272
- setHeaderRanges();
273
- render();
274
-
275
- listenToScroll(contentContainer, onScroll);
276
- }
277
-
278
- me.getHeaders = function () {
279
- return headers;
280
- }
281
-
282
- me.getHeaderRanges = function () {
283
- return headerRanges;
284
- }
285
-
286
- init();
287
-
288
- return me;
289
- })(jQuery);