middleman-navigation 1.0.2 → 1.0.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.
- data/.gitignore +2 -1
- data/Gemfile +20 -0
- data/History.md +21 -0
- data/Rakefile +6 -12
- data/features/basic.feature +14 -0
- data/features/step_definitions/nav_steps.rb +6 -0
- data/features/support/env.rb +9 -0
- data/fixtures/basic-app/config.rb +1 -0
- data/fixtures/basic-app/source/another.erb +7 -0
- data/fixtures/basic-app/source/index.erb +7 -0
- data/fixtures/basic-app/source/subpage.erb +7 -0
- data/lib/middleman-navigation/tree.rb +19 -12
- data/lib/middleman-navigation/version.rb +1 -1
- data/lib/middleman-navigation.rb +5 -2
- data/lib/simple-navigation/adapters/sinatra-middleman.rb +4 -2
- data/lib/simple-navigation/core/item.rb +4 -9
- data/middleman-navigation.gemspec +4 -3
- metadata +34 -10
- data/lib/middleman-navigation/front_matter.rb +0 -27
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -2,3 +2,23 @@ source "http://rubygems.org"
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in middleman-navigation.gemspec
|
4
4
|
gemspec
|
5
|
+
|
6
|
+
group :development do
|
7
|
+
gem "rake", "~> 0.9.2"
|
8
|
+
gem "rdoc", "~> 3.9"
|
9
|
+
gem "yard", "~> 0.8.0"
|
10
|
+
end
|
11
|
+
|
12
|
+
group :test do
|
13
|
+
gem "sinatra"
|
14
|
+
gem "cucumber", "~> 1.2.0"
|
15
|
+
gem "fivemat"
|
16
|
+
gem "aruba", "~> 0.4.11"
|
17
|
+
gem "rspec", "~> 2.7"
|
18
|
+
gem "timecop", "~> 0.4.0"
|
19
|
+
gem "kramdown"
|
20
|
+
|
21
|
+
platforms :ruby do
|
22
|
+
gem "redcarpet", "~> 2.1.1"
|
23
|
+
end
|
24
|
+
end
|
data/History.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
1.0.2 / 2013-01-28
|
3
|
+
==================
|
4
|
+
|
5
|
+
* Added support for including root node in navigation.
|
6
|
+
|
7
|
+
1.0.1 / 2013-01-25
|
8
|
+
==================
|
9
|
+
|
10
|
+
* Added matcher to support active page detection for directory indexes.
|
11
|
+
* Refactored frontmatter defaults, monkey patching defaults into the frontmatter_manager until we're allowed to specify them via middleman.
|
12
|
+
* Added support for app http_prefix configuration.
|
13
|
+
* Refactored simple-navigation patch to duplicate less code.
|
14
|
+
* Prevented simple-navigation from remembering @selected on navigation items.
|
15
|
+
* Resolved current_path issue, refactored to not run on every request.
|
16
|
+
* Refactoring for middleman 3 and simple-navigation.
|
17
|
+
|
18
|
+
1.0.0 / 2013-01-18
|
19
|
+
==================
|
20
|
+
|
21
|
+
* Removed things from .gitignore that should be in global config. See: https://help.github.com/articles/ignoring-files
|
data/Rakefile
CHANGED
@@ -1,13 +1,7 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
gem.homepage = "http://github.com/michaek/middleman-navigation"
|
6
|
-
gem.license = "MIT"
|
7
|
-
gem.summary = %q{Add simple navigation helpers for your Middleman project}
|
8
|
-
gem.description = %q{Add simple navigation helpers for your Middleman project}
|
9
|
-
gem.email = ["giovanni.cangiani@epfl.ch", "m@hellm.com"]
|
10
|
-
gem.authors = ["Giovanni Cangiani", "Michael Hellein"]
|
11
|
-
# dependencies defined in Gemfile
|
1
|
+
require 'cucumber/rake/task'
|
2
|
+
|
3
|
+
Cucumber::Rake::Task.new do |t|
|
4
|
+
t.cucumber_opts = %w{--format pretty}
|
12
5
|
end
|
13
|
-
|
6
|
+
|
7
|
+
task :default => :cucumber
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Feature: Simple flat navigation
|
2
|
+
Scenario: Navigation should render
|
3
|
+
Given the Server is running at "basic-app"
|
4
|
+
When I go to "/index.html"
|
5
|
+
Then I should see "Home."
|
6
|
+
Then the Home menu item should be selected
|
7
|
+
When I go to "/subpage.html"
|
8
|
+
Then I should see "Subpage."
|
9
|
+
Then the Subpage menu item should be selected
|
10
|
+
Then the Another menu item should not be selected
|
11
|
+
When I go to "/another.html"
|
12
|
+
Then I should see "Subpage."
|
13
|
+
Then the Another menu item should be selected
|
14
|
+
Then the Subpage menu item should not be selected
|
@@ -0,0 +1,6 @@
|
|
1
|
+
Then /^the ([\w\s]+) menu item should (not )?be selected$/ do |name, negate|
|
2
|
+
expectation = negate ? :should_not : :should
|
3
|
+
doc = Nokogiri::HTML(@browser.last_response.body)
|
4
|
+
selected = doc.css('li.selected').map(&:content).join
|
5
|
+
selected.send(expectation, match(name))
|
6
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
ENV["TEST"] = "true"
|
2
|
+
ENV["AUTOLOAD_SPROCKETS"] = "false"
|
3
|
+
|
4
|
+
PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
|
5
|
+
require "sinatra"
|
6
|
+
require "nokogiri"
|
7
|
+
require "middleman-core"
|
8
|
+
require "middleman-core/step_definitions"
|
9
|
+
require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-navigation')
|
@@ -0,0 +1 @@
|
|
1
|
+
activate :navigation
|
@@ -12,15 +12,21 @@ module Middleman
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
def self.with_defaults(navigation)
|
16
|
+
navigation = {} if navigation.blank?
|
17
|
+
Middleman::Navigation::FRONTMATTER_DEFAULTS.merge navigation
|
18
|
+
end
|
19
|
+
|
15
20
|
def self.traverse(resource, navigation)
|
16
21
|
children = visible_children(resource)
|
17
22
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
+
navigation.items do |level|
|
24
|
+
if resource == @root
|
25
|
+
options = with_defaults @root.data.navigation
|
26
|
+
add_navigation_node @root, level unless options[:hidden]
|
27
|
+
end
|
23
28
|
|
29
|
+
unless children.blank?
|
24
30
|
children.each do |child|
|
25
31
|
add_navigation_node child, level
|
26
32
|
traverse child, level
|
@@ -30,18 +36,19 @@ module Middleman
|
|
30
36
|
end
|
31
37
|
|
32
38
|
def self.visible_children(resource)
|
33
|
-
visible = resource.children
|
34
|
-
visible.select!{|child| !child.data.navigation[:hidden]}
|
35
|
-
visible.sort! {|a, b| a.data.navigation[:weight] <=> b.data.navigation[:weight]}
|
39
|
+
visible = resource.children
|
40
|
+
visible.select!{|child| !with_defaults(child.data.navigation)[:hidden]}
|
41
|
+
visible.sort! {|a, b| with_defaults(a.data.navigation)[:weight] <=> with_defaults(b.data.navigation)[:weight]}
|
36
42
|
visible
|
37
43
|
end
|
38
44
|
|
39
45
|
def self.add_navigation_node(node, level)
|
40
|
-
|
41
|
-
|
46
|
+
options = with_defaults(node.data.navigation)
|
47
|
+
title = options[:title] || node.data.title
|
48
|
+
url = options[:destination] || node.url
|
42
49
|
|
43
|
-
level.item node.destination_path, title, url, :highlights_on => %r(
|
50
|
+
level.item node.destination_path, title, url, :highlights_on => %r(^#{url}(#{@app.index_file})?$)
|
44
51
|
end
|
45
52
|
end
|
46
53
|
end
|
47
|
-
end
|
54
|
+
end
|
data/lib/middleman-navigation.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
require 'middleman-navigation/tree'
|
2
2
|
require 'middleman-navigation/resource_list_manipulator'
|
3
|
-
|
3
|
+
|
4
4
|
require 'simple-navigation'
|
5
5
|
require 'simple-navigation/adapters/sinatra-middleman'
|
6
6
|
require 'simple-navigation/core/item'
|
7
|
+
|
8
|
+
require 'active_support/hash_with_indifferent_access'
|
9
|
+
|
7
10
|
SimpleNavigation::config_file_paths << File.expand_path("../simple-navigation", __FILE__)
|
8
11
|
|
9
12
|
module Middleman
|
@@ -13,7 +16,7 @@ module Middleman
|
|
13
16
|
title: nil,
|
14
17
|
destination: nil,
|
15
18
|
weight: 0,
|
16
|
-
}.
|
19
|
+
}.with_indifferent_access
|
17
20
|
|
18
21
|
class << self
|
19
22
|
def registered(app)
|
@@ -1,11 +1,13 @@
|
|
1
1
|
module SimpleNavigation
|
2
2
|
module Adapters
|
3
3
|
class Sinatra < Base
|
4
|
-
|
4
|
+
def self.middleman_app=(app)
|
5
|
+
@@middleman_app = app
|
6
|
+
end
|
5
7
|
|
6
8
|
# Our request doesn't have a fullpath, so we must return path instead.
|
7
9
|
def request_uri
|
8
|
-
@prefix ||= middleman_app.nil? ? '/' : middleman_app.inst.http_prefix
|
10
|
+
@prefix ||= @@middleman_app.nil? ? '/' : @@middleman_app.inst.http_prefix
|
9
11
|
@prefix + request.path
|
10
12
|
end
|
11
13
|
end
|
@@ -1,11 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
is_selected = selected_without_forgetfulness?
|
6
|
-
@selected = nil
|
7
|
-
is_selected
|
8
|
-
end
|
9
|
-
alias_method_chain :selected?, :forgetfulness
|
1
|
+
class SimpleNavigation::Item
|
2
|
+
# We want simple-navigation to be forgetful about @selected.
|
3
|
+
def selected?
|
4
|
+
selected_by_config? || selected_by_subnav? || selected_by_condition?
|
10
5
|
end
|
11
6
|
end
|
@@ -19,10 +19,11 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
-
s.
|
23
|
-
s.
|
22
|
+
s.add_dependency("middleman-core", ["~> 3.2.1"])
|
23
|
+
s.add_dependency("simple-navigation", ["> 3.0.0"])
|
24
24
|
|
25
|
-
s.add_development_dependency "
|
25
|
+
s.add_development_dependency "activesupport", ["~> 3.2.6"]
|
26
|
+
s.add_development_dependency "nokogiri"
|
26
27
|
s.add_development_dependency "bundler"
|
27
28
|
s.add_development_dependency "gem-release" # Seems a better fit than Jeweler.
|
28
29
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-navigation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,24 +10,24 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2014-01-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name: middleman
|
16
|
+
name: middleman-core
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
|
-
- -
|
20
|
+
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 3.
|
22
|
+
version: 3.2.1
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
none: false
|
27
27
|
requirements:
|
28
|
-
- -
|
28
|
+
- - ~>
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: 3.
|
30
|
+
version: 3.2.1
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
32
|
name: simple-navigation
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
@@ -45,7 +45,23 @@ dependencies:
|
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 3.0.0
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
48
|
+
name: activesupport
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.2.6
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 3.2.6
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: nokogiri
|
49
65
|
requirement: !ruby/object:Gem::Requirement
|
50
66
|
none: false
|
51
67
|
requirements:
|
@@ -102,10 +118,17 @@ extra_rdoc_files: []
|
|
102
118
|
files:
|
103
119
|
- .gitignore
|
104
120
|
- Gemfile
|
121
|
+
- History.md
|
105
122
|
- README.markdown
|
106
123
|
- Rakefile
|
124
|
+
- features/basic.feature
|
125
|
+
- features/step_definitions/nav_steps.rb
|
126
|
+
- features/support/env.rb
|
127
|
+
- fixtures/basic-app/config.rb
|
128
|
+
- fixtures/basic-app/source/another.erb
|
129
|
+
- fixtures/basic-app/source/index.erb
|
130
|
+
- fixtures/basic-app/source/subpage.erb
|
107
131
|
- lib/middleman-navigation.rb
|
108
|
-
- lib/middleman-navigation/front_matter.rb
|
109
132
|
- lib/middleman-navigation/resource_list_manipulator.rb
|
110
133
|
- lib/middleman-navigation/tree.rb
|
111
134
|
- lib/middleman-navigation/version.rb
|
@@ -134,8 +157,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
157
|
version: '0'
|
135
158
|
requirements: []
|
136
159
|
rubyforge_project: middleman-navigation
|
137
|
-
rubygems_version: 1.8.
|
160
|
+
rubygems_version: 1.8.24
|
138
161
|
signing_key:
|
139
162
|
specification_version: 3
|
140
163
|
summary: Add simple navigation helpers for your Middleman project
|
141
164
|
test_files: []
|
165
|
+
has_rdoc:
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# This approach to defaults is gross, and it doesn't belong here!
|
2
|
-
# TODO: There should be a way in middleman for extensions to provide frontmatter defaults.
|
3
|
-
# TODO: Remove this when middleman supports that.
|
4
|
-
module Middleman::CoreExtensions
|
5
|
-
module FrontMatter
|
6
|
-
class FrontmatterManager
|
7
|
-
def with_defaults(data)
|
8
|
-
unless data.first.blank?
|
9
|
-
data.first['navigation'] ||= {}
|
10
|
-
data.first['navigation'].reverse_merge! Middleman::Navigation::FRONTMATTER_DEFAULTS
|
11
|
-
end
|
12
|
-
data
|
13
|
-
end
|
14
|
-
|
15
|
-
def parse_yaml_front_matter_with_defaults(content)
|
16
|
-
with_defaults parse_yaml_front_matter_without_defaults(content)
|
17
|
-
end
|
18
|
-
|
19
|
-
def parse_json_front_matter_with_defaults(content)
|
20
|
-
with_defaults parse_json_front_matter_without_defaults(content)
|
21
|
-
end
|
22
|
-
|
23
|
-
alias_method_chain :parse_yaml_front_matter, :defaults
|
24
|
-
alias_method_chain :parse_json_front_matter, :defaults
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|