jekyll-nav-gen 0.0.5 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 901c9fb6d1f8622351c471c744e6e9922b6cb240
4
- data.tar.gz: 54dacc0687585244ed686b3c2b22b2f578a6fb02
3
+ metadata.gz: 8adf8fe6de699460c3b70f41ba4d2737226b0240
4
+ data.tar.gz: 1ccff31df3b6463e8f5a3a8edc723620947a692e
5
5
  SHA512:
6
- metadata.gz: e2cb006481828044ff1a6ebe49833ee0fb13dfeb44437cfeeb2699f08b78bf775aa8ebcf39d4811912273377968e1e43fd202172f5b65f0a1c6cc26c6810e7e1
7
- data.tar.gz: 748dbb73ba85ef9f80f0c6bae584210023d14424f57019dc54f0978407b71ec235d3555298d19a4e9ede7104e7ed9e49df1a3c83faf470c50878eb85859f0a4c
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">=&gt;</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">&gt;</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">&lt;</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">=&gt;</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">=&gt;</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 &hearts; </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
@@ -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
- navstr = ""
7
- doc.xpath("//h2").each do |node|
8
- txt = node.content
9
- id = node["id"]
10
- item = "<li class=\"menu-item\"><a href=\"##{id}\" class=\"jump-link\">#{txt}</a></li>\n"
11
- navstr+=item
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
- navstr += "<li class=\"menu-item\" id=\"last-item\">"
14
- page.output = page.output.gsub(/(<li\ class\="menu\-item"\ id\="last\-item">)/i, navstr)
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.0.5
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-12 00:00:00.000000000 Z
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: