middleman 0.99.1.pre → 0.99.2.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +9 -17
- data/VERSION +1 -1
- data/features/builder.feature +16 -0
- data/features/coffee-script.feature +7 -0
- data/features/helpers_auto_stylesheet_link_tag.feature +17 -0
- data/features/helpers_page_classes.feature +17 -0
- data/features/less-css.feature +7 -0
- data/features/padrino_helpers.feature +10 -0
- data/features/scss-support.feature +7 -0
- data/features/step_definitions/asset_host_steps.rb +1 -1
- data/features/step_definitions/builder_steps.rb +45 -0
- data/features/step_definitions/env.rb +1 -1
- data/features/step_definitions/generator_steps.rb +9 -3
- data/features/step_definitions/middleman_steps.rb +8 -6
- data/features/step_definitions/page_layout_steps.rb +2 -2
- data/features/{asset_host.feature → w_asset_host.feature} +0 -0
- data/features/{automatic_image_sizes.feature → x_automatic_image_sizes.feature} +0 -0
- data/features/{cache_buster.feature → y_cache_buster.feature} +0 -0
- data/features/{relative_assets.feature → z_relative_assets.feature} +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/config.rb +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/public/images/blank.gif +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/public/static.html +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/public/stylesheets/auto-css.css +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/public/stylesheets/static.css +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/public/stylesheets/sub1/auto-css.css +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/public/stylesheets/sub1/sub2/auto-css.css +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/_partial.haml +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/asset_host.html.haml +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/auto-css.html.haml +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/auto-image-sizes.html.haml +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/cache-buster.html.haml +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/custom-layout.html.haml +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/index.html.haml +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/inline-css.html.haml +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/inline-js.html.haml +0 -0
- data/fixtures/test-app/views/javascripts/coffee_test.js.coffee +3 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/layout.haml +0 -0
- data/{spec/fixtures/sample/views → fixtures/test-app/views/layouts}/custom.haml +0 -0
- data/fixtures/test-app/views/padrino_test.html.haml +5 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/page-classes.html.haml +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/services/index.html.haml +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/stylesheets/asset_host.css.sass +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/stylesheets/relative_assets.css.sass +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/stylesheets/site.css.sass +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/stylesheets/site_scss.css.scss +0 -0
- data/{spec/fixtures/sample → fixtures/test-app}/views/stylesheets/test_less.css.less +0 -0
- data/lib/middleman.rb +9 -1
- data/lib/middleman/features.rb +29 -36
- data/lib/middleman/features/asset_host.rb +16 -15
- data/lib/middleman/features/automatic_image_sizes.rb +26 -24
- data/lib/middleman/features/cache_buster.rb +34 -33
- data/lib/middleman/features/default_helpers.rb +26 -33
- data/lib/middleman/features/livereload.rb +1 -1
- data/lib/middleman/features/minify_css.rb +8 -7
- data/lib/middleman/features/minify_javascript.rb +11 -10
- data/lib/middleman/features/relative_assets.rb +30 -29
- data/lib/middleman/features/slickmap.rb +43 -42
- data/lib/middleman/features/smush_pngs.rb +29 -29
- data/lib/middleman/features/ugly_haml.rb +7 -6
- data/lib/middleman/renderers/{coffee.rb → coffee_script.rb} +11 -8
- data/lib/middleman/renderers/haml.rb +28 -33
- data/lib/middleman/renderers/sass.rb +30 -28
- data/lib/middleman/server.rb +44 -49
- data/lib/middleman/template/config.rbt +6 -6
- data/middleman.gemspec +49 -50
- metadata +79 -75
- data/lib/middleman/renderers.rb +0 -26
- data/spec/builder_spec.rb +0 -62
- data/spec/fixtures/sample/views/maruku.html.maruku +0 -1
- data/spec/helpers_spec.rb +0 -43
- data/spec/spec_helper.rb +0 -8
@@ -1,21 +1,22 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Middleman::Features::AssetHost
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
app.after_feature_init do
|
5
|
+
if Middleman::Server.asset_host.is_a?(Proc)
|
6
|
+
::Compass.configuration.asset_host(&Middleman::Server.asset_host)
|
7
|
+
end
|
6
8
|
end
|
7
|
-
end
|
8
|
-
|
9
|
-
Middleman::Assets.register :asset_host do |path, prefix, request|
|
10
|
-
original_output = Middleman::Assets.before(:asset_host, path, prefix, request)
|
11
9
|
|
12
|
-
|
10
|
+
Middleman::Assets.register :asset_host do |path, prefix, request|
|
11
|
+
original_output = Middleman::Assets.before(:asset_host, path, prefix, request)
|
12
|
+
|
13
|
+
valid_extensions = %w(.png .gif .jpg .jpeg .js .css)
|
13
14
|
|
14
|
-
|
15
|
+
asset_prefix = Middleman::Server.asset_host.call(original_output)
|
15
16
|
|
16
|
-
|
17
|
+
File.join(asset_prefix, original_output)
|
18
|
+
end
|
17
19
|
end
|
20
|
+
alias :included :registered
|
18
21
|
end
|
19
|
-
end
|
20
|
-
|
21
|
-
Middleman::Features.register :asset_host, Middleman::Features::AssetHost
|
22
|
+
end
|
@@ -1,31 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module Middleman::Features::AutomaticImageSizes
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
require "middleman/features/automatic_image_sizes/fastimage"
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
app.helpers Helpers
|
7
|
+
end
|
8
|
+
alias :included :registered
|
9
|
+
end
|
10
|
+
|
11
|
+
module Helpers
|
12
|
+
def image_tag(path, params={})
|
13
|
+
if (!params[:width] || !params[:height]) && !path.include?("://")
|
14
|
+
params[:alt] ||= ""
|
15
|
+
http_prefix = settings.http_images_path rescue settings.images_dir
|
11
16
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
19
|
-
rescue
|
17
|
+
begin
|
18
|
+
real_path = File.join(settings.public, settings.images_dir, path)
|
19
|
+
if File.exists? real_path
|
20
|
+
dimensions = ::FastImage.size(real_path, :raise_on_failure => true)
|
21
|
+
params[:width] ||= dimensions[0]
|
22
|
+
params[:height] ||= dimensions[1]
|
20
23
|
end
|
21
|
-
|
22
|
-
capture_haml { haml_tag(:img, params.merge(:src => asset_url(path, http_prefix))) }
|
23
|
-
else
|
24
|
-
pre_automatic_image_tag(path, params)
|
24
|
+
rescue
|
25
25
|
end
|
26
|
+
|
27
|
+
super(asset_url(path, http_prefix), params)
|
28
|
+
else
|
29
|
+
super(path, params)
|
26
30
|
end
|
27
31
|
end
|
28
32
|
end
|
29
|
-
end
|
30
|
-
|
31
|
-
Middleman::Features.register :automatic_image_sizes, Middleman::Features::AutomaticImageSizes
|
33
|
+
end
|
@@ -1,43 +1,44 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
module Middleman::Features::CacheBuster
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
Middleman::Assets.register :cache_buster do |path, prefix, request|
|
5
|
+
http_path = Middleman::Assets.before(:cache_buster, path, prefix, request)
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
if http_path.include?("://") || !%w(.css .png .jpg .js .gif).include?(File.extname(http_path))
|
8
|
+
http_path
|
9
|
+
else
|
10
|
+
begin
|
11
|
+
prefix = Middleman::Server.images_dir if prefix == Middleman::Server.http_images_path
|
12
|
+
rescue
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
+
real_path_static = File.join(Middleman::Server.public, prefix, path)
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
if File.readable?(real_path_static)
|
18
|
+
http_path << "?" + File.mtime(real_path_static).strftime("%s")
|
19
|
+
elsif Middleman::Server.environment == :build
|
20
|
+
real_path_dynamic = File.join(Middleman::Server.root, Middleman::Server.build_dir, prefix, path)
|
21
|
+
http_path << "?" + File.mtime(real_path_dynamic).strftime("%s") if File.readable?(real_path_dynamic)
|
22
|
+
end
|
22
23
|
|
23
|
-
|
24
|
+
http_path
|
25
|
+
end
|
24
26
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
27
|
+
|
28
|
+
app.after_feature_init do
|
29
|
+
::Compass.configuration do |config|
|
30
|
+
config.asset_cache_buster do |path, real_path|
|
31
|
+
real_path = real_path.path if real_path.is_a? File
|
32
|
+
real_path = real_path.gsub(File.join(Middleman::Server.root, Middleman::Server.build_dir), Middleman::Server.public)
|
33
|
+
if File.readable?(real_path)
|
34
|
+
File.mtime(real_path).strftime("%s")
|
35
|
+
else
|
36
|
+
$stderr.puts "WARNING: '#{File.basename(path)}' was not found (or cannot be read) in #{File.dirname(real_path)}"
|
37
|
+
end
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
39
41
|
end
|
42
|
+
alias :included :registered
|
40
43
|
end
|
41
|
-
end
|
42
|
-
|
43
|
-
Middleman::Features.register :cache_buster, Middleman::Features::CacheBuster
|
44
|
+
end
|
@@ -1,6 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module Middleman::Features::DefaultHelpers
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
app.helpers Middleman::Features::DefaultHelpers::Helpers
|
5
|
+
end
|
6
|
+
alias :included :registered
|
4
7
|
end
|
5
8
|
|
6
9
|
module Helpers
|
@@ -14,8 +17,9 @@ class Middleman::Features::DefaultHelpers
|
|
14
17
|
css_file = File.join(self.class.public, self.class.css_dir, "#{path}.css")
|
15
18
|
sass_file = File.join(self.class.views, self.class.css_dir, "#{path}.css.sass")
|
16
19
|
scss_file = File.join(self.class.views, self.class.css_dir, "#{path}.css.scss")
|
20
|
+
less_file = File.join(self.class.views, self.class.css_dir, "#{path}.css.less")
|
17
21
|
|
18
|
-
if File.exists?(css_file) || File.exists?(sass_file) || File.exists?(scss_file)
|
22
|
+
if File.exists?(css_file) || File.exists?(sass_file) || File.exists?(scss_file) || File.exists?(less_file)
|
19
23
|
stylesheet_link_tag "#{path}.css"
|
20
24
|
end
|
21
25
|
end
|
@@ -36,33 +40,22 @@ class Middleman::Features::DefaultHelpers
|
|
36
40
|
Middleman::Assets.get_url(path, prefix, request)
|
37
41
|
end
|
38
42
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
"<script #{params}></script>"
|
57
|
-
end
|
58
|
-
|
59
|
-
def stylesheet_link_tag(path, params={})
|
60
|
-
params[:rel] ||= "stylesheet"
|
61
|
-
params = params.merge(:href => asset_url(path, settings.css_dir), :type => "text/css")
|
62
|
-
params = params.map { |k,v| %Q{#{k}="#{v}"}}.join(' ')
|
63
|
-
"<link #{params} />"
|
64
|
-
end
|
43
|
+
# Padrino's asset handling needs to pass through ours
|
44
|
+
def asset_path(kind, source)
|
45
|
+
return source if source =~ /^http/
|
46
|
+
asset_folder = case kind
|
47
|
+
when :css then settings.css_dir
|
48
|
+
when :js then settings.js_dir
|
49
|
+
when :images then settings.images_dir
|
50
|
+
else kind.to_s
|
51
|
+
end
|
52
|
+
source = source.to_s.gsub(/\s/, '')
|
53
|
+
ignore_extension = (asset_folder.to_s == kind.to_s) # don't append extension
|
54
|
+
source << ".#{kind}" unless ignore_extension or source =~ /\.#{kind}/
|
55
|
+
result_path = source if source =~ %r{^/} # absolute path
|
56
|
+
result_path ||= asset_url(source, asset_folder)
|
57
|
+
timestamp = asset_timestamp(result_path)
|
58
|
+
"#{result_path}#{timestamp}"
|
59
|
+
end
|
65
60
|
end
|
66
|
-
end
|
67
|
-
|
68
|
-
Middleman::Features.register :default_helpers, Middleman::Features::DefaultHelpers, { :auto_enable => true }
|
61
|
+
end
|
@@ -1,9 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
module Middleman::Features::MinifyCss
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
app.after_feature_init do
|
5
|
+
::Compass.configuration.output_style = :compressed
|
6
|
+
end
|
5
7
|
end
|
8
|
+
alias :included :registered
|
6
9
|
end
|
7
|
-
end
|
8
|
-
|
9
|
-
Middleman::Features.register :minify_css, Middleman::Features::MinifyCSS
|
10
|
+
end
|
@@ -1,11 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
module Middleman::Features::MinifyJavascript
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
Middleman::Features::MinifyJavascript::Haml::Javascript.send :include, ::Haml::Filters::Base
|
5
|
+
|
6
|
+
require "middleman/features/minify_javascript/rack"
|
7
|
+
app.use Middleman::Rack::MinifyJavascript
|
8
|
+
end
|
9
|
+
alias :included :registered
|
7
10
|
end
|
8
|
-
|
11
|
+
|
9
12
|
module Haml
|
10
13
|
module Javascript
|
11
14
|
def render_with_options(text, options)
|
@@ -15,6 +18,4 @@ class Middleman::Features::MinifyJavascript
|
|
15
18
|
end
|
16
19
|
end
|
17
20
|
end
|
18
|
-
end
|
19
|
-
|
20
|
-
Middleman::Features.register :minify_javascript, Middleman::Features::MinifyJavascript
|
21
|
+
end
|
@@ -1,35 +1,36 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
Middleman::Assets.register :relative_assets do |path, prefix, request|
|
6
|
-
begin
|
7
|
-
prefix = Middleman::Server.images_dir if prefix == Middleman::Server.http_images_path
|
8
|
-
rescue
|
9
|
-
end
|
10
|
-
|
11
|
-
if path.include?("://")
|
12
|
-
Middleman::Assets.before(:relative_assets, path, prefix, request)
|
13
|
-
elsif path[0,1] == "/"
|
14
|
-
path
|
15
|
-
else
|
16
|
-
path = File.join(prefix, path) if prefix.length > 0
|
17
|
-
request_path = request.path_info.dup
|
18
|
-
request_path << Middleman::Server.index_file if path.match(%r{/$})
|
19
|
-
request_path.gsub!(%r{^/}, '')
|
20
|
-
parts = request_path.split('/')
|
1
|
+
module Middleman::Features::RelativeAssets
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
::Compass.configuration.relative_assets = true
|
21
5
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
6
|
+
Middleman::Assets.register :relative_assets do |path, prefix, request|
|
7
|
+
begin
|
8
|
+
prefix = Middleman::Server.images_dir if prefix == Middleman::Server.http_images_path
|
9
|
+
rescue
|
10
|
+
end
|
11
|
+
|
12
|
+
if path.include?("://")
|
13
|
+
Middleman::Assets.before(:relative_assets, path, prefix, request)
|
14
|
+
elsif path[0,1] == "/"
|
28
15
|
path
|
16
|
+
else
|
17
|
+
path = File.join(prefix, path) if prefix.length > 0
|
18
|
+
request_path = request.path_info.dup
|
19
|
+
request_path << Middleman::Server.index_file if path.match(%r{/$})
|
20
|
+
request_path.gsub!(%r{^/}, '')
|
21
|
+
parts = request_path.split('/')
|
22
|
+
|
23
|
+
if parts.length > 1
|
24
|
+
arry = []
|
25
|
+
(parts.length - 1).times { arry << ".." }
|
26
|
+
arry << path
|
27
|
+
File.join(*arry)
|
28
|
+
else
|
29
|
+
path
|
30
|
+
end
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
34
|
+
alias :included :registered
|
32
35
|
end
|
33
|
-
end
|
34
|
-
|
35
|
-
Middleman::Features.register :relative_assets, Middleman::Features::RelativeAssets
|
36
|
+
end
|
@@ -1,57 +1,60 @@
|
|
1
1
|
Entry = Struct.new(:dir, :children)
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
module Middleman::Features::Slickmap
|
4
|
+
class << self
|
5
|
+
def registered(app)
|
6
|
+
require 'slickmap'
|
6
7
|
|
7
|
-
|
8
|
+
@sitemap_url = config[:url] || "sitemap.html"
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
Middleman::Server.helpers do
|
14
|
-
def sitemap_node(n, first=false)
|
15
|
-
if n.children.length < 1
|
16
|
-
if !first && File.extname(n.dir).length > 0
|
17
|
-
haml_tag :li do
|
18
|
-
path = n.dir.gsub(self.class.views, '')
|
19
|
-
haml_concat link_to(File.basename(path), path)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
else
|
23
|
-
haml_tag(:li, :id => first ? "home" : nil) do
|
24
|
-
if first
|
25
|
-
haml_concat link_to("Homepage", "/" + self.class.index_file)
|
26
|
-
else
|
27
|
-
# we are a dir
|
28
|
-
index = n.children.find { |c| c.dir.include?(self.class.index_file) }
|
29
|
-
haml_concat link_to(index.dir.gsub(self.class.views + "/", '').gsub("/" + File.basename(index.dir), '').capitalize, index.dir.gsub(self.class.views, ''))
|
30
|
-
end
|
10
|
+
if Middleman::Server.environment == :build
|
11
|
+
Middleman::Builder.template :slickmap, @sitemap_url, @sitemap_url
|
12
|
+
end
|
31
13
|
|
32
|
-
|
33
|
-
|
14
|
+
Middleman::Server.helpers do
|
15
|
+
def sitemap_node(n, first=false)
|
16
|
+
if n.children.length < 1
|
17
|
+
if !first && File.extname(n.dir).length > 0
|
18
|
+
haml_tag :li do
|
19
|
+
path = n.dir.gsub(self.class.views, '')
|
20
|
+
haml_concat link_to(File.basename(path), path)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
else
|
24
|
+
haml_tag(:li, :id => first ? "home" : nil) do
|
34
25
|
if first
|
35
|
-
|
26
|
+
haml_concat link_to("Homepage", "/" + self.class.index_file)
|
36
27
|
else
|
37
|
-
|
28
|
+
# we are a dir
|
29
|
+
index = n.children.find { |c| c.dir.include?(self.class.index_file) }
|
30
|
+
haml_concat link_to(index.dir.gsub(self.class.views + "/", '').gsub("/" + File.basename(index.dir), '').capitalize, index.dir.gsub(self.class.views, ''))
|
31
|
+
end
|
32
|
+
|
33
|
+
other_children = n.children.select { |c| !c.dir.include?(self.class.index_file) }
|
34
|
+
if other_children.length > 0
|
35
|
+
if first
|
38
36
|
other_children.each { |i| sitemap_node(i) }
|
37
|
+
else
|
38
|
+
haml_tag :ul do
|
39
|
+
other_children.each { |i| sitemap_node(i) }
|
40
|
+
end
|
39
41
|
end
|
40
42
|
end
|
41
|
-
end
|
42
|
-
end
|
43
|
+
end
|
44
|
+
end
|
43
45
|
end
|
44
46
|
end
|
45
|
-
end
|
46
47
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
Middleman::Server.get "/#{@sitemap_url}" do
|
49
|
+
# Return :utility to put it util top menu. False to ignore
|
50
|
+
@tree, @utility = Middleman::Features::Slickmap.build_sitemap do |file_name|
|
51
|
+
:valid
|
52
|
+
end
|
53
|
+
|
54
|
+
haml "template.html".to_sym, :layout => false, :views => File.expand_path(File.join(File.dirname(__FILE__), "slickmap"))
|
51
55
|
end
|
52
|
-
|
53
|
-
haml "template.html".to_sym, :layout => false, :views => File.expand_path(File.join(File.dirname(__FILE__), "slickmap"))
|
54
56
|
end
|
57
|
+
alias :included :registered
|
55
58
|
end
|
56
59
|
|
57
60
|
def self.build_sitemap(&block)
|
@@ -83,6 +86,4 @@ class Middleman::Features::Slickmap
|
|
83
86
|
|
84
87
|
entry
|
85
88
|
end
|
86
|
-
end
|
87
|
-
|
88
|
-
Middleman::Features.register :slickmap, Middleman::Features::Slickmap
|
89
|
+
end
|