middleman-navtree 0.1.2 → 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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTIzYjU5NmZkYjQ5ZjliZWE2MTYxOTUyODE2OThiNjgzZjdjNjBiYw==
4
+ YmNiZjE3ZTVjYjJkOTlkZDNhOTlkODcyODczYzg0NDVhMDU3Y2FkZA==
5
5
  data.tar.gz: !binary |-
6
- NTJkZTFjZTgwODg1OGI0NDQ2N2M4ZDFmNzE1Mzc1MjE5NmIxZjQ3Mg==
6
+ NDVlYThlYWI0ZTI3MTk5ZGI2ODVlNWY1MzcwYzVjOWQwYzVmMzM4ZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NDkyYzk1OTY2OGNjMWIzNjk0MWY0ZDQxMzhkOTVjYjUxNjVmZTUxNjNkMDli
10
- MTU0NDFiMmEzMmMxNTRmMmI5M2U2YWZjNWMxZTAzMzQzNWQyODQ4YWJkMDQ4
11
- NDliZDFmMzE3Y2IwZDQ2YWU3OTQzOWQ1OWJjZTRmNDcwMDQxMWQ=
9
+ YjI0ZWRjMmVhMTY4ZTZhNjk1Nzk3M2Q0YTg5MDEzMzRlYmEzMmNmMzVlM2Yy
10
+ ZDk4OTgxMDdkNWEyNWVhZDA0ZWU2NjcxOGI1Y2E4ZGZjODVmYjJkNDVlNTdj
11
+ NGY5NDg5NGFmMzY2ZjFjMjU2NDc5NDFkNzJkOTFmNGQ1OWRhODI=
12
12
  data.tar.gz: !binary |-
