openstax_kitchen 14.0.0 → 17.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +47 -3
  3. data/Gemfile.lock +4 -4
  4. data/codecov.yaml +4 -0
  5. data/lib/kitchen/directions/bake_all_chapter_solutions_types.rb +30 -0
  6. data/lib/kitchen/directions/bake_all_numbered_exercise_types.rb +26 -0
  7. data/lib/kitchen/directions/bake_annotation_classes/v1.rb +11 -2
  8. data/lib/kitchen/directions/bake_autotitled_exercise/main.rb +4 -0
  9. data/lib/kitchen/directions/bake_autotitled_exercise/v3.rb +35 -0
  10. data/lib/kitchen/directions/bake_chapter_references/main.rb +15 -0
  11. data/lib/kitchen/directions/bake_chapter_references/v2.rb +53 -0
  12. data/lib/kitchen/directions/bake_chapter_references/v3.rb +45 -0
  13. data/lib/kitchen/directions/bake_chapter_summary.rb +5 -4
  14. data/lib/kitchen/directions/bake_example.rb +1 -1
  15. data/lib/kitchen/directions/bake_exercise_prefixes/main.rb +14 -0
  16. data/lib/kitchen/directions/bake_exercise_prefixes/v1.rb +22 -0
  17. data/lib/kitchen/directions/bake_footnotes/v1.rb +1 -1
  18. data/lib/kitchen/directions/bake_index/v1.rb +13 -8
  19. data/lib/kitchen/directions/bake_index/v1.xhtml.erb +6 -10
  20. data/lib/kitchen/directions/{bake_injected_exercise.rb → bake_injected_exercise/bake_injected_exercise.rb} +10 -1
  21. data/lib/kitchen/directions/bake_injected_exercise/bake_injected_exercise_question.rb +4 -0
  22. data/lib/kitchen/directions/bake_link_placeholders.rb +1 -1
  23. data/lib/kitchen/directions/bake_lo_link_labels.rb +19 -0
  24. data/lib/kitchen/directions/bake_non_introduction_pages.rb +3 -1
  25. data/lib/kitchen/directions/bake_numbered_exercise/main.rb +8 -3
  26. data/lib/kitchen/directions/bake_numbered_exercise/v1.rb +48 -7
  27. data/lib/kitchen/directions/bake_numbered_table/bake_table_body.rb +5 -1
  28. data/lib/kitchen/directions/bake_numbered_table/v2.rb +2 -1
  29. data/lib/kitchen/directions/bake_references/v1.rb +13 -0
  30. data/lib/kitchen/directions/bake_screenreader_spans.rb +22 -0
  31. data/lib/kitchen/directions/bake_unnumbered_exercise.rb +16 -0
  32. data/lib/kitchen/directions/book_answer_key_container/eob_answer_key_container.xhtml.erb +9 -0
  33. data/lib/kitchen/directions/book_answer_key_container/v1.rb +6 -2
  34. data/lib/kitchen/directions/default_strategy_for_answer_key_solutions.rb +35 -0
  35. data/lib/kitchen/directions/move_solutions_to_answer_key/answer_key_inner_container.rb +29 -0
  36. data/lib/kitchen/element_base.rb +25 -5
  37. data/lib/kitchen/element_enumerator_base.rb +18 -0
  38. data/lib/kitchen/injected_exercise_element.rb +41 -0
  39. data/lib/kitchen/injected_exercise_element_enumerator.rb +21 -0
  40. data/lib/kitchen/injected_question_element.rb +7 -0
  41. data/lib/kitchen/patches/i18n.rb +4 -0
  42. data/lib/kitchen/patches/integer.rb +32 -3
  43. data/lib/kitchen/patches/nokogiri.rb +5 -4
  44. data/lib/kitchen/patches/renderable.rb +1 -1
  45. data/lib/kitchen/selectors/base.rb +3 -0
  46. data/lib/kitchen/selectors/standard_1.rb +1 -0
  47. data/lib/kitchen/version.rb +1 -1
  48. data/lib/locales/en.yml +16 -0
  49. data/lib/locales/es.yml +6 -1
  50. metadata +18 -11
  51. data/lib/kitchen/directions/book_answer_key_container/eob_answer_key_outer_container.xhtml.erb +0 -9
  52. data/lib/kitchen/directions/move_solutions_to_answer_key/main.rb +0 -18
  53. data/lib/kitchen/directions/move_solutions_to_answer_key/strategies/calculus.rb +0 -41
  54. data/lib/kitchen/directions/move_solutions_to_answer_key/strategies/contemporary_math.rb +0 -40
  55. data/lib/kitchen/directions/move_solutions_to_answer_key/strategies/default.rb +0 -27
  56. data/lib/kitchen/directions/move_solutions_to_answer_key/strategies/precalculus.rb +0 -63
  57. data/lib/kitchen/directions/move_solutions_to_answer_key/strategies/uphysics.rb +0 -21
  58. data/lib/kitchen/directions/move_solutions_to_answer_key/v1.rb +0 -47
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openstax_kitchen
3
3
  version: !ruby/object:Gem::Version
