openstax_kitchen 8.0.1 → 9.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +1 -1
- data/lib/kitchen/chapter_element.rb +0 -8
- data/lib/kitchen/directions/.rubocop.yml +3 -0
- data/lib/kitchen/directions/bake_chapter_glossary/v1.rb +8 -12
- data/lib/kitchen/directions/bake_chapter_key_concepts/v1.rb +9 -13
- data/lib/kitchen/directions/bake_chapter_key_equations.rb +10 -17
- data/lib/kitchen/directions/bake_chapter_references/v1.rb +10 -12
- data/lib/kitchen/directions/bake_chapter_solutions/v1.rb +8 -12
- data/lib/kitchen/directions/bake_chapter_summary.rb +10 -32
- data/lib/kitchen/directions/bake_eoc_section_content/remove_section_title.rb +11 -0
- data/lib/kitchen/directions/bake_further_research.rb +13 -39
- data/lib/kitchen/directions/eoc_composite_page_container/main.rb +27 -0
- data/lib/kitchen/directions/eoc_composite_page_container/v1.rb +19 -0
- data/lib/kitchen/directions/move_custom_section_to_eoc_container/main.rb +37 -0
- data/lib/kitchen/directions/move_custom_section_to_eoc_container/v1.rb +27 -0
- data/lib/kitchen/directions/move_exercises_to_eoc/v1.rb +10 -27
- data/lib/kitchen/directions/move_exercises_to_eoc/v2.rb +11 -18
- data/lib/kitchen/directions/move_exercises_to_eoc/v3.rb +14 -38
- data/lib/kitchen/example_element.rb +1 -1
- data/lib/kitchen/templates/eoc_section_template.xhtml.erb +11 -0
- data/lib/kitchen/templates/eoc_section_template_old.xhtml.erb +11 -0
- data/lib/kitchen/version.rb +1 -1
- data/lib/locales/en.yml +7 -5
- data/lib/locales/es.yml +6 -4
- data/lib/locales/pl.yml +5 -3
- metadata +9 -3
- data/lib/kitchen/templates/eoc_section_title_template.xhtml.erb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fca2eb47435f5ff74342d7de2afc02e2c55eed224f1ae669b440d52a1c50b1b0
|
4
|
+
data.tar.gz: f22d42bc7618868d1890e149d9e0bf5134945b8fccce5c7742827e6c53589d81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a457781d0bcb61533c5b96ca0b2ffcde74a69743a54c09f4b901b7e769056d1d616afa736df40067e7472a479c8526505d72fe5d7e9ecf3eca6789581d92c380
|
7
|
+
data.tar.gz: 9f517fbc86ae32e0fd2bbc108774a9f4b94a63df01675530c7f26d7f9bf9522654f4ddb5d7e1c9d141b1a67a0ccc6a98ac2f8c0cf94719ccf04b67cfbf69f240
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [9.0.0] - 2021-07-12
|
10
|
+
|
11
|
+
* Refactor `BakeChapterKeyConcepts`, `BakeChapterReferences`, `BakeChapterSolutions`, and `MoveExercisesToEoc` versions 1-3 to use new general eoc directions (major?)
|
12
|
+
* Fixed `BakeExample.v1` to also search inside `.body` for titles (minor)
|
13
|
+
* Add documentation to `MoveCustomSectionToEocContainer` & `EocCompositePageContainer` (minor)
|
14
|
+
* Add a `MoveCustomSectionToEocContainer` to allow for custom sections (minor)
|
15
|
+
* Add a `EocCompositePageContainer` direction to handle creation of eoc page wrapper (minor)
|
16
|
+
* Refactor `BakeChapterKeyEquations`, `BakeChapterGlossary`, `BakeChapterSummary`, `BakeFurtherResearch` (major)
|
17
|
+
* Fix metadata title in composite pages (major)
|
9
18
|
|
10
19
|
## [8.0.1] - 2021-06-29
|
11
20
|
|
data/Gemfile.lock
CHANGED
@@ -52,14 +52,6 @@ module Kitchen
|
|
52
52
|
search("div[data-type='glossary']")
|
53
53
|
end
|
54
54
|
|
55
|
-
# Returns an enumerator for the key equations
|
56
|
-
#
|
57
|
-
# @return [ElementEnumerator]
|
58
|
-
#
|
59
|
-
def key_equations
|
60
|
-
search('section.key-equations')
|
61
|
-
end
|
62
|
-
|
63
55
|
# Returns an enumerator for the abstracts
|
64
56
|
#
|
65
57
|
# @return [ElementEnumerator]
|
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
module Kitchen::Directions::BakeChapterGlossary
|
4
4
|
class V1
|
5
|
-
renderable
|
6
|
-
|
7
5
|
class Definition
|
8
6
|
attr_reader :element
|
9
7
|
|
@@ -24,10 +22,6 @@ module Kitchen::Directions::BakeChapterGlossary
|
|
24
22
|
end
|
25
23
|
|
26
24
|
def bake(chapter:, metadata_source:, append_to: nil, uuid_prefix: '')
|
27
|
-
@metadata = metadata_source.children_to_keep.copy
|
28
|
-
@klass = 'glossary'
|
29
|
-
@title = I18n.t(:eoc_key_terms_title)
|
30
|
-
@uuid_prefix = uuid_prefix
|
31
25
|
@glossary = []
|
32
26
|
|
33
27
|
chapter.glossaries.search('dl').each do |definition_element|
|
@@ -36,13 +30,15 @@ module Kitchen::Directions::BakeChapterGlossary
|
|
36
30
|
|
37
31
|
chapter.glossaries.trash
|
38
32
|
|
39
|
-
|
40
|
-
|
41
|
-
append_to_element = append_to || chapter
|
42
|
-
@in_composite_chapter = append_to_element.is?(:composite_chapter)
|
33
|
+
content = @glossary.sort.map { |definition| definition.element.paste }.join
|
43
34
|
|
44
|
-
|
45
|
-
'
|
35
|
+
Kitchen::Directions::EocCompositePageContainer.v1(
|
36
|
+
container_key: 'glossary',
|
37
|
+
uuid_key: "#{uuid_prefix}glossary",
|
38
|
+
metadata_source: metadata_source,
|
39
|
+
content: content,
|
40
|
+
append_to: append_to || chapter
|
41
|
+
)
|
46
42
|
end
|
47
43
|
end
|
48
44
|
end
|
@@ -2,34 +2,30 @@
|
|
2
2
|
|
3
3
|
module Kitchen::Directions::BakeChapterKeyConcepts
|
4
4
|
class V1
|
5
|
-
renderable
|
6
5
|
def bake(chapter:, metadata_source:, append_to:, uuid_prefix:)
|
7
|
-
@metadata = metadata_source.children_to_keep.copy
|
8
|
-
@klass = 'key-concepts'
|
9
|
-
@title = I18n.t(:eoc_key_concepts)
|
10
|
-
@uuid_prefix = uuid_prefix
|
11
|
-
|
12
6
|
key_concepts_clipboard = Kitchen::Clipboard.new
|
13
7
|
chapter.non_introduction_pages.each do |page|
|
14
8
|
key_concepts = page.key_concepts
|
15
9
|
next if key_concepts.none?
|
16
10
|
|
17
|
-
key_concepts.search('h3').trash
|
18
11
|
title = Kitchen::Directions::EocSectionTitleLinkSnippet.v1(page: page)
|
19
12
|
key_concepts.each do |key_concept|
|
13
|
+
Kitchen::Directions::RemoveSectionTitle.v1(section: key_concept)
|
20
14
|
key_concept.prepend(child: title)
|
21
15
|
key_concept.wrap("<div class='os-section-area'>")
|
22
16
|
page.search('div.os-section-area').first.cut(to: key_concepts_clipboard)
|
23
17
|
end
|
24
18
|
end
|
25
19
|
|
26
|
-
|
27
|
-
|
28
|
-
append_to_element = append_to || chapter
|
29
|
-
@in_composite_chapter = append_to_element.is?(:composite_chapter)
|
20
|
+
content = "<div class=\"os-key-concepts\"> #{key_concepts_clipboard.paste} </div>"
|
30
21
|
|
31
|
-
|
32
|
-
'
|
22
|
+
Kitchen::Directions::EocCompositePageContainer.v1(
|
23
|
+
container_key: 'key-concepts',
|
24
|
+
uuid_key: "#{uuid_prefix}key-concepts",
|
25
|
+
metadata_source: metadata_source,
|
26
|
+
content: content,
|
27
|
+
append_to: append_to || chapter
|
28
|
+
)
|
33
29
|
end
|
34
30
|
end
|
35
31
|
end
|
@@ -15,24 +15,17 @@ module Kitchen
|
|
15
15
|
end
|
16
16
|
|
17
17
|
class V1
|
18
|
-
renderable
|
19
18
|
def bake(chapter:, metadata_source:, append_to:, uuid_prefix:)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
append_to_element = append_to || chapter
|
32
|
-
@in_composite_chapter = append_to_element.is?(:composite_chapter)
|
33
|
-
|
34
|
-
append_to_element.append(child: render(file:
|
35
|
-
'../templates/eoc_section_title_template.xhtml.erb'))
|
19
|
+
MoveCustomSectionToEocContainer.v1(
|
20
|
+
chapter: chapter,
|
21
|
+
metadata_source: metadata_source,
|
22
|
+
container_key: 'key-equations',
|
23
|
+
uuid_key: "#{uuid_prefix}key-equations",
|
24
|
+
section_selector: 'section.key-equations',
|
25
|
+
append_to: append_to
|
26
|
+
) do |section|
|
27
|
+
RemoveSectionTitle.v1(section: section)
|
28
|
+
end
|
36
29
|
end
|
37
30
|
end
|
38
31
|
end
|
@@ -2,25 +2,22 @@
|
|
2
2
|
|
3
3
|
module Kitchen::Directions::BakeChapterReferences
|
4
4
|
class V1
|
5
|
-
renderable
|
6
|
-
|
7
5
|
def bake(chapter:, metadata_source:, uuid_prefix: '.', klass: 'references')
|
8
|
-
@metadata = metadata_source.children_to_keep.copy
|
9
|
-
@klass = klass
|
10
|
-
@title = I18n.t(:references)
|
11
|
-
@uuid_prefix = uuid_prefix
|
12
|
-
|
13
|
-
chapter.references.search('h3').trash
|
14
|
-
|
15
6
|
bake_page_references(page: chapter.introduction_page)
|
16
7
|
|
17
8
|
chapter.non_introduction_pages.each do |page|
|
18
9
|
bake_page_references(page: page)
|
19
10
|
end
|
20
11
|
|
21
|
-
|
22
|
-
|
23
|
-
|
12
|
+
content = chapter.pages.references.cut.paste
|
13
|
+
|
14
|
+
Kitchen::Directions::EocCompositePageContainer.v1(
|
15
|
+
container_key: klass,
|
16
|
+
uuid_key: "#{uuid_prefix}#{klass}",
|
17
|
+
metadata_source: metadata_source,
|
18
|
+
content: content,
|
19
|
+
append_to: chapter
|
20
|
+
)
|
24
21
|
end
|
25
22
|
|
26
23
|
def bake_page_references(page:)
|
@@ -42,6 +39,7 @@ module Kitchen::Directions::BakeChapterReferences
|
|
42
39
|
end
|
43
40
|
|
44
41
|
references.each do |reference|
|
42
|
+
Kitchen::Directions::RemoveSectionTitle.v1(section: reference)
|
45
43
|
reference.prepend(child: title)
|
46
44
|
end
|
47
45
|
end
|
@@ -2,14 +2,7 @@
|
|
2
2
|
|
3
3
|
module Kitchen::Directions::BakeChapterSolutions
|
4
4
|
class V1
|
5
|
-
renderable
|
6
|
-
|
7
5
|
def bake(chapter:, metadata_source:, uuid_prefix: '')
|
8
|
-
@metadata = metadata_source.children_to_keep.copy
|
9
|
-
@klass = 'solutions'
|
10
|
-
@title = I18n.t(:eoc_solutions_title)
|
11
|
-
@uuid_prefix = uuid_prefix
|
12
|
-
|
13
6
|
solutions_clipboard = Kitchen::Clipboard.new
|
14
7
|
|
15
8
|
chapter.search('section.free-response').each do |free_response_question|
|
@@ -26,12 +19,15 @@ module Kitchen::Directions::BakeChapterSolutions
|
|
26
19
|
end
|
27
20
|
end
|
28
21
|
|
29
|
-
|
30
|
-
|
31
|
-
@in_composite_chapter = false
|
22
|
+
content = solutions_clipboard.paste
|
32
23
|
|
33
|
-
|
34
|
-
'
|
24
|
+
Kitchen::Directions::EocCompositePageContainer.v1(
|
25
|
+
container_key: 'solutions',
|
26
|
+
uuid_key: "#{uuid_prefix}solutions",
|
27
|
+
metadata_source: metadata_source,
|
28
|
+
content: content,
|
29
|
+
append_to: chapter
|
30
|
+
)
|
35
31
|
end
|
36
32
|
end
|
37
33
|
end
|
@@ -15,52 +15,30 @@ module Kitchen
|
|
15
15
|
end
|
16
16
|
|
17
17
|
class V1
|
18
|
-
renderable
|
19
18
|
def bake(chapter:, metadata_source:, uuid_prefix: '.', klass: 'summary')
|
20
|
-
@metadata = metadata_source.children_to_keep.copy
|
21
|
-
@klass = klass
|
22
|
-
@title = I18n.t(:eoc_summary_title)
|
23
|
-
@uuid_prefix = uuid_prefix
|
24
|
-
|
25
19
|
summaries = Clipboard.new
|
26
20
|
|
27
|
-
# TODO: include specific page types somehow without writing it out
|
28
21
|
chapter.non_introduction_pages.each do |page|
|
29
22
|
summary = page.summary
|
30
23
|
|
31
24
|
next if summary.nil?
|
32
25
|
|
33
26
|
summary.first("[data-type='title']")&.trash # get rid of old title if exists
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
unless summary_title.children.search('span.os-number').present?
|
38
|
-
summary_title.replace_children(with:
|
39
|
-
<<~HTML
|
40
|
-
<span class="os-number">#{chapter.count_in(:book)}.#{page.count_in(:chapter)}</span>
|
41
|
-
<span class="os-divider"> </span>
|
42
|
-
<span class="os-text" data-type="" itemprop="">#{summary_title.children}</span>
|
43
|
-
HTML
|
44
|
-
)
|
45
|
-
end
|
46
|
-
|
47
|
-
summary.prepend(child:
|
48
|
-
<<~HTML
|
49
|
-
<a href="##{page.title.id}">
|
50
|
-
#{summary_title.paste}
|
51
|
-
</a>
|
52
|
-
HTML
|
53
|
-
)
|
27
|
+
title = EocSectionTitleLinkSnippet.v1(page: page)
|
28
|
+
summary.prepend(child: title)
|
29
|
+
summary.first('h3')[:itemprop] = 'name'
|
54
30
|
summary.cut(to: summaries)
|
55
31
|
end
|
56
32
|
|
57
33
|
return if summaries.none?
|
58
34
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
35
|
+
EocCompositePageContainer.v1(
|
36
|
+
container_key: klass,
|
37
|
+
uuid_key: "#{uuid_prefix}#{klass}",
|
38
|
+
metadata_source: metadata_source,
|
39
|
+
content: summaries.paste,
|
40
|
+
append_to: chapter
|
41
|
+
)
|
64
42
|
end
|
65
43
|
end
|
66
44
|
end
|
@@ -13,47 +13,21 @@ module Kitchen
|
|
13
13
|
end
|
14
14
|
|
15
15
|
class V1
|
16
|
-
renderable
|
17
16
|
def bake(chapter:, metadata_source:, uuid_prefix: '.')
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
further_research.
|
30
|
-
|
31
|
-
further_research_title.name = 'h3'
|
32
|
-
further_research_title.replace_children(with: <<~HTML
|
33
|
-
<span class="os-number">#{chapter.count_in(:book)}.#{page.count_in(:chapter)}</span>
|
34
|
-
<span class="os-divider"> </span>
|
35
|
-
<span class="os-text" data-type="" itemprop="">#{further_research_title.children}</span>
|
36
|
-
HTML
|
37
|
-
)
|
38
|
-
|
39
|
-
further_research.prepend(child:
|
40
|
-
<<~HTML
|
41
|
-
<a href="##{page.title.id}">
|
42
|
-
#{further_research_title.paste}
|
43
|
-
</a>
|
44
|
-
HTML
|
45
|
-
)
|
46
|
-
further_research.cut(to: further_researches)
|
17
|
+
MoveCustomSectionToEocContainer.v1(
|
18
|
+
chapter: chapter,
|
19
|
+
metadata_source: metadata_source,
|
20
|
+
container_key: 'further-research',
|
21
|
+
uuid_key: "#{uuid_prefix}further-research",
|
22
|
+
section_selector: 'section.further-research',
|
23
|
+
append_to: nil,
|
24
|
+
include_intro_page: false
|
25
|
+
) do |further_research|
|
26
|
+
RemoveSectionTitle.v1(section: further_research)
|
27
|
+
title = EocSectionTitleLinkSnippet.v1(page: further_research.ancestor(:page))
|
28
|
+
further_research.prepend(child: title)
|
29
|
+
further_research.first('h3')[:itemprop] = 'name'
|
47
30
|
end
|
48
|
-
|
49
|
-
return if further_researches.none?
|
50
|
-
|
51
|
-
@content = further_researches.paste
|
52
|
-
|
53
|
-
@in_composite_chapter = false
|
54
|
-
|
55
|
-
chapter.append(child: render(file:
|
56
|
-
'../templates/eoc_section_title_template.xhtml.erb'))
|
57
31
|
end
|
58
32
|
end
|
59
33
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen
|
4
|
+
module Directions
|
5
|
+
module EocCompositePageContainer
|
6
|
+
# Creates a wrapper for the given content & appends it to the given element
|
7
|
+
#
|
8
|
+
# @param container_key [String] Appended to 'eoc.' to form the I18n key for the container title; also used as part of a class on the container.
|
9
|
+
# @param uuid_key [String] the uuid key for the wrapper class, e.g. `'.summary'`
|
10
|
+
# @param metadata_source [MetadataElement] metadata for the book
|
11
|
+
# @param content [String] the content to be contained by the wrapper
|
12
|
+
# @param append_to [ElementBase] the element to be appended, usually either a `ChapterElement` or a `CompositeChapterElement`
|
13
|
+
# @return [ElementBase] the append_to element with container appended
|
14
|
+
#
|
15
|
+
def self.v1(container_key:, uuid_key:, metadata_source:, content:,
|
16
|
+
append_to:)
|
17
|
+
V1.new.bake(
|
18
|
+
container_key: container_key,
|
19
|
+
uuid_key: uuid_key,
|
20
|
+
metadata_source: metadata_source,
|
21
|
+
content: content,
|
22
|
+
append_to: append_to
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kitchen::Directions::EocCompositePageContainer
|
4
|
+
class V1
|
5
|
+
renderable
|
6
|
+
|
7
|
+
def bake(container_key:, uuid_key:, metadata_source:, content:, append_to:)
|
8
|
+
@title = I18n.t(:"eoc.#{container_key}")
|
9
|
+
@uuid_key = uuid_key
|
10
|
+
@container_class_type = container_key
|
11
|
+
@metadata = metadata_source.children_to_keep.copy
|
12
|
+
@content = content
|
13
|
+
@in_composite_chapter = append_to.is?(:composite_chapter)
|
14
|
+
|
15
|
+
append_to.append(child: render(file:
|
16
|
+
'../../templates/eoc_section_template.xhtml.erb'))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Metrics/ParameterLists
|
4
|
+
# More parameters are ok here because these generic classes DRY up a lot of other code
|
5
|
+
module Kitchen
|
6
|
+
module Directions
|
7
|
+
module MoveCustomSectionToEocContainer
|
8
|
+
# Creates a custom eoc composite page for a section within the given chapter.
|
9
|
+
# The sections are moved into this composite page, and can be transformed before the moved by an optional block argument.
|
10
|
+
#
|
11
|
+
# @param chapter [ChapterElement] the chapter in which the section to be moved is contained
|
12
|
+
# @param metadata_source [MetadataElement] metadata for the book
|
13
|
+
# @param container_key [String] Appended to 'eoc.' to form the I18n key for the container title; also used as part of a class on the container.
|
14
|
+
# @param uuid_key [String] the uuid key for the wrapper class, e.g. `'.summary'`
|
15
|
+
# @param section_selector [String] the selector for the section to be moved, e.g. `'section.summary'`
|
16
|
+
# @param append_to [ElementBase] the element to be appended. Defaults to the value of `chapter` param if none given.
|
17
|
+
# @param include_intro_page [Boolean] control the introduction page for the chapter should be searched for a section to move, default is true
|
18
|
+
# @return [ElementBase] the append_to element with container appended
|
19
|
+
#
|
20
|
+
def self.v1(chapter:, metadata_source:, container_key:, uuid_key:,
|
21
|
+
section_selector:, append_to: nil, include_intro_page: true)
|
22
|
+
V1.new.bake(
|
23
|
+
chapter: chapter,
|
24
|
+
metadata_source: metadata_source,
|
25
|
+
container_key: container_key,
|
26
|
+
uuid_key: uuid_key,
|
27
|
+
section_selector: section_selector,
|
28
|
+
append_to: append_to || chapter,
|
29
|
+
include_intro_page: include_intro_page
|
30
|
+
) do |section|
|
31
|
+
yield section if block_given?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
# rubocop:enable Metrics/ParameterLists
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Metrics/ParameterLists
|
4
|
+
# More parameters are ok here because these generic classes DRY up a lot of other code
|
5
|
+
module Kitchen::Directions::MoveCustomSectionToEocContainer
|
6
|
+
class V1
|
7
|
+
def bake(chapter:, metadata_source:, container_key:, uuid_key:,
|
8
|
+
section_selector:, append_to:, include_intro_page:, &block)
|
9
|
+
section_clipboard = Kitchen::Clipboard.new
|
10
|
+
pages = include_intro_page ? chapter.pages : chapter.non_introduction_pages
|
11
|
+
sections = pages.search(section_selector)
|
12
|
+
sections.each(&block)
|
13
|
+
sections.cut(to: section_clipboard)
|
14
|
+
|
15
|
+
return if section_clipboard.none?
|
16
|
+
|
17
|
+
Kitchen::Directions::EocCompositePageContainer.v1(
|
18
|
+
container_key: container_key,
|
19
|
+
uuid_key: uuid_key,
|
20
|
+
metadata_source: metadata_source,
|
21
|
+
content: section_clipboard.paste,
|
22
|
+
append_to: append_to || chapter
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
# rubocop:enable Metrics/ParameterLists
|
@@ -2,35 +2,18 @@
|
|
2
2
|
|
3
3
|
module Kitchen::Directions::MoveExercisesToEOC
|
4
4
|
class V1
|
5
|
-
renderable
|
6
|
-
|
7
5
|
def bake(chapter:, metadata_source:, klass:, append_to: nil, uuid_prefix: '.')
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
sections.each do |exercise_section|
|
19
|
-
exercise_section.first("[data-type='title']")&.trash
|
20
|
-
|
21
|
-
exercise_section.cut(to: exercise_clipboard)
|
22
|
-
end
|
6
|
+
Kitchen::Directions::MoveCustomSectionToEocContainer.v1(
|
7
|
+
chapter: chapter,
|
8
|
+
metadata_source: metadata_source,
|
9
|
+
container_key: klass,
|
10
|
+
uuid_key: "#{uuid_prefix}#{klass}",
|
11
|
+
section_selector: "section.#{klass}",
|
12
|
+
append_to: append_to || chapter,
|
13
|
+
include_intro_page: false
|
14
|
+
) do |exercise_section|
|
15
|
+
Kitchen::Directions::RemoveSectionTitle.v1(section: exercise_section)
|
23
16
|
end
|
24
|
-
|
25
|
-
return if exercise_clipboard.none?
|
26
|
-
|
27
|
-
@content = exercise_clipboard.paste
|
28
|
-
|
29
|
-
append_to_element = append_to || chapter
|
30
|
-
@in_composite_chapter = append_to_element.is?(:composite_chapter)
|
31
|
-
|
32
|
-
append_to_element.append(child: render(file:
|
33
|
-
'../../templates/eoc_section_title_template.xhtml.erb'))
|
34
17
|
end
|
35
18
|
end
|
36
19
|
end
|
@@ -4,25 +4,16 @@ module Kitchen::Directions::MoveExercisesToEOC
|
|
4
4
|
# Main difference from v1 is the presence of a section title
|
5
5
|
# and some additional wrappers
|
6
6
|
class V2
|
7
|
-
renderable
|
8
|
-
|
9
7
|
def bake(chapter:, metadata_source:, klass:, append_to: nil, uuid_prefix: '.')
|
10
|
-
@klass = klass
|
11
|
-
@metadata = metadata_source.children_to_keep.copy
|
12
|
-
@title = I18n.t(:"eoc.#{klass}")
|
13
|
-
@uuid_prefix = uuid_prefix
|
14
|
-
|
15
8
|
exercise_clipboard = Kitchen::Clipboard.new
|
16
9
|
|
17
10
|
chapter.non_introduction_pages.each do |page|
|
18
|
-
sections = page.search("section.#{
|
11
|
+
sections = page.search("section.#{klass}")
|
19
12
|
|
20
13
|
sections.each do |exercise_section|
|
21
|
-
|
22
|
-
|
14
|
+
Kitchen::Directions::RemoveSectionTitle.v1(section: exercise_section)
|
23
15
|
# Get parent page title
|
24
16
|
section_title = Kitchen::Directions::EocSectionTitleLinkSnippet.v1(page: page)
|
25
|
-
|
26
17
|
# Configure section title & wrappers
|
27
18
|
exercise_section.prepend(child: section_title)
|
28
19
|
exercise_section.wrap('<div class="os-section-area">')
|
@@ -33,17 +24,19 @@ module Kitchen::Directions::MoveExercisesToEOC
|
|
33
24
|
|
34
25
|
return if exercise_clipboard.none?
|
35
26
|
|
36
|
-
|
37
|
-
<div class="os-#{
|
27
|
+
content = <<~HTML
|
28
|
+
<div class="os-#{klass}">
|
38
29
|
#{exercise_clipboard.paste}
|
39
30
|
</div>
|
40
31
|
HTML
|
41
32
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
33
|
+
Kitchen::Directions::EocCompositePageContainer.v1(
|
34
|
+
container_key: klass,
|
35
|
+
uuid_key: "#{uuid_prefix}#{klass}",
|
36
|
+
metadata_source: metadata_source,
|
37
|
+
content: content,
|
38
|
+
append_to: append_to || chapter
|
39
|
+
)
|
47
40
|
end
|
48
41
|
end
|
49
42
|
end
|
@@ -4,46 +4,22 @@ module Kitchen::Directions::MoveExercisesToEOC
|
|
4
4
|
# The difference from v1 is the presence of a section title
|
5
5
|
# and from v2 the lack of additional "os-section-area" and os-#{@klass} wrappers
|
6
6
|
class V3
|
7
|
-
renderable
|
8
|
-
|
9
7
|
def bake(chapter:, metadata_source:, klass:, append_to: nil, uuid_prefix: '.')
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
exercise_section.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
exercise_section.exercises.each do |exercise|
|
26
|
-
exercise.document.pantry(name: :link_text).store(
|
27
|
-
"#{I18n.t(:exercise_label)} #{chapter.count_in(:book)}.#{exercise.count_in(:chapter)}",
|
28
|
-
label: exercise.id
|
29
|
-
)
|
30
|
-
end
|
31
|
-
|
32
|
-
# Configure section title
|
33
|
-
exercise_section.prepend(child: section_title)
|
34
|
-
exercise_section.cut(to: exercise_clipboard)
|
35
|
-
end
|
8
|
+
Kitchen::Directions::MoveCustomSectionToEocContainer.v1(
|
9
|
+
chapter: chapter,
|
10
|
+
metadata_source: metadata_source,
|
11
|
+
container_key: klass,
|
12
|
+
uuid_key: "#{uuid_prefix}#{klass}",
|
13
|
+
section_selector: "section.#{klass}",
|
14
|
+
append_to: append_to || chapter,
|
15
|
+
include_intro_page: false
|
16
|
+
) do |exercise_section|
|
17
|
+
Kitchen::Directions::RemoveSectionTitle.v1(section: exercise_section)
|
18
|
+
title = Kitchen::Directions::EocSectionTitleLinkSnippet.v1(
|
19
|
+
page: exercise_section.ancestor(:page)
|
20
|
+
)
|
21
|
+
exercise_section.prepend(child: title)
|
36
22
|
end
|
37
|
-
|
38
|
-
return if exercise_clipboard.none?
|
39
|
-
|
40
|
-
@content = exercise_clipboard.paste
|
41
|
-
|
42
|
-
append_to_element = append_to || chapter
|
43
|
-
@in_composite_chapter = append_to_element.is?(:composite_chapter)
|
44
|
-
|
45
|
-
append_to_element.append(child: render(file:
|
46
|
-
'../../templates/eoc_section_title_template.xhtml.erb'))
|
47
23
|
end
|
48
24
|
end
|
49
25
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% main_title_tag = @in_composite_chapter ? 'h3' : 'h2' %>
|
2
|
+
<div class="os-eoc os-<%=@container_class_type%>-container" data-type="composite-page" data-uuid-key="<%= @uuid_key %>">
|
3
|
+
<<%= main_title_tag %> data-type="<%= @in_composite_chapter ? 'title' : 'document-title' %>">
|
4
|
+
<span class="os-text"><%= @title %></span>
|
5
|
+
</<%= main_title_tag %>>
|
6
|
+
<div data-type="metadata" style="display: none;">
|
7
|
+
<h1 data-type="document-title" itemprop="name"><%= @title %></h1>
|
8
|
+
<%= @metadata.paste %>
|
9
|
+
</div>
|
10
|
+
<%= @content %>
|
11
|
+
</div>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% main_title_tag = @in_composite_chapter ? 'h3' : 'h2' %>
|
2
|
+
<div class="os-eoc os-<%=@klass%>-container" data-type="composite-page" data-uuid-key="<%=@uuid_prefix%><%=@klass%>">
|
3
|
+
<<%= main_title_tag %> data-type="<%= @in_composite_chapter ? 'title' : 'document-title' %>">
|
4
|
+
<span class="os-text"><%= @title %></span>
|
5
|
+
</<%= main_title_tag %>>
|
6
|
+
<div data-type="metadata" style="display: none;">
|
7
|
+
<h1 data-type="document-title" itemprop="name"><%= @title %></h1>
|
8
|
+
<%= @metadata.paste %>
|
9
|
+
</div>
|
10
|
+
<%= @content %>
|
11
|
+
</div>
|
data/lib/kitchen/version.rb
CHANGED
data/lib/locales/en.yml
CHANGED
@@ -18,16 +18,18 @@ en:
|
|
18
18
|
references: References
|
19
19
|
answer_key_title: Answer Key
|
20
20
|
eoc_chapter_review: Chapter Review
|
21
|
-
eoc_key_terms_title: Key Terms
|
22
|
-
eoc_summary_title: Summary
|
23
21
|
eoc_exercises_title: Exercises
|
24
22
|
eoc_composite_metadata_title: Chapter Review
|
25
23
|
eoc_solutions_title: Solutions
|
26
|
-
eoc_key_concepts: Key Concepts
|
27
|
-
eoc_key_equations: Key Equations
|
28
24
|
eoc_suggested_reading: Suggestions for Further Study
|
29
|
-
eoc_further_research_title: Further Research
|
30
25
|
eob_index_title: Index
|
31
26
|
eob_index_symbols_group: Symbols
|
32
27
|
review_exercises: Review Exercises
|
33
28
|
section_exercises: ! 'Section %{number} Exercises'
|
29
|
+
eoc:
|
30
|
+
glossary: Key Terms
|
31
|
+
key-equations: Key Equations
|
32
|
+
summary: Summary
|
33
|
+
further-research: Further Research
|
34
|
+
key-concepts: Key Concepts
|
35
|
+
references: References
|
data/lib/locales/es.yml
CHANGED
@@ -18,16 +18,18 @@ es:
|
|
18
18
|
references: Referencias
|
19
19
|
answer_key_title: Clave de Respuestas
|
20
20
|
eoc_chapter_review: Revisión Del Capítulo
|
21
|
-
eoc_key_terms_title: Términos Clave
|
22
|
-
eoc_summary_title: Resumen
|
23
21
|
eoc_exercises_title: Ejercicios
|
24
22
|
eoc_composite_metadata_title: Revisión Del Capítulo
|
25
23
|
eoc_solutions_title: Soluciones
|
26
24
|
eoc_key_concepts: Conceptos Clave
|
27
|
-
eoc_key_equations: Ecuaciones Clave
|
28
25
|
eoc_suggested_reading: Sugerencias Para Estudios Adicionales
|
29
|
-
eoc_further_research_title: Investigación Adicional
|
30
26
|
eob_index_title: Índice
|
31
27
|
eob_index_symbols_group: Símbolos
|
32
28
|
review_exercises: Ejercicios De Repaso
|
33
29
|
section_exercises: ! 'Sección %{number} Ejercicios'
|
30
|
+
eoc:
|
31
|
+
glossary: Términos Clave
|
32
|
+
key-equations: Ecuaciones Clave
|
33
|
+
summary: Resumen
|
34
|
+
further-research: Investigación Adicional
|
35
|
+
references: Referencias
|
data/lib/locales/pl.yml
CHANGED
@@ -16,11 +16,13 @@ pl:
|
|
16
16
|
stepwise_step_label: Krok
|
17
17
|
answer_key_title: Rozwiązania zadań
|
18
18
|
eoc_chapter_review: Podsumowanie rozdziału
|
19
|
-
eoc_key_terms_title: Kluczowe pojęcia
|
20
19
|
eoc_solutions_title: Rozwiązania
|
21
|
-
eoc_summary_title: Podsumowanie
|
22
|
-
eoc_key_equations: Najważniejsze wzory
|
23
20
|
eob_index_title: Skorowidz rzeczowy
|
24
21
|
eob_index_symbols_group: Symbole
|
25
22
|
references: Bibliografia
|
23
|
+
eoc:
|
24
|
+
glossary: Kluczowe pojęcia
|
25
|
+
key-equations: Najważniejsze wzory
|
26
|
+
summary: Podsumowanie
|
27
|
+
references: Bibliografia
|
26
28
|
|
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:
|
4
|
+
version: 9.0.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-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -263,6 +263,7 @@ files:
|
|
263
263
|
- lib/kitchen/directions/bake_checkpoint.rb
|
264
264
|
- lib/kitchen/directions/bake_composite_chapters.rb
|
265
265
|
- lib/kitchen/directions/bake_composite_pages.rb
|
266
|
+
- lib/kitchen/directions/bake_eoc_section_content/remove_section_title.rb
|
266
267
|
- lib/kitchen/directions/bake_equations.rb
|
267
268
|
- lib/kitchen/directions/bake_example.rb
|
268
269
|
- lib/kitchen/directions/bake_figure.rb
|
@@ -313,7 +314,11 @@ files:
|
|
313
314
|
- lib/kitchen/directions/chapter_review_container/chapter_review.xhtml.erb
|
314
315
|
- lib/kitchen/directions/chapter_review_container/main.rb
|
315
316
|
- lib/kitchen/directions/chapter_review_container/v1.rb
|
317
|
+
- lib/kitchen/directions/eoc_composite_page_container/main.rb
|
318
|
+
- lib/kitchen/directions/eoc_composite_page_container/v1.rb
|
316
319
|
- lib/kitchen/directions/eoc_section_title_link_snippet.rb
|
320
|
+
- lib/kitchen/directions/move_custom_section_to_eoc_container/main.rb
|
321
|
+
- lib/kitchen/directions/move_custom_section_to_eoc_container/v1.rb
|
317
322
|
- lib/kitchen/directions/move_exercises_to_eoc/main.rb
|
318
323
|
- lib/kitchen/directions/move_exercises_to_eoc/v1.rb
|
319
324
|
- lib/kitchen/directions/move_exercises_to_eoc/v2.rb
|
@@ -368,7 +373,8 @@ files:
|
|
368
373
|
- lib/kitchen/table_element.rb
|
369
374
|
- lib/kitchen/table_element_enumerator.rb
|
370
375
|
- lib/kitchen/templates/eob_section_title_template.xhtml.erb
|
371
|
-
- lib/kitchen/templates/
|
376
|
+
- lib/kitchen/templates/eoc_section_template.xhtml.erb
|
377
|
+
- lib/kitchen/templates/eoc_section_template_old.xhtml.erb
|
372
378
|
- lib/kitchen/term_element.rb
|
373
379
|
- lib/kitchen/term_element_enumerator.rb
|
374
380
|
- lib/kitchen/type_casting_element_enumerator.rb
|
@@ -1,10 +0,0 @@
|
|
1
|
-
<div class="os-eoc os-<%=@klass%>-container" data-type="composite-page" data-uuid-key="<%=@uuid_prefix%><%=@klass%>">
|
2
|
-
<<%= @in_composite_chapter ? 'h3' : 'h2' %> data-type="<%= @in_composite_chapter ? 'title' : 'document-title' %>">
|
3
|
-
<span class="os-text"><%= @title %></span>
|
4
|
-
</<%= @in_composite_chapter ? 'h3' : 'h2' %>>
|
5
|
-
<div data-type="metadata" style="display: none;">
|
6
|
-
<h1 data-type="document-title" itemprop="name"><%= @in_composite_chapter ? I18n.t(:eoc_composite_metadata_title) : @title %></h1>
|
7
|
-
<%= @metadata.paste %>
|
8
|
-
</div>
|
9
|
-
<%= @content %>
|
10
|
-
</div>
|