middleman-more 3.0.14 → 3.1.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/features/asset_hash.feature +29 -0
  2. data/features/clean_build.feature +3 -3
  3. data/features/helpers_link_to.feature +4 -4
  4. data/features/i18n_force_locale.feature +13 -0
  5. data/features/i18n_preview.feature +14 -1
  6. data/features/markdown.feature +3 -2
  7. data/features/markdown_redcarpet.feature +21 -0
  8. data/features/markdown_redcarpet_in_haml.feature +42 -0
  9. data/features/minify_javascript.feature +2 -2
  10. data/features/partials_dir.feature +30 -0
  11. data/features/sass-assets-paths.feature +1 -1
  12. data/fixtures/default-partials-dir-app/source/_partial.html.erb +1 -0
  13. data/fixtures/default-partials-dir-app/source/index.html.erb +2 -0
  14. data/fixtures/i18n-default-app/locales/en.yml +4 -0
  15. data/fixtures/i18n-default-app/locales/es.yml +8 -0
  16. data/fixtures/i18n-default-app/source/localizable/index.html.erb +5 -0
  17. data/fixtures/i18n-force-locale/config.rb +13 -0
  18. data/fixtures/i18n-force-locale/locales/en.yml +3 -0
  19. data/fixtures/i18n-force-locale/locales/es.yml +3 -0
  20. data/fixtures/i18n-force-locale/locales/fr.yml +3 -0
  21. data/fixtures/i18n-force-locale/source/index.haml +2 -0
  22. data/fixtures/markdown-app/config.rb +1 -0
  23. data/fixtures/markdown-frontmatter-options-app/config.rb +1 -0
  24. data/fixtures/markdown-frontmatter-options-app/source/smarty_pants-default.html.markdown +5 -0
  25. data/fixtures/markdown-frontmatter-options-app/source/smarty_pants-off.html.markdown +7 -0
  26. data/fixtures/markdown-frontmatter-options-app/source/smarty_pants-on.html.markdown +7 -0
  27. data/fixtures/markdown-frontmatter-options-app/source/tables-default.html.markdown +8 -0
  28. data/fixtures/markdown-frontmatter-options-app/source/tables-off.html.markdown +10 -0
  29. data/fixtures/markdown-frontmatter-options-app/source/tables-on.html.markdown +10 -0
  30. data/{lib/middleman-more/templates/smacss/source/stylesheets/_0.site-settings.scss → fixtures/markdown-in-haml-app/config.rb} +0 -0
  31. data/fixtures/markdown-in-haml-app/source/images/blank.gif +0 -0
  32. data/fixtures/markdown-in-haml-app/source/link_target.html.markdown +4 -0
  33. data/fixtures/partials-dir-app/source/index.html.erb +2 -0
  34. data/fixtures/partials-dir-app/source/nested/partials/_partial.html.erb +1 -0
  35. data/fixtures/partials-dir-app/source/partials/_partial.html.erb +1 -0
  36. data/fixtures/sass-assets-path-app/assets/stylesheets/{_shared-asset.sass → _shared-asset-sass.sass} +1 -1
  37. data/fixtures/sass-assets-path-app/source/stylesheets/plain.css.sass +1 -1
  38. data/lib/middleman-more/core_extensions/compass.rb +22 -22
  39. data/lib/middleman-more/core_extensions/default_helpers.rb +36 -13
  40. data/lib/middleman-more/core_extensions/i18n.rb +31 -6
  41. data/lib/middleman-more/extensions/asset_hash.rb +30 -17
  42. data/lib/middleman-more/extensions/asset_host.rb +11 -8
  43. data/lib/middleman-more/extensions/automatic_image_sizes.rb +4 -8
  44. data/lib/middleman-more/extensions/directory_indexes.rb +2 -5
  45. data/lib/middleman-more/extensions/gzip.rb +18 -19
  46. data/lib/middleman-more/extensions/minify_css.rb +11 -4
  47. data/lib/middleman-more/extensions/minify_javascript.rb +1 -1
  48. data/lib/middleman-more/templates/smacss/source/_footer.haml +1 -1
  49. data/lib/middleman-more/templates/smacss/source/stylesheets/base/README.markdown +11 -0
  50. data/lib/middleman-more/templates/smacss/source/stylesheets/base/base.scss +1 -0
  51. data/lib/middleman-more/templates/smacss/source/stylesheets/base/normalize.scss +375 -0
  52. data/lib/middleman-more/templates/smacss/source/stylesheets/layout/README.markdown +9 -0
  53. data/lib/middleman-more/templates/smacss/source/stylesheets/modules/README.markdown +9 -0
  54. data/lib/middleman-more/templates/smacss/source/stylesheets/states/README.markdown +12 -0
  55. data/lib/middleman-more/templates/smacss/source/stylesheets/style.css.scss +12 -7
  56. data/lib/middleman-more.rb +1 -5
  57. data/middleman-more.gemspec +3 -4
  58. metadata +75 -50
  59. data/lib/middleman-more/core_extensions/assets.rb +0 -43
  60. data/lib/middleman-more/extensions/minify_css/rainpress.rb +0 -168
  61. data/lib/middleman-more/templates/smacss/source/stylesheets/_1.base.scss +0 -2
  62. data/lib/middleman-more/templates/smacss/source/stylesheets/_2.layout.scss +0 -2
  63. data/lib/middleman-more/templates/smacss/source/stylesheets/_3.states.scss +0 -2
  64. data/lib/middleman-more/templates/smacss/source/stylesheets/_4.themes.scss +0 -2
  65. data/lib/middleman-more/templates/smacss/source/stylesheets/modules/_btn.scss +0 -2
@@ -104,3 +104,32 @@ Feature: Assets get a file hash appended to their and references to them are upd
104
104
  Then I should see 'Added by Rack filter'
105
105
  When I go to "stylesheets/site-50eaa978.css"
106
106
  Then I should see 'Not Found'
107
+
108
+ Scenario: Hashed-asset files are not produced for ignored paths
109
+ Given a fixture app "asset-hash-app"
110
+ And a file named "config.rb" with:
111
+ """
112
+ activate :asset_hash, :ignore => [%r(javascripts/*), 'images/*']
113
+ activate :relative_assets
114
+ activate :directory_indexes
115
+ """
116
+ And a successfully built app at "asset-hash-app"
117
+ When I cd to "build"
118
+ Then the following files should exist:
119
+ | index.html |
120
+ | apple-touch-icon.png |
121
+ | favicon.ico |
122
+ | images/100px.png |
123
+ | images/100px.jpg |
124
+ | images/100px.gif |
125
+ | javascripts/application.js |
126
+ | stylesheets/site-50eaa978.css |
127
+ | index.html |
128
+ | subdir/index.html |
129
+ | other/index.html |
130
+ And the following files should not exist:
131
+ | images/100px-1242c368.png |
132
+ | images/100px-5fd6fb90.jpg |
133
+ | images/100px-5fd6fb90.gif |
134
+ | javascripts/application-1d8d5276.js |
135
+ | stylesheets/site.css |
@@ -1,14 +1,14 @@
1
1
  Feature: Build Clean
2
2
 
3
3
  Scenario: Clean an app with directory indexes
4
- Given a successfully built app at "clean-dir-app"
4
+ Given a successfully built app at "clean-dir-app" with flags "--no-clean"
5
5
  Then the following files should exist:
6
6
  | build/about/index.html |
7
- Given a successfully built app at "clean-dir-app" with flags "--clean"
7
+ Given a successfully built app at "clean-dir-app"
8
8
  Then the following files should exist:
9
9
  | build/about/index.html |
10
10
 
11
11
  Scenario: Clean build an app that's never been built
12
- Given a successfully built app at "clean-dir-app" with flags "--clean"
12
+ Given a successfully built app at "clean-dir-app"
13
13
  Then the following files should exist:
14
14
  | build/about/index.html |
@@ -36,15 +36,15 @@ Feature: link_to helper
36
36
  And a file named "source/link_to.html.erb" with:
37
37
  """
38
38
  <% menu_items.each do |item| %>
39
- <%= link_to(item.metadata[:page]['title'], item.url) %>
40
- <%= link_to(item.metadata[:page]['title'], item) %>
39
+ <%= link_to(item.data['title'], item.url) %>
40
+ <%= link_to(item.data['title'], item) %>
41
41
  <% end %>
42
42
  """