13
- MGRmNjJjMWMwMzIwY2I5YWY1NGMyZWQ2MGUzZDExYWJmNDE5ZjIzZWFkMDFk
14
- MzkyZGNjYzU1Yjc1MWIzZGE4OTM1OWM0OTVhZGMzOTBmZTNlZjQ4NTc5MWJi
15
- MzBhNWU4MDI5Njk2NmE1YmViYjEzYjU0OTNjM2VlMWY2NWY2NzM=
13
+ MWIyN2I5YmVlMWE1NmQxMGYzMTdmZDBjNDE4Y2IxMDk0ZTc5NzA0Njc1MWRm
14
+ MjE4YmRkZTcwMTQxODM2MTY0OWUzYzFiNmYyNTBmOGJmMDFhZTdjMWM0ZDhi
15
+ MDZkYjJhOTcwMWZiY2QxMjYxMTgzZTUxMTg3YTZhM2YxOTNlY2U=
data/.gitignore ADDED
@@ -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,19 @@
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-navtree.gemspec
6
+ gemspec
7
+
8
+ group :development do
9
+ gem 'rake'
10
+ gem 'rdoc'
11
+ gem 'yard'
12
+ end
13
+
14
+ group :test do
15
+ gem 'cucumber'
16
+ gem 'fivemat'
17
+ gem 'aruba'
18
+ gem 'rspec'
19
+ end
data/LICENSE.md ADDED
@@ -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.
data/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # Middleman-NavTree
2
+
3
+ `middleman-navtree` 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-navtree'
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 :navtree
18
+
19
+ Alternatively, you can specify the options you want. Here's an example showing the explicit defaults:
20
+
21
+ activate :navtree do |options|
22
+ options.data_file = 'data/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
data/Rakefile ADDED
@@ -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-navtree')
@@ -0,0 +1,14 @@
1
+ # Require core library
2
+ require 'middleman-core'
3
+ require 'middleman-navtree/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(:navtree) do
12
+ require "middleman-navtree/extension"
13
+ ::Middleman::NavTree::NavTreeExtension
14
+ end
@@ -0,0 +1,144 @@
1
+ require 'middleman-navtree/helpers'
2
+
3
+ module Middleman
4
+ module NavTree
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 NavTreeExtension < ::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, 'data/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::NavTree::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
+ IO.write(options.data_file, YAML::dump(tree_hash))
55
+ end
56
+
57
+
58
+ # Method for storing the directory structure in a hash.
59
+ # @todo: the order of the data is defined by the order in the hash, and technically, ruby hashes
60
+ # are unordered. This may be more robust if I defined an ordered hash type similar to
61
+ # this one in Rails: http://apidock.com/rails/ActiveSupport/OrderedHash
62
+ def scan_directory(path, options, name=nil)
63
+ data = {}
64
+ Dir.foreach(path) do |filename|
65
+
66
+ # Check to see if we should skip this file. We skip invisible files
67
+ # (starts with "."), ignored files, and promoted files (which are
68
+ # handled later in the process).
69
+ next if (filename[0] == '.')
70
+ next if (filename == '..' || filename == '.')
71
+ next if options.ignore_files.include? filename
72
+
73
+ if options.promote_files.include? filename
74
+ original_path = path.sub(/^#{options.source_dir}/, '') + '/' + filename
75
+ @existing_promotes << original_path
76
+ next
77
+ end
78
+
79
+ full_path = File.join(path, filename)
80
+ if File.directory?(full_path)
81
+ # This item is a directory.
82
+ # Check to see if we should ignore this directory.
83
+ next if options.ignore_dir.include? filename
84
+
85
+ # Loop through the method again.
86
+ data.store(filename, scan_directory(full_path, options, filename))
87
+ else
88
+
89
+ # This item is a file.
90
+ if !options.ext_whitelist.empty?
91
+ # Skip any whitelisted extensions.
92
+ next unless options.ext_whitelist.include? File.extname(filename)
93
+ end
94
+
95
+ original_path = path.sub(/^#{options.source_dir}/, '') + '/' + filename
96
+ data.store(filename, original_path)
97
+ end
98
+ end
99
+
100
+ return data
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,137 @@
1
+ module Middleman
2
+ module NavTree
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 child item (a file). Get the Sitemap resource for this file.
12
+ # note: sitemap.extensionless_path converts the path to its 'post-build' extension.
13
+ this_resource = sitemap.find_resource_by_path(sitemap.extensionless_path(value))
14
+ # Define string for active states.
15
+ active = this_resource == current_page ? 'active' : ''
16
+ title = discover_title(this_resource)
17
+ link = link_to(title, sitemap.extensionless_path(value))
18
+ html << "<li class='child #{active}'>#{link}</li>"
19
+ else
20
+ # This is a directory.
21
+ if key.nil?
22
+ # The first level is the source directory, so it has no key and needs no list item.
23
+ value.each do |newkey, child|
24
+ html << tree_to_html(child, depth, newkey, level + 1)
25
+ end
26
+ # Continue rendering deeper levels of the tree, unless restricted by depth.
27
+ elsif depth >= (level + 1)
28
+ # This directory has a key and should be listed in the page hieararcy with HTML.
29
+ dir_name = key
30
+ html << "<li class='parent'><span class='parent-label'>#{dir_name.gsub(/-/, ' ').gsub(/_/, ' ').titleize}</span>"
31
+ html << '<ul>'
32
+
33
+ # Loop through all the directory's contents.
34
+ value.each do |newkey, child|
35
+ html << tree_to_html(child, depth, newkey, level + 1)
36
+ end
37
+ html << '</ul>'
38
+ html << '</li>'
39
+ end
40
+ end
41
+
42
+ return html
43
+ end
44
+
45
+ # Pagination helpers
46
+ # @todo: One potential future feature is previous/next links for paginating on a
47
+ # single level instead of a flattened tree. I don't need it but it seems pretty easy.
48
+ def previous_link(sourcetree)
49
+ pagelist = flatten_source_tree(sourcetree)
50
+ position = get_current_position_in_page_list(pagelist)
51
+ # Skip link generation if position is nil (meaning, the current page isn't in our
52
+ # pagination pagelist).
53
+ if position
54
+ prev_page = pagelist[position - 1]
55
+ options = {:class => "previous"}
56
+ unless first_page?(pagelist)
57
+ link_to("Previous", prev_page, options)
58
+ end
59
+ end
60
+ end
61
+
62
+ def next_link(sourcetree)
63
+ pagelist = flatten_source_tree(sourcetree)
64
+ position = get_current_position_in_page_list(pagelist)
65
+ # Skip link generation if position is nil (meaning, the current page isn't in our
66
+ # pagination pagelist).
67
+ if position
68
+ next_page = pagelist[position + 1]
69
+ options = {:class => "next"}
70
+ unless last_page?(pagelist)
71
+ link_to("Next", next_page, options)
72
+ end
73
+ end
74
+ end
75
+
76
+ # Helper for use in pagination methods.
77
+ def first_page?(pagelist)
78
+ return true if get_current_position_in_page_list(pagelist) == 0
79
+ end
80
+
81
+ # Helper for use in pagination methods.
82
+ def last_page?(pagelist)
83
+ return true if pagelist[get_current_position_in_page_list(pagelist)] == pagelist[-1]
84
+ end
85
+
86
+ # Method to flatten the source tree, for use in pagination methods.
87
+ # Note, I could do this with a lot less code using Glob. I should refactor
88
+ # in the future. See http://stackoverflow.com/a/2370823/1154642.
89
+ def flatten_source_tree(value, k = [], level = 0, flat_tree = [])
90
+
91
+ if value.is_a?(String)
92
+ # This is a child item (a file).
93
+ flat_tree.push(sitemap.extensionless_path(value))
94
+ elsif value.is_a?(Hash)
95
+ # This is a parent item (a directory).
96
+ value.each do |key, child|
97
+ flatten_source_tree(child, key, level + 1, flat_tree)
98
+ end
99
+ end
100
+
101
+ return flat_tree
102
+ end
103
+
104
+ # Helper for use in pagination methods.
105
+ def get_current_position_in_page_list(pagelist)
106
+ pagelist.each_with_index do |page_path, index|
107
+ if page_path == "/" + current_page.path
108
+ return index
109
+ end
110
+ end
111
+ # If we reach this line, the current page path wasn't in our page list and we'll
112
+ # return false so the link generation is skipped.
113
+ return FALSE
114
+ end
115
+
116
+ # Utility helper for getting the page title
117
+ # Based on this: http://forum.middlemanapp.com/t/using-heading-from-page-as-title/44/3
118
+ # 1) Use the title from frontmatter metadata, or
119
+ # 2) peek into the page to find the H1, or
120
+ # 3) Use the home_title option (if this is the home page--defaults to "Home"), or
121
+ # 4) fallback to a filename-based-title
122
+ def discover_title(page = current_page)
123
+ if page.data.title
124
+ return page.data.title # Frontmatter title
125
+ elsif page.url == '/'
126
+ return extensions[:navtree].options[:home_title]
127
+ elsif match = page.render({:layout => false}).match(/<h.+>(.*?)<\/h1>/)
128
+ return match[1] # H1 title
129
+ else
130
+ filename = page.url.split(/\//).last.titleize
131
+ return filename.chomp(File.extname(filename))
132
+ end
133
+ end
134
+
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,5 @@
1
+ module Middleman
2
+ module NavTree
3
+ VERSION = "0.1.3"
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require 'middleman-navtree'
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "middleman-navtree"
6
+ s.version = "0.1.3"
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 copies the site structure to tree.yml and provides helpers for printing parts of the tree in your middleman templates."
12
+
13
+ s.platform = Gem::Platform::RUBY
14
+ s.authors = ["Bryan Braun"]
15
+ s.email = ["bbraun7@gmail.com"]
16
+ s.homepage = "https://github.com/bryanbraun/middleman-navtree"
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
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-navtree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Braun
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-26 00:00:00.000000000 Z
11
+ date: 2014-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: middleman-core
@@ -45,7 +45,26 @@ email:
45
45
  executables: []
46
46
  extensions: []
47
47
  extra_rdoc_files: []
48
- files: []
48
+ files:
49
+ - .gitignore
50
+ - Gemfile
51
+ - LICENSE.md
52
+ - README.md
53
+ - Rakefile
54
+ - features/support/env.rb
55
+ - lib/middleman-navtree.rb
56
+ - lib/middleman-navtree/extension.rb
57
+ - lib/middleman-navtree/helpers.rb
58
+ - lib/middleman-navtree/version.rb
59
+ - lib/middleman_extension.rb
60
+ - middleman-navtree.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
49
68
  homepage: https://github.com/bryanbraun/middleman-navtree
50
69
  licenses:
51
70
  - MIT
@@ -70,5 +89,6 @@ rubygems_version: 2.2.2
70
89
  signing_key:
71
90
  specification_version: 4
72
91
  summary: For building navigation trees with Middleman
73
- test_files: []
92
+ test_files:
93
+ - features/support/env.rb
74
94
  has_rdoc: