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
|