43
43
  And a file named "source/link_to/sub.html.erb" with:
44
44
  """
45
45
  <% menu_items.each do |item| %>
46
- <%= link_to(item.metadata[:page]['title'], item.url) %>
47
- <%= link_to(item.metadata[:page]['title'], item) %>
46
+ <%= link_to(item.data['title'], item.url) %>
47
+ <%= link_to(item.data['title'], item) %>
48
48
  <% end %>
49
49
  """
50
50
  And the Server is running at "indexable-app"
@@ -0,0 +1,13 @@
1
+ Feature: i18n manually setting locale
2
+
3
+ Scenario: Setting I18n.locale in a block (see issue #809) or with the :lang option
4
+ Given the Server is running at "i18n-force-locale"
5
+ When I go to "/en/index.html"
6
+ Then I should see "Hello"
7
+ Then I should see "I18n.locale: en"
8
+ When I go to "/es/index.html"
9
+ Then I should see "Hola"
10
+ Then I should see "I18n.locale: es"
11
+ When I go to "/fr/index.html"
12
+ Then I should see "Bonjour"
13
+ Then I should see "I18n.locale: fr"
@@ -202,4 +202,17 @@ Feature: i18n Preview
202
202
  When I go to "/es/index.html"
203
203
  Then I should see '"../stylesheets/site.css"'
204
204
  When I go to "/es/hola.html"
205
- Then I should see '"../stylesheets/site.css"'
205
+ Then I should see '"../stylesheets/site.css"'
206
+
207
+ Scenario: Missing translations fall back to the default locale
208
+ Given a fixture app "i18n-default-app"
209
+ And a file named "config.rb" with:
210
+ """
211
+ activate :i18n, :mount_at_root => :es
212
+ """
213
+ Given the Server is running at "i18n-default-app"
214
+ When I go to "/en/"
215
+ Then I should see "Default locale: es"
216
+ Then I should see "Current locale: en"
217
+ Then I should see "Buenos días"
218
+ Then I should see "Howdy"
@@ -5,8 +5,9 @@ Feature: Markdown support
5
5
  Given the Server is running at "markdown-app"
6
6
  When I go to "/index.html"
7
7
  Then I should see "<p>Hello World</p>"
8
-
8
+
9
+ @encoding
9
10
  Scenario: Markdown extensions (Maruku)
10
11
  Given the Server is running at "markdown-app"
11
12
  When I go to "/smarty_pants.html"
12
- Then I should see "&"
13
+ Then I should see "“Hello”"
@@ -42,6 +42,27 @@ Feature: Markdown support
42
42
  When I go to "/hard_wrap.html"
43
43
  Then I should see "br"
44
44
 
45
+ Scenario: Redcarpet per-page frontmatter options
46
+ Given a fixture app "markdown-frontmatter-options-app"
47
+ And a file named "config.rb" with:
48
+ """
49
+ set :markdown_engine, :redcarpet
50
+ set :markdown, :smartypants => true
51
+ """
52
+ Given the Server is running at "markdown-frontmatter-options-app"
53
+ When I go to "/smarty_pants-default.html"
54
+ Then I should see "&ldquo;"
55
+ When I go to "/smarty_pants-on.html"
56
+ Then I should see "&ldquo;"
57
+ When I go to "/smarty_pants-off.html"
58
+ Then I should not see "&ldquo;"
59
+ When I go to "/tables-default.html"
60
+ Then I should not see "<table>"
61
+ When I go to "/tables-on.html"
62
+ Then I should see "<table>"
63
+ When I go to "/tables-off.html"
64
+ Then I should not see "<table>"
65
+
45
66
  Scenario: Redcarpet uses our link_to and image_tag helpers
46
67
  Given a fixture app "markdown-app"
47
68
  And a file named "config.rb" with:
@@ -0,0 +1,42 @@
1
+ @nojava
2
+ Feature: Markdown support in Haml
3
+ In order to test support of the Haml markdown filter
4
+
5
+ Scenario: Markdown filter in Haml works
6
+ Given a fixture app "markdown-in-haml-app"
7
+ And a file named "config.rb" with:
8
+ """
9
+ set :markdown_engine, :redcarpet
10
+ activate :directory_indexes
11
+ """
12
+ And a file named "source/markdown_filter.html.haml" with:
13
+ """
14
+ :markdown
15
+ # H1
16
+
17
+ paragraph
18
+ """
19
+ Given the Server is running at "markdown-in-haml-app"
20
+ When I go to "/markdown_filter/"
21
+ Then I should see "<h1>H1</h1>"
22
+ Then I should see "<p>paragraph</p>"
23
+
24
+
25
+ Scenario: Markdown filter in Haml uses our link_to and image_tag helpers
26
+ Given a fixture app "markdown-in-haml-app"
27
+ And a file named "config.rb" with:
28
+ """
29
+ set :markdown_engine, :redcarpet
30
+ activate :directory_indexes
31
+ """
32
+ And a file named "source/link_and_image.html.haml" with:
33
+ """
34
+ :markdown
35
+ [A link](/link_target.html)
36
+
37
+ ![image](blank.gif)
38
+ """
39
+ Given the Server is running at "markdown-in-haml-app"
40
+ When I go to "/link_and_image/"
41
+ Then I should see "/link_target/"
42
+ Then I should see 'src="/images/blank.gif"'
@@ -203,7 +203,7 @@ Feature: Minify Javascript
203
203
  """
204
204
  And the Server is running at "passthrough-app"
205
205
  When I go to "/inline-coffeescript.html"
206
- Then I should see "13" lines
206
+ Then I should see "14" lines
207
207
 
208
208
  Scenario: Rendering external js (coffeescript) with a passthrough minifier
209
209
  Given a fixture app "passthrough-app"
@@ -221,5 +221,5 @@ Feature: Minify Javascript
221
221
  """
222
222
  And the Server is running at "passthrough-app"
223
223
  When I go to "/javascripts/coffee_test.js"
224
- Then I should see "11" lines
224
+ Then I should see "12" lines
225
225
 
@@ -0,0 +1,30 @@
1
+ Feature: Partials dir
2
+ Scenario: Find partials in a custom partials dir
3
+ Given a fixture app "partials-dir-app"
4
+ And a file named "config.rb" with:
5
+ """
6
+ set :partials_dir, 'partials'
7
+ """
8
+ And the Server is running
9
+ When I go to "/index.html"
10
+ Then I should see "contents of the partial"
11
+
12
+ Scenario: Find partials in a nested custom partials dir
13
+ Given a fixture app "partials-dir-app"
14
+ And a file named "config.rb" with:
15
+ """
16
+ set :partials_dir, 'nested/partials'
17
+ """
18
+ And the Server is running
19
+ When I go to "/index.html"
20
+ Then I should see "contents of the nested partial"
21
+
22
+ Scenario: Find partials in the default partials dir
23
+ Given a fixture app "default-partials-dir-app"
24
+ And a file named "config.rb" with:
25
+ """
26
+ """
27
+ And the Server is running
28
+ When I go to "/index.html"
29
+ Then I should see "contents of the partial"
30
+
@@ -6,6 +6,6 @@ Feature: Support SASS assets paths
6
6
  When I go to "/stylesheets/plain.css"
7
7
  Then I should see "color: green;"
8
8
  Then I should see "/* Works with shared SCSS assets from APPROOT/assets/stylesheets/_shared-asset.scss */"
9
- Then I should see "/* Works with shared SASS assets from APPROOT/assets/stylesheets/_shared-asset.sass */"
9
+ Then I should see "/* Works with shared SASS assets from APPROOT/assets/stylesheets/_shared-asset-sass.sass */"
10
10
  Then I should see "font-size: 18px"
11
11
  Then I should see "/* Works with shared SASS assets from external source directory */"
@@ -0,0 +1 @@
1
+ contents of the partial
@@ -0,0 +1,2 @@
1
+ <%= partial 'partial' %>
2
+
@@ -0,0 +1,4 @@
1
+ ---
2
+ en:
3
+ greetings: "Howdy"
4
+ hi: "Hello"
@@ -0,0 +1,8 @@
1
+ ---
2
+ es:
3
+ paths:
4
+ hello: "hola"
5
+
6
+ greetings: "Como Esta?"
7
+ hi: "Hola"
8
+ untranslated: "Buenos días"
@@ -0,0 +1,5 @@
1
+ Default locale: <%= I18n.default_locale %>
2
+ Current locale: <%= I18n.locale %>
3
+ Fallbacks: <%= I18n.fallbacks[:en] %>
4
+ <%= t(:untranslated) %>
5
+ <%= t(:greetings) %>
@@ -0,0 +1,13 @@
1
+ [:en, :es].each do |locale|
2
+ proxy "/#{locale}/index.html", "index.html", :ignore => true do
3
+ ::I18n.locale = locale
4
+ end
5
+ end
6
+
7
+ proxy "/fr/index.html", "index.html", :lang => :fr
8
+
9
+ activate :i18n
10
+
11
+ # This is what breaks i18n, just because it adds a resource list manipulator that
12
+ # forces a rebuild of the resource list.
13
+ activate :asset_hash
@@ -0,0 +1,3 @@
1
+ ---
2
+ en:
3
+ hello: "Hello"
@@ -0,0 +1,3 @@
1
+ ---
2
+ es:
3
+ hello: "Hola"
@@ -0,0 +1,3 @@
1
+ ---
2
+ fr:
3
+ hello: "Bonjour"
@@ -0,0 +1,2 @@
1
+ Greeting: #{I18n.t 'hello'}
2
+ I18n.locale: #{I18n.locale}
@@ -0,0 +1 @@
1
+ set :markdown, :smartypants => true
@@ -0,0 +1 @@
1
+ set :markdown, :smartypants => true
@@ -0,0 +1,7 @@
1
+ ---
2
+ layout: false
3
+ renderer_options:
4
+ smartypants: false
5
+ ---
6
+
7
+ "Hello"
@@ -0,0 +1,7 @@
1
+ ---
2
+ layout: false
3
+ renderer_options:
4
+ smartypants: true
5
+ ---
6
+
7
+ "Hello"
@@ -0,0 +1,8 @@
1
+ ---
2
+ layout: false
3
+ ---
4
+
5
+ First Header | Second Header
6
+ ------------- | -------------
7
+ Content Cell | Content Cell
8
+ Content Cell | Content Cell
@@ -0,0 +1,10 @@
1
+ ---
2
+ layout: false
3
+ renderer_options:
4
+ tables: false
5
+ ---
6
+
7
+ First Header | Second Header
8
+ ------------- | -------------
9
+ Content Cell | Content Cell
10
+ Content Cell | Content Cell
@@ -0,0 +1,10 @@
1
+ ---
2
+ layout: false
3
+ renderer_options:
4
+ tables: true
5
+ ---
6
+
7
+ First Header | Second Header
8
+ ------------- | -------------
9
+ Content Cell | Content Cell
10
+ Content Cell | Content Cell
@@ -0,0 +1,4 @@
1
+ ---
2
+ layout: false
3
+ ---
4
+ Hello World
@@ -0,0 +1,2 @@
1
+ <%= partial 'partial' %>
2
+
@@ -0,0 +1 @@
1
+ contents of the nested partial
@@ -0,0 +1 @@
1
+ contents of the partial
@@ -1 +1 @@
1
- /* Works with shared SASS assets from APPROOT/assets/stylesheets/_shared-asset.sass */
1
+ /* Works with shared SASS assets from APPROOT/assets/stylesheets/_shared-asset-sass.sass */
@@ -8,7 +8,7 @@ red
8
8
  @import "_shared-asset.scss"
9
9
 
10
10
  // without extension
11
- @import "shared-asset"
11
+ @import "shared-asset-sass"
12
12
 
13
13
  // imported from outside of local 'assets/' directory
14
14
  @import "_partial.sass"
@@ -19,41 +19,41 @@ module Middleman
19
19
 
20
20
  # Location of SASS/SCSS files external to source directory.
21
21
  # @return [Array]
22
- # set :sass_assets_paths, ["#{root}/assets/sass/", "/path/2/external/sass/repository/"]
23
- app.set :sass_assets_paths, []
22
+ # config[:sass_assets_paths] = ["#{root}/assets/sass/", "/path/2/external/sass/repository/"]
23
+ app.config.define_setting :sass_assets_paths, [], 'Paths to extra SASS/SCSS files'
24
24
 
25
25
  app.after_configuration do
26
- ::Compass.configuration do |config|
27
- config.project_path = source_dir
28
- config.environment = :development
29
- config.cache_path = sass_cache_path
30
- config.sass_dir = css_dir
31
- config.css_dir = css_dir
32
- config.javascripts_dir = js_dir
33
- config.fonts_dir = fonts_dir
34
- config.images_dir = images_dir
35
- config.http_path = http_prefix
36
-
37
- sass_assets_paths.each do |path|
38
- config.add_import_path path
26
+ ::Compass.configuration do |compass_config|
27
+ compass_config.project_path = source_dir
28
+ compass_config.environment = :development
29
+ compass_config.cache_path = config[:sass_cache_path]
30
+ compass_config.sass_dir = config[:css_dir]
31
+ compass_config.css_dir = config[:css_dir]
32
+ compass_config.javascripts_dir = config[:js_dir]
33
+ compass_config.fonts_dir = config[:fonts_dir]
34
+ compass_config.images_dir = config[:images_dir]
35
+ compass_config.http_path = config[:http_prefix]
36
+
37
+ config[:sass_assets_paths].each do |path|
38
+ compass_config.add_import_path path
39
39
  end
40
40
 
41
41
  # Disable this initially, the cache_buster extension will
42
42
  # re-enable it if requested.
43
- config.asset_cache_buster :none
43
+ compass_config.asset_cache_buster :none
44
44
 
45
45
  # Disable this initially, the relative_assets extension will
46
- # re-enable it if requested.
47
- config.relative_assets = false
46
+
47
+ compass_config.relative_assets = false
48
48
 
49
49
  # Default output style
50
- config.output_style = :nested
50
+ compass_config.output_style = :nested
51
51
 
52
52
  # No line-comments in test mode (changing paths mess with sha1)
53
- config.line_comments = false if ENV["TEST"]
53
+ compass_config.line_comments = false if ENV["TEST"]
54
54
 
55
- if respond_to?(:asset_host) && asset_host.is_a?(Proc)
56
- config.asset_host(&asset_host)
55
+ if config.defines_setting?(:asset_host) && config[:asset_host].is_a?(Proc)
56
+ compass_config.asset_host(&config[:asset_host])
57
57
  end
58
58
  end
59
59
 
@@ -18,17 +18,21 @@ module Middleman
18
18
  app.helpers ::Padrino::Helpers::FormatHelpers
19
19
  app.helpers ::Padrino::Helpers::RenderHelpers
20
20
  app.helpers ::Padrino::Helpers::NumberHelpers
21
- # app.helpers ::Padrino::Helpers::TranslationHelpers
22
21
 
23
22
  app.helpers Helpers
24
23
 
25
- app.set :relative_links, false
24
+ app.config.define_setting :relative_links, false, 'Whether to generate relative links instead of absolute ones'
26
25
  end
27
26
  alias :included :registered
28
27
  end
29
28
 
30
29
  # The helpers
31
30
  module Helpers
31
+ # Disable Padrino cache buster
32
+ def asset_stamp
33
+ false
34
+ end
35
+
32
36
  # Output a stylesheet link tag based on the current path
33
37
  #
34
38
  # @return [String]
@@ -50,7 +54,6 @@ module Middleman
50
54
  # Output a stylesheet link tag based on the current path
51
55
  #
52
56
  # @param [Symbol] asset_ext The type of asset
53
- # @param [String] separator How to break up path in parts
54
57
  # @param [String] asset_dir Where to look for assets
55
58
  # @return [void]
56
59
  def auto_tag(asset_ext, asset_dir=nil)
@@ -95,16 +98,36 @@ module Middleman
95
98
  when :css then css_dir
96
99
  when :js then js_dir
97
100
  when :images then images_dir
101
+ when :fonts then fonts_dir
98
102
  else kind.to_s
99
103
  end
100
104
  source = source.to_s.tr(' ', '')
101
- ignore_extension = (kind == :images) # don't append extension
105
+ ignore_extension = (kind == :images || kind == :fonts) # don't append extension
102
106
  source << ".#{kind}" unless ignore_extension || source.end_with?(".#{kind}")
103
107
  asset_folder = "" if source.start_with?('/') # absolute path
104
108
 
105
109
  asset_url(source, asset_folder)
106
110
  end
107
111
 
112
+ # Get the URL of an asset given a type/prefix
113
+ #
114
+ # @param [String] path The path (such as "photo.jpg")
115
+ # @param [String] prefix The type prefix (such as "images")
116
+ # @return [String] The fully qualified asset url
117
+ def asset_url(path, prefix="")
118
+ # Don't touch assets which already have a full path
119
+ if path.include?("//")
120
+ path
121
+ else # rewrite paths to use their destination path
122
+ path = File.join(prefix, path)
123
+ if resource = sitemap.find_resource_by_path(path)
124
+ resource.url
125
+ else
126
+ File.join(config[:http_prefix], path)
127
+ end
128
+ end
129
+ end
130
+
108
131
  # Given a source path (referenced either absolutely or relatively)
109
132
  # or a Resource, this will produce the nice URL configured for that
110
133
  # path, respecting :relative_links, directory indexes, etc.
@@ -122,16 +145,16 @@ module Middleman
122
145
  relative = options.delete(:relative)
123
146
  raise "Can't use the relative option with an external URL" if relative && uri.host
124
147
 
125
- # Allow people to turn on relative paths for all links with
148
+ # Allow people to turn on relative paths for all links with
126
149
  # set :relative_links, true
127
150
  # but still override on a case by case basis with the :relative parameter.
128
151
  effective_relative = relative || false
129
- effective_relative = true if relative.nil? && relative_links
152
+ effective_relative = true if relative.nil? && config[:relative_links]
130
153
 
131
154
  # Try to find a sitemap resource corresponding to the desired path
132
155
  this_resource = current_resource # store in a local var to save work
133
156
  if path_or_resource.is_a?(Sitemap::Resource)
134
- resource = path_or_resource
157
+ resource = path_or_resource
135
158
  resource_url = url
136
159
  elsif this_resource && uri.path
137
160
  # Handle relative urls
@@ -163,7 +186,7 @@ module Middleman
163
186
  # If they explicitly asked for relative links but we can't find a resource...
164
187
  raise "No resource exists at #{url}" if relative
165
188
  end
166
-
189
+
167
190
  # Support a :query option that can be a string or hash
168
191
  if query = options.delete(:query)
169
192
  uri.query = query.respond_to?(:to_param) ? query.to_param : query.to_s
@@ -172,7 +195,7 @@ module Middleman
172
195
  # Support a :fragment or :anchor option just like Padrino
173
196
  fragment = options.delete(:anchor) || options.delete(:fragment)
174
197
  uri.fragment = fragment.to_s if fragment
175
-
198
+
176
199
  # Finally make the URL back into a string
177
200
  uri.to_s
178
201
  end
@@ -183,10 +206,10 @@ module Middleman
183
206
  # :relative option which, if set to true, will produce
184
207
  # relative URLs instead of absolute URLs. You can also add
185
208
  #
186
- # set :relative_links, true
209
+ # config[:relative_links] = true
187
210
  #
188
211
  # to config.rb to have all links default to relative.
189
- #
212
+ #
190
213
  # There is also a :query option that can be used to append a
191
214
  # query string, which can be expressed as either a String,
192
215
  # or a Hash which will be turned into URL parameters.
@@ -201,11 +224,11 @@ module Middleman
201
224
  if url = args[url_arg_index]
202
225
  options = args[options_index] || {}
203
226
  raise ArgumentError.new("Options must be a hash") unless options.is_a?(Hash)
204
-
227
+
205
228
  # Transform the url through our magic url_for method
206
229
  args[url_arg_index] = url_for(url, options)
207
230
  end
208
-
231
+
209
232
  super(*args, &block)
210
233
  end
211
234