madness 0.8.4 → 0.8.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe93b51cce9d5f1e2b37597b86bbcab62273fd2ba588d013308b194bb607d20e
4
- data.tar.gz: 4b5e8a9de2af92f7aef8fa86792c8f3156ae9aba4b5049507693c2467dcc439c
3
+ metadata.gz: 2ffaa41eacda31f502ff69d9c68189533cff31f293907089288b496e82038304
4
+ data.tar.gz: 44053382dd7dda362a34dd57e9663b7e9d46d510ca5cdecef4f1625468b8c376
5
5
  SHA512:
6
- metadata.gz: 78e416333ece7eb2a236a07593c31f78cb93919f8842b5fede75baff6ae6e07d956ff0b1f30501c1be99416aab4ce036885d49800eeea5d38d5f811745d4c55d
7
- data.tar.gz: d237b707b9a7d7a6d9334942a760811f51463a9aa04c007f54789bfa89be08cd04ac6bf7e6f946d86aa45302b50d3d6e4e7c5d4d83ffec88fb4a42c65cdb063c
6
+ metadata.gz: 33dc087ef4dec3a0f79019846bd4aadf6b6eab4dd81ed9049d4d619c89bed23235de14879a99296e264dbb14aa87102b841f7a9a1d2f600ab7828d82286a817c
7
+ data.tar.gz: 74c35835a66aa14e44e9885c759445c64b82b8801bc8663c1d088d3d7fa123044d66331068200c649a943545ee8377a75ac038329d6feae4be5f5d92a6f1f1f7
@@ -8,36 +8,13 @@ module Madness
8
8
  include ServerHelper
9
9
  using StringRefinements
10
10
 
11
- attr_reader :base, :path
11
+ attr_reader :base, :path, :type, :file, :dir, :title
12
12
 
13
13
  def initialize(path)
14
14
  @path = path
15
15
  @base = path.empty? ? docroot : "#{docroot}/#{path}"
16
16
  @base.chomp! '/'
17
- end
18
-
19
- # Return :readme, :file or :empty
20
- def type
21
- set_base_attributes unless @type
22
- @type
23
- end
24
-
25
- # Return the path to the actual markdown file
26
- def file
27
- set_base_attributes unless @file
28
- @file
29
- end
30
-
31
- # Return the path to the document directory
32
- def dir
33
- set_base_attributes unless @dir
34
- @dir
35
- end
36
-
37
- # Return the path to the document directory
38
- def title
39
- set_base_attributes unless @title
40
- @title
17
+ set_base_attributes
41
18
  end
42
19
 
43
20
  # Return the HTML for that document
@@ -92,23 +69,25 @@ module Madness
92
69
  @markdown ||= File.read file
93
70
  end
94
71
 
72
+ def doc
73
+ @doc ||= CommonMarker.render_doc markdown, :DEFAULT, [:table]
74
+ end
75
+
95
76
  # Convert markdown to HTML, with some additional processing:
96
77
  # 1. Add anchors to headers
97
78
  # 2. Syntax highilghting
98
79
  # 3. Prepend H1 if needed
99
80
  def markdown_to_html
100
- doc = CommonMarker.render_doc markdown, :DEFAULT, [:table]
101
-
102
- replace_toc_marker doc
103
- add_anchor_ids doc
81
+ replace_toc_marker
82
+ prepend_h1 if config.auto_h1
83
+ add_anchor_ids
104
84
  html = doc.to_html :UNSAFE
105
85
  html = syntax_highlight(html) if config.highlighter
106
- html = prepend_h1(html) if config.auto_h1
107
86
  html
108
87
  end
109
88
 
110
89
  # Add anchors with IDs before all headers
111
- def add_anchor_ids(doc)
90
+ def add_anchor_ids
112
91
  doc.walk do |node|
113
92
  if node.type == :header
114
93
  anchor = CommonMarker::Node.new(:inline_html)
@@ -123,39 +102,38 @@ module Madness
123
102
  end
124
103
 
125
104
  # Replace <!-- TOC --> with a Table of Contents for the page
126
- def replace_toc_marker(doc)
105
+ def replace_toc_marker
127
106
  toc_marker = doc.find do |node|
128
107
  node.type == :html and node.string_content.include? "<!-- TOC -->"
129
108
  end
130
109
 
131
110
  return unless toc_marker
132
111
 
112
+ toc_marker.insert_after document_toc
113
+ toc_marker.insert_after CommonMarker.render_doc("## Table of Contents").first_child
114
+ end
115
+
116
+ # Returns a UL object containing the document table of contents
117
+ def document_toc
133
118
  toc = []
134
119
  doc.walk do |node|
135
120
  next unless node.type == :header
136
121
  level = node.header_level
137
122
  next unless level.between? 2, 3
138
123
  text = node.first_child.string_content
139
-
140
- if level == 2
141
- toc << "- [#{text}](##{text.to_slug})"
142
- else
143
- toc << " - [#{text}](##{text.to_slug})"
144
- end
124
+ spacer = " " * (level - 1)
125
+ toc << "#{spacer}- [#{text}](##{text.to_slug})"
145
126
  end
146
127
 
147
128
  toc = toc.join "\n"
148
- toc = CommonMarker.render_doc toc
149
- toc_marker.insert_after toc.first_child
150
- toc_marker.insert_after CommonMarker.render_doc("## Table of Contents").first_child
129
+ CommonMarker.render_doc(toc).first_child
151
130
  end
152
131
 
153
132
  # If the document does not start with an H1 tag, add it.
154
- def prepend_h1(html)
155
- unless html[0..3] == "<h1>"
156
- html = "<h1>#{title}</h1>\n#{html}"
157
- end
158
- html
133
+ def prepend_h1
134
+ return if doc.first_child.type == :header and doc.first_child.header_level == 1
135
+ h1 = CommonMarker.render_doc("# #{title}").first_child
136
+ doc.first_child.insert_before h1
159
137
  end
160
138
 
161
139
  # Apply syntax highlighting with CodeRay. This will parse for any
@@ -1,3 +1,3 @@
1
1
  module Madness
2
- VERSION = "0.8.4"
2
+ VERSION = "0.8.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: madness
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-08 00:00:00.000000000 Z
11
+ date: 2020-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coderay
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '4.0'
131
+ version: '5.1'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '4.0'
138
+ version: '5.1'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rack-ssl
141
141
  requirement: !ruby/object:Gem::Requirement