4
- version: 14.0.0
4
+ version: 17.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - JP Slavinsky
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-25 00:00:00.000000000 Z
11
+ date: 2021-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -244,12 +244,15 @@ files:
244
244
  - lib/kitchen/debug/print_recipe_error.rb
245
245
  - lib/kitchen/directions/.rubocop.yml
246
246
  - lib/kitchen/directions/bake_accessibility_fixes.rb
247
+ - lib/kitchen/directions/bake_all_chapter_solutions_types.rb
248
+ - lib/kitchen/directions/bake_all_numbered_exercise_types.rb
247
249
  - lib/kitchen/directions/bake_annotation_classes/main.rb
248
250
  - lib/kitchen/directions/bake_annotation_classes/v1.rb
249
251
  - lib/kitchen/directions/bake_appendix.rb
250
252
  - lib/kitchen/directions/bake_autotitled_exercise/main.rb
251
253
  - lib/kitchen/directions/bake_autotitled_exercise/v1.rb
252
254
  - lib/kitchen/directions/bake_autotitled_exercise/v2.rb
255
+ - lib/kitchen/directions/bake_autotitled_exercise/v3.rb
253
256
  - lib/kitchen/directions/bake_chapter_glossary/main.rb
254
257
  - lib/kitchen/directions/bake_chapter_glossary/v1.rb
255
258
  - lib/kitchen/directions/bake_chapter_introductions/bake_chapter_objectives.rb
@@ -262,6 +265,8 @@ files:
262
265
  - lib/kitchen/directions/bake_chapter_key_equations.rb
263
266
  - lib/kitchen/directions/bake_chapter_references/main.rb
264
267
  - lib/kitchen/directions/bake_chapter_references/v1.rb
268
+ - lib/kitchen/directions/bake_chapter_references/v2.rb
269
+ - lib/kitchen/directions/bake_chapter_references/v3.rb
265
270
  - lib/kitchen/directions/bake_chapter_section_exercises/main.rb
266
271
  - lib/kitchen/directions/bake_chapter_section_exercises/v1.rb
267
272
  - lib/kitchen/directions/bake_chapter_solutions/main.rb
@@ -278,6 +283,8 @@ files:
278
283
  - lib/kitchen/directions/bake_eoc_section_content/remove_section_title.rb
279
284
  - lib/kitchen/directions/bake_equations.rb
280
285
  - lib/kitchen/directions/bake_example.rb
286
+ - lib/kitchen/directions/bake_exercise_prefixes/main.rb
287
+ - lib/kitchen/directions/bake_exercise_prefixes/v1.rb
281
288
  - lib/kitchen/directions/bake_figure.rb
282
289
  - lib/kitchen/directions/bake_first_elements.rb
283
290
  - lib/kitchen/directions/bake_folio.rb
@@ -294,13 +301,14 @@ files:
294
301
  - lib/kitchen/directions/bake_index/main.rb
295
302
  - lib/kitchen/directions/bake_index/v1.rb
296
303
  - lib/kitchen/directions/bake_index/v1.xhtml.erb
297
- - lib/kitchen/directions/bake_injected_exercise.rb
298
304
  - lib/kitchen/directions/bake_injected_exercise/add_injected_exercise_id.rb
305
+ - lib/kitchen/directions/bake_injected_exercise/bake_injected_exercise.rb
299
306
  - lib/kitchen/directions/bake_injected_exercise/bake_injected_exercise_question.rb
300
307
  - lib/kitchen/directions/bake_inline_lists.rb
301
308
  - lib/kitchen/directions/bake_learning_objectives.rb
302
309
  - lib/kitchen/directions/bake_link_placeholders.rb
303
310
  - lib/kitchen/directions/bake_lists_with_para.rb
311
+ - lib/kitchen/directions/bake_lo_link_labels.rb
304
312
  - lib/kitchen/directions/bake_math_in_paragraph.rb
305
313
  - lib/kitchen/directions/bake_non_introduction_pages.rb
306
314
  - lib/kitchen/directions/bake_notes/bake_autotitled_notes.rb
