openstax_kitchen 11.0.0 → 11.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/Gemfile.lock +1 -1
- data/lib/kitchen/composite_page_element.rb +8 -0
- data/lib/kitchen/directions/bake_chapter_introductions/bake_chapter_objectives.rb +46 -0
- data/lib/kitchen/directions/bake_chapter_introductions/bake_chapter_outline.rb +14 -0
- data/lib/kitchen/directions/bake_chapter_introductions/main.rb +43 -0
- data/lib/kitchen/directions/bake_chapter_introductions/v1.rb +56 -0
- data/lib/kitchen/directions/bake_chapter_introductions/v2.rb +91 -0
- data/lib/kitchen/directions/bake_custom_sections/main.rb +14 -0
- data/lib/kitchen/directions/bake_custom_sections/v1.rb +42 -0
- data/lib/kitchen/directions/bake_equations.rb +2 -3
- data/lib/kitchen/directions/bake_example.rb +4 -5
- data/lib/kitchen/directions/bake_figure.rb +5 -3
- data/lib/kitchen/directions/bake_iframes/main.rb +11 -0
- data/lib/kitchen/directions/bake_iframes/v1.rb +25 -0
- data/lib/kitchen/directions/bake_index/main.rb +2 -2
- data/lib/kitchen/directions/bake_index/v1.rb +39 -7
- data/lib/kitchen/directions/bake_index/v1.xhtml.erb +3 -3
- data/lib/kitchen/directions/bake_injected_exercise.rb +18 -0
- data/lib/kitchen/directions/bake_injected_exercise_question.rb +71 -0
- data/lib/kitchen/directions/bake_link_placeholders.rb +15 -2
- data/lib/kitchen/directions/bake_lists_with_para.rb +3 -3
- data/lib/kitchen/directions/bake_notes/bake_autotitled_notes.rb +5 -5
- data/lib/kitchen/directions/bake_notes/bake_note_subtitle.rb +6 -2
- data/lib/kitchen/directions/bake_notes/bake_numbered_notes/main.rb +13 -3
- data/lib/kitchen/directions/bake_notes/bake_numbered_notes/v1.rb +29 -25
- data/lib/kitchen/directions/bake_notes/bake_numbered_notes/v2.rb +22 -17
- data/lib/kitchen/directions/bake_notes/bake_numbered_notes/v3.rb +27 -22
- data/lib/kitchen/directions/bake_numbered_exercise/main.rb +3 -2
- data/lib/kitchen/directions/bake_numbered_exercise/v1.rb +6 -24
- data/lib/kitchen/directions/bake_numbered_table/bake_table_body.rb +3 -3
- data/lib/kitchen/directions/bake_numbered_table/main.rb +4 -4
- data/lib/kitchen/directions/bake_numbered_table/v1.rb +3 -3
- data/lib/kitchen/directions/bake_numbered_table/v2.rb +3 -3
- data/lib/kitchen/directions/bake_toc.rb +1 -1
- data/lib/kitchen/directions/move_solutions_to_answer_key/move_solutions_from_exercise_section.rb +1 -7
- data/lib/kitchen/directions/move_solutions_to_answer_key/move_solutions_from_numbered_note.rb +1 -7
- data/lib/kitchen/directions/move_solutions_to_answer_key/strategies/contemporary_math.rb +17 -0
- data/lib/kitchen/element_base.rb +38 -2
- data/lib/kitchen/element_enumerator_base.rb +35 -0
- data/lib/kitchen/injected_question_element.rb +77 -0
- data/lib/kitchen/injected_question_element_enumerator.rb +21 -0
- data/lib/kitchen/selectors/base.rb +6 -0
- data/lib/kitchen/selectors/standard_1.rb +3 -0
- data/lib/kitchen/solution_element_enumerator.rb +21 -0
- data/lib/kitchen/version.rb +1 -1
- data/lib/locales/en.yml +6 -4
- data/lib/locales/es.yml +5 -4
- data/lib/locales/pl.yml +52 -7
- metadata +17 -6
- data/lib/kitchen/directions/bake_chapter_introductions/chapter_introduction.xhtml.erb +0 -0
- data/lib/kitchen/directions/bake_chapter_introductions.rb +0 -65
- data/lib/kitchen/directions/bake_notes/bake_note_iframes.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4340461612470e8ddff3976af6bf342821a18f1e01c70d5c6d4dcbf08636ac24
|
4
|
+
data.tar.gz: 293967ff3cf8af70f6d9d5f5d20866c77608af41c279590b3abb39966813f048
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70eedaaa535e97066b5b5b0d80e9c8916ffb6de5ecdf063f7a58d2c984253771742832278e53f5ce8bea3f0f3c7cbdd97da058258e5ace42dda0da372243ff2d
|
7
|
+
data.tar.gz: 72001901b5c82c46bd835521d9a815d178cc6bcea04502fd6b9b10bf36309ed42028b92714fd003e1a0042c60ce9eb4ab505dc627d8dd763f9c6892ff1fee7ea
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [11.1.0] - 2021-08-30
|
10
|
+
|
11
|
+
* Update injected questions to synthesize ids during baking (minor)
|
12
|
+
* Fix `BakeListsWithPara` to copy all children from para not just text (minor)
|
13
|
+
* Implement labels with cases to `BakeAutotitledNotes` and `BakeNumberedNotes` (minor)
|
14
|
+
* Add ids to injected questions (minor)
|
15
|
+
* Create `BakeIframes` outer directory to allow bake iframes also from outside notes, remove `BakeNoteIFrames` module from notes directory (minor)
|
16
|
+
* Update the contemporary math `Strategy` to target injected solution sections (minor)
|
17
|
+
* Update `BakeNumberedNotes` to handle injected questions in notes (minor)
|
18
|
+
* Create `InjectedQuestionElement` and `InjectedQuestionElementEnumerator` classes (minor)
|
19
|
+
* Create `BakeInjectedExercise` and `BakeInjectedExerciseQuestion` directions (minor)
|
20
|
+
* Update `MoveSolutionsFromExerciseSection` and `MoveSolutionsFromNumberedNote` to move injected solutions (minor)
|
21
|
+
* Add `SolutionElementEnumerator` to support the above (minor)
|
22
|
+
* Remove multipart exercise baking from `BakeNumberedExercise`; this is now done in `InjectedExercise` directions (patch)
|
23
|
+
* Modify target labels to use grammatical cases (minor)
|
24
|
+
* Modify `BakeIndex` to bake multiple types of indexes (minor)
|
25
|
+
* Create `v2` in `BakeChapterIntroductions` that should replace `v1` (minor)
|
26
|
+
* Added a DEPRECATION warning in `v1` for `BakeChapterIntroductions` (minor)
|
27
|
+
* Added a bit more description to deprecation warning for `BakeChapterIntroductions.v1` (minor)
|
28
|
+
|
9
29
|
## [11.0.0] - 2021-08-6
|
10
30
|
|
11
31
|
* Add `ChangeSubsectionTitleTag` direction for modifying eoc sections (minor)
|
@@ -20,6 +40,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
20
40
|
* Adds `PageElement#count_in_chapter_without_intro_page` (minor)
|
21
41
|
* Adds `ChapterElement#has_introduction?` (minor)
|
22
42
|
* Adds `BakeFolio` to set spanish translation variables in the html tag for folio-pdf purposes (minor)
|
43
|
+
* Create `BakeCustomSections` direction for English Composition (minor)
|
23
44
|
* Create `BakeAnnotationClasses` v1 for English Composition (minor)
|
24
45
|
|
25
46
|
## [10.0.0] - 2021-07-30
|
data/Gemfile.lock
CHANGED
@@ -41,6 +41,14 @@ module Kitchen
|
|
41
41
|
has_class?('os-index-container')
|
42
42
|
end
|
43
43
|
|
44
|
+
# Returns true if this page is a book index of type
|
45
|
+
#
|
46
|
+
# @return [Boolean]
|
47
|
+
#
|
48
|
+
def is_index_of_type?
|
49
|
+
(self[:class] || '').match?(/os-index-.+-container/)
|
50
|
+
end
|
51
|
+
|
44
52
|
# In books we can find two types of EOB References.
|
45
53
|
#
|
46
54
|
# One of them has form similar to footnotes. There are citation links in the text that provides
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen::Directions::BakeChapterIntroductions
|
4
|
+
class BakeChapterObjectives
|
5
|
+
def bake(chapter:, strategy:)
|
6
|
+
case strategy
|
7
|
+
when :default
|
8
|
+
bake_as_note(chapter: chapter)
|
9
|
+
when :add_objectives
|
10
|
+
add_chapter_objectives(chapter: chapter)
|
11
|
+
when :none
|
12
|
+
''
|
13
|
+
else
|
14
|
+
raise 'No such strategy'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def bake_as_note(chapter:)
|
19
|
+
chapter_objectives_note = chapter.notes('$.chapter-objectives').first
|
20
|
+
|
21
|
+
# trash existing title
|
22
|
+
chapter_objectives_note.titles.first&.trash
|
23
|
+
Kitchen::Directions::BakeAutotitledNotes.v1(
|
24
|
+
book: chapter,
|
25
|
+
classes: %w[chapter-objectives],
|
26
|
+
bake_subtitle: false
|
27
|
+
)
|
28
|
+
|
29
|
+
chapter_objectives_note.cut.paste
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_chapter_objectives(chapter:)
|
33
|
+
chapter.non_introduction_pages.map do |page|
|
34
|
+
<<~HTML
|
35
|
+
<div class="os-chapter-objective">
|
36
|
+
<a class="os-chapter-objective" href="##{page.title[:id]}">
|
37
|
+
<span class="os-number">#{chapter.count_in(:book)}.#{page.count_in(:chapter)}</span>
|
38
|
+
<span class="os-divider"> </span>
|
39
|
+
<span data-type="" itemprop="" class="os-text">#{page.title.children[0].text}</span>
|
40
|
+
</a>
|
41
|
+
</div>
|
42
|
+
HTML
|
43
|
+
end.join('')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen::Directions::BakeChapterIntroductions
|
4
|
+
class BakeChapterOutline
|
5
|
+
def bake(chapter_objectives_html:)
|
6
|
+
<<~HTML
|
7
|
+
<div class="os-chapter-outline">
|
8
|
+
<h3 class="os-title">#{I18n.t(:chapter_outline)}</h3>
|
9
|
+
#{chapter_objectives_html}
|
10
|
+
</div>
|
11
|
+
HTML
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen
|
4
|
+
module Directions
|
5
|
+
module BakeChapterIntroductions
|
6
|
+
def self.v1(book:)
|
7
|
+
V1.new.bake(
|
8
|
+
book: book
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.v2(
|
13
|
+
book:,
|
14
|
+
strategy_options: {
|
15
|
+
strategy: :default, bake_chapter_outline: false, introduction_order: :v1
|
16
|
+
}
|
17
|
+
)
|
18
|
+
V2.new.bake(
|
19
|
+
book: book,
|
20
|
+
strategy_options: strategy_options
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.bake_chapter_objectives(chapter:, strategy:)
|
25
|
+
BakeChapterObjectives.new.bake(
|
26
|
+
chapter: chapter,
|
27
|
+
strategy: strategy
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.bake_chapter_outline(chapter_objectives_html:)
|
32
|
+
BakeChapterOutline.new.bake(
|
33
|
+
chapter_objectives_html: chapter_objectives_html
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.v1_update_selectors(something_with_selectors)
|
38
|
+
something_with_selectors.selectors.title_in_introduction_page =
|
39
|
+
".intro-text > [data-type='document-title']"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen::Directions::BakeChapterIntroductions
|
4
|
+
class V1
|
5
|
+
def bake(book:)
|
6
|
+
# <b>DEPRECATED:</b> Please use <tt>v2</tt> instead.
|
7
|
+
warn '[DEPRECATION] `BakeChapterIntroductions.v1` is deprecated. Please use `v2` instead.'
|
8
|
+
|
9
|
+
book.chapters.each do |chapter|
|
10
|
+
introduction_page = chapter.introduction_page
|
11
|
+
|
12
|
+
introduction_page.search("div[data-type='description']").trash
|
13
|
+
introduction_page.search("div[data-type='abstract']").trash
|
14
|
+
|
15
|
+
title = introduction_page.title.cut
|
16
|
+
title.name = 'h2'
|
17
|
+
Kitchen::Directions::MoveTitleTextIntoSpan.v1(title: title)
|
18
|
+
|
19
|
+
intro_content = introduction_page.search(
|
20
|
+
"> :not([data-type='metadata']):not(.splash):not(.has-splash)"
|
21
|
+
).cut
|
22
|
+
|
23
|
+
chapter_objectives_html = chapter.non_introduction_pages.map do |page|
|
24
|
+
<<~HTML
|
25
|
+
<div class="os-chapter-objective">
|
26
|
+
<a class="os-chapter-objective" href="##{page.title[:id]}">
|
27
|
+
<span class="os-number">#{chapter.count_in(:book)}.#{page.count_in(:chapter)}</span>
|
28
|
+
<span class="os-divider"> </span>
|
29
|
+
<span data-type="" itemprop="" class="os-text">#{page.title.children[0].text}</span>
|
30
|
+
</a>
|
31
|
+
</div>
|
32
|
+
HTML
|
33
|
+
end.join('')
|
34
|
+
|
35
|
+
chapter_outline =
|
36
|
+
Kitchen::Directions::BakeChapterIntroductions.bake_chapter_outline(
|
37
|
+
chapter_objectives_html: chapter_objectives_html
|
38
|
+
)
|
39
|
+
|
40
|
+
introduction_page.append(child:
|
41
|
+
<<~HTML
|
42
|
+
<div class="intro-body">
|
43
|
+
#{chapter_outline}
|
44
|
+
<div class="intro-text">
|
45
|
+
#{title.paste}
|
46
|
+
#{intro_content.paste}
|
47
|
+
</div>
|
48
|
+
</div>
|
49
|
+
HTML
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
Kitchen::Directions::BakeChapterIntroductions.v1_update_selectors(book)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen::Directions::BakeChapterIntroductions
|
4
|
+
class V2
|
5
|
+
def bake(book:, strategy_options:)
|
6
|
+
book.chapters.each do |chapter|
|
7
|
+
introduction_page = chapter.introduction_page
|
8
|
+
title = bake_title(introduction_page: introduction_page)
|
9
|
+
|
10
|
+
chapter_intro_html =
|
11
|
+
Kitchen::Directions::BakeChapterIntroductions.bake_chapter_objectives(
|
12
|
+
chapter: chapter,
|
13
|
+
strategy: strategy_options[:strategy]
|
14
|
+
)
|
15
|
+
|
16
|
+
if strategy_options[:bake_chapter_outline]
|
17
|
+
chapter_intro_html =
|
18
|
+
Kitchen::Directions::BakeChapterIntroductions.bake_chapter_outline(
|
19
|
+
chapter_objectives_html: chapter_intro_html
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
case strategy_options[:introduction_order]
|
24
|
+
when :v1
|
25
|
+
v1_introduction_order(
|
26
|
+
introduction_page: introduction_page,
|
27
|
+
chapter_intro_html: chapter_intro_html,
|
28
|
+
title: title
|
29
|
+
)
|
30
|
+
when :v2
|
31
|
+
v2_introduction_order(
|
32
|
+
introduction_page: introduction_page,
|
33
|
+
chapter_intro_html: chapter_intro_html,
|
34
|
+
title: title
|
35
|
+
)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
Kitchen::Directions::BakeChapterIntroductions.v1_update_selectors(book)
|
40
|
+
end
|
41
|
+
|
42
|
+
def v1_introduction_order(introduction_page:, chapter_intro_html:, title:)
|
43
|
+
intro_content = introduction_page.search(
|
44
|
+
"> :not([data-type='metadata']):not(.splash):not(.has-splash)"
|
45
|
+
).cut
|
46
|
+
|
47
|
+
introduction_page.append(child:
|
48
|
+
<<~HTML
|
49
|
+
<div class="intro-body">
|
50
|
+
#{chapter_intro_html}
|
51
|
+
<div class="intro-text">
|
52
|
+
#{title.paste}
|
53
|
+
#{intro_content.paste}
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
HTML
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
def v2_introduction_order(introduction_page:, chapter_intro_html:, title:)
|
61
|
+
if chapter_intro_html.empty?
|
62
|
+
chapter_intro_html = introduction_page.notes('$.chapter-objectives').first&.cut&.paste
|
63
|
+
end
|
64
|
+
extra_content = introduction_page.search(
|
65
|
+
'> :not([data-type="metadata"]):not(.splash):not(.has-splash)'
|
66
|
+
).cut
|
67
|
+
|
68
|
+
introduction_page.append(child:
|
69
|
+
<<~HTML
|
70
|
+
<div class="intro-body">
|
71
|
+
#{chapter_intro_html}
|
72
|
+
<div class="intro-text">
|
73
|
+
#{title.paste}
|
74
|
+
#{extra_content.paste}
|
75
|
+
</div>
|
76
|
+
</div>
|
77
|
+
HTML
|
78
|
+
)
|
79
|
+
end
|
80
|
+
|
81
|
+
def bake_title(introduction_page:)
|
82
|
+
introduction_page.search(
|
83
|
+
'div[data-type="description"], div[data-type="abstract"]'
|
84
|
+
).each(&:trash)
|
85
|
+
|
86
|
+
title = introduction_page.title.cut
|
87
|
+
title.name = 'h2'
|
88
|
+
Kitchen::Directions::MoveTitleTextIntoSpan.v1(title: title)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen
|
4
|
+
module Directions
|
5
|
+
module BakeCustomSections
|
6
|
+
def self.v1(chapter:, custom_sections_properties:)
|
7
|
+
V1.new.bake(
|
8
|
+
chapter: chapter,
|
9
|
+
custom_sections_properties: custom_sections_properties
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen::Directions::BakeCustomSections
|
4
|
+
class V1
|
5
|
+
def bake(chapter:, custom_sections_properties:)
|
6
|
+
custom_sections_properties.each do |_custom_section_name, property|
|
7
|
+
title_text = I18n.t(:"custom-sections.#{property[:class]}")
|
8
|
+
property_class = property[:class]
|
9
|
+
inject = property[:inject]
|
10
|
+
chapter.search(".#{property_class}").each do |custom_section|
|
11
|
+
|
12
|
+
case inject
|
13
|
+
when 'title'
|
14
|
+
custom_section_title = custom_section.first('h2')
|
15
|
+
custom_section_title_os_text = custom_section_title.first('.os-text')
|
16
|
+
custom_section_title_sibling = custom_section.first('h2 + div')
|
17
|
+
div_id = custom_section_title_sibling['id']
|
18
|
+
custom_section_title_sibling.trash
|
19
|
+
custom_section_title.append(sibling:
|
20
|
+
<<~HTML
|
21
|
+
<h3 class="os-subtitle" id="#{div_id}">#{custom_section_title_os_text.text}</h3>
|
22
|
+
HTML
|
23
|
+
)
|
24
|
+
custom_section_title_os_text.replace_children(with: title_text)
|
25
|
+
when 'subtitle'
|
26
|
+
custom_section_title = custom_section.titles.first
|
27
|
+
custom_section_title.name = 'h4'
|
28
|
+
custom_section_title.prepend(sibling:
|
29
|
+
<<~HTML
|
30
|
+
<h3 class="os-title">#{title_text}</h3>
|
31
|
+
HTML
|
32
|
+
)
|
33
|
+
when 'title_prefix'
|
34
|
+
custom_section_title = custom_section.titles.first
|
35
|
+
custom_section_title.replace_children(with: "#{title_text}: " +
|
36
|
+
custom_section_title.text)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -3,14 +3,13 @@
|
|
3
3
|
module Kitchen
|
4
4
|
module Directions
|
5
5
|
module BakeEquations
|
6
|
-
def self.v1(book:, number_decorator: :none)
|
6
|
+
def self.v1(book:, number_decorator: :none, cases: false)
|
7
7
|
book.chapters.search('div[data-type="equation"]:not(.unnumbered)').each do |eq|
|
8
8
|
chapter = eq.ancestor(:chapter)
|
9
9
|
number = "#{chapter.count_in(:book)}.#{eq.count_in(:chapter)}"
|
10
10
|
|
11
11
|
# Store label information
|
12
|
-
|
13
|
-
book.pantry(name: :link_text).store equation_label, label: eq.id
|
12
|
+
eq.target_label(label_text: 'equation', custom_content: number, cases: cases)
|
14
13
|
|
15
14
|
decorated_number =
|
16
15
|
case number_decorator
|
@@ -3,22 +3,21 @@
|
|
3
3
|
module Kitchen
|
4
4
|
module Directions
|
5
5
|
module BakeExample
|
6
|
-
def self.v1(example:, number:, title_tag:, numbered_solutions: false)
|
6
|
+
def self.v1(example:, number:, title_tag:, numbered_solutions: false, cases: false)
|
7
7
|
example.wrap_children(class: 'body')
|
8
8
|
|
9
9
|
example.prepend(child:
|
10
10
|
<<~HTML
|
11
11
|
<#{title_tag} class="os-title">
|
12
|
-
<span class="os-title-label">#{I18n.t(
|
12
|
+
<span class="os-title-label">#{I18n.t("example#{'.nominative' if cases}")} </span>
|
13
13
|
<span class="os-number">#{number}</span>
|
14
14
|
<span class="os-divider"> </span>
|
15
15
|
</#{title_tag}>
|
16
16
|
HTML
|
17
17
|
)
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
.store("#{I18n.t(:example_label)} #{number}", label: example.id)
|
19
|
+
# Store label information
|
20
|
+
example.target_label(label_text: 'example', custom_content: number, cases: cases)
|
22
21
|
|
23
22
|
example.titles_to_rename.each do |title|
|
24
23
|
title.name = 'h4'
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Kitchen
|
4
4
|
module Directions
|
5
5
|
module BakeFigure
|
6
|
-
def self.v1(figure:, number:)
|
6
|
+
def self.v1(figure:, number:, cases: false)
|
7
7
|
return if figure.has_class?('unnumbered') && !figure.has_class?('splash')
|
8
8
|
|
9
9
|
figure.wrap(%(<div class="os-figure#{' has-splash' if figure.has_class?('splash')}">))
|
@@ -19,14 +19,16 @@ module Kitchen
|
|
19
19
|
return
|
20
20
|
end
|
21
21
|
|
22
|
-
|
22
|
+
# Store label information
|
23
|
+
figure.target_label(label_text: 'figure', custom_content: number, cases: cases)
|
24
|
+
|
23
25
|
title = figure.title&.cut
|
24
26
|
|
25
27
|
caption = figure.caption&.cut
|
26
28
|
figure.append(sibling:
|
27
29
|
<<~HTML
|
28
30
|
<div class="os-caption-container">
|
29
|
-
<span class="os-title-label">#{I18n.t(
|
31
|
+
<span class="os-title-label">#{I18n.t("figure#{'.nominative' if cases}")} </span>
|
30
32
|
<span class="os-number">#{number}</span>
|
31
33
|
<span class="os-divider"> </span>
|
32
34
|
#{"<span class=\"os-title\" data-type=\"title\" id=\"#{title.id}\">#{title.children}</span>" if title}
|