middleman-more 3.0.7 → 3.0.8.pre.1
Sign up to get free protection for your applications and to get access to all the features.
@@ -91,3 +91,28 @@ Feature: link_to helper
|
|
91
91
|
When I go to "/link_to.html"
|
92
92
|
Then I should see '<a href="/foo/needs_index.html">Needs Index</a>'
|
93
93
|
|
94
|
+
Scenario: link_to preserves query string and anchor and isn't messed up by them
|
95
|
+
Given a fixture app "indexable-app"
|
96
|
+
And a file named "source/link_to.html.erb" with:
|
97
|
+
"""
|
98
|
+
<%= link_to "Needs Index Anchor", "/needs_index.html#foo" %>
|
99
|
+
<%= link_to "Needs Index Query", "/needs_index.html?foo" %>
|
100
|
+
<%= link_to "Needs Index Query and Anchor", "/needs_index.html?foo#foo" %>
|
101
|
+
"""
|
102
|
+
And the Server is running at "indexable-app"
|
103
|
+
When I go to "/link_to/"
|
104
|
+
Then I should see '<a href="/needs_index/#foo">Needs Index Anchor</a>'
|
105
|
+
Then I should see '<a href="/needs_index/?foo">Needs Index Query</a>'
|
106
|
+
Then I should see '<a href="/needs_index/?foo#foo">Needs Index Query and Anchor</a>'
|
107
|
+
|
108
|
+
Scenario: link_to accepts a :query option that appends a query string
|
109
|
+
Given a fixture app "indexable-app"
|
110
|
+
And a file named "source/link_to.html.erb" with:
|
111
|
+
"""
|
112
|
+
<%= link_to "Needs Index String", "/needs_index.html", :query => "foo" %>
|
113
|
+
<%= link_to "Needs Index Hash", "/needs_index.html", :query => { :foo => :bar } %>
|
114
|
+
"""
|
115
|
+
And the Server is running at "indexable-app"
|
116
|
+
When I go to "/link_to/"
|
117
|
+
Then I should see '<a href="/needs_index/?foo">Needs Index String</a>'
|
118
|
+
Then I should see '<a href="/needs_index/?foo=bar">Needs Index Hash</a>'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_support/core_ext/object/to_query'
|
2
|
+
|
1
3
|
module Middleman
|
2
4
|
module CoreExtensions
|
3
5
|
# Built-in helpers
|
@@ -113,6 +115,10 @@ module Middleman
|
|
113
115
|
# set :relative_links, true
|
114
116
|
#
|
115
117
|
# to config.rb to have all links default to relative.
|
118
|
+
#
|
119
|
+
# There is also a :query option that can be used to append a
|
120
|
+
# query string, which can be expressed as either a String,
|
121
|
+
# or a Hash which will be turned into URL parameters.
|
116
122
|
def link_to(*args, &block)
|
117
123
|
url_arg_index = block_given? ? 0 : 1
|
118
124
|
options_index = block_given? ? 1 : 2
|
@@ -130,42 +136,59 @@ module Middleman
|
|
130
136
|
# Handle relative urls
|
131
137
|
current_source_dir = Pathname('/' + current_resource.path).dirname
|
132
138
|
|
133
|
-
|
139
|
+
begin
|
140
|
+
uri = URI(url)
|
141
|
+
url_path = uri.path
|
142
|
+
rescue
|
143
|
+
end
|
134
144
|
|
135
|
-
|
145
|
+
if url_path
|
146
|
+
path = Pathname(url_path)
|
147
|
+
url_path = current_source_dir.join(path).to_s if path.relative?
|
136
148
|
|
137
|
-
|
149
|
+
resource = sitemap.find_resource_by_path(url_path)
|
138
150
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
151
|
+
# Allow people to turn on relative paths for all links with config[:relative_links] = true
|
152
|
+
# but still override on a case by case basis with the :relative parameter.
|
153
|
+
effective_relative = relative || false
|
154
|
+
if relative.nil? && relative_links
|
155
|
+
effective_relative = true
|
156
|
+
end
|
145
157
|
|
146
|
-
|
147
|
-
|
148
|
-
|
158
|
+
if resource
|
159
|
+
if effective_relative
|
160
|
+
resource_url = resource.url
|
149
161
|
|
150
|
-
|
151
|
-
|
152
|
-
|
162
|
+
# Output urls relative to the destination path, not the source path
|
163
|
+
current_dir = Pathname('/' + current_resource.destination_path).dirname
|
164
|
+
new_url = Pathname(resource_url).relative_path_from(current_dir).to_s
|
153
165
|
|
154
|
-
|
155
|
-
|
156
|
-
|
166
|
+
# Put back the trailing slash to avoid unnecessary Apache redirects
|
167
|
+
if resource_url.end_with?('/') && !new_url.end_with?('/')
|
168
|
+
new_url << '/'
|
169
|
+
end
|
170
|
+
else
|
171
|
+
new_url = resource.url
|
157
172
|
end
|
173
|
+
|
174
|
+
uri.path = new_url
|
175
|
+
|
176
|
+
args[url_arg_index] = uri.to_s
|
158
177
|
else
|
159
|
-
|
178
|
+
raise "No resource exists at #{url}" if relative
|
160
179
|
end
|
161
|
-
|
162
|
-
args[url_arg_index] = new_url
|
163
|
-
else
|
164
|
-
raise "No resource exists at #{url}" if relative
|
165
180
|
end
|
166
181
|
end
|
167
182
|
end
|
168
183
|
|
184
|
+
# Support a :query option that can be a string or hash
|
185
|
+
query = options.delete(:query)
|
186
|
+
if query
|
187
|
+
uri = URI(args[url_arg_index])
|
188
|
+
uri.query = query.respond_to?(:to_param) ? query.to_param : query.to_s
|
189
|
+
args[url_arg_index] = uri.to_s
|
190
|
+
end
|
191
|
+
|
169
192
|
super(*args, &block)
|
170
193
|
end
|
171
194
|
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-more
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
5
|
-
prerelease:
|
4
|
+
version: 3.0.8.pre.1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Thomas Reynolds
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2013-01-02 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: middleman-core
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - '='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 3.0.
|
22
|
+
version: 3.0.8.pre.1
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,7 +27,7 @@ dependencies:
|
|
27
27
|
requirements:
|
28
28
|
- - '='
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: 3.0.
|
30
|
+
version: 3.0.8.pre.1
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
32
|
name: uglifier
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
@@ -641,16 +641,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
641
641
|
version: '0'
|
642
642
|
segments:
|
643
643
|
- 0
|
644
|
-
hash:
|
644
|
+
hash: 1566393867800215219
|
645
645
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
646
646
|
none: false
|
647
647
|
requirements:
|
648
|
-
- - ! '
|
648
|
+
- - ! '>'
|
649
649
|
- !ruby/object:Gem::Version
|
650
|
-
version:
|
651
|
-
segments:
|
652
|
-
- 0
|
653
|
-
hash: 4377871555131630904
|
650
|
+
version: 1.3.1
|
654
651
|
requirements: []
|
655
652
|
rubyforge_project:
|
656
653
|
rubygems_version: 1.8.24
|