openstax_kitchen 3.0.0 → 3.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 -3
- data/Gemfile.lock +1 -1
- data/README.md +7 -0
- data/lib/kitchen/directions/bake_book_answer_key/eob_solutions_container.xhtml.erb +9 -0
- data/lib/kitchen/directions/bake_book_answer_key/main.rb +11 -0
- data/lib/kitchen/directions/bake_book_answer_key/v1.rb +13 -0
- data/lib/kitchen/directions/bake_chapter_answer_key/main.rb +14 -0
- data/lib/kitchen/directions/bake_chapter_answer_key/strategies/calculus.rb +41 -0
- data/lib/kitchen/directions/bake_chapter_answer_key/strategies/uphysics.rb +61 -0
- data/lib/kitchen/directions/bake_chapter_answer_key/v1.rb +32 -0
- data/lib/kitchen/directions/bake_chapter_glossary.rb +4 -2
- data/lib/kitchen/directions/bake_chapter_key_concepts/key_concepts.xhtml.erb +16 -0
- data/lib/kitchen/directions/bake_chapter_key_concepts/main.rb +11 -0
- data/lib/kitchen/directions/bake_chapter_key_concepts/v1.rb +30 -0
- data/lib/kitchen/directions/bake_chapter_key_equations.rb +4 -2
- data/lib/kitchen/directions/bake_chapter_review/chapter_review.xhtml.erb +9 -0
- data/lib/kitchen/directions/bake_chapter_review/main.rb +11 -0
- data/lib/kitchen/directions/bake_chapter_review/v1.rb +13 -0
- data/lib/kitchen/directions/bake_chapter_review_exercises/main.rb +15 -0
- data/lib/kitchen/directions/bake_chapter_review_exercises/review_exercises.xhtml.erb +10 -0
- data/lib/kitchen/directions/bake_chapter_review_exercises/v1.rb +38 -0
- data/lib/kitchen/directions/bake_chapter_review_exercises/v2.rb +50 -0
- data/lib/kitchen/directions/bake_chapter_section_exercises/main.rb +11 -0
- data/lib/kitchen/directions/bake_chapter_section_exercises/v1.rb +28 -0
- data/lib/kitchen/directions/bake_chapter_summary.rb +1 -1
- data/lib/kitchen/directions/bake_checkpoint.rb +44 -0
- data/lib/kitchen/directions/bake_composite_chapters.rb +14 -0
- data/lib/kitchen/directions/bake_equations.rb +27 -0
- data/lib/kitchen/directions/bake_example.rb +29 -7
- data/lib/kitchen/directions/bake_exercises/main.rb +1 -0
- data/lib/kitchen/directions/bake_exercises/v1.rb +34 -31
- data/lib/kitchen/directions/bake_non_introduction_pages.rb +26 -0
- data/lib/kitchen/directions/bake_notes/bake_autotitled_notes.rb +29 -0
- data/lib/kitchen/directions/bake_notes/bake_note_subtitle.rb +18 -0
- data/lib/kitchen/directions/{bake_notes.rb → bake_notes/bake_notes.rb} +6 -16
- data/lib/kitchen/directions/bake_notes/bake_numbered_notes.rb +63 -0
- data/lib/kitchen/directions/bake_notes/bake_unclassified_notes.rb +30 -0
- data/lib/kitchen/directions/bake_numbered_exercise/main.rb +11 -0
- data/lib/kitchen/directions/bake_numbered_exercise/v1.rb +34 -0
- data/lib/kitchen/directions/bake_numbered_table/main.rb +2 -2
- data/lib/kitchen/directions/bake_numbered_table/v1.rb +17 -3
- data/lib/kitchen/directions/bake_page_abstracts.rb +16 -0
- data/lib/kitchen/directions/bake_problem_first_elements.rb +16 -0
- data/lib/kitchen/directions/bake_stepwise.rb +1 -5
- data/lib/kitchen/directions/bake_theorem/main.rb +11 -0
- data/lib/kitchen/directions/bake_theorem/v1.rb +28 -0
- data/lib/kitchen/directions/bake_toc.rb +6 -0
- data/lib/kitchen/directions/eoc_section_title_link_snippet.rb +20 -0
- data/lib/kitchen/element_base.rb +40 -1
- data/lib/kitchen/element_enumerator_base.rb +87 -8
- data/lib/kitchen/exercise_element.rb +45 -0
- data/lib/kitchen/exercise_element_enumerator.rb +21 -0
- data/lib/kitchen/note_element.rb +17 -16
- data/lib/kitchen/page_element.rb +8 -0
- data/lib/kitchen/recipe.rb +35 -2
- data/lib/kitchen/version.rb +1 -1
- data/lib/locales/en.yml +9 -7
- data/lib/locales/pl.yml +24 -0
- data/lib/openstax_kitchen.rb +1 -1
- metadata +39 -3
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen::Directions::BakeChapterReviewExercises
|
4
|
+
class V1
|
5
|
+
renderable
|
6
|
+
|
7
|
+
def bake(chapter:, metadata_source:, append_to:, klass:)
|
8
|
+
@klass = klass
|
9
|
+
@metadata = metadata_source.children_to_keep.copy
|
10
|
+
@title = I18n.t(:"eoc.#{klass}")
|
11
|
+
|
12
|
+
exercise_clipboard = Kitchen::Clipboard.new
|
13
|
+
|
14
|
+
chapter.non_introduction_pages.each do |page|
|
15
|
+
sections = page.search("section.#{@klass}")
|
16
|
+
|
17
|
+
sections.each do |exercise_section|
|
18
|
+
exercise_section.first("[data-type='title']")&.trash
|
19
|
+
|
20
|
+
exercise_section.exercises.each do |exercise|
|
21
|
+
exercise.document.pantry(name: :link_text).store(
|
22
|
+
"#{I18n.t(:exercise_label)} #{chapter.count_in(:book)}.#{exercise.count_in(:chapter)}",
|
23
|
+
label: exercise.id
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
exercise_section.cut(to: exercise_clipboard)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
return if exercise_clipboard.none?
|
32
|
+
|
33
|
+
@content = exercise_clipboard.paste
|
34
|
+
|
35
|
+
append_to.append(child: render(file: 'review_exercises.xhtml.erb'))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen::Directions::BakeChapterReviewExercises
|
4
|
+
# Main difference from v1 is the presence of a section title
|
5
|
+
# and some additional wrappers
|
6
|
+
class V2
|
7
|
+
renderable
|
8
|
+
|
9
|
+
def bake(chapter:, metadata_source:, append_to:, klass:)
|
10
|
+
@klass = klass
|
11
|
+
@metadata = metadata_source.children_to_keep.copy
|
12
|
+
@title = I18n.t(:"eoc.#{klass}")
|
13
|
+
|
14
|
+
exercise_clipboard = Kitchen::Clipboard.new
|
15
|
+
|
16
|
+
chapter.non_introduction_pages.each do |page|
|
17
|
+
sections = page.search("section.#{@klass}")
|
18
|
+
|
19
|
+
sections.each do |exercise_section|
|
20
|
+
exercise_section.first("[data-type='title']")&.trash
|
21
|
+
|
22
|
+
# Get parent page title
|
23
|
+
section_title = Kitchen::Directions::EocSectionTitleLinkSnippet.v1(page: page)
|
24
|
+
exercise_section.exercises.each do |exercise|
|
25
|
+
exercise.document.pantry(name: :link_text).store(
|
26
|
+
"#{I18n.t(:exercise_label)} #{chapter.count_in(:book)}.#{exercise.count_in(:chapter)}",
|
27
|
+
label: exercise.id
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Configure section title & wrappers
|
32
|
+
exercise_section.prepend(child: section_title)
|
33
|
+
exercise_section.wrap('<div class="os-section-area">')
|
34
|
+
exercise_section = exercise_section.parent
|
35
|
+
exercise_section.cut(to: exercise_clipboard)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
return if exercise_clipboard.none?
|
40
|
+
|
41
|
+
@content = <<~HTML
|
42
|
+
<div class="os-#{@klass}">
|
43
|
+
#{exercise_clipboard.paste}
|
44
|
+
</div>
|
45
|
+
HTML
|
46
|
+
|
47
|
+
append_to.append(child: render(file: 'review_exercises.xhtml.erb'))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen::Directions::BakeChapterSectionExercises
|
4
|
+
class V1
|
5
|
+
def bake(chapter:)
|
6
|
+
chapter.pages.each do |page|
|
7
|
+
page.search('section.section-exercises').each do |section|
|
8
|
+
section.wrap(
|
9
|
+
%(<div class="os-eos os-section-exercises-container"
|
10
|
+
data-uuid-key=".section-exercises">)
|
11
|
+
)
|
12
|
+
|
13
|
+
section_title = I18n.t(
|
14
|
+
:section_exercises,
|
15
|
+
number: "#{chapter.count_in(:book)}.#{section.count_in(:chapter)}")
|
16
|
+
|
17
|
+
section.prepend(sibling:
|
18
|
+
<<~HTML
|
19
|
+
<h3 data-type="document-title">
|
20
|
+
<span class="os-text">#{section_title}</span>
|
21
|
+
</h3>
|
22
|
+
HTML
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -11,7 +11,7 @@ module Kitchen
|
|
11
11
|
summaries = Clipboard.new
|
12
12
|
|
13
13
|
# TODO: include specific page types somehow without writing it out
|
14
|
-
chapter.
|
14
|
+
chapter.non_introduction_pages.each do |page|
|
15
15
|
summary = page.summary
|
16
16
|
summary.first("[data-type='title']")&.trash # get rid of old title if exists
|
17
17
|
summary_title = page.title.copy
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen
|
4
|
+
module Directions
|
5
|
+
module BakeCheckpoint
|
6
|
+
def self.v1(checkpoint:, number:)
|
7
|
+
checkpoint.wrap_children(class: 'os-note-body')
|
8
|
+
|
9
|
+
checkpoint.prepend(child:
|
10
|
+
<<~HTML
|
11
|
+
<div class="os-title">
|
12
|
+
<span class="os-title-label">#{I18n.t(:checkpoint)} </span>
|
13
|
+
<span class="os-number">#{number}</span>
|
14
|
+
<span class="os-divider"> </span>
|
15
|
+
</div>
|
16
|
+
HTML
|
17
|
+
)
|
18
|
+
|
19
|
+
exercise = checkpoint.exercises.first!
|
20
|
+
exercise.search("[data-type='commentary']").trash
|
21
|
+
|
22
|
+
problem = exercise.problem
|
23
|
+
problem.wrap_children(class: 'os-problem-container')
|
24
|
+
|
25
|
+
solution = exercise.solution
|
26
|
+
exercise.add_class('unnumbered') unless solution.present?
|
27
|
+
return unless solution.present?
|
28
|
+
|
29
|
+
solution.id = "#{exercise.id}-solution"
|
30
|
+
exercise.add_class('os-hasSolution')
|
31
|
+
|
32
|
+
solution.replace_children(with:
|
33
|
+
<<~HTML
|
34
|
+
<span class="os-divider"> </span>
|
35
|
+
<a class="os-number" href="##{exercise.id}">#{number}</a>
|
36
|
+
<div class="os-solution-container">#{solution.children}</div>
|
37
|
+
HTML
|
38
|
+
)
|
39
|
+
|
40
|
+
exercise.add_class('unnumbered')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen
|
4
|
+
module Directions
|
5
|
+
module BakeCompositeChapters
|
6
|
+
def self.v1(book:)
|
7
|
+
book.search("[data-type='composite-chapter']").each do |chapter|
|
8
|
+
chapter.first("[data-type='document-title']").id =
|
9
|
+
"composite-chapter-#{chapter.count_in(:book)}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen
|
4
|
+
module Directions
|
5
|
+
module BakeEquations
|
6
|
+
def self.v1(book:)
|
7
|
+
book.chapters.search('[data-type="equation"]:not(.unnumbered)').each do |eq|
|
8
|
+
chapter = eq.ancestor(:chapter)
|
9
|
+
number = "#{chapter.count_in(:book)}.#{eq.count_in(:chapter)}"
|
10
|
+
|
11
|
+
# Store label information
|
12
|
+
equation_label = "#{I18n.t(:equation)} #{number}"
|
13
|
+
book.document.pantry(name: :link_text).store equation_label, label: eq.id
|
14
|
+
|
15
|
+
# Bake the equation
|
16
|
+
eq.append(child:
|
17
|
+
<<~HTML
|
18
|
+
<div class="os-equation-number">
|
19
|
+
<span class="os-number">#{number}</span>
|
20
|
+
</div>
|
21
|
+
HTML
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -4,13 +4,7 @@ module Kitchen
|
|
4
4
|
module Directions
|
5
5
|
module BakeExample
|
6
6
|
def self.v1(example:, number:, title_tag:)
|
7
|
-
example.
|
8
|
-
<<~HTML
|
9
|
-
<div class="body">
|
10
|
-
#{example.children}
|
11
|
-
</div>
|
12
|
-
HTML
|
13
|
-
)
|
7
|
+
example.wrap_children(class: 'body')
|
14
8
|
|
15
9
|
example.prepend(child:
|
16
10
|
<<~HTML
|
@@ -27,6 +21,34 @@ module Kitchen
|
|
27
21
|
.store("#{I18n.t(:example_label)} #{number}", label: example.id)
|
28
22
|
|
29
23
|
example.titles.each { |title| title.name = 'h4' }
|
24
|
+
|
25
|
+
example.exercises.each do |exercise|
|
26
|
+
if (problem = exercise.problem)
|
27
|
+
problem.titles.each { |title| title.name = 'h4' }
|
28
|
+
problem.wrap_children(class: 'os-problem-container')
|
29
|
+
end
|
30
|
+
|
31
|
+
if (solution = exercise.solution)
|
32
|
+
solution.replace_children(with:
|
33
|
+
<<~HTML
|
34
|
+
<h4 data-type="solution-title">
|
35
|
+
<span class="os-title-label">#{I18n.t(:solution)} </span>
|
36
|
+
</h4>
|
37
|
+
<div class="os-solution-container">#{solution.children}</div>
|
38
|
+
HTML
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
exercise.add_class('unnumbered')
|
43
|
+
|
44
|
+
commentary = exercise.first('[data-type="commentary"]')
|
45
|
+
next unless commentary.present?
|
46
|
+
|
47
|
+
commentary_title = commentary.titles.first
|
48
|
+
commentary_title.name = 'h4'
|
49
|
+
commentary_title['data-type'] = 'commentary-title'
|
50
|
+
commentary_title.wrap_children('span', class: 'os-title-label')
|
51
|
+
end
|
30
52
|
end
|
31
53
|
end
|
32
54
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
module Kitchen::Directions::BakeExercises
|
4
4
|
class V1
|
5
|
+
renderable
|
5
6
|
def bake(book:)
|
6
7
|
metadata_elements = book.metadata.children_to_keep.copy
|
7
8
|
|
@@ -12,34 +13,20 @@ module Kitchen::Directions::BakeExercises
|
|
12
13
|
solution_clipboard = Kitchen::Clipboard.new
|
13
14
|
solutions_clipboards.push(solution_clipboard)
|
14
15
|
|
15
|
-
chapter.
|
16
|
+
chapter.non_introduction_pages.each do |page|
|
16
17
|
exercise_section = page.exercises
|
17
|
-
exercise_section.first
|
18
|
-
exercise_section_title = page.title.copy
|
19
|
-
exercise_section_title.name = 'h3'
|
20
|
-
exercise_section_title.replace_children(with: <<~HTML
|
21
|
-
<span class="os-number">#{chapter.count_in(:book)}.#{page.count_in(:chapter)}</span>
|
22
|
-
<span class="os-divider"> </span>
|
23
|
-
<span class="os-text" data-type="" itemprop="">#{exercise_section_title.children}</span>
|
24
|
-
HTML
|
25
|
-
)
|
18
|
+
exercise_section.titles.first&.trash
|
26
19
|
|
27
|
-
|
28
|
-
|
29
|
-
<a href="##{page.title.id}">
|
30
|
-
#{exercise_section_title.paste}
|
31
|
-
</a>
|
32
|
-
HTML
|
33
|
-
)
|
20
|
+
bake_exercise_section_title(
|
21
|
+
exercise_section: exercise_section, page: page, chapter: chapter)
|
34
22
|
|
35
|
-
exercise_section.
|
23
|
+
exercise_section.exercises.each do |exercise|
|
36
24
|
exercise.document.pantry(name: :link_text).store(
|
37
25
|
"#{I18n.t(:exercise_label)} #{chapter.count_in(:book)}.#{exercise.count_in(:chapter)}",
|
38
26
|
label: exercise.id
|
39
27
|
)
|
40
|
-
|
41
28
|
bake_exercise_in_place(exercise: exercise)
|
42
|
-
exercise.
|
29
|
+
exercise.solution&.cut(to: solution_clipboard)
|
43
30
|
end
|
44
31
|
|
45
32
|
exercise_section.cut(to: exercise_clipboard)
|
@@ -65,10 +52,9 @@ module Kitchen::Directions::BakeExercises
|
|
65
52
|
|
66
53
|
# Store a paste here to use at end so that uniquifyied IDs match legacy baking
|
67
54
|
eob_metadata = metadata_elements.paste
|
68
|
-
|
69
55
|
solutions = solutions_clipboards.map.with_index do |solution_clipboard, index|
|
70
56
|
<<~HTML
|
71
|
-
<div class="os-eob os-solution-container
|
57
|
+
<div class="os-eob os-solution-container" data-type="composite-page" data-uuid-key=".solution#{index + 1}">
|
72
58
|
<h2 data-type="document-title">
|
73
59
|
<span class="os-text">#{I18n.t(:chapter)} #{index + 1}</span>
|
74
60
|
</h2>
|
@@ -83,9 +69,9 @@ module Kitchen::Directions::BakeExercises
|
|
83
69
|
|
84
70
|
return if solutions.none?
|
85
71
|
|
86
|
-
book.
|
72
|
+
book.body.append(child:
|
87
73
|
<<~HTML
|
88
|
-
<div class="os-eob os-solution-container
|
74
|
+
<div class="os-eob os-solution-container" data-type="composite-chapter" data-uuid-key=".solution">
|
89
75
|
<h1 data-type="document-title" id="composite-chapter-1">
|
90
76
|
<span class="os-text">#{I18n.t(:eoc_answer_key_title)}</span>
|
91
77
|
</h1>
|
@@ -99,6 +85,24 @@ module Kitchen::Directions::BakeExercises
|
|
99
85
|
)
|
100
86
|
end
|
101
87
|
|
88
|
+
def bake_exercise_section_title(exercise_section:, chapter:, page:)
|
89
|
+
exercise_section_title = page.title.copy
|
90
|
+
exercise_section_title.name = 'h3'
|
91
|
+
exercise_section_title.replace_children(with: <<~HTML
|
92
|
+
<span class="os-number">#{chapter.count_in(:book)}.#{page.count_in(:chapter)}</span>
|
93
|
+
<span class="os-divider"> </span>
|
94
|
+
<span class="os-text" data-type="" itemprop="">#{exercise_section_title.children}</span>
|
95
|
+
HTML
|
96
|
+
)
|
97
|
+
exercise_section.prepend(child:
|
98
|
+
<<~HTML
|
99
|
+
<a href="##{page.title.id}">
|
100
|
+
#{exercise_section_title.paste}
|
101
|
+
</a>
|
102
|
+
HTML
|
103
|
+
)
|
104
|
+
end
|
105
|
+
|
102
106
|
def bake_exercise_in_place(exercise:)
|
103
107
|
# Bake an exercise in place going from:
|
104
108
|
#
|
@@ -133,21 +137,20 @@ module Kitchen::Directions::BakeExercises
|
|
133
137
|
# If there is no solution, don't add the 'os-hasSolution' class and don't
|
134
138
|
# link the number.
|
135
139
|
|
136
|
-
problem = exercise.
|
137
|
-
solution = exercise.
|
138
|
-
|
139
|
-
problem_number = "<span class='os-number'>#{
|
140
|
+
problem = exercise.problem
|
141
|
+
solution = exercise.solution
|
142
|
+
count_in = exercise.count_in(:chapter)
|
143
|
+
problem_number = "<span class='os-number'>#{count_in}</span>"
|
140
144
|
|
141
145
|
if solution.present?
|
142
146
|
solution.id = "#{exercise.id}-solution"
|
143
147
|
|
144
148
|
exercise.add_class('os-hasSolution')
|
145
|
-
problem_number =
|
146
|
-
"<a href='##{solution.id}' class='os-number' >#{exercise.count_in(:chapter)}</a>"
|
149
|
+
problem_number = "<a href='##{solution.id}' class='os-number'>#{count_in}</a>"
|
147
150
|
|
148
151
|
solution.replace_children(with:
|
149
152
|
<<~HTML
|
150
|
-
<a class="os-number" href="##{exercise.id}">#{
|
153
|
+
<a class="os-number" href="##{exercise.id}">#{count_in}</a>
|
151
154
|
<span class="os-divider">. </span>
|
152
155
|
<div class="os-solution-container ">#{solution.children}</div>
|
153
156
|
HTML
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen
|
4
|
+
module Directions
|
5
|
+
module BakeNonIntroductionPages
|
6
|
+
def self.v1(chapter:)
|
7
|
+
chapter.non_introduction_pages.each do |page|
|
8
|
+
number = "#{chapter.count_in(:book)}.#{page.count_in(:chapter)}"
|
9
|
+
|
10
|
+
page.search("div[data-type='description']").each(&:trash)
|
11
|
+
page.add_class('chapter-content-module')
|
12
|
+
|
13
|
+
title = page.title
|
14
|
+
title.name = 'h2'
|
15
|
+
title.replace_children(with:
|
16
|
+
<<~HTML
|
17
|
+
<span class="os-number">#{number}</span>
|
18
|
+
<span class="os-divider"> </span>
|
19
|
+
<span data-type="" itemprop="" class="os-text">#{title.text}</span>
|
20
|
+
HTML
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen
|
4
|
+
module Directions
|
5
|
+
module BakeAutotitledNotes
|
6
|
+
def self.v1(book:, classes:)
|
7
|
+
book.notes.each do |note|
|
8
|
+
next unless (note.classes & classes).any?
|
9
|
+
|
10
|
+
bake_note(note: note)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.bake_note(note:)
|
15
|
+
note.wrap_children(class: 'os-note-body')
|
16
|
+
|
17
|
+
BakeNoteSubtitle.v1(note: note)
|
18
|
+
|
19
|
+
note.prepend(child:
|
20
|
+
<<~HTML
|
21
|
+
<h3 class="os-title" data-type="title">
|
22
|
+
<span class="os-title-label">#{note.autogenerated_title}</span>
|
23
|
+
</h3>
|
24
|
+
HTML
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|