@@ -324,6 +332,7 @@ files:
324
332
  - lib/kitchen/directions/bake_references/v1.rb
325
333
  - lib/kitchen/directions/bake_references/v2.rb
326
334
  - lib/kitchen/directions/bake_references/v3.rb
335
+ - lib/kitchen/directions/bake_screenreader_spans.rb
327
336
  - lib/kitchen/directions/bake_stepwise.rb
328
337
  - lib/kitchen/directions/bake_suggested_reading.rb
329
338
  - lib/kitchen/directions/bake_toc.rb
@@ -331,9 +340,10 @@ files:
331
340
  - lib/kitchen/directions/bake_unit_page_title/v1.rb
332
341
  - lib/kitchen/directions/bake_unit_title/main.rb
333
342
  - lib/kitchen/directions/bake_unit_title/v1.rb
343
+ - lib/kitchen/directions/bake_unnumbered_exercise.rb
334
344
  - lib/kitchen/directions/bake_unnumbered_figure.rb
335
345
  - lib/kitchen/directions/bake_unnumbered_tables.rb
336
- - lib/kitchen/directions/book_answer_key_container/eob_answer_key_outer_container.xhtml.erb
346
+ - lib/kitchen/directions/book_answer_key_container/eob_answer_key_container.xhtml.erb
337
347
  - lib/kitchen/directions/book_answer_key_container/main.rb
338
348
  - lib/kitchen/directions/book_answer_key_container/v1.rb
339
349
  - lib/kitchen/directions/chapter_review_container/chapter_review.xhtml.erb
@@ -341,6 +351,7 @@ files:
341
351
  - lib/kitchen/directions/chapter_review_container/v1.rb
342
352
  - lib/kitchen/directions/composite_page_container/main.rb
343
353
  - lib/kitchen/directions/composite_page_container/v1.rb
354
+ - lib/kitchen/directions/default_strategy_for_answer_key_solutions.rb
344
355
  - lib/kitchen/directions/eoc_section_title_link_snippet.rb
345
356
  - lib/kitchen/directions/move_custom_section_to_eoc_container/main.rb
346
357
  - lib/kitchen/directions/move_custom_section_to_eoc_container/v1.rb
@@ -348,16 +359,10 @@ files:
348
359
  - lib/kitchen/directions/move_exercises_to_eoc/v1.rb
349
360
  - lib/kitchen/directions/move_exercises_to_eoc/v2.rb
350
361
  - lib/kitchen/directions/move_exercises_to_eoc/v3.rb
351
- - lib/kitchen/directions/move_solutions_to_answer_key/main.rb
362
+ - lib/kitchen/directions/move_solutions_to_answer_key/answer_key_inner_container.rb
352
363
  - lib/kitchen/directions/move_solutions_to_answer_key/move_solutions_from_exercise_section.rb
353
364
  - lib/kitchen/directions/move_solutions_to_answer_key/move_solutions_from_numbered_note.rb
354
365
  - lib/kitchen/directions/move_solutions_to_answer_key/solution_area_snippet.rb
355
- - lib/kitchen/directions/move_solutions_to_answer_key/strategies/calculus.rb
356
- - lib/kitchen/directions/move_solutions_to_answer_key/strategies/contemporary_math.rb
357
- - lib/kitchen/directions/move_solutions_to_answer_key/strategies/default.rb
358
- - lib/kitchen/directions/move_solutions_to_answer_key/strategies/precalculus.rb
359
- - lib/kitchen/directions/move_solutions_to_answer_key/strategies/uphysics.rb
360
- - lib/kitchen/directions/move_solutions_to_answer_key/v1.rb
361
366
  - lib/kitchen/directions/move_title_text_into_span.rb
362
367
  - lib/kitchen/document.rb
363
368
  - lib/kitchen/element.rb
@@ -375,6 +380,8 @@ files:
375
380
  - lib/kitchen/figure_element_enumerator.rb
376
381
  - lib/kitchen/i18n_string.rb
377
382
  - lib/kitchen/id_tracker.rb
383
+ - lib/kitchen/injected_exercise_element.rb
384
+ - lib/kitchen/injected_exercise_element_enumerator.rb
378
385
  - lib/kitchen/injected_question_element.rb
379
386
  - lib/kitchen/injected_question_element_enumerator.rb
380
387
  - lib/kitchen/metadata_element.rb
@@ -1,9 +0,0 @@
1
- <div class="os-eob os-<%= @solutions_or_solution %>-container" data-type="composite-chapter" data-uuid-key=".<%= @solutions_or_solution %>">
2
- <h1 data-type="document-title">
3
- <span class="os-text"><%= I18n.t(:answer_key_title) %></span>
4
- </h1>
5
- <div data-type="metadata" style="display: none;">
6
- <h1 data-type="document-title" itemprop="name"><%= I18n.t(:answer_key_title) %></h1>
7
- <%= @metadata.paste %>
8
- </div>
9
- </div>
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kitchen
4
- module Directions
5
- module MoveSolutionsToAnswerKey
6
- def self.v1(chapter:, metadata_source:, strategy:, append_to:, strategy_options: {}, solutions_plural: true)
7
- V1.new.bake(
8
- chapter: chapter,
9
- metadata_source: metadata_source,
10
- strategy: strategy,
11
- append_to: append_to,
12
- strategy_options: strategy_options,
13
- solutions_plural: solutions_plural
14
- )
15
- end
16
- end
17
- end
18
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kitchen::Directions::MoveSolutionsToAnswerKey
4
- module Strategies
5
- class Calculus
6
- def bake(chapter:, append_to:)
7
- checkpoint_solutions = chapter.search('div.checkpoint div[data-type="solution"]').cut
8
- append_solution_area(I18n.t(:checkpoint), checkpoint_solutions, append_to)
9
-
10
- chapter.search('section.section-exercises').each do |section|
11
- section_solutions = section.search('div[data-type="solution"]').cut
12
- section_title = I18n.t(
13
- :section_exercises,
14
- number: "#{chapter.count_in(:book)}.#{section.count_in(:chapter)}"
15
- )
16
- append_solution_area(section_title, section_solutions, append_to)
17
- end
18
-
19
- chapter.search('section.review-exercises').each do |section|
20
- section_solutions = section.search('div[data-type="solution"]').cut
21
- append_solution_area(I18n.t(:review_exercises), section_solutions, append_to)
22
- end
23
- end
24
-
25
- protected
26
-
27
- def append_solution_area(title, clipboard, append_to)
28
- append_to.append(child:
29
- <<~HTML
30
- <div class="os-solution-area">
31
- <h3 data-type="title">
32
- <span class="os-title-label">#{title}</span>
33
- </h3>
34
- #{clipboard.paste}
35
- </div>
36
- HTML
37
- )
38
- end
39
- end
40
- end
41
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kitchen::Directions::MoveSolutionsToAnswerKey
4
- module Strategies
5
- class ContemporaryMath
6
- def bake(chapter:, append_to:)
7
- # Hacky numbering fix
8
- chapter.notes('$.your-turn').exercises.each do |exercise|
9
- solution = exercise.solution
10
- next unless solution
11
-
12
- number = exercise.ancestor(:note).count_in(:chapter)
13
- solution.first('a.os-number').inner_html = number.to_s
14
- solution.first('span.os-divider').inner_html = '. '
15
- end
16
-
17
- Kitchen::Directions::MoveSolutionsFromNumberedNote.v1(
18
- chapter: chapter, append_to: append_to, note_class: 'your-turn'
19
- )
20
-
21
- # Bake section exercises
22
- chapter.non_introduction_pages.each do |page|
23
- number = "#{chapter.count_in(:book)}.#{page.count_in(:chapter)}"
24
- Kitchen::Directions::MoveSolutionsFromExerciseSection.v1(
25
- chapter: page, append_to: append_to, section_class: 'section-exercises',
26
- title_number: number
27
- )
28
- end
29
-
30
- # Bake other exercise sections
31
- classes = %w[chapter-review chapter-test]
32
- classes.each do |klass|
33
- Kitchen::Directions::MoveSolutionsFromExerciseSection.v1(
34
- chapter: chapter, append_to: append_to, section_class: klass
35
- )
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kitchen::Directions::MoveSolutionsToAnswerKey
4
- module Strategies
5
- class Default
6
- def bake(chapter:, append_to:)
7
- bake_section(chapter: chapter, append_to: append_to)
8
- end
9
-
10
- protected
11
-
12
- def bake_section(chapter:, append_to:)
13
- @selectors.each do |selector|
14
- chapter.search("#{selector} div[data-type='solution']").each do |solution|
15
- append_to.append(child: solution.cut.to_s)
16
- end
17
- end
18
- end
19
-
20
- # This method helps to obtain more strategy-specific params through
21
- # "strategy_options: {blah1: 1, blah2: 2}"
22
- def initialize(strategy_options)
23
- @selectors = strategy_options[:selectors] || (raise 'missing selectors for strategy')
24
- end
25
- end
26
- end
27
- end
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kitchen::Directions::MoveSolutionsToAnswerKey
4
- module Strategies
5
- class Precalculus
6
- def bake(chapter:, append_to:)
7
- try_note_solutions(chapter: chapter, append_to: append_to)
8
-
9
- # Bake section exercises
10
- chapter.non_introduction_pages.each do |page|
11
- number = "#{chapter.count_in(:book)}.#{page.count_in(:chapter)}"
12
- Kitchen::Directions::MoveSolutionsFromExerciseSection.v1(
13
- chapter: page, append_to: append_to, section_class: 'section-exercises',
14
- title_number: number
15
- )
16
- end
17
-
18
- # Bake other types of exercises
19
- classes = %w[review-exercises practice-test]
20
- classes.each do |klass|
21
- Kitchen::Directions::MoveSolutionsFromExerciseSection.v1(
22
- chapter: chapter, append_to: append_to, section_class: klass
23
- )
24
- end
25
- end
26
-
27
- protected
28
-
29
- def try_note_solutions(chapter:, append_to:)
30
- append_to.append(child:
31
- <<~HTML
32
- <div class="os-module-reset-solution-area os-try-solution-area">
33
- <h3 data-type="title">
34
- <span class="os-title-label">#{I18n.t(:"notes.try")}</span>
35
- </h3>
36
- </div>
37
- HTML
38
- )
39
- chapter.pages.each do |page|
40
- solutions = Kitchen::Clipboard.new
41
- page.notes('$.try').each do |note|
42
- note.exercises.each do |exercise|
43
- solution = exercise.solution
44
- solution&.cut(to: solutions)
45
- end
46
- end
47
- next if solutions.items.empty?
48
-
49
- title_snippet = Kitchen::Directions::EocSectionTitleLinkSnippet.v1(
50
- page: page,
51
- wrapper: 'div'
52
- )
53
-
54
- append_to.first('div.os-try-solution-area').append(child:
55
- Kitchen::Directions::SolutionAreaSnippet.v1(
56
- title: title_snippet, solutions_clipboard: solutions
57
- )
58
- )
59
- end
60
- end
61
- end
62
- end
63
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kitchen::Directions::MoveSolutionsToAnswerKey
4
- module Strategies
5
- class UPhysics
6
- def bake(chapter:, append_to:)
7
- Kitchen::Directions::MoveSolutionsFromNumberedNote.v1(
8
- chapter: chapter, append_to: append_to, note_class: 'check-understanding'
9
- )
10
-
11
- classes = %w[review-conceptual-questions review-problems review-additional-problems
12
- review-challenge]
13
- classes.each do |klass|
14
- Kitchen::Directions::MoveSolutionsFromExerciseSection.v1(
15
- chapter: chapter, append_to: append_to, section_class: klass
16
- )
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kitchen::Directions::MoveSolutionsToAnswerKey
4
- class V1
5
- # rubocop:disable Metrics/ParameterLists
6
- # This direction may need refactoring to simplify parameters
7
- def bake(chapter:, metadata_source:, strategy:, append_to:, strategy_options: {},
8
- solutions_plural: true)
9
- strategy =
10
- case strategy
11
- when :calculus
12
- Strategies::Calculus.new
13
- when :contemporary_math
14
- Strategies::ContemporaryMath.new
15
- when :uphysics
16
- Strategies::UPhysics.new
17
- when :precalculus
18
- Strategies::Precalculus.new
19
- when :default
20
- Strategies::Default.new(strategy_options)
21
- else
22
- raise 'No such strategy'
23
- end
24
-
25
- solutions_or_solution = solutions_plural ? 'solutions' : 'solution'
26
- uuid_key = ".#{solutions_or_solution}#{chapter.count_in(:book)}"
27
- append_to.append(child:
28
- <<~HTML
29
- <div class="os-eob os-#{solutions_or_solution}-container" data-type="composite-page" \
30
- data-uuid-key="#{uuid_key}">
31
- <h2 data-type="document-title">
32
- <span class="os-text">#{I18n.t(:chapter)} #{chapter.count_in(:book)}</span>
33
- </h2>
34
- <div data-type="metadata" style="display: none;">
35
- <h1 data-type="document-title" itemprop="name">#{I18n.t(:chapter)} #{chapter.count_in(:book)}</h1>
36
- #{metadata_source.children_to_keep.copy.paste}
37
- </div>
38
- </div>
39
- HTML
40
- )
41
- strategy.bake(
42
- chapter: chapter, append_to: append_to.first("div[data-uuid-key='#{uuid_key}']")
43
- )
44
- end
45
- # rubocop:enable Metrics/ParameterLists
46
- end
47
- end