openstax_kitchen 12.1.0 → 12.2.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.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +11 -0
 - data/Gemfile.lock +1 -1
 - data/lib/kitchen/directions/bake_injected_exercise/add_injected_exercise_id.rb +16 -0
 - data/lib/kitchen/directions/{bake_injected_exercise_question.rb → bake_injected_exercise/bake_injected_exercise_question.rb} +0 -0
 - data/lib/kitchen/directions/bake_notes/bake_autotitled_notes.rb +15 -3
 - data/lib/kitchen/directions/bake_numbered_table/bake_table_body.rb +3 -0
 - data/lib/kitchen/directions/bake_unnumbered_tables.rb +1 -0
 - data/lib/kitchen/directions/move_solutions_to_answer_key/v1.rb +3 -1
 - data/lib/kitchen/element_base.rb +2 -18
 - data/lib/kitchen/element_enumerator_base.rb +17 -0
 - data/lib/kitchen/note_element.rb +7 -1
 - data/lib/kitchen/table_element.rb +8 -0
 - data/lib/kitchen/version.rb +1 -1
 - data/lib/locales/en.yml +1 -0
 - metadata +4 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: f36305ee23acfe22fc13a9c06ee76f69243f1cd2cba33fe86c28c8c90b5eb36d
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: fd501ef342ff2c7334455cc214139581dadf1619fde7841a29650b4fc10acd79
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: e3b939d8a9851db4940213aae3350f720369eb794b8551627d2a44565af36aeda5ad701b62c2c1ec98fb7dcfabafa8bd2e4531642bf40dd777a635c0117560b6
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 5ec8d3e59faa619a3b23a84ce74514c96b6d360dc1b46d233cd1566b63815a5a7edaa73980f102b4c6656c603c43ea349fcc2eac99149cbafb8fa91d8f0e2fdc
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -6,6 +6,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 
     | 
|
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            ## [Unreleased]
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
      
 9 
     | 
    
         
            +
            ## [12.2.0] - 2021-10-1
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            * Add `context_lead_text` to translations (minor)
         
     | 
| 
      
 12 
     | 
    
         
            +
            * Make `ElementBase#search_with` callable from an `ElementEnumerator` (minor)
         
     | 
| 
      
 13 
     | 
    
         
            +
            * Support top-titled tables in `BakeUnnumberedTables` (minor)
         
     | 
| 
      
 14 
     | 
    
         
            +
            * Stop `NoteElement#title` from breaking for empty notes (patch)
         
     | 
| 
      
 15 
     | 
    
         
            +
            * Add text heavy tables to `BakeTableBody` (minor)
         
     | 
| 
      
 16 
     | 
    
         
            +
            * Modify `BakeAutotitledNotes` to bake unnumbered exercises with solution (minor)
         
     | 
| 
      
 17 
     | 
    
         
            +
            * Create `AddInjectedExerciseId` to separate creating ids from `BakeInjectedExerciseQuestion` (minor)
         
     | 
| 
      
 18 
     | 
    
         
            +
            * Rework `AddInjectedExerciseId` to use loop inside module (minor)
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       9 
20 
     | 
    
         
             
            ## [12.1.0] - 2021-09-24
         
     | 
| 
       10 
21 
     | 
    
         | 
| 
       11 
22 
     | 
    
         
             
            * Fix `BakeExample#titles_to_rename` to exclude exercise titles (patch)
         
     | 
    
        data/Gemfile.lock
    CHANGED
    
    
| 
         @@ -0,0 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Kitchen
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Directions
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Ids should be added before exercises are moved to EOC,
         
     | 
| 
      
 6 
     | 
    
         
            +
                # since they're using part of the ancestor page id.
         
     | 
| 
      
 7 
     | 
    
         
            +
                #
         
     | 
| 
      
 8 
     | 
    
         
            +
                # In some books exercises are numbered after moving.
         
     | 
| 
      
 9 
     | 
    
         
            +
                # That's why this step has to be separated from BakeInjectedExerciseQuestion
         
     | 
| 
      
 10 
     | 
    
         
            +
                module AddInjectedExerciseId
         
     | 
| 
      
 11 
     | 
    
         
            +
                  def self.v1(book:)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    book.pages.injected_questions.each(&:id)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
| 
         
            File without changes
         
     | 
| 
         @@ -37,10 +37,22 @@ module Kitchen 
     | 
|
| 
       37 
37 
     | 
    
         
             
                    note.exercises.each do |exercise|
         
     | 
| 
       38 
38 
     | 
    
         
             
                      exercise.problem.wrap_children('div', class: 'os-problem-container')
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
                      exercise. 
     | 
| 
      
 40 
     | 
    
         
            +
                      unless exercise.has_class?('unnumbered')
         
     | 
| 
      
 41 
     | 
    
         
            +
                        exercise.problem.prepend(child:
         
     | 
| 
      
 42 
     | 
    
         
            +
                          <<~HTML
         
     | 
| 
      
 43 
     | 
    
         
            +
                            <span class="os-title-label">#{I18n.t(:"exercises.exercise")} </span>
         
     | 
| 
      
 44 
     | 
    
         
            +
                            <span class="os-number">#{exercise.count_in(:note)}</span>
         
     | 
| 
      
 45 
     | 
    
         
            +
                          HTML
         
     | 
| 
      
 46 
     | 
    
         
            +
                        )
         
     | 
| 
      
 47 
     | 
    
         
            +
                      end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                      next unless exercise.solution
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                      exercise.solution.wrap_children('div', class: 'os-solution-container')
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                      exercise.solution.prepend(child:
         
     | 
| 
       41 
54 
     | 
    
         
             
                        <<~HTML
         
     | 
| 
       42 
     | 
    
         
            -
                          <span class="os-title-label">#{I18n.t(:"exercises. 
     | 
| 
       43 
     | 
    
         
            -
                          <span class="os-number">#{exercise.count_in(:note)}</span>
         
     | 
| 
      
 55 
     | 
    
         
            +
                          <span class="os-title-label">#{I18n.t(:"exercises.solution")}</span>
         
     | 
| 
       44 
56 
     | 
    
         
             
                        HTML
         
     | 
| 
       45 
57 
     | 
    
         
             
                      )
         
     | 
| 
       46 
58 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -62,6 +62,9 @@ module Kitchen 
     | 
|
| 
       62 
62 
     | 
    
         
             
                      elsif table.column_header?
         
     | 
| 
       63 
63 
     | 
    
         
             
                        custom_table = CustomBody.new(table: table, klass: 'column-header')
         
     | 
| 
       64 
64 
     | 
    
         
             
                        custom_table.modify_body(has_fake_title: false)
         
     | 
| 
      
 65 
     | 
    
         
            +
                      elsif table.text_heavy?
         
     | 
| 
      
 66 
     | 
    
         
            +
                        custom_table = CustomBody.new(table: table, klass: 'text-heavy')
         
     | 
| 
      
 67 
     | 
    
         
            +
                        custom_table.modify_body(has_fake_title: false)
         
     | 
| 
       65 
68 
     | 
    
         
             
                      end
         
     | 
| 
       66 
69 
     | 
    
         
             
                    end
         
     | 
| 
       67 
70 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -9,6 +9,7 @@ module Kitchen 
     | 
|
| 
       9 
9 
     | 
    
         
             
                      table.remove_attribute('summary')
         
     | 
| 
       10 
10 
     | 
    
         
             
                      table.parent.add_class('os-unstyled-container') if table.unstyled?
         
     | 
| 
       11 
11 
     | 
    
         
             
                      table.parent.add_class('os-column-header-container') if table.column_header?
         
     | 
| 
      
 12 
     | 
    
         
            +
                      table.parent.add_class('os-top-titled-container') if table.top_titled?
         
     | 
| 
       12 
13 
     | 
    
         
             
                    end
         
     | 
| 
       13 
14 
     | 
    
         
             
                  end
         
     | 
| 
       14 
15 
     | 
    
         
             
                end
         
     | 
| 
         @@ -38,7 +38,9 @@ module Kitchen::Directions::MoveSolutionsToAnswerKey 
     | 
|
| 
       38 
38 
     | 
    
         
             
                      </div>
         
     | 
| 
       39 
39 
     | 
    
         
             
                    HTML
         
     | 
| 
       40 
40 
     | 
    
         
             
                  )
         
     | 
| 
       41 
     | 
    
         
            -
                  strategy.bake( 
     | 
| 
      
 41 
     | 
    
         
            +
                  strategy.bake(
         
     | 
| 
      
 42 
     | 
    
         
            +
                    chapter: chapter, append_to: append_to.first("div[data-uuid-key='#{uuid_key}']")
         
     | 
| 
      
 43 
     | 
    
         
            +
                  )
         
     | 
| 
       42 
44 
     | 
    
         
             
                end
         
     | 
| 
       43 
45 
     | 
    
         
             
                # rubocop:enable Metrics/ParameterLists
         
     | 
| 
       44 
46 
     | 
    
         
             
              end
         
     | 
    
        data/lib/kitchen/element_base.rb
    CHANGED
    
    | 
         @@ -427,23 +427,6 @@ module Kitchen 
     | 
|
| 
       427 
427 
     | 
    
         
             
                  )
         
     | 
| 
       428 
428 
     | 
    
         
             
                end
         
     | 
| 
       429 
429 
     | 
    
         | 
| 
       430 
     | 
    
         
            -
                # Searches for elements handled by a list of enumerator classes.  All element that
         
     | 
| 
       431 
     | 
    
         
            -
                # matches one of those enumerator classes are iterated over.
         
     | 
| 
       432 
     | 
    
         
            -
                #
         
     | 
| 
       433 
     | 
    
         
            -
                # @param enumerator_classes [Array<ElementEnumeratorBase>]
         
     | 
| 
       434 
     | 
    
         
            -
                # @return [TypeCastingElementEnumerator]
         
     | 
| 
       435 
     | 
    
         
            -
                #
         
     | 
| 
       436 
     | 
    
         
            -
                def search_with(*enumerator_classes)
         
     | 
| 
       437 
     | 
    
         
            -
                  block_error_if(block_given?)
         
     | 
| 
       438 
     | 
    
         
            -
                  raise 'must supply at least one enumerator class' if enumerator_classes.empty?
         
     | 
| 
       439 
     | 
    
         
            -
             
     | 
| 
       440 
     | 
    
         
            -
                  factory = enumerator_classes[0].factory
         
     | 
| 
       441 
     | 
    
         
            -
                  enumerator_classes[1..-1].each do |enumerator_class|
         
     | 
| 
       442 
     | 
    
         
            -
                    factory = factory.or_with(enumerator_class.factory)
         
     | 
| 
       443 
     | 
    
         
            -
                  end
         
     | 
| 
       444 
     | 
    
         
            -
                  factory.build_within(self)
         
     | 
| 
       445 
     | 
    
         
            -
                end
         
     | 
| 
       446 
     | 
    
         
            -
             
     | 
| 
       447 
430 
     | 
    
         
             
                # Removes the element from its parent and places it on the specified clipboard
         
     | 
| 
       448 
431 
     | 
    
         
             
                #
         
     | 
| 
       449 
432 
     | 
    
         
             
                # @param to [Symbol, String, Clipboard, nil] the name of the clipboard (or a Clipboard
         
     | 
| 
         @@ -770,7 +753,8 @@ module Kitchen 
     | 
|
| 
       770 
753 
     | 
    
         
             
                #   Returns a pages enumerator
         
     | 
| 
       771 
754 
     | 
    
         
             
                def_delegators :as_enumerator, :pages, :chapters, :terms, :figures, :notes, :tables, :examples,
         
     | 
| 
       772 
755 
     | 
    
         
             
                               :metadatas, :non_introduction_pages, :units, :titles, :exercises, :references,
         
     | 
| 
       773 
     | 
    
         
            -
                               :composite_pages, :composite_chapters, :solutions, :injected_questions
         
     | 
| 
      
 756 
     | 
    
         
            +
                               :composite_pages, :composite_chapters, :solutions, :injected_questions,
         
     | 
| 
      
 757 
     | 
    
         
            +
                               :search_with
         
     | 
| 
       774 
758 
     | 
    
         | 
| 
       775 
759 
     | 
    
         
             
                # Returns this element as an enumerator (over only one element, itself)
         
     | 
| 
       776 
760 
     | 
    
         
             
                #
         
     | 
| 
         @@ -327,6 +327,23 @@ module Kitchen 
     | 
|
| 
       327 
327 
     | 
    
         
             
                  chain_to(ElementEnumerator, css_or_xpath: css_or_xpath, only: only, except: except)
         
     | 
| 
       328 
328 
     | 
    
         
             
                end
         
     | 
| 
       329 
329 
     | 
    
         | 
| 
      
 330 
     | 
    
         
            +
                # Searches for elements handled by a list of enumerator classes.  All element that
         
     | 
| 
      
 331 
     | 
    
         
            +
                # matches one of those enumerator classes are iterated over.
         
     | 
| 
      
 332 
     | 
    
         
            +
                #
         
     | 
| 
      
 333 
     | 
    
         
            +
                # @param enumerator_classes [Array<ElementEnumeratorBase>]
         
     | 
| 
      
 334 
     | 
    
         
            +
                # @return [TypeCastingElementEnumerator]
         
     | 
| 
      
 335 
     | 
    
         
            +
                #
         
     | 
| 
      
 336 
     | 
    
         
            +
                def search_with(*enumerator_classes)
         
     | 
| 
      
 337 
     | 
    
         
            +
                  block_error_if(block_given?)
         
     | 
| 
      
 338 
     | 
    
         
            +
                  raise 'must supply at least one enumerator class' if enumerator_classes.empty?
         
     | 
| 
      
 339 
     | 
    
         
            +
             
     | 
| 
      
 340 
     | 
    
         
            +
                  factory = enumerator_classes[0].factory
         
     | 
| 
      
 341 
     | 
    
         
            +
                  enumerator_classes[1..-1].each do |enumerator_class|
         
     | 
| 
      
 342 
     | 
    
         
            +
                    factory = factory.or_with(enumerator_class.factory)
         
     | 
| 
      
 343 
     | 
    
         
            +
                  end
         
     | 
| 
      
 344 
     | 
    
         
            +
                  factory.build_within(self)
         
     | 
| 
      
 345 
     | 
    
         
            +
                end
         
     | 
| 
      
 346 
     | 
    
         
            +
             
     | 
| 
       330 
347 
     | 
    
         
             
                # Returns an enumerator that iterates through elements within the scope of this enumerator
         
     | 
| 
       331 
348 
     | 
    
         
             
                #
         
     | 
| 
       332 
349 
     | 
    
         
             
                # @param enumerator_class [ElementEnumeratorBase] the enumerator to use for the iteration
         
     | 
    
        data/lib/kitchen/note_element.rb
    CHANGED
    
    | 
         @@ -33,7 +33,9 @@ module Kitchen 
     | 
|
| 
       33 
33 
     | 
    
         
             
                  # 1. it is the note body's first child
         
     | 
| 
       34 
34 
     | 
    
         
             
                  # 2. it is the first child's first child and the first child is a paragraph
         
     | 
| 
       35 
35 
     | 
    
         
             
                  first_child = first_note_body_child
         
     | 
| 
       36 
     | 
    
         
            -
                   
     | 
| 
      
 36 
     | 
    
         
            +
                  return unless first_child
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                  first_grandchild = get_first_grandchild_for_title(first_child)
         
     | 
| 
       37 
39 
     | 
    
         | 
| 
       38 
40 
     | 
    
         
             
                  if first_child.data_type == 'title'
         
     | 
| 
       39 
41 
     | 
    
         
             
                    first_child
         
     | 
| 
         @@ -47,6 +49,10 @@ module Kitchen 
     | 
|
| 
       47 
49 
     | 
    
         
             
                  note_body ? note_body.element_children[0] : element_children[0]
         
     | 
| 
       48 
50 
     | 
    
         
             
                end
         
     | 
| 
       49 
51 
     | 
    
         | 
| 
      
 52 
     | 
    
         
            +
                def get_first_grandchild_for_title(first_child)
         
     | 
| 
      
 53 
     | 
    
         
            +
                  first_child&.element_children&.[](0) if first_child.name == 'p'
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
       50 
56 
     | 
    
         
             
                # Returns true if the note's title is autogenerated
         
     | 
| 
       51 
57 
     | 
    
         
             
                #
         
     | 
| 
       52 
58 
     | 
    
         
             
                # @return [Boolean]
         
     | 
| 
         @@ -97,6 +97,14 @@ module Kitchen 
     | 
|
| 
       97 
97 
     | 
    
         
             
                  has_class?('column-header')
         
     | 
| 
       98 
98 
     | 
    
         
             
                end
         
     | 
| 
       99 
99 
     | 
    
         | 
| 
      
 100 
     | 
    
         
            +
                # Returns true if the table is text heavy
         
     | 
| 
      
 101 
     | 
    
         
            +
                #
         
     | 
| 
      
 102 
     | 
    
         
            +
                # @return [Boolean]
         
     | 
| 
      
 103 
     | 
    
         
            +
                #
         
     | 
| 
      
 104 
     | 
    
         
            +
                def text_heavy?
         
     | 
| 
      
 105 
     | 
    
         
            +
                  has_class?('text-heavy')
         
     | 
| 
      
 106 
     | 
    
         
            +
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
       100 
108 
     | 
    
         
             
                # Returns an element for the table caption, if present
         
     | 
| 
       101 
109 
     | 
    
         
             
                #
         
     | 
| 
       102 
110 
     | 
    
         
             
                # @return [Element, nil]
         
     | 
    
        data/lib/kitchen/version.rb
    CHANGED
    
    
    
        data/lib/locales/en.yml
    CHANGED
    
    
    
        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: 12. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 12.2.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- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-10-01 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activesupport
         
     | 
| 
         @@ -294,7 +294,8 @@ files: 
     | 
|
| 
       294 
294 
     | 
    
         
             
            - lib/kitchen/directions/bake_index/v1.rb
         
     | 
| 
       295 
295 
     | 
    
         
             
            - lib/kitchen/directions/bake_index/v1.xhtml.erb
         
     | 
| 
       296 
296 
     | 
    
         
             
            - lib/kitchen/directions/bake_injected_exercise.rb
         
     | 
| 
       297 
     | 
    
         
            -
            - lib/kitchen/directions/ 
     | 
| 
      
 297 
     | 
    
         
            +
            - lib/kitchen/directions/bake_injected_exercise/add_injected_exercise_id.rb
         
     | 
| 
      
 298 
     | 
    
         
            +
            - lib/kitchen/directions/bake_injected_exercise/bake_injected_exercise_question.rb
         
     | 
| 
       298 
299 
     | 
    
         
             
            - lib/kitchen/directions/bake_inline_lists.rb
         
     | 
| 
       299 
300 
     | 
    
         
             
            - lib/kitchen/directions/bake_learning_objectives.rb
         
     | 
| 
       300 
301 
     | 
    
         
             
            - lib/kitchen/directions/bake_link_placeholders.rb
         
     |