Almirah 0.0.5 → 0.0.6

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: a4e770388ae634e216ef325d7f82a5d32d44bb5405dbea4e32783e3f0d2eea91
4
- data.tar.gz: 20871334c2ba2179e361abd1319634281bde45ba38032ec2fd3dabdea98f6e3a
3
+ metadata.gz: b3ac78a8239af2167c9f9e90c66fe8693a51d8909282757710e45b8a0375aba5
4
+ data.tar.gz: 544347bbb28b9e7b288f3c9b37e93c487bc6fd0ac863fcfa7c12fb2cc36d0bc7
5
5
  SHA512:
6
- metadata.gz: ad3b925c13c5a6794a82eabb3cfc81894c3f5711e5250cb0cb1dbaee0e79ff56e0e571e1dbcedb969c8384b3db82a021c082017d0cba001cb4ea1a2c314d21cd
7
- data.tar.gz: 38532ef2204233611d5330e5825c0ccc0234043eec49f54f81e768d2caecdbc20df78999a8dfed3b074b924fe7ae6c2bcc6d3658771863f7663ab75b8c5167d4
6
+ metadata.gz: d0170e32eac2109e8559413261c43a230730da8dc4add50342a807e3a054e57c8f5950e83cce4bdaded5b317697da863c82e13bd13cc0250887336d2ed2de77a
7
+ data.tar.gz: 8388732d6f4fd9d4b4e796470d1ce153a635484cf1d9400d48a3eb3f1d2146d70c8be649bac7927832a29990c6745b0dcc9e4ca247c00b6a5e5c5546d68228a0
@@ -3,10 +3,12 @@ require_relative "paragraph"
3
3
  class Heading < Paragraph
4
4
 
5
5
  attr_accessor :level
6
+ attr_accessor :anchor_id
6
7
 
7
8
  def initialize(text, level)
8
9
  @text = text
9
10
  @level = level
11
+ @anchor_id = self.getTextWithoutSpaces()
10
12
  end
11
13
 
12
14
  def to_html
@@ -15,10 +17,9 @@ class Heading < Paragraph
15
17
  s += "</table>"
16
18
  @@htmlTableRenderInProgress = false
17
19
  end
18
- headingLevel = level.to_s
19
- itemTextNoSpaces = self.getTextWithoutSpaces
20
- s += "<a name=\"#{itemTextNoSpaces}\"></a>\n\r"
21
- s += "<h#{headingLevel}> #{@text} <a href=\"\##{itemTextNoSpaces}\" class=\"heading_anchor\">"
20
+ headingLevel = level.to_s
21
+ s += "<a name=\"#{@anchor_id}\"></a>\n\r"
22
+ s += "<h#{headingLevel}> #{@text} <a href=\"\##{@anchor_id}\" class=\"heading_anchor\">"
22
23
  s += "&para;</a></h#{headingLevel}>"
23
24
  return s
24
25
  end
@@ -1,5 +1,6 @@
1
1
  require_relative "specification"
2
2
  require_relative "doc_items/doc_item"
3
+ require_relative "navigation_pane"
3
4
 
4
5
  class HtmlRender
5
6
 
@@ -7,13 +8,15 @@ class HtmlRender
7
8
  attr_accessor :htmlRows
8
9
  attr_accessor :outputFile
9
10
  attr_accessor :document
11
+ attr_accessor :nav_pane
10
12
 
11
- def initialize(document, template, outputFile)
13
+ def initialize(document, nav_pane, template, outputFile)
12
14
 
13
15
  @template = template
14
16
  @outputFile = outputFile
15
17
  @htmlRows = Array.new
16
18
  @document = document
19
+ @nav_pane = nav_pane
17
20
 
18
21
  self.render()
19
22
  self.saveRenderToFile()
@@ -40,6 +43,8 @@ class HtmlRender
40
43
  self.htmlRows.each do |r|
41
44
  file.puts r
42
45
  end
46
+ elsif s.include?('{{NAV_PANE}}')
47
+ file.puts self.nav_pane.to_html
43
48
  else
44
49
  file.puts s
45
50
  end
@@ -0,0 +1,25 @@
1
+ require_relative "doc_items/doc_item"
2
+ require_relative "specification"
3
+
4
+ class NavigationPane
5
+
6
+ attr_accessor :specifications
7
+
8
+ def initialize(specifications)
9
+ @specifications = specifications
10
+ end
11
+
12
+ def to_html
13
+ s = "<ul class=\"fa-ul\">\n"
14
+ @specifications.each do |spec|
15
+ s += "\t<li><span class=\"fa-li\"><i class=\"fa fa-folder-open-o\"> </i></span> #{spec.key.downcase}\n"
16
+ s += "\t\t<ul class=\"fa-ul\">\n"
17
+ s += "\t\t\t<li><span class=\"fa-li\"><i class=\"fa fa-plus-square-o\"> </i></span>\n"
18
+ s += "\t\t\t\t<a href=\".\\..\\#{spec.key.downcase }\\#{spec.key.downcase }.html\">#{spec.title}</a>\n"
19
+ s += "\t\t\t</li>\n"
20
+ s += "\t\t</ul>\n"
21
+ s += "\t</li>\n"
22
+ end
23
+ s += "</ul>\n"
24
+ end
25
+ end
@@ -0,0 +1,98 @@
1
+ require_relative "doc_items/doc_item"
2
+ require_relative "specification"
3
+ require_relative "html_render"
4
+ require_relative "navigation_pane"
5
+
6
+ class Project
7
+
8
+ attr_accessor :specifications
9
+ attr_accessor :project_root_directory
10
+ attr_accessor :gem_root
11
+ attr_accessor :specifications_dictionary
12
+
13
+ def initialize(path, gem_root)
14
+ @project_root_directory = path
15
+ @specifications = Array.new
16
+ @gem_root = gem_root
17
+ @specifications_dictionary = Hash.new
18
+
19
+ parse_all_documents()
20
+ link_all_specifications()
21
+ render_all_specifications()
22
+
23
+ end
24
+
25
+ def parse_all_documents
26
+
27
+ Dir.glob( "#{@project_root_directory}/**/*.md" ).each do |f|
28
+ puts f
29
+ spec = Specification.new(f)
30
+ @specifications.append(spec)
31
+ end
32
+ end
33
+
34
+ def link_all_specifications
35
+ combList = @specifications.combination(2)
36
+ combList.each do |c|
37
+ self.link_two_specifications(c[0], c[1])
38
+ end
39
+ end
40
+
41
+ def link_two_specifications(doc_A, doc_B)
42
+
43
+ if doc_A.key == doc_B.up_link_key
44
+ top_document = doc_A
45
+ bottom_document = doc_B
46
+ elsif doc_B.key == doc_A.up_link_key
47
+ top_document = doc_B
48
+ bottom_document = doc_A
49
+ else
50
+ puts "No Links"
51
+ return # no links
52
+ end
53
+
54
+ bottom_document.controlledParagraphs.each do |item|
55
+
56
+ if top_document.dictionary.has_key?(item.up_link.to_s)
57
+
58
+ topItem = top_document.dictionary[item.up_link.to_s]
59
+
60
+ unless topItem.down_links
61
+ topItem.down_links = Array.new
62
+ end
63
+ topItem.down_links.append(item)
64
+
65
+ #if tmp = /^([a-zA-Z]+)[-]\d+/.match(item.id)
66
+ # top_document.downlinkKey = tmp[1].upcase
67
+ #end
68
+ end
69
+ end
70
+ end
71
+
72
+ def render_all_specifications
73
+
74
+ # create a sidebar first
75
+ nav_pane = NavigationPane.new(@specifications)
76
+
77
+ pass = @project_root_directory
78
+
79
+ FileUtils.remove_dir(pass + "/build", true)
80
+ FileUtils.mkdir_p(pass + "/build/specifications")
81
+
82
+ @specifications.each do |spec|
83
+
84
+ img_src_dir = pass + "/specifications/" + spec.key.downcase + "/img"
85
+ img_dst_dir = pass + "/build/specifications/" + spec.key.downcase + "/img"
86
+
87
+ FileUtils.mkdir_p(img_dst_dir)
88
+
89
+ if File.directory?(img_src_dir)
90
+ FileUtils.copy_entry( img_src_dir, img_dst_dir )
91
+ end
92
+
93
+ HtmlRender.new( spec, nav_pane,
94
+ @gem_root + "/lib/almirah/templates/page.html",
95
+ "#{pass}/build/specifications/#{spec.key.downcase}/#{spec.key.downcase}.html" )
96
+ end
97
+ end
98
+ end
@@ -11,6 +11,7 @@ class Specification
11
11
 
12
12
  attr_accessor :path
13
13
  attr_accessor :docItems
14
+ attr_accessor :headings
14
15
  attr_accessor :title
15
16
  attr_accessor :key
16
17
  attr_accessor :up_link_key
@@ -24,6 +25,7 @@ class Specification
24
25
  @path = fele_path
25
26
  @title = ""
26
27
  @docItems = Array.new
28
+ @headings = Array.new
27
29
  @controlledParagraphs = Array.new
28
30
  @dictionary = Hash.new
29
31
  @tempMdTable = nil
@@ -58,8 +60,9 @@ class Specification
58
60
  value = res[2]
59
61
  item = Heading.new(value, level)
60
62
  self.docItems.append(item)
61
-
62
- if level == 1
63
+ self.headings.append(item)
64
+
65
+ if level == 1 && self.title == ""
63
66
  self.title = value
64
67
  end
65
68
 
@@ -3,6 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <!-- CSS -->
6
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
6
7
  <style>
7
8
  body {
8
9
  font-family: Verdana, sans-serif;
@@ -15,12 +16,12 @@
15
16
  #main {
16
17
  flex-grow: 2;
17
18
  display: flex;
18
- flex-direction: row-reverse;
19
+ flex-direction: row;
19
20
  }
20
21
  #content {
21
22
  flex-grow: 1;
22
23
  background-color: #fff;
23
- margin: 0px;
24
+ margin-top: 30px;
24
25
  padding: 10px 16px 10px 16px;
25
26
  overflow-x: auto;
26
27
  }
@@ -135,11 +136,68 @@
135
136
  margin-top: 4px;
136
137
  margin-bottom: 4px;
137
138
  }
