middleman-navsidebar 0.1.8

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d800b32afb0c3c26cd403c06af6bcb6fb363122a
4
+ data.tar.gz: fe835d889680511bf181fd0ef19c4aaf10db07ba
5
+ SHA512:
6
+ metadata.gz: 56e6742ab10737a286ce5ca74d5bfc1e1f8dac1c6d3c43c7841fed0cef7eeca7765d55ad4abc77d58369b76138f4932afc430520b1f18e0384422cc890a5af06
7
+ data.tar.gz: ac5339ddcc43a5a26658762cde58fb457d9ccb06c264e3d2438b6dd67d208b165632f9bb5b09ca9f911b15a3163a0c2130ab2ef9eab17a806446a28e758aa264
@@ -0,0 +1,5 @@
1
+ # Ignore bundler lock file
2
+ /Gemfile.lock
3
+
4
+ # Ignore pkg folder
5
+ /pkg
data/Gemfile ADDED
@@ -0,0 +1,20 @@
1
+ # If you have OpenSSL installed, we recommend updating
2
+ # the following line to use "https"
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in middleman-navsidebar.gemspec
6
+ gemspec
7
+
8
+ group :development do
9
+ gem 'rake'
10
+ gem 'rdoc'
11
+ gem 'yard'
12
+ gem 'pry', :require => true # for debugging
13
+ end
14
+
15
+ group :test do
16
+ gem 'cucumber'
17
+ gem 'fivemat'
18
+ gem 'aruba'
19
+ gem 'rspec'
20
+ end
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Bryan Braun
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,87 @@
1
+ # Middleman-NavTree
2
+
3
+ `middleman-navsidebar` is an extension for the Middleman static site generator that lets you generate navigation trees and menus based on your site structure.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'middleman-navsidebar'
10
+
11
+ And then execute:
12
+
13
+ $ bundle install
14
+
15
+ Activate the extension with default options by adding the following to middleman's `config.rb`:
16
+
17
+ activate :navsidebar
18
+
19
+ Alternatively, you can specify the options you want. Here's an example showing the explicit defaults:
20
+
21
+ activate :navsidebar do |options|
22
+ options.data_file = 'tree.yml' # The data file where our navtree is stored.
23
+ options.source_dir = 'source' # The `source` directory we want to represent in our nav tree.
24
+ options.ignore_files = ['sitemap.xml', 'robots.txt'] # An array of files we want to ignore when building our tree.
25
+ options.ignore_dir = ['assets'] # An array of directories we want to ignore when building our tree.
26
+ options.home_title = 'Home' # The default link title of the home page (located at "/"), if otherwise not detected.
27
+ options.promote_files = ['index.html.erb'] # Any files we might want to promote to the front of our navigation
28
+ options.ext_whitelist = [] # If you add extensions (like '.md') to this array, it builds a whitelist of filetypes for inclusion in the navtree.
29
+ end
30
+
31
+ ## Usage Examples
32
+
33
+ When you activate the extension, a tree.yml file will be added to your `data` folder, mimicking your directory structure. Suppose the structure looks like this:
34
+
35
+ ![Directory Structure](screenshots/directory-structure.png)
36
+
37
+ We can print the entire navigation tree to our template with the `tree_to_html` helper:
38
+
39
+ <ul><%= tree_to_html(data.tree) %></ul>
40
+
41
+ Here's the tree.yml file and the resulting rendered navtree (styled):
42
+
43
+ ![Full tree styled](screenshots/ex1-fulltree.png)
44
+
45
+ `data.tree` refers to the contents of `/data/tree.yml` (see http://middlemanapp.com/advanced/local-data/ for more information about data files).
46
+
47
+ You can just as easily print subtrees at any level:
48
+
49
+ <ul><%= tree_to_html(data.tree['chapter-1']) %></ul>
50
+
51
+ ![Subtree styled](screenshots/ex2-subtree.png)
52
+
53
+ <ul><%= tree_to_html(data.tree['chapter-1']['exercises']) %></ul>
54
+
55
+ ![Subsubtree styled](screenshots/ex3-subsubtree.png)
56
+
57
+ A second paramter allows you to limit the depth of your trees and subtrees:
58
+
59
+ <ul><%= tree_to_html(data.tree, 2) %></ul>
60
+
61
+ ![Full tree with depth limit styled](screenshots/ex4-depthlimit.png)
62
+
63
+ You can combine both techniques to print menus at any level, with a specific depth:
64
+
65
+ <ul><%= tree_to_html(data.tree['chapter-1'], 1) %></ul>
66
+
67
+ ![Subtree with depth limit styled](screenshots/ex5-subtree_and_depthlimit.png)
68
+
69
+ Another helper in the gem allows you to add next/previous links for paginating
70
+ through the tree. For example:
71
+
72
+ <%= previous_link(data.tree) %> <%= next_link(data.tree) %>
73
+
74
+ ![Styled next/previous links](screenshots/previous-next.png)
75
+
76
+ You can likewise limit pagination to a specific subtree:
77
+
78
+ <%= previous_link(data.tree['chapter-2']) %><%= next_link(data.tree['chapter-2']) %>
79
+
80
+
81
+ ## Contributing
82
+
83
+ 1. Fork the project
84
+ 2. Create your feature branch (git checkout -b my-new-feature)
85
+ 3. Commit your changes (git commit -am 'Add some feature')
86
+ 4. Push to your github repository (git push origin my-new-feature)
87
+ 5. Submit a Pull Request
@@ -0,0 +1,14 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'cucumber/rake/task'
5
+
6
+ Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
7
+ t.cucumber_opts = "--color --tags ~@wip --strict --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}"
8
+ end
9
+
10
+ require 'rake/clean'
11
+
12
+ task :test => ['cucumber']
13
+
14
+ task :default => :test
@@ -0,0 +1,4 @@
1
+ PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
2
+ require 'middleman-core'
3
+ require 'middleman-core/step_definitions'
4
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-navsidebar')
@@ -0,0 +1,14 @@
1
+ # Require core library
2
+ require 'middleman-core'
3
+ require 'middleman-navsidebar/version'
4
+
5
+ # Register extensions which can be activated
6
+ # Make sure we have the version of Middleman we expect
7
+ # Name param may be omited, it will default to underscored
8
+ # version of class name
9
+
10
+
11
+ ::Middleman::Extensions.register(:navsidebar) do
12
+ require "middleman-navsidebar/extension"
13
+ ::Middleman::NavSidebar::NavSidebarExtension
14
+ end
@@ -0,0 +1,144 @@
1
+ require 'middleman-navsidebar/helpers'
2
+
3
+ module Middleman
4
+ module NavSidebar
5
+
6
+ # Extension namespace
7
+ # @todo: Test the extension against a vanilla Middleman install.
8
+ # @todo: Test the extension against a middleman-blog install.
9
+ class NavSidebarExtension < ::Middleman::Extension
10
+ # All the options for this extension
11
+ option :source_dir, 'source', 'The directory our tree will begin at.'
12
+ option :data_file, 'tree.yml', 'The file we will write our directory tree to.'
13
+ option :ignore_files, ['sitemap.xml', 'robots.txt'], 'A list of filenames we want to ignore when building our tree.'
14
+ option :ignore_dir, ['assets'], 'A list of directory names we want to ignore when building our tree.'
15
+ option :home_title, 'Home', 'The default link title of the home page (located at "/"), if otherwise not detected.'
16
+ option :promote_files, ['index.html.erb'], 'A list of files you want to push to the front of the tree (if they exist).'
17
+ option :ext_whitelist, [], 'A whitelist of filename extensions (post-render) that we are allowing in our navtree. Example: [".html"]'
18
+
19
+ # Helpers for use within templates and layouts.
20
+ self.defined_helpers = [ ::Middleman::NavSidebar::Helpers ]
21
+
22
+ def initialize(app, options_hash={}, &block)
23
+ # Call super to build options from the options_hash
24
+ super
25
+
26
+ # Require libraries only when activated
27
+ require 'yaml'
28
+ require 'titleize'
29
+
30
+ @existing_promotes = []
31
+
32
+ end
33
+
34
+ def after_configuration
35
+ # Add the user's config directories to the "ignore_dir" option because
36
+ # these are all things we won't need printed in a NavTree.
37
+ options.ignore_dir << app.settings.js_dir
38
+ options.ignore_dir << app.settings.css_dir
39
+ options.ignore_dir << app.settings.fonts_dir
40
+ options.ignore_dir << app.settings.images_dir
41
+ options.ignore_dir << app.settings.helpers_dir
42
+ options.ignore_dir << app.settings.layouts_dir
43
+ options.ignore_dir << app.settings.partials_dir
44
+
45
+ # Build a hash out of our directory information
46
+ tree_hash = scan_directory(options.source_dir, options)
47
+
48
+ # Promote any promoted files to the beginning of our hash.
49
+ tree_hash = promote_files(tree_hash, options)
50
+
51
+ # Write our directory tree to file as YAML.
52
+ # @todo: This step doesn't rebuild during live-reload, which causes errors if you move files
53
+ # around during development. It may not be that hard to set up. Low priority though.
54
+ data_path = app.settings.data_dir + '/' + options.data_file
55
+ IO.write(data_path, YAML::dump(tree_hash))
56
+ end
57
+
58
+
59
+ # Method for storing the directory structure in an ordered hash. See more on
60
+ # ordered hashes at https://www.igvita.com/2009/02/04/ruby-19-internals-ordered-hash/
61
+ def scan_directory(path, options, name=nil)
62
+ data = {}
63
+ Dir.foreach(path) do |filename|
64
+
65
+ # Check to see if we should skip this file. We skip invisible files
66
+ # (starts with "."), ignored files, and promoted files (which are
67
+ # handled later in the process).
68
+ next if (filename[0] == '.')
69
+ next if (filename == '..' || filename == '.')
70
+ next if options.ignore_files.include? filename
71
+
72
+ if options.promote_files.include? filename
73
+ original_path = path.sub(/^#{options.source_dir}/, '') + '/' + filename
74
+ @existing_promotes << original_path
75
+ next
76
+ end
77
+
78
+ full_path = File.join(path, filename)
79
+ if File.directory?(full_path)
80
+ # This item is a directory.
81
+ # Check to see if we should ignore this directory.
82
+ next if options.ignore_dir.include? filename
83
+
84
+ # Loop through the method again.
85
+ data.store(filename.gsub(' ', '%20'), scan_directory(full_path, options, filename))
86
+ else
87
+
88
+ # This item is a file.
89
+ if !options.ext_whitelist.empty?
90
+ # Skip any whitelisted extensions.
91
+ next unless options.ext_whitelist.include? File.extname(filename)
92
+ end
93
+
94
+ original_path = path.sub(/^#{options.source_dir}/, '') + '/' + filename
95
+ data.store(filename.gsub(' ', '%20'), original_path.gsub(' ', '%20'))
96
+ end
97
+ end
98
+
99
+ # Return this level's data as a hash sorted by keys.
100
+ return Hash[data.sort]
101
+ end
102
+
103
+ # Method for appending promoted files to the front of our source tree.
104
+ # @todo: Currently, options.promote_files only expects a filename, which means that
105
+ # if multiple files in different directories have the same filename, they
106
+ # will both be promoted, and one will not appear (due to the 'no-two-identical
107
+ # -indices-in-a-hash' rule).
108
+ # @todo: This system also assumes filenames only have a single extension,
109
+ # which may not be the case (like index.html.erb)
110
+ # @todo: Basically, this is not elegent at all.
111
+ def promote_files(tree_hash, options)
112
+
113
+ if @existing_promotes.any?
114
+ ordered_matches = []
115
+
116
+ # The purpose of this loop is to get my list of existing promotes
117
+ # in the order specified in the options array, so it can be promoted
118
+ # properly.
119
+ options.promote_files.each do |filename|
120
+ # Get filename without extension (index.md => index)
121
+ filename_without_ext = filename.chomp(File.extname(filename))
122
+ # Test against each existing_promote, and store matches
123
+ @existing_promotes.each do |pathname|
124
+ # Get another filename without extension from the pathname (/book/index.html => index)
125
+ pathname_without_ext = File.basename(pathname, ".*")
126
+ # Add matches to our ordered matches array.
127
+ if filename_without_ext == pathname_without_ext
128
+ ordered_matches << [filename, pathname]
129
+ end
130
+ end
131
+ end
132
+ # Promote all files found in both the promotes list and the file structure. This is an array
133
+ # of arrays
134
+ ordered_matches.reverse.each do |match|
135
+ tree_hash = Hash[match[0], match[1]].merge!(tree_hash)
136
+ end
137
+ end
138
+
139
+ return tree_hash
140
+ end
141
+
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,145 @@
1
+ module Middleman
2
+ module NavSidebar
3
+ # NavTree-related helpers that are available to the Middleman application in +config.rb+ and in templates.
4
+ module Helpers
5
+
6
+ # A recursive helper for converting source tree data from into HTML
7
+ def tree_to_html(value, depth = Float::INFINITY, key = nil, level = 0)
8
+ html = ''
9
+
10
+ if value.is_a?(String)
11
+ # This is a file.
12
+ # Get the Sitemap resource for this file.
13
+ # note: sitemap.extensionless_path converts the path to its 'post-build' extension.
14
+ this_resource = sitemap.find_resource_by_path(sitemap.extensionless_path(value))
15
+ # Define string for active states.
16
+ active = this_resource == current_page ? 'active' : ''
17
+ title = discover_title(this_resource)
18
+ link = link_to(title, this_resource)
19
+ html << "<li class='child #{active}'>#{link}</li>"
20
+ else
21
+ # This is the first level source directory. We treat it special because
22
+ # it has no key and needs no list item.
23
+ if key.nil?
24
+ value.each do |newkey, child|
25
+ html << tree_to_html(child, depth, newkey, level + 1)
26
+ end
27
+ # Continue rendering deeper levels of the tree, unless restricted by depth.
28
+ elsif depth >= (level + 1)
29
+ # This is a directory.
30
+ # The directory has a key and should be listed in the page hieararcy with HTML.
31
+ dir_name = format_directory_name(key)
32
+ html << "<li class='parent'><span class='parent-label'>#{dir_name}</span>"
33
+ html << '<ul>'
34
+
35
+ # Loop through all the directory's contents.
36
+ value.each do |newkey, child|
37
+ html << tree_to_html(child, depth, newkey, level + 1)
38
+ end
39
+ html << '</ul>'
40
+ html << '</li>'
41
+ end
42
+ end
43
+ return html
44
+ end
45
+
46
+ # Pagination helpers
47
+ # @todo: One potential future feature is previous/next links for paginating on a
48
+ # single level instead of a flattened tree. I don't need it but it seems pretty easy.
49
+ def previous_link(sourcetree)
50
+ pagelist = flatten_source_tree(sourcetree)
51
+ position = get_current_position_in_page_list(pagelist)
52
+ # Skip link generation if position is nil (meaning, the current page isn't in our
53
+ # pagination pagelist).
54
+ if position
55
+ prev_page = pagelist[position - 1]
56
+ options = {:class => "previous"}
57
+ unless first_page?(pagelist)
58
+ link_to("Previous", prev_page, options)
59
+ end
60
+ end
61
+ end
62
+
63
+ def next_link(sourcetree)
64
+ pagelist = flatten_source_tree(sourcetree)
65
+ position = get_current_position_in_page_list(pagelist)
66
+ # Skip link generation if position is nil (meaning, the current page isn't in our
67
+ # pagination pagelist).
68
+ if position
69
+ next_page = pagelist[position + 1]
70
+ options = {:class => "next"}
71
+ unless last_page?(pagelist)
72
+ link_to("Next", next_page, options)
73
+ end
74
+ end
75
+ end
76
+
77
+ # Helper for use in pagination methods.
78
+ def first_page?(pagelist)
79
+ return true if get_current_position_in_page_list(pagelist) == 0
80
+ end
81
+
82
+ # Helper for use in pagination methods.
83
+ def last_page?(pagelist)
84
+ return true if pagelist[get_current_position_in_page_list(pagelist)] == pagelist[-1]
85
+ end
86
+
87
+ # Method to flatten the source tree, for use in pagination methods.
88
+ def flatten_source_tree(value, k = [], level = 0, flat_tree = [])
89
+ if value.is_a?(String)
90
+ # This is a child item (a file).
91
+ flat_tree.push(sitemap.extensionless_path(value))
92
+ elsif value.is_a?(Hash)
93
+ # This is a parent item (a directory).
94
+ value.each do |key, child|
95
+ flatten_source_tree(child, key, level + 1, flat_tree)
96
+ end
97
+ end
98
+
99
+ return flat_tree
100
+ end
101
+
102
+ # Helper for use in pagination methods.
103
+ def get_current_position_in_page_list(pagelist)
104
+ pagelist.each_with_index do |page_path, index|
105
+ if page_path == "/" + current_page.path
106
+ return index
107
+ end
108
+ end
109
+ # If we reach this line, the current page path wasn't in our page list and we'll
110
+ # return false so the link generation is skipped.
111
+ return FALSE
112
+ end
113
+
114
+ # Format Directory name for display in navtree.
115
+ # Example Name: 1%20-%20sink-or_swim
116
+ def format_directory_name(dir_name)
117
+ formatted_name = dir_name.gsub('%20', ' ') #=> 1 - sink-or_swim
118
+ formatted_name.gsub!(/(?!\s)-(?!\s)/, ' ') #=> 1 - sink or_swim
119
+ formatted_name.gsub!(/_/, ' ') #=> 1 - sink or swim
120
+ # @todo: Find a way for titleize to not blow away ' - ' formatting.
121
+ formatted_name.titleize! #=> 1 Sink or Swim
122
+ end
123
+
124
+ # Utility helper for getting the page title for display in the navtree.
125
+ # Based on this: http://forum.middlemanapp.com/t/using-heading-from-page-as-title/44/3
126
+ # 1) Use the title from frontmatter metadata, or
127
+ # 2) peek into the page to find the H1, or
128
+ # 3) Use the home_title option (if this is the home page--defaults to "Home"), or
129
+ # 4) fallback to a filename-based-title
130
+ def discover_title(page = current_page)
131
+ if page.data.title
132
+ return page.data.title # Frontmatter title
133
+ elsif match = page.render({:layout => false, :no_images => true}).match(/<h.+>(.*?)<\/h1>/)
134
+ return match[1] # H1 title
135
+ elsif page.url == '/'
136
+ return extensions[:navsidebar].options[:home_title]
137
+ else
138
+ filename = page.url.split(/\//).last.gsub('%20', ' ').titleize
139
+ return filename.chomp(File.extname(filename))
140
+ end
141
+ end
142
+
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,5 @@
1
+ module Middleman
2
+ module NavSidebar
3
+ VERSION = "0.1.8"
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require 'middleman-navsidebar'
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require 'date'
4
+ Gem::Specification.new do |s|
5
+ s.name = "middleman-navsidebar"
6
+ s.version = "0.1.8"
7
+ s.licenses = ['MIT']
8
+ s.date = Date.today.to_s
9
+
10
+ s.summary = "For building navigation trees with Middleman"
11
+ s.description = "This extension provides helpers for printing parts of the tree in your middleman templates. Forked from Bryan Braun."
12
+
13
+ s.platform = Gem::Platform::RUBY
14
+ s.authors = ["Ketan Padegaonkar"]
15
+ s.email = ["ketanpadegaonkar@gmail.com"]
16
+ s.homepage = "https://github.com/ketan/middleman-navsidebar"
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.require_paths = ["lib"]
22
+
23
+ # The version of middleman-core this extension depends on.
24
+ s.add_runtime_dependency("middleman-core", ["~> 3.3"])
25
+ s.add_runtime_dependency("titleize", ["~> 1.3"])
26
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: middleman-navsidebar
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.8
5
+ platform: ruby
6
+ authors:
7
+ - Ketan Padegaonkar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: middleman-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '3.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '3.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: titleize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ description: This extension provides helpers for printing parts of the tree in your
42
+ middleman templates. Forked from Bryan Braun.
43
+ email:
44
+ - ketanpadegaonkar@gmail.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - .gitignore
50
+ - Gemfile
51
+ - LICENSE.md
52
+ - README.md
53
+ - Rakefile
54
+ - features/support/env.rb
55
+ - lib/middleman-navsidebar.rb
56
+ - lib/middleman-navsidebar/extension.rb
57
+ - lib/middleman-navsidebar/helpers.rb
58
+ - lib/middleman-navsidebar/version.rb
59
+ - lib/middleman_extension.rb
60
+ - middleman-navsidebar.gemspec
61
+ - screenshots/directory-structure.png
62
+ - screenshots/ex1-fulltree.png
63
+ - screenshots/ex2-subtree.png
64
+ - screenshots/ex3-subsubtree.png
65
+ - screenshots/ex4-depthlimit.png
66
+ - screenshots/ex5-subtree_and_depthlimit.png
67
+ - screenshots/previous-next.png
68
+ homepage: https://github.com/ketan/middleman-navsidebar
69
+ licenses:
70
+ - MIT
71
+ metadata: {}
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 2.0.14
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: For building navigation trees with Middleman
92
+ test_files:
93
+ - features/support/env.rb
94
+ has_rdoc: