muwu 3.2.0 → 4.0.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/lib/muwu/cli/help/summary +1 -1
- data/lib/muwu/cli/help/view +2 -2
- data/lib/muwu/controller/controller_interaction.rb +10 -4
- data/lib/muwu/default/default.rb +2 -8
- data/lib/muwu/helper/html_href_helper.rb +77 -77
- data/lib/muwu/helper/outline_helper.rb +22 -24
- data/lib/muwu/helper/regexp_lib.rb +26 -51
- data/lib/muwu/helper/sanitizer_helper.rb +5 -5
- data/lib/muwu/manifest/manifest.rb +52 -70
- data/lib/muwu/manifest_task/document_html.rb +16 -22
- data/lib/muwu/manifest_task/text.rb +13 -13
- data/lib/muwu/manifest_task/{text_item.rb → topic.rb} +9 -9
- data/lib/muwu/manifest_task_builder/text_builder.rb +24 -24
- data/lib/muwu/manifest_task_builder/{text_item_builder.rb → topic_builder.rb} +48 -74
- data/lib/muwu/project/project.rb +0 -8
- data/lib/muwu/project_builder/assets/config/css/base/html_elements.scss +57 -62
- data/lib/muwu/project_builder/assets/config/css/base/index.scss +3 -2
- data/lib/muwu/project_builder/assets/config/css/base/section_muwu_contents.scss +35 -57
- data/lib/muwu/project_builder/assets/config/css/base/section_muwu_metadata.scss +2 -14
- data/lib/muwu/project_builder/assets/config/css/base/section_muwu_navigator.scss +6 -11
- data/lib/muwu/project_builder/assets/config/css/base/section_muwu_subcontents.scss +35 -57
- data/lib/muwu/project_builder/assets/config/css/base/section_muwu_text.scss +2 -48
- data/lib/muwu/project_builder/assets/config/css/base/section_muwu_title.scss +18 -23
- data/lib/muwu/project_builder/assets/config/css/base/section_muwu_topic.scss +38 -0
- data/lib/muwu/project_builder/assets/config/css/colors/dark.scss +33 -31
- data/lib/muwu/project_builder/assets/config/css/colors/index.scss +2 -1
- data/lib/muwu/project_builder/assets/config/css/colors/light.scss +33 -33
- data/lib/muwu/project_builder/project_validator.rb +7 -7
- data/lib/muwu/project_exception/{lynx_not_available.rb → no_html_viewer_configured.rb} +2 -2
- data/lib/muwu/project_exception/{text_source_file_not_found.rb → topic_source_file_not_found.rb} +6 -7
- data/lib/muwu/project_options/project_options.rb +4 -1
- data/lib/muwu/project_options_builder/project_option_validator_key.rb +17 -19
- data/lib/muwu/project_options_builder/project_option_validator_value.rb +42 -59
- data/lib/muwu/render_concat/render_concat.rb +22 -22
- data/lib/muwu/render_html_partial/js_library/navigation.js +1 -1
- data/lib/muwu/render_html_partial/render_contents.rb +139 -139
- data/lib/muwu/render_html_partial/render_document_html.rb +2 -2
- data/lib/muwu/render_html_partial/render_metadata.rb +25 -37
- data/lib/muwu/render_html_partial/render_navigator.rb +39 -39
- data/lib/muwu/render_html_partial/render_subcontents.rb +142 -143
- data/lib/muwu/render_html_partial/render_text.rb +11 -11
- data/lib/muwu/render_html_partial/render_title.rb +21 -21
- data/lib/muwu/render_html_partial/{render_text_item.rb → render_topic.rb} +62 -35
- data/lib/muwu/render_html_partial_builder/render_contents_builder.rb +17 -23
- data/lib/muwu/render_html_partial_builder/render_subcontents_builder.rb +3 -9
- data/lib/muwu/render_html_partial_builder/render_text_builder.rb +11 -11
- data/lib/muwu/render_html_partial_builder/render_topic_builder.rb +281 -0
- data/lib/muwu/render_inspector/render_inspector.rb +58 -58
- data/lib/muwu/viewer/viewer.rb +2 -2
- data/lib/muwu.rb +2 -7
- metadata +30 -78
- data/lib/muwu/project_builder/assets/config/css/base/mixin_text_section_heading.scss +0 -24
- data/lib/muwu/render_html/render_markup_to_html.rb +0 -87
- data/lib/muwu/render_html_partial_builder/render_text_item_builder.rb +0 -274
- data/lib/muwu/var/deflistdiv.rb +0 -239
|
@@ -2,15 +2,15 @@ module Muwu
|
|
|
2
2
|
module RenderHtmlPartial
|
|
3
3
|
class Title
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
include Muwu
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
|
|
8
|
+
|
|
9
9
|
attr_accessor(
|
|
10
10
|
:destination,
|
|
11
11
|
:metadata
|
|
12
12
|
)
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
|
|
15
15
|
def render
|
|
16
16
|
@destination.margin_to_zero
|
|
@@ -21,17 +21,17 @@ module Muwu
|
|
|
21
21
|
end
|
|
22
22
|
@destination.margin_to_zero
|
|
23
23
|
end
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
|
|
25
|
+
|
|
26
26
|
def render_title_metadata
|
|
27
|
-
@destination.margin_indent do
|
|
27
|
+
@destination.margin_indent do
|
|
28
28
|
@metadata.each_pair do |key, value|
|
|
29
29
|
write_tag_h1(key, value)
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
|
|
34
|
+
|
|
35
35
|
def write_tag_div_close
|
|
36
36
|
@destination.write_line tag_div_close
|
|
37
37
|
end
|
|
@@ -40,32 +40,32 @@ module Muwu
|
|
|
40
40
|
def write_tag_div_open
|
|
41
41
|
@destination.write_line tag_div_open
|
|
42
42
|
end
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
|
|
45
45
|
def write_tag_h1(key, value)
|
|
46
46
|
@destination.write_line tag_h1(key, value)
|
|
47
47
|
end
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
|
|
49
|
+
|
|
50
50
|
|
|
51
51
|
private
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
|
|
54
54
|
def tag_h1(key, value)
|
|
55
|
-
"<h1 data-
|
|
55
|
+
"<h1 data-title-attr='#{key.downcase}'>#{value}</h1>"
|
|
56
56
|
end
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
|
|
58
|
+
|
|
59
59
|
def tag_div_close
|
|
60
60
|
"</div>"
|
|
61
61
|
end
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
|
|
63
|
+
|
|
64
64
|
def tag_div_open
|
|
65
|
-
"<div
|
|
66
|
-
end
|
|
65
|
+
"<div data-document-block='title'>"
|
|
66
|
+
end
|
|
67
|
+
|
|
67
68
|
|
|
68
|
-
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
71
|
end
|
|
@@ -1,33 +1,35 @@
|
|
|
1
1
|
module Muwu
|
|
2
2
|
module RenderHtmlPartial
|
|
3
|
-
class
|
|
3
|
+
class Topic
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
include Muwu
|
|
7
7
|
|
|
8
|
-
|
|
9
8
|
require 'commonmarker'
|
|
9
|
+
require 'nokogiri'
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
attr_accessor(
|
|
13
|
+
:commonmarker_options,
|
|
14
|
+
:depth,
|
|
13
15
|
:destination,
|
|
14
16
|
:distinct,
|
|
15
17
|
:does_have_source_text,
|
|
16
18
|
:end_links,
|
|
19
|
+
:generate_inner_identifiers,
|
|
17
20
|
:heading,
|
|
18
21
|
:heading_origin,
|
|
19
|
-
:
|
|
22
|
+
:html_id,
|
|
23
|
+
:id,
|
|
20
24
|
:is_parent_heading,
|
|
21
|
-
:markup_renderer,
|
|
22
25
|
:numbering,
|
|
26
|
+
:numbering_as_text,
|
|
23
27
|
:project,
|
|
24
|
-
:section_depth,
|
|
25
|
-
:section_number_as_attr,
|
|
26
|
-
:section_number_as_text,
|
|
27
|
-
:sections,
|
|
28
28
|
:source_filename_absolute,
|
|
29
29
|
:source_filename_relative,
|
|
30
|
-
:
|
|
30
|
+
:source_relative_segments,
|
|
31
|
+
:subtopics,
|
|
32
|
+
:subtopics_are_distinct,
|
|
31
33
|
:text_root_name,
|
|
32
34
|
:will_render_section_number
|
|
33
35
|
)
|
|
@@ -39,11 +41,11 @@ module Muwu
|
|
|
39
41
|
render_section_number
|
|
40
42
|
render_heading
|
|
41
43
|
render_text
|
|
42
|
-
if (@is_parent_heading == true) && (@
|
|
44
|
+
if (@is_parent_heading == true) && (@subtopics_are_distinct == true)
|
|
43
45
|
render_end_links
|
|
44
|
-
|
|
45
|
-
elsif (@is_parent_heading == true) && (@
|
|
46
|
-
|
|
46
|
+
render_subtopics
|
|
47
|
+
elsif (@is_parent_heading == true) && (@subtopics_are_distinct == false)
|
|
48
|
+
render_subtopics
|
|
47
49
|
render_end_links
|
|
48
50
|
elsif (@is_parent_heading == false)
|
|
49
51
|
render_end_links
|
|
@@ -83,10 +85,10 @@ module Muwu
|
|
|
83
85
|
end
|
|
84
86
|
|
|
85
87
|
|
|
86
|
-
def
|
|
88
|
+
def render_subtopics
|
|
87
89
|
@destination.padding_vertical(1) do
|
|
88
|
-
@
|
|
89
|
-
|
|
90
|
+
@subtopics.each do |subtopic|
|
|
91
|
+
subtopic.render
|
|
90
92
|
end
|
|
91
93
|
end
|
|
92
94
|
end
|
|
@@ -140,11 +142,10 @@ module Muwu
|
|
|
140
142
|
|
|
141
143
|
|
|
142
144
|
def write_text_source_to_html
|
|
143
|
-
@destination.write_inline
|
|
145
|
+
@destination.write_inline source_convert_to_html
|
|
144
146
|
end
|
|
145
147
|
|
|
146
148
|
|
|
147
|
-
|
|
148
149
|
private
|
|
149
150
|
|
|
150
151
|
|
|
@@ -160,13 +161,49 @@ module Muwu
|
|
|
160
161
|
end
|
|
161
162
|
|
|
162
163
|
|
|
163
|
-
def
|
|
164
|
-
|
|
164
|
+
def source_convert_to_html
|
|
165
|
+
case File.extname(@source_filename_absolute).downcase
|
|
166
|
+
when '.md'
|
|
167
|
+
source_html_parse(source_html_from_md)
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def source_html_from_md
|
|
173
|
+
Commonmarker.to_html(File.read(@source_filename_absolute), options: @commonmarker_options, plugins: { syntax_highligher: nil })
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def source_html_parse(source_html)
|
|
178
|
+
fragment = Nokogiri::HTML5.fragment(source_html)
|
|
179
|
+
fragment.css('a.anchor[aria-hidden]').each { |node| node.remove }
|
|
180
|
+
starting_heading = nil
|
|
181
|
+
if fragment.children.any? && fragment.children.first.name =~ /\Ah\d{1}\z/i
|
|
182
|
+
starting_heading = fragment.first_element_child.remove
|
|
183
|
+
starting_heading['data-topic'] = 'section-heading'
|
|
184
|
+
starting_heading['data-depth'] = @depth
|
|
185
|
+
end
|
|
186
|
+
if @generate_inner_identifiers
|
|
187
|
+
%w(blockquote dd dl dt h1 h2 h3 h4 h5 h6 li ol p pre table td tr ul).each do |element|
|
|
188
|
+
fragment.css(element).each do |node|
|
|
189
|
+
data_source_class = []
|
|
190
|
+
@source_relative_segments.each_index do |i|
|
|
191
|
+
data_source_class << "#{source_relative_segments[i]}-#{node.name}"
|
|
192
|
+
end
|
|
193
|
+
node['data-topic-source-class'] = data_source_class.join(' ')
|
|
194
|
+
node['data-topic-id-class'] = "#{id}-#{node.name}"
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
if starting_heading
|
|
199
|
+
fragment.children.first.previous = starting_heading
|
|
200
|
+
end
|
|
201
|
+
fragment.to_html
|
|
165
202
|
end
|
|
166
203
|
|
|
167
204
|
|
|
168
205
|
def tag_nav_a(name, href)
|
|
169
|
-
"<a class='document_link' href='#{href}'>[#{name}]</a>"
|
|
206
|
+
"<a class='document_link' data-topic='navigation-link' href='#{href}'>[#{name}]</a>"
|
|
170
207
|
end
|
|
171
208
|
|
|
172
209
|
|
|
@@ -181,7 +218,7 @@ module Muwu
|
|
|
181
218
|
|
|
182
219
|
|
|
183
220
|
def tag_nav_end_links_open
|
|
184
|
-
"<nav
|
|
221
|
+
"<nav data-topic='navigation'>"
|
|
185
222
|
end
|
|
186
223
|
|
|
187
224
|
|
|
@@ -191,7 +228,7 @@ module Muwu
|
|
|
191
228
|
|
|
192
229
|
|
|
193
230
|
def tag_heading
|
|
194
|
-
"<
|
|
231
|
+
"<div data-topic='section-heading' data-depth='#{@depth}'>#{@heading}</div>"
|
|
195
232
|
end
|
|
196
233
|
|
|
197
234
|
|
|
@@ -201,17 +238,7 @@ module Muwu
|
|
|
201
238
|
|
|
202
239
|
|
|
203
240
|
def tag_section_open
|
|
204
|
-
"<section data-
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
def tag_section_with_source_open
|
|
209
|
-
"<section data-section_depth='#{@section_depth}' data-section_number='#{@section_number_as_text}' data-source='#{@source_filename_relative}' id='#{@html_attr_id}'>"
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
def tag_section_without_source_open
|
|
214
|
-
"<section data-section_depth='#{@section_depth}' data-section_number='#{@section_number_as_text}' id='#{@html_attr_id}'>"
|
|
241
|
+
"<section data-document-block='topic' data-topic-depth='#{@depth}' data-section-number='#{@numbering_as_text}' data-source='#{@source_filename_relative}' id='#{@html_id}'>"
|
|
215
242
|
end
|
|
216
243
|
|
|
217
244
|
|
|
@@ -221,7 +248,7 @@ module Muwu
|
|
|
221
248
|
|
|
222
249
|
|
|
223
250
|
def tag_span_section_number
|
|
224
|
-
"<
|
|
251
|
+
"<div data-topic='section-number' data-depth='#{@depth}'>#{@numbering_as_text}</div>"
|
|
225
252
|
end
|
|
226
253
|
|
|
227
254
|
|
|
@@ -7,9 +7,9 @@ module Muwu
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
attr_accessor(
|
|
10
|
-
:task_contents,
|
|
11
10
|
:project,
|
|
12
11
|
:renderer,
|
|
12
|
+
:task_contents,
|
|
13
13
|
:text_root_name
|
|
14
14
|
)
|
|
15
15
|
|
|
@@ -32,11 +32,10 @@ module Muwu
|
|
|
32
32
|
@text_root_name = task_contents.text_root_name
|
|
33
33
|
phase_1_set_text_root_name
|
|
34
34
|
phase_2_set_destination
|
|
35
|
-
phase_2_set_href_helper
|
|
36
35
|
phase_2_set_html_attr_id
|
|
37
36
|
phase_2_set_item_depth_max
|
|
38
37
|
phase_2_set_project
|
|
39
|
-
|
|
38
|
+
phase_2_set_topics
|
|
40
39
|
phase_2_set_will_render_section_numbers
|
|
41
40
|
end
|
|
42
41
|
|
|
@@ -51,28 +50,23 @@ module Muwu
|
|
|
51
50
|
end
|
|
52
51
|
|
|
53
52
|
|
|
54
|
-
def phase_2_set_href_helper
|
|
55
|
-
@renderer.href_helper = Helper::HtmlHrefHelper.new(@task_contents)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
|
|
59
53
|
def phase_2_set_html_attr_id
|
|
60
|
-
@renderer.html_attr_id = ['contents', @text_root_name].join('
|
|
54
|
+
@renderer.html_attr_id = ['contents', @text_root_name].join('-')
|
|
61
55
|
end
|
|
62
56
|
|
|
63
57
|
|
|
64
58
|
def phase_2_set_item_depth_max
|
|
65
59
|
@renderer.item_depth_max = @project.options.render_sections_distinctly_depth_max
|
|
66
60
|
end
|
|
67
|
-
|
|
68
|
-
|
|
61
|
+
|
|
62
|
+
|
|
69
63
|
def phase_2_set_project
|
|
70
64
|
@renderer.project = @project
|
|
71
65
|
end
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def
|
|
75
|
-
@renderer.
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def phase_2_set_topics
|
|
69
|
+
@renderer.topics = determine_topics
|
|
76
70
|
end
|
|
77
71
|
|
|
78
72
|
|
|
@@ -83,18 +77,18 @@ module Muwu
|
|
|
83
77
|
|
|
84
78
|
|
|
85
79
|
private
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
def
|
|
89
|
-
determine_text_root_blocks.map { |trb| trb.
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def determine_topics
|
|
83
|
+
determine_text_root_blocks.map { |trb| trb.topics }.flatten
|
|
90
84
|
end
|
|
91
|
-
|
|
92
|
-
|
|
85
|
+
|
|
86
|
+
|
|
93
87
|
def determine_text_root_blocks
|
|
94
88
|
@task_contents.text_blocks_by_name(@text_root_name)
|
|
95
89
|
end
|
|
96
|
-
|
|
97
|
-
|
|
90
|
+
|
|
91
|
+
|
|
98
92
|
end
|
|
99
93
|
end
|
|
100
94
|
end
|
|
@@ -31,7 +31,6 @@ module Muwu
|
|
|
31
31
|
@task_subcontents = task_subcontents
|
|
32
32
|
@text_root_name = task_subcontents.text_root_name
|
|
33
33
|
set_destination
|
|
34
|
-
set_href_helper
|
|
35
34
|
set_html_attr_id
|
|
36
35
|
set_item_depth_max
|
|
37
36
|
set_project
|
|
@@ -45,13 +44,8 @@ module Muwu
|
|
|
45
44
|
end
|
|
46
45
|
|
|
47
46
|
|
|
48
|
-
def set_href_helper
|
|
49
|
-
@renderer.href_helper = Helper::HtmlHrefHelper.new(@task_subcontents)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
|
|
53
47
|
def set_html_attr_id
|
|
54
|
-
@renderer.html_attr_id =
|
|
48
|
+
@renderer.html_attr_id = 'subcontents'
|
|
55
49
|
end
|
|
56
50
|
|
|
57
51
|
|
|
@@ -63,7 +57,7 @@ module Muwu
|
|
|
63
57
|
def set_project
|
|
64
58
|
@renderer.project = @project
|
|
65
59
|
end
|
|
66
|
-
|
|
60
|
+
|
|
67
61
|
|
|
68
62
|
def set_text_root_blocks
|
|
69
63
|
@renderer.text_root_blocks = @task_subcontents.text_root_blocks
|
|
@@ -73,7 +67,7 @@ module Muwu
|
|
|
73
67
|
def set_text_root_name
|
|
74
68
|
@renderer.text_root_name = @text_root_name
|
|
75
69
|
end
|
|
76
|
-
|
|
70
|
+
|
|
77
71
|
|
|
78
72
|
def set_will_render_section_numbers
|
|
79
73
|
@renderer.will_render_section_numbers = @project.options.render_section_numbers
|
|
@@ -31,7 +31,7 @@ module Muwu
|
|
|
31
31
|
set_destination
|
|
32
32
|
set_project
|
|
33
33
|
set_text_root_name
|
|
34
|
-
|
|
34
|
+
set_topics
|
|
35
35
|
finally_set_html_attr_id
|
|
36
36
|
end
|
|
37
37
|
|
|
@@ -56,8 +56,8 @@ module Muwu
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
def
|
|
60
|
-
@renderer.
|
|
59
|
+
def set_topics
|
|
60
|
+
@renderer.topics = determine_topics
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
|
|
@@ -65,18 +65,18 @@ module Muwu
|
|
|
65
65
|
private
|
|
66
66
|
|
|
67
67
|
|
|
68
|
-
def
|
|
69
|
-
|
|
70
|
-
@manifest_text.
|
|
71
|
-
|
|
68
|
+
def determine_topics
|
|
69
|
+
topics = []
|
|
70
|
+
@manifest_text.topics.each do |topic|
|
|
71
|
+
topics << build_topic(topic)
|
|
72
72
|
end
|
|
73
|
-
|
|
73
|
+
topics
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
|
|
77
|
-
def
|
|
78
|
-
RenderHtmlPartialBuilder::
|
|
79
|
-
b.
|
|
77
|
+
def build_topic(topic)
|
|
78
|
+
RenderHtmlPartialBuilder::TopicBuilder.build do |b|
|
|
79
|
+
b.build_from_manifest_topic(topic)
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
82
|
|