139
+ #nav_pane{
140
+ flex-shrink: 0;
141
+ padding: 16px 8px 2px 8px;
142
+ background: #EEEEEE;
143
+ border-left: 1px solid #ddd;
144
+ position: fixed;
145
+ height: 100%; /* 100% Full-height */
146
+ visibility: hidden;
147
+ }
148
+ @media screen and (min-width: 0px) and (max-width: 1089px) {#nav_pane{width: 22%;}}
149
+ @media screen and (min-width: 1090px) and (max-width: 1279px) {#nav_pane{width: 240px;}}
150
+ @media screen and (min-width: 1280px) and (max-width: 1599px) {#nav_pane{width: 280px;}}
151
+ @media screen and (min-width: 1600px) and (max-width: 1919px) {#nav_pane{width: 320px;}}
152
+ @media screen and (min-width: 1920px) and (max-width: 2559px) {#nav_pane{width: 360px;}}
153
+ @media screen and (min-width: 2560px) {#nav_pane{width: 380px;}}
154
+ #top_nav{
155
+ background-color: #169;
156
+ overflow: hidden;
157
+ position: fixed;
158
+ width: 100%;
159
+ }
160
+ #top_nav a {
161
+ float: left;
162
+ color: white;
163
+ text-align: center;
164
+ padding: 4px 6px;
165
+ text-decoration: none;
166
+ font-size: 1.5em;
167
+ font-family: "Trebuchet MS", Verdana, sans-serif;
168
+ }
169
+ #top_nav a:hover {
170
+ background-color: black;
171
+ color: white;
172
+ }
173
+ #top_nav a.active {
174
+ background-color: #169;
175
+ color: white;
176
+ }
177
+
138
178
  </style>
179
+ <script>
180
+ function openNav() {
181
+ document.getElementById("nav_pane").style.visibility = "visible";
182
+ console.log("Mouse In")
183
+ }
184
+
185
+ function closeNav() {
186
+ document.getElementById("nav_pane").style.visibility = "hidden";
187
+ console.log("Mouse Out");
188
+ }
189
+ </script>
139
190
  </head>
140
191
  <body>
192
+ <div id="top_nav">
193
+ <a href="javascript:void(0)" onclick="openNav()"><span><i class="fa fa-bars" aria-hidden="true"></i></span>&nbsp;Navigation</a>
194
+ <a href="javascript:void(0)"> About</a>
195
+ </div>
141
196
  <div id="main">
142
- <div id="content">
197
+ <div id="nav_pane">
198
+ {{NAV_PANE}}
199
+ </div>
200
+ <div id="content" href="javascript:void(0)" onclick="closeNav()">
143
201
  {{CONTENT}}
144
202
  </div>
145
203
  </div>
data/lib/almirah.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  require "thor"
2
- require_relative "almirah/specification"
3
- require_relative "almirah/linker"
4
- require_relative "almirah/html_render"
2
+ require_relative "almirah/project"
5
3
 
6
4
  class CLI < Thor
7
5
  desc "please <pass>", "say <pass>"
@@ -17,42 +15,9 @@ class Almirah
17
15
  end
18
16
 
19
17
  def start(pass)
20
- # Documents
21
- documentList = Array.new
22
18
 
23
- # Parse
24
- Dir.glob( "#{pass}/**/*.md" ).each do |f|
25
- puts f
26
- spec = Specification.new(f)
27
- documentList.append(spec)
28
- end
29
-
30
- # Link
31
- linker = Linker.new
32
- combList = documentList.combination(2)
33
- combList.each do |c|
34
- linker.link(c[0], c[1])
35
- end
36
-
37
- # Render
38
- FileUtils.remove_dir(pass + "/build", true)
39
- FileUtils.mkdir_p(pass + "/build/specifications")
40
-
41
- documentList.each do |spec|
19
+ prj = Project.new pass, getGemRoot
42
20
 
43
- img_src_dir = pass + "/specifications/" + spec.key.downcase + "/img"
44
- img_dst_dir = pass + "/build/specifications/" + spec.key.downcase + "/img"
45
-
46
- FileUtils.mkdir_p(img_dst_dir)
47
-
48
- if File.directory?(img_src_dir)
49
- FileUtils.copy_entry( img_src_dir, img_dst_dir )
50
- end
51
-
52
- HtmlRender.new( spec,
53
- getGemRoot() + "/lib/almirah/templates/page.html",
54
- "#{pass}/build/specifications/#{spec.key.downcase}/#{spec.key.downcase}.html" )
55
- end
56
21
  end
57
22
 
58
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Almirah
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oleksandr Ivanov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-29 00:00:00.000000000 Z
11
+ date: 2024-01-31 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: The software part of the Almirah system
14
14
  email: oleksandr.ivanov.development@gmail.com
@@ -28,7 +28,8 @@ files:
28
28
  - lib/almirah/doc_items/markdown_table.rb
29
29
  - lib/almirah/doc_items/paragraph.rb
30
30
  - lib/almirah/html_render.rb
31
- - lib/almirah/linker.rb
31
+ - lib/almirah/navigation_pane.rb
32
+ - lib/almirah/project.rb
32
33
  - lib/almirah/specification.rb
33
34
  - lib/almirah/templates/page.html
34
35
  homepage: http://almirah.site
@@ -1,42 +0,0 @@
1
- require_relative "doc_items/doc_item"
2
- require_relative "specification"
3
-
4
- class Linker
5
-
6
- attr_accessor :field
7
-
8
- def initialize()
9
- @field = "field"
10
- end
11
-
12
- def link(doc_A, doc_B)
13
-
14
- if doc_A.key == doc_B.up_link_key
15
- top_document = doc_A
16
- bottom_document = doc_B
17
- elsif doc_B.key == doc_A.up_link_key
18
- top_document = doc_B
19
- bottom_document = doc_A
20
- else
21
- puts "No Links"
22
- return # no links
23
- end
24
-
25
- bottom_document.controlledParagraphs.each do |item|
26
-
27
- if top_document.dictionary.has_key?(item.up_link.to_s)
28
-
29
- topItem = top_document.dictionary[item.up_link.to_s]
30
-
31
- unless topItem.down_links
32
- topItem.down_links = Array.new
33
- end
34
- topItem.down_links.append(item)
35
-
36
- #if tmp = /^([a-zA-Z]+)[-]\d+/.match(item.id)
37
- # top_document.downlinkKey = tmp[1].upcase
38
- #end
39
- end
40
- end
41
- end
42
- end