jekyll-nav-gen 0.0.5 → 0.1.3
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/fiddle/menu-builder.rb +98 -0
- data/lib/jekyll-nav-gen.rb +68 -9
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8adf8fe6de699460c3b70f41ba4d2737226b0240
|
4
|
+
data.tar.gz: 1ccff31df3b6463e8f5a3a8edc723620947a692e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 403d41cb9dfe339f0617f801b70a9f83339008548ea2d71f19312be2b77f07add4fd0c54e3c0d15fe33165e351b0527955427f416057333672d05fb57db8eba1
|
7
|
+
data.tar.gz: 16e960da91c396d5b5e2e166cf3aef9d478220a1ef585461dc790caf26edf4328f6c9b1238103ba2538d4d6510defb0c271179da3fceb2eaf7832d0b6fe56c1c
|
@@ -0,0 +1,98 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
html_string = <<-html
|
4
|
+
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="viewport" content="width=device-width, initial-scale=1 shrink-to-fit=no"> <meta name="author" content=""> <meta name="robots" content="index,follow"> <meta name="googlebot" content="index,follow"> <meta name="generator" content="jekyll"> <link rel="author" href="humans.txt"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="http://localhost:4000/assets/css/main.css"> <title>Home</title> <meta name="description" content=""> <meta name="author" content=""> <!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]--> <script>
|
5
|
+
var menu_data = [{"title":"Home","url":"/"},{"title":"Impressum","url":"/impressum","sub":[{"title":"Sub Impressum","url":"impressum/sub/"},{"title":"Sub2 Impressum","url":"impressum/sub2/"}]}];
|
6
|
+
</script> </head> <body class="fade"> <header> <div class="inner"> <nav> <a href="/" class="logo"></a> <input type="checkbox" id="nav"/> <label for="nav"></label> <a href="#" id="menu-icon"></a> <ul id="menu-list"> <li class="menu-item"> <a href="/">Home</a> </li> <li class="menu-item"><a href="#a-dead-simple-theme-boilerplate" class="jump-link">A dead simple theme boilerplate…</a></li> <li class="menu-item"><a href="#text" class="jump-link">Text</a></li> <li class="menu-item" id="last-item"> <a href="/impressum">Impressum</a> <ul class="sub-list"> <li class="menu-item sub-item"><a href="impressum/sub/">Sub Impressum</a></li> <li class="menu-item sub-item"><a href="impressum/sub2/">Sub2 Impressum</a></li> </ul> </li> </ul> </nav> </div> </header> <section> <div id="main"> <div class="menu-trigger"></div> <h1 id="徒弟-tou-dai--student--disciple">徒弟 (Tou Dai) – Student / Disciple</h1> <p>Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag.</p> <h2 id="a-dead-simple-theme-boilerplate">A dead simple theme boilerplate…</h2> <p>Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag.</p> <p><img src="assets/images/pexels-photo-127028.jpg" alt="kitty"/></p> <p>Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. <br/> Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag.</p> <h3 id="some-code">Some Code</h3> <div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/* global document */</span>
|
7
|
+
<span class="k">import</span> <span class="nx">jump</span> <span class="k">from</span> <span class="s1">'jump.js'</span><span class="p">;</span>
|
8
|
+
|
9
|
+
<span class="c1">// import easeInOutQuad from './easing';</span>
|
10
|
+
|
11
|
+
<span class="k">import</span> <span class="o">*</span> <span class="k">as</span> <span class="nx">ez</span> <span class="k">from</span> <span class="s1">'ez.js'</span><span class="p">;</span>
|
12
|
+
|
13
|
+
<span class="k">import</span> <span class="nx">easeInOutQuint</span> <span class="k">from</span> <span class="s1">'ez.js'</span><span class="p">;</span>
|
14
|
+
|
15
|
+
<span class="k">for</span> <span class="p">(</span><span class="kd">const</span> <span class="nx">key</span> <span class="k">of</span> <span class="nb">Object</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">ez</span><span class="p">))</span> <span class="p">{</span>
|
16
|
+
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"key"</span><span class="p">,</span> <span class="nx">key</span><span class="p">);</span>
|
17
|
+
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">ez</span><span class="p">[</span><span class="nx">key</span><span class="p">](</span><span class="mi">100</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">1000</span><span class="p">));</span>
|
18
|
+
<span class="p">}</span>
|
19
|
+
<span class="kd">const</span> <span class="nx">ready</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'document-ready'</span><span class="p">);</span>
|
20
|
+
<span class="nx">ready</span><span class="p">(()</span> <span class="o">=></span> <span class="p">{</span>
|
21
|
+
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'DOM is ready'</span><span class="p">);</span>
|
22
|
+
<span class="c1">// We get all h2 elements</span>
|
23
|
+
<span class="kd">const</span> <span class="nx">list</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByClassName</span><span class="p">(</span><span class="s1">'jump-link'</span><span class="p">);</span>
|
24
|
+
<span class="c1">// Get the menu ul</span>
|
25
|
+
<span class="kd">const</span> <span class="nx">menuList</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">'menu-list'</span><span class="p">);</span>
|
26
|
+
<span class="k">if</span> <span class="p">(</span><span class="nx">list</span><span class="p">.</span><span class="nx">length</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
|
27
|
+
<span class="k">for</span> <span class="p">(</span><span class="kd">let</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o"><</span> <span class="nx">list</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
|
28
|
+
<span class="kd">const</span> <span class="nx">element</span> <span class="o">=</span> <span class="nx">list</span><span class="p">.</span><span class="nx">item</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span> <span class="c1">// Isolate</span>
|
29
|
+
<span class="kd">let</span> <span class="nx">target</span> <span class="o">=</span> <span class="nx">element</span><span class="p">.</span><span class="nx">getAttribute</span><span class="p">(</span><span class="s1">'href'</span><span class="p">);</span>
|
30
|
+
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">target</span><span class="p">);</span>
|
31
|
+
<span class="nx">element</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="s1">'click'</span><span class="p">,</span> <span class="nx">e</span> <span class="o">=></span> <span class="p">{</span>
|
32
|
+
<span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span>
|
33
|
+
<span class="nx">jump</span><span class="p">(</span><span class="nx">target</span><span class="p">,</span> <span class="p">{</span>
|
34
|
+
<span class="na">duration</span><span class="p">:</span> <span class="mi">1500</span><span class="p">,</span>
|
35
|
+
<span class="na">callback</span><span class="p">:</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
|
36
|
+
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'did the jump!'</span><span class="p">);</span>
|
37
|
+
<span class="p">},</span>
|
38
|
+
<span class="na">easing</span><span class="p">:</span> <span class="nx">easeInOutQuint</span><span class="p">,</span>
|
39
|
+
<span class="na">a11y</span><span class="p">:</span> <span class="kc">false</span>
|
40
|
+
<span class="p">})</span> <span class="p">},</span> <span class="kc">false</span><span class="p">);</span>
|
41
|
+
<span class="p">}</span>
|
42
|
+
<span class="p">}</span>
|
43
|
+
<span class="p">});</span>
|
44
|
+
|
45
|
+
</code></pre></div></div> <h3 id="quote">Quote</h3> <blockquote> <p>Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag.</p> </blockquote> <h2 id="text">Text</h2> <p>Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. <code class="highlighter-rouge">var foo = "bah";</code> Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag.</p> <h3 id="subtext">Subtext</h3> <p>Bla bla bla. Blub blah bla bla. Bla bla. Bla bla bla blah <strong>blah</strong> <em>blag</em>. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag. Bla blah bla bla blah blah. Bla bla. Bla bla bla blah blah blag.</p> <footer> <p>Build with <a href="http://jekyllrb.com/" target="blank">jekyll</a> and ♥ </p> </footer> </div> </section> <script type="text/javascript" src="http://localhost:4000/assets/js/main.bundle.js"></script> </body> </html>
|
46
|
+
html
|
47
|
+
|
48
|
+
require 'nokogiri'
|
49
|
+
|
50
|
+
doc = Nokogiri::HTML(html_string)
|
51
|
+
# In the below line, I am first creating the array of elements to search
|
52
|
+
# in the html document. You may call it also array of CSS rules.
|
53
|
+
header_tags = (2..3).map { |num| "h#{num}" }
|
54
|
+
# => ["h1", "h2", "h3", "h4", "h5", "h6"]
|
55
|
+
# puts header_tags
|
56
|
+
headers = []
|
57
|
+
tags = doc.xpath("//h2 | //h3")
|
58
|
+
|
59
|
+
tags.each do |n|
|
60
|
+
headers << {"node" => n.name, "value" => n.content, "id" => n["id"] }
|
61
|
+
end
|
62
|
+
|
63
|
+
insub = false
|
64
|
+
headers.each_with_index {
|
65
|
+
|ele, i|
|
66
|
+
if ele["node"] == "h3"
|
67
|
+
insub = true
|
68
|
+
headers[i]["issub"] = insub
|
69
|
+
headers[i]["html"] = "<li class=\"ish3 menu-item sub-item\"><a href=\"\##{ele["id"]}\">#{ele["value"]}</a></li>\n"
|
70
|
+
else
|
71
|
+
insub = false
|
72
|
+
headers[i]["issub"] = insub
|
73
|
+
headers[i]["html"] = "<li class=\"ish2 menu-item\"><a href=\"\##{ele["id"]}\">#{ele["value"]}</a></li>\n"
|
74
|
+
end
|
75
|
+
}
|
76
|
+
|
77
|
+
html_str = ""
|
78
|
+
headers.each_with_index {
|
79
|
+
|ele, i|
|
80
|
+
if i != 0
|
81
|
+
if ele["issub"] == true
|
82
|
+
if headers[i-1]["issub"] != true
|
83
|
+
html_str += "<ul>\n"
|
84
|
+
end
|
85
|
+
elsif ele["issub"] == false && headers[i-1]["issub"] == true
|
86
|
+
html_str += "</ul>\n"
|
87
|
+
end
|
88
|
+
html_str += ele["html"]
|
89
|
+
else
|
90
|
+
html_str += ele["html"]
|
91
|
+
end
|
92
|
+
if i == headers.length - 1
|
93
|
+
if ele["issub"] == true
|
94
|
+
html_str+="</ul>\n"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
}
|
98
|
+
puts html_str
|
data/lib/jekyll-nav-gen.rb
CHANGED
@@ -2,16 +2,75 @@ Dir[File.dirname(__FILE__) + "/jekyll-nav-gen/*.rb"].each {|file| require file[0
|
|
2
2
|
require "nokogiri"
|
3
3
|
def inject(page)
|
4
4
|
# puts page.inspect
|
5
|
-
doc = Nokogiri.HTML(page.output)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
doc = Nokogiri.HTML(page.output) # read the page output as html
|
6
|
+
# lis_string = "" # will hold the lis
|
7
|
+
# for every h2 element
|
8
|
+
headers = []
|
9
|
+
xpathExpr = Jekyll.configuration({})['nav_gen']['xpath'] # is "//h2 | //h3"
|
10
|
+
tags = doc.xpath(xpathExpr)
|
11
|
+
|
12
|
+
tags.each do |n|
|
13
|
+
headers << {"node" => n.name, "value" => n.content, "id" => n["id"] }
|
12
14
|
end
|
13
|
-
|
14
|
-
|
15
|
+
insub = false
|
16
|
+
headers.each_with_index {
|
17
|
+
|ele, i|
|
18
|
+
if ele["node"] == "h3"
|
19
|
+
insub = true
|
20
|
+
headers[i]["issub"] = insub
|
21
|
+
headers[i]["html"] = "<li class=\"is-h3 menu-item sub-item\"><a class=\"jump-link\" href=\"\##{ele["id"]}\">#{ele["value"]}</a></li>\n"
|
22
|
+
else
|
23
|
+
insub = false
|
24
|
+
headers[i]["issub"] = insub
|
25
|
+
headers[i]["html"] = "<li class=\"is-h2 menu-item\"><a class=\"jump-link\" href=\"\##{ele["id"]}\">#{ele["value"]}</a>\n"
|
26
|
+
end
|
27
|
+
}
|
28
|
+
|
29
|
+
html_str = ""
|
30
|
+
headers.each_with_index {
|
31
|
+
|ele, i|
|
32
|
+
if i != 0
|
33
|
+
if ele["issub"] == true
|
34
|
+
if headers[i-1]["issub"] != true
|
35
|
+
html_str += "<ul class=\"sub-list\">\n"
|
36
|
+
end
|
37
|
+
elsif ele["issub"] == false && headers[i-1]["issub"] == true
|
38
|
+
html_str += "</ul></li>\n"
|
39
|
+
end
|
40
|
+
html_str += ele["html"]
|
41
|
+
else
|
42
|
+
html_str += ele["html"]
|
43
|
+
end
|
44
|
+
if i == headers.length - 1
|
45
|
+
if ele["issub"] == true
|
46
|
+
html_str+="</ul></li>\n"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
}
|
50
|
+
|
51
|
+
html_str += "<li class=\"menu-item\" id=\"last-item\">"
|
52
|
+
|
53
|
+
|
54
|
+
# ###########################
|
55
|
+
|
56
|
+
|
57
|
+
# doc.xpath("//h2").each do |node|
|
58
|
+
# txt = node.content # get the text
|
59
|
+
# id = node["id"] # get the id
|
60
|
+
# # build the string for the element
|
61
|
+
# li = "<li class=\"menu-item\"><a href=\"##{id}\" class=\"jump-link\">#{txt}</a></li>\n"
|
62
|
+
# # at it to the list
|
63
|
+
# lis_string+=li
|
64
|
+
# end
|
65
|
+
# add the last element we are going to replace to the content
|
66
|
+
# I know this is regex magic
|
67
|
+
# I need to use nokogiri for that but did not get it right
|
68
|
+
#
|
69
|
+
# for now
|
70
|
+
# lis_string += "<li class=\"menu-item\" id=\"last-item\">"
|
71
|
+
# replace the last string the added content
|
72
|
+
page.output = page.output.gsub(/(<li\ class\="menu\-item"\ id\="last\-item">)/i, html_str)
|
73
|
+
# puts page.output
|
15
74
|
end
|
16
75
|
|
17
76
|
Jekyll::Hooks.register :documents, :post_render do |page|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-nav-gen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabian Morón Zirfas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -45,6 +45,7 @@ executables: []
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
+
- fiddle/menu-builder.rb
|
48
49
|
- lib/jekyll-nav-gen.rb
|
49
50
|
homepage: https://github.com/fabianmoronzirfas/jekyll-nav-gen
|
50
51
|
licenses:
|