middleman 2.0.0.rc1 → 2.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +16 -0
- data/features/sprockets.feature +6 -0
- data/features/step_definitions/builder_steps.rb +1 -1
- data/fixtures/test-app/source/index.html.haml +6 -1
- data/fixtures/test-app/source/javascripts/sprockets_base.js +5 -0
- data/fixtures/test-app/source/javascripts/sprockets_sub.js +3 -0
- data/lib/middleman.rb +19 -16
- data/lib/middleman/core_extensions/compass.rb +59 -0
- data/lib/middleman/core_extensions/features.rb +2 -2
- data/lib/middleman/core_extensions/front_matter.rb +13 -0
- data/lib/middleman/core_extensions/rack_map.rb +34 -0
- data/lib/middleman/core_extensions/routing.rb +5 -9
- data/lib/middleman/core_extensions/sprockets.rb +51 -0
- data/lib/middleman/features/asset_host.rb +1 -1
- data/lib/middleman/features/cache_buster.rb +2 -2
- data/lib/middleman/features/live_reload.rb +1 -1
- data/lib/middleman/features/minify_css.rb +1 -1
- data/lib/middleman/features/minify_javascript.rb +36 -5
- data/lib/middleman/renderers/coffee_script.rb +5 -9
- data/lib/middleman/renderers/haml.rb +23 -35
- data/lib/middleman/renderers/markdown.rb +7 -8
- data/lib/middleman/renderers/sass.rb +40 -62
- data/lib/middleman/renderers/slim.rb +5 -9
- data/lib/middleman/server.rb +39 -17
- data/lib/middleman/templates/default/config.tt +19 -11
- data/lib/middleman/version.rb +1 -1
- data/middleman.gemspec +3 -5
- metadata +33 -49
- data/README.rdoc +0 -15
- data/lib/middleman/features/code_ray.rb +0 -12
- data/lib/middleman/features/minify_javascript/rack.rb +0 -57
- data/lib/middleman/features/ugly_haml.rb +0 -8
data/README.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# middleman
|
2
|
+
|
3
|
+
The Middleman is ever-vigilant against tag-soup, unreadable CSS and repetition. He stands-watch over your Haml, Sass, and CoffeeScript producing only the cleanest and efficient markup.
|
4
|
+
|
5
|
+
## Getting Started
|
6
|
+
|
7
|
+
Everything you need to know is on the official site:
|
8
|
+
http://middlemanapp.com
|
9
|
+
|
10
|
+
## Mailing List
|
11
|
+
|
12
|
+
If you have questions, answers can be found on community forum: https://convore.com/middleman/
|
13
|
+
|
14
|
+
## Copyright
|
15
|
+
|
16
|
+
Copyright (c) 2010 Thomas Reynolds. See LICENSE for details.
|
@@ -14,7 +14,7 @@ end
|
|
14
14
|
|
15
15
|
Given /^cleanup built test app$/ do
|
16
16
|
target = File.join(File.dirname(File.dirname(File.dirname(__FILE__))), "fixtures", "test-app", "build")
|
17
|
-
|
17
|
+
FileUtils.rm_rf(target)
|
18
18
|
end
|
19
19
|
|
20
20
|
Then /^"([^"]*)" should exist and include "([^"]*)"$/ do |target_file, expected|
|
data/lib/middleman.rb
CHANGED
@@ -73,6 +73,9 @@ module Middleman
|
|
73
73
|
end
|
74
74
|
|
75
75
|
module CoreExtensions
|
76
|
+
# Add Rack::Builder.map support
|
77
|
+
autoload :RackMap, "middleman/core_extensions/rack_map"
|
78
|
+
|
76
79
|
# Custom Feature API
|
77
80
|
autoload :Features, "middleman/core_extensions/features"
|
78
81
|
|
@@ -91,6 +94,12 @@ module Middleman
|
|
91
94
|
|
92
95
|
# Extended version of Padrino's rendering
|
93
96
|
autoload :Rendering, "middleman/core_extensions/rendering"
|
97
|
+
|
98
|
+
# Compass framework for Sass
|
99
|
+
autoload :Compass, "middleman/core_extensions/compass"
|
100
|
+
|
101
|
+
# Sprockets 2
|
102
|
+
autoload :Sprockets, "middleman/core_extensions/sprockets"
|
94
103
|
|
95
104
|
# Pass custom options to views
|
96
105
|
autoload :Routing, "middleman/core_extensions/routing"
|
@@ -101,34 +110,28 @@ module Middleman
|
|
101
110
|
# relative to the root of the project or use an absolute URL.
|
102
111
|
autoload :RelativeAssets, "middleman/features/relative_assets"
|
103
112
|
|
104
|
-
# AssetHost allows you to setup multiple domains to host your static
|
105
|
-
# Calls to asset paths in dynamic templates will then rotate
|
106
|
-
# the asset servers to better spread the load.
|
113
|
+
# AssetHost allows you to setup multiple domains to host your static
|
114
|
+
# assets. Calls to asset paths in dynamic templates will then rotate
|
115
|
+
# through each of the asset servers to better spread the load.
|
107
116
|
autoload :AssetHost, "middleman/features/asset_host"
|
108
117
|
|
109
118
|
# CacheBuster adds a query string to assets in dynamic templates to avoid
|
110
119
|
# browser caches failing to update to your new content.
|
111
120
|
autoload :CacheBuster, "middleman/features/cache_buster"
|
112
121
|
|
113
|
-
# AutomaticImageSizes inspects the images used in your dynamic templates
|
114
|
-
# automatically adds width and height attributes to their HTML
|
122
|
+
# AutomaticImageSizes inspects the images used in your dynamic templates
|
123
|
+
# and automatically adds width and height attributes to their HTML
|
124
|
+
# elements.
|
115
125
|
autoload :AutomaticImageSizes, "middleman/features/automatic_image_sizes"
|
116
126
|
|
117
|
-
# UglyHaml enables the non-indented output format from Haml templates. Useful
|
118
|
-
# for somewhat obfuscating the output and hiding the fact that you're using Haml.
|
119
|
-
autoload :UglyHaml, "middleman/features/ugly_haml"
|
120
|
-
|
121
127
|
# MinifyCss uses the YUI compressor to shrink CSS files
|
122
128
|
autoload :MinifyCss, "middleman/features/minify_css"
|
123
129
|
|
124
130
|
# MinifyJavascript uses the YUI compressor to shrink JS files
|
125
131
|
autoload :MinifyJavascript, "middleman/features/minify_javascript"
|
126
132
|
|
127
|
-
#
|
128
|
-
|
129
|
-
|
130
|
-
# Lorem provides a handful of helpful prototyping methods to generate words,
|
131
|
-
# paragraphs, fake images, names and email addresses.
|
133
|
+
# Lorem provides a handful of helpful prototyping methods to generate
|
134
|
+
# words, paragraphs, fake images, names and email addresses.
|
132
135
|
autoload :Lorem, "middleman/features/lorem"
|
133
136
|
|
134
137
|
# Treat project as a blog
|
@@ -140,8 +143,8 @@ module Middleman
|
|
140
143
|
# Automatically resize images for mobile devises
|
141
144
|
# autoload :TinySrc, "middleman/features/tiny_src"
|
142
145
|
|
143
|
-
# LiveReload will auto-reload browsers with the live reload extension
|
144
|
-
# Currently disabled and untested.
|
146
|
+
# LiveReload will auto-reload browsers with the live reload extension
|
147
|
+
# installed after changes. Currently disabled and untested.
|
145
148
|
# autoload :LiveReload, "middleman/features/live_reload"
|
146
149
|
end
|
147
150
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Middleman::CoreExtensions::Compass
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
app.extend ClassMethods
|
5
|
+
|
6
|
+
require "compass"
|
7
|
+
|
8
|
+
# Susy grids
|
9
|
+
begin
|
10
|
+
require "susy"
|
11
|
+
rescue LoadError
|
12
|
+
end
|
13
|
+
|
14
|
+
app.after_feature_init do
|
15
|
+
views_root = File.basename(app.views)
|
16
|
+
::Compass.configuration do |config|
|
17
|
+
config.cache = false # For sassc files
|
18
|
+
config.project_path = app.root
|
19
|
+
config.sass_dir = File.join(views_root, app.css_dir)
|
20
|
+
config.output_style = :nested
|
21
|
+
config.fonts_dir = File.join(views_root, app.fonts_dir)
|
22
|
+
config.css_dir = File.join(views_root, app.css_dir)
|
23
|
+
config.images_dir = File.join(views_root, app.images_dir)
|
24
|
+
config.http_images_path = app.http_images_path rescue File.join(app.http_prefix || "/", app.images_dir)
|
25
|
+
config.http_stylesheets_path = app.http_css_path rescue File.join(app.http_prefix || "/", app.css_dir)
|
26
|
+
config.asset_cache_buster :none
|
27
|
+
|
28
|
+
config.add_import_path(config.sass_dir)
|
29
|
+
end
|
30
|
+
|
31
|
+
# configure :build do
|
32
|
+
# build_root = File.basename(self.build_dir)
|
33
|
+
# ::Compass.configuration do |config|
|
34
|
+
# config.css_dir = File.join(build_root, self.css_dir)
|
35
|
+
# config.images_dir = File.join(build_root, self.images_dir)
|
36
|
+
# end
|
37
|
+
# end
|
38
|
+
|
39
|
+
app.execute_after_compass_init!
|
40
|
+
|
41
|
+
app.set :sass, ::Compass.configuration.to_sass_engine_options
|
42
|
+
end
|
43
|
+
end
|
44
|
+
alias :included :registered
|
45
|
+
end
|
46
|
+
|
47
|
+
module ClassMethods
|
48
|
+
# Add a block/proc to be run after features have been setup
|
49
|
+
def after_compass_init(&block)
|
50
|
+
@run_after_compass ||= []
|
51
|
+
@run_after_compass << block
|
52
|
+
end
|
53
|
+
|
54
|
+
def execute_after_compass_init!
|
55
|
+
@run_after_compass ||= []
|
56
|
+
@run_after_compass.each { |block| class_eval(&block) }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -33,7 +33,7 @@ module Middleman::CoreExtensions::Features
|
|
33
33
|
# The Feature API is itself a Feature. Mind blowing!
|
34
34
|
class << self
|
35
35
|
def registered(app)
|
36
|
-
app.set :
|
36
|
+
app.set :default_features, []
|
37
37
|
app.extend ClassMethods
|
38
38
|
end
|
39
39
|
alias :included :registered
|
@@ -84,7 +84,7 @@ module Middleman::CoreExtensions::Features
|
|
84
84
|
end
|
85
85
|
|
86
86
|
# Add in defaults
|
87
|
-
|
87
|
+
default_features.each do |ext|
|
88
88
|
activate ext
|
89
89
|
end
|
90
90
|
|
@@ -7,10 +7,20 @@ module Middleman::CoreExtensions::FrontMatter
|
|
7
7
|
app.extend ClassMethods
|
8
8
|
|
9
9
|
::Tilt::register RDiscountTemplate, 'markdown', 'mkd', 'md'
|
10
|
+
::Tilt::register RedcarpetTemplate, 'markdown', 'mkd', 'md'
|
11
|
+
::Tilt.prefer(RDiscountTemplate)
|
12
|
+
|
10
13
|
::Tilt::register RedClothTemplate, 'textile'
|
14
|
+
::Tilt.prefer(RedClothTemplate)
|
15
|
+
|
11
16
|
::Tilt::register ERBTemplate, 'erb', 'rhtml'
|
17
|
+
::Tilt.prefer(ERBTemplate)
|
18
|
+
|
12
19
|
::Tilt::register SlimTemplate, 'slim'
|
20
|
+
::Tilt.prefer(SlimTemplate)
|
21
|
+
|
13
22
|
::Tilt::register HamlTemplate, 'haml'
|
23
|
+
::Tilt.prefer(HamlTemplate)
|
14
24
|
|
15
25
|
app.before do
|
16
26
|
result = resolve_template(request.path_info, :raise_exceptions => false)
|
@@ -64,6 +74,9 @@ module Middleman::CoreExtensions::FrontMatter
|
|
64
74
|
class RDiscountTemplate < ::Tilt::RDiscountTemplate
|
65
75
|
include Middleman::CoreExtensions::FrontMatter::YamlAware
|
66
76
|
end
|
77
|
+
class RedcarpetTemplate < ::Tilt::RedcarpetTemplate
|
78
|
+
include Middleman::CoreExtensions::FrontMatter::YamlAware
|
79
|
+
end
|
67
80
|
|
68
81
|
class RedClothTemplate < ::Tilt::RedClothTemplate
|
69
82
|
include Middleman::CoreExtensions::FrontMatter::YamlAware
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Middleman::CoreExtensions::RackMap
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
app.extend ClassMethods
|
5
|
+
end
|
6
|
+
alias :included :registered
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def map(path, &block)
|
11
|
+
@maps ||= []
|
12
|
+
@maps << [path, block]
|
13
|
+
end
|
14
|
+
|
15
|
+
def maps
|
16
|
+
@maps || []
|
17
|
+
end
|
18
|
+
|
19
|
+
# Creates a Rack::Builder instance with all the middleware set up and
|
20
|
+
# an instance of this class as end point.
|
21
|
+
def build(*args, &bk)
|
22
|
+
builder = ::Rack::Builder.new
|
23
|
+
builder.use ::Sinatra::ShowExceptions if show_exceptions?
|
24
|
+
builder.use ::Rack::CommonLogger if logging?
|
25
|
+
builder.use ::Rack::Head
|
26
|
+
middleware.each { |c,a,b| builder.use(c, *a, &b) }
|
27
|
+
maps.each { |p,b| builder.map(p, &b) }
|
28
|
+
builder.map "/" do
|
29
|
+
run Middleman::Server.new!(*args, &bk)
|
30
|
+
end
|
31
|
+
builder
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -11,11 +11,7 @@ module Middleman::CoreExtensions::Routing
|
|
11
11
|
alias :included :registered
|
12
12
|
end
|
13
13
|
|
14
|
-
module ClassMethods
|
15
|
-
def current_layout
|
16
|
-
@layout
|
17
|
-
end
|
18
|
-
|
14
|
+
module ClassMethods
|
19
15
|
def path_to_index(path)
|
20
16
|
parts = path ? path.split('/') : []
|
21
17
|
if parts.last.nil? || parts.last.split('.').length == 1
|
@@ -30,12 +26,12 @@ module Middleman::CoreExtensions::Routing
|
|
30
26
|
# page "/admin/login.html"
|
31
27
|
# end
|
32
28
|
def with_layout(layout_name, &block)
|
33
|
-
old_layout =
|
29
|
+
old_layout = settings.layout
|
34
30
|
|
35
|
-
layout
|
31
|
+
set :layout, layout_name
|
36
32
|
class_eval(&block) if block_given?
|
37
33
|
ensure
|
38
|
-
layout
|
34
|
+
set :layout, old_layout
|
39
35
|
end
|
40
36
|
|
41
37
|
# The page method allows the layout to be set on a specific path
|
@@ -49,7 +45,7 @@ module Middleman::CoreExtensions::Routing
|
|
49
45
|
paths << "#{url}/" if url.length > 1 && url.split("/").last.split('.').length <= 1
|
50
46
|
paths << "#{path_to_index(url)}"
|
51
47
|
|
52
|
-
options[:layout] =
|
48
|
+
options[:layout] = settings.layout if options[:layout].nil?
|
53
49
|
|
54
50
|
paths.each do |p|
|
55
51
|
get(p) do
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "sprockets"
|
2
|
+
|
3
|
+
module Middleman::CoreExtensions::Sprockets
|
4
|
+
class << self
|
5
|
+
def registered(app)
|
6
|
+
app.set :js_compressor, false
|
7
|
+
|
8
|
+
app.map "/#{app.js_dir}" do
|
9
|
+
run JavascriptEnvironment.new(app)
|
10
|
+
end
|
11
|
+
# app.map "/#{app.css_dir}" do
|
12
|
+
# run StylesheetEnvironment.new(app)
|
13
|
+
# end
|
14
|
+
end
|
15
|
+
alias :included :registered
|
16
|
+
end
|
17
|
+
|
18
|
+
class MiddlemanEnvironment < Sprockets::Environment
|
19
|
+
def initialize(app)
|
20
|
+
super File.expand_path(app.views)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class JavascriptEnvironment < MiddlemanEnvironment
|
25
|
+
def initialize(app)
|
26
|
+
super
|
27
|
+
|
28
|
+
# Disable css
|
29
|
+
unregister_processor "text/css", ::Sprockets::DirectiveProcessor
|
30
|
+
|
31
|
+
self.js_compressor = app.settings.js_compressor
|
32
|
+
|
33
|
+
# configure search paths
|
34
|
+
javascripts_path = File.join(File.expand_path(app.views), app.js_dir)
|
35
|
+
append_path javascripts_path
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# class StylesheetEnvironment < MiddlemanEnvironment
|
40
|
+
# def initialize(app)
|
41
|
+
# super
|
42
|
+
#
|
43
|
+
# # Disable js
|
44
|
+
# unregister_processor "application/javascript", ::Sprockets::DirectiveProcessor
|
45
|
+
#
|
46
|
+
# # configure search paths
|
47
|
+
# stylesheets_path = File.join(File.expand_path(app.views), app.css_dir)
|
48
|
+
# append_path stylesheets_path
|
49
|
+
# end
|
50
|
+
# end
|
51
|
+
end
|
@@ -16,7 +16,7 @@ module Middleman::Features::CacheBuster
|
|
16
16
|
|
17
17
|
if File.readable?(real_path_static)
|
18
18
|
http_path << "?" + File.mtime(real_path_static).strftime("%s")
|
19
|
-
elsif app.
|
19
|
+
elsif app.build?
|
20
20
|
real_path_dynamic = File.join(app.root, app.build_dir, prefix, path)
|
21
21
|
http_path << "?" + File.mtime(real_path_dynamic).strftime("%s") if File.readable?(real_path_dynamic)
|
22
22
|
end
|
@@ -25,7 +25,7 @@ module Middleman::Features::CacheBuster
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
app.
|
28
|
+
app.after_compass_init do
|
29
29
|
::Compass.configuration do |config|
|
30
30
|
config.asset_cache_buster do |path, real_path|
|
31
31
|
real_path = real_path.path if real_path.is_a? File
|
@@ -1,12 +1,43 @@
|
|
1
1
|
module Middleman::Features::MinifyJavascript
|
2
2
|
class << self
|
3
3
|
def registered(app)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
require "middleman/features/minify_javascript/rack"
|
8
|
-
app.use Middleman::Rack::MinifyJavascript
|
4
|
+
require 'uglifier'
|
5
|
+
app.set :js_compressor, ::Uglifier.new
|
6
|
+
app.use InlineJavascriptRack
|
9
7
|
end
|
10
8
|
alias :included :registered
|
11
9
|
end
|
10
|
+
|
11
|
+
class InlineJavascriptRack
|
12
|
+
def initialize(app, options={})
|
13
|
+
@app = app
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
status, headers, response = @app.call(env)
|
18
|
+
|
19
|
+
if env["PATH_INFO"].match(/\.html$/)
|
20
|
+
compressor = ::Uglifier.new
|
21
|
+
|
22
|
+
if response.is_a?(::Rack::File) or response.is_a?(::Sinatra::Helpers::StaticFile)
|
23
|
+
uncompressed_source = File.read(response.path)
|
24
|
+
else
|
25
|
+
uncompressed_source = response.join
|
26
|
+
end
|
27
|
+
|
28
|
+
minified = uncompressed_source.gsub(/(<scri.*?\/\/<!\[CDATA\[\n)(.*?)(\/\/\]\].*?<\/script>)/m) do |m|
|
29
|
+
first = $1
|
30
|
+
uncompressed_source = $2
|
31
|
+
last = $3
|
32
|
+
minified_js = compressor.compile(uncompressed_source)
|
33
|
+
|
34
|
+
first << minified_js << "\n" << last
|
35
|
+
end
|
36
|
+
headers["Content-Length"] = ::Rack::Utils.bytesize(minified).to_s
|
37
|
+
response = [minified]
|
38
|
+
end
|
39
|
+
|
40
|
+
[status, headers, response]
|
41
|
+
end
|
42
|
+
end
|
12
43
|
end
|
@@ -1,12 +1,8 @@
|
|
1
|
-
module Middleman
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
def registered(app)
|
6
|
-
require "coffee_script"
|
7
|
-
end
|
8
|
-
alias :included :registered
|
9
|
-
end
|
1
|
+
module Middleman::Renderers::CoffeeScript
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
require "coffee_script"
|
10
5
|
end
|
6
|
+
alias :included :registered
|
11
7
|
end
|
12
8
|
end
|
@@ -1,43 +1,31 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module Middleman::Renderers::Haml
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
# Base library
|
5
|
+
require "haml"
|
3
6
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def registered(app)
|
9
|
-
app.helpers Middleman::Renderers::Haml::Helpers
|
10
|
-
end
|
11
|
-
alias :included :registered
|
7
|
+
# Coffee-script filter for Haml
|
8
|
+
begin
|
9
|
+
require "coffee-filter"
|
10
|
+
rescue LoadError
|
12
11
|
end
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
# Code-ray Syntax highlighting
|
14
|
+
begin
|
15
|
+
require 'haml-coderay'
|
16
|
+
rescue LoadError
|
18
17
|
end
|
18
|
+
|
19
|
+
app.helpers Helpers
|
20
|
+
|
21
|
+
#app.set :haml, app.settings.haml.merge({ :ugly_haml => true })
|
22
|
+
end
|
23
|
+
alias :included :registered
|
24
|
+
end
|
19
25
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
def render(text)
|
24
|
-
output = '<div class="table"><table cellspacing="0" cellpadding="0">'
|
25
|
-
line_num = 0
|
26
|
-
text.each_line do |line|
|
27
|
-
line_num += 1
|
28
|
-
next if line.strip.empty?
|
29
|
-
output << %Q{<tr class="#{(line_num % 2 == 0) ? "even" : "odd" }#{(line_num == 1) ? " first" : "" }">}
|
30
|
-
|
31
|
-
columns = line.split("|").map { |p| p.strip }
|
32
|
-
columns.each_with_index do |col, i|
|
33
|
-
output << %Q{<td class="col#{i+1}">#{col}</td>}
|
34
|
-
end
|
35
|
-
|
36
|
-
output << "</tr>"
|
37
|
-
end
|
38
|
-
output + "</table></div>"
|
39
|
-
end
|
40
|
-
end
|
26
|
+
module Helpers
|
27
|
+
def haml_partial(name, options = {})
|
28
|
+
render(name, options)
|
41
29
|
end
|
42
30
|
end
|
43
31
|
end
|
@@ -1,12 +1,11 @@
|
|
1
|
-
module Middleman
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
8
|
-
alias :included :registered
|
1
|
+
module Middleman::Renderers::Markdown
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
app.set :markdown, ::Tilt::RDiscountTemplate
|
5
|
+
app.after_feature_init do
|
6
|
+
::Tilt.prefer(app.settings.markdown)
|
9
7
|
end
|
10
8
|
end
|
9
|
+
alias :included :registered
|
11
10
|
end
|
12
11
|
end
|
@@ -1,83 +1,61 @@
|
|
1
1
|
require "sass"
|
2
2
|
require "sass/plugin"
|
3
|
-
require "compass"
|
4
|
-
require "susy"
|
5
3
|
|
6
|
-
module Middleman
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
app.after_feature_init do
|
12
|
-
views_root = File.basename(self.views)
|
13
|
-
::Compass.configuration do |config|
|
14
|
-
config.cache_path = File.join(self.root, ".sass-cache") # For sassc files
|
15
|
-
config.project_path = self.root
|
16
|
-
config.sass_dir = File.join(views_root, self.css_dir)
|
17
|
-
config.output_style = :nested
|
18
|
-
config.fonts_dir = File.join(views_root, self.fonts_dir)
|
19
|
-
config.css_dir = File.join(views_root, self.css_dir)
|
20
|
-
config.images_dir = File.join(views_root, self.images_dir)
|
21
|
-
config.http_images_path = self.http_images_path rescue File.join(self.http_prefix || "/", self.images_dir)
|
22
|
-
config.http_stylesheets_path = self.http_css_path rescue File.join(self.http_prefix || "/", self.css_dir)
|
23
|
-
config.asset_cache_buster :none
|
24
|
-
|
25
|
-
config.add_import_path(config.sass_dir)
|
26
|
-
end
|
27
|
-
|
28
|
-
configure :build do
|
29
|
-
build_root = File.basename(self.build_dir)
|
30
|
-
::Compass.configuration do |config|
|
31
|
-
config.css_dir = File.join(build_root, self.css_dir)
|
32
|
-
config.images_dir = File.join(build_root, self.images_dir)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
alias :included :registered
|
38
|
-
end
|
4
|
+
module Middleman::Renderers::Sass
|
5
|
+
class << self
|
6
|
+
def registered(app)
|
7
|
+
# Default sass options
|
8
|
+
app.set :sass, {}
|
39
9
|
end
|
10
|
+
alias :included :registered
|
40
11
|
end
|
41
|
-
|
12
|
+
|
13
|
+
class SassPlusCSSFilenameTemplate < ::Tilt::SassTemplate
|
14
|
+
def sass_options
|
15
|
+
return super if basename.nil?
|
16
|
+
|
17
|
+
location_of_sass_file = if Middleman::Server.build?
|
18
|
+
File.join(Middleman::Server.root, Middleman::Server.build_dir)
|
19
|
+
else
|
20
|
+
Middleman::Server.views
|
21
|
+
end
|
42
22
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
File.join(Middleman::Server.root, Middleman::Server.build_dir) :
|
49
|
-
Middleman::Server.views
|
23
|
+
parts = basename.split('.')
|
24
|
+
parts.pop
|
25
|
+
css_filename = File.join(location_of_sass_file, Middleman::Server.css_dir, parts.join("."))
|
26
|
+
super.merge(Middleman::Server.settings.sass).merge(:css_filename => css_filename)
|
27
|
+
end
|
50
28
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
def evaluate(scope, locals, &block)
|
58
|
-
begin
|
59
|
-
super
|
60
|
-
rescue Sass::SyntaxError => e
|
61
|
-
Sass::SyntaxError.exception_to_css(e, :full_exception => true)
|
29
|
+
def evaluate(scope, locals, &block)
|
30
|
+
begin
|
31
|
+
super
|
32
|
+
rescue Sass::SyntaxError => e
|
33
|
+
Sass::SyntaxError.exception_to_css(e, :full_exception => true)
|
34
|
+
end
|
62
35
|
end
|
63
36
|
end
|
64
|
-
|
65
|
-
Tilt.
|
37
|
+
::Tilt.register 'sass', SassPlusCSSFilenameTemplate
|
38
|
+
::Tilt.prefer(SassPlusCSSFilenameTemplate)
|
66
39
|
|
67
|
-
class
|
68
|
-
|
69
|
-
|
40
|
+
class ScssPlusCSSFilenameTemplate < SassPlusCSSFilenameTemplate
|
41
|
+
def sass_options
|
42
|
+
super.merge(:syntax => :scss)
|
43
|
+
end
|
70
44
|
end
|
45
|
+
::Tilt.register 'scss', ScssPlusCSSFilenameTemplate
|
46
|
+
::Tilt.prefer(ScssPlusCSSFilenameTemplate)
|
71
47
|
end
|
72
|
-
Tilt.register 'scss', Tilt::ScssPlusCSSFilenameTemplate
|
73
|
-
|
74
48
|
|
49
|
+
# Use sass settings in Haml filters
|
50
|
+
# Other, tilt-based filters (like those used in Slim) will
|
51
|
+
# work automatically.
|
75
52
|
module Middleman::Renderers::Haml
|
76
53
|
module Sass
|
77
54
|
include ::Haml::Filters::Base
|
78
55
|
|
79
56
|
def render(text)
|
80
|
-
|
57
|
+
sass_options = Middleman::Server.settings.sass
|
58
|
+
::Sass::Engine.new(text, sass_options).render
|
81
59
|
end
|
82
60
|
end
|
83
61
|
end
|
@@ -1,12 +1,8 @@
|
|
1
|
-
module Middleman
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
def registered(app)
|
6
|
-
require "slim"
|
7
|
-
end
|
8
|
-
alias :included :registered
|
9
|
-
end
|
1
|
+
module Middleman::Renderers::Slim
|
2
|
+
class << self
|
3
|
+
def registered(app)
|
4
|
+
require "slim"
|
10
5
|
end
|
6
|
+
alias :included :registered
|
11
7
|
end
|
12
8
|
end
|
data/lib/middleman/server.rb
CHANGED
@@ -3,6 +3,21 @@ require "sinatra/base"
|
|
3
3
|
|
4
4
|
module Middleman
|
5
5
|
class Server < Sinatra::Base
|
6
|
+
class << self
|
7
|
+
# Override Sinatra's set to accept a block
|
8
|
+
# Specifically for the asset_host feature
|
9
|
+
def set(option, value=self, &block)
|
10
|
+
if block_given?
|
11
|
+
value = Proc.new { block }
|
12
|
+
end
|
13
|
+
|
14
|
+
super(option, value, &nil)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Convenience method to check if we're in build mode
|
18
|
+
def build?; environment == :build; end
|
19
|
+
end
|
20
|
+
|
6
21
|
# Basic Sinatra config
|
7
22
|
set :app_file, __FILE__
|
8
23
|
set :root, ENV["MM_DIR"] || Dir.pwd
|
@@ -28,12 +43,21 @@ module Middleman
|
|
28
43
|
|
29
44
|
set :views, "source"
|
30
45
|
|
46
|
+
# Add Rack::Builder.map to Sinatra
|
47
|
+
register Middleman::CoreExtensions::RackMap
|
48
|
+
|
31
49
|
# Activate custom features
|
32
50
|
register Middleman::CoreExtensions::Features
|
33
51
|
|
34
52
|
# Setup custom rendering
|
35
53
|
register Middleman::CoreExtensions::Rendering
|
36
54
|
|
55
|
+
# Compass framework
|
56
|
+
register Middleman::CoreExtensions::Compass
|
57
|
+
|
58
|
+
# Sprockets asset handling
|
59
|
+
register Middleman::CoreExtensions::Sprockets
|
60
|
+
|
37
61
|
# Setup asset path pipeline
|
38
62
|
register Middleman::CoreExtensions::Assets
|
39
63
|
|
@@ -49,22 +73,12 @@ module Middleman
|
|
49
73
|
# Parse YAML from templates
|
50
74
|
register Middleman::CoreExtensions::FrontMatter
|
51
75
|
|
52
|
-
set :
|
76
|
+
set :default_features, [
|
53
77
|
:lorem
|
54
78
|
]
|
55
79
|
|
56
|
-
# Override Sinatra's set to accept a block
|
57
|
-
# Specifically for the asset_host feature
|
58
|
-
def self.set(option, value=self, &block)
|
59
|
-
if block_given?
|
60
|
-
value = Proc.new { block }
|
61
|
-
end
|
62
|
-
|
63
|
-
super(option, value, &nil)
|
64
|
-
end
|
65
|
-
|
66
80
|
# Default layout name
|
67
|
-
layout :layout
|
81
|
+
set :layout, :layout
|
68
82
|
|
69
83
|
# This will match all requests not overridden in the project's config.rb
|
70
84
|
not_found do
|
@@ -98,15 +112,23 @@ module Middleman
|
|
98
112
|
|
99
113
|
options.merge!(request['custom_options'] || {})
|
100
114
|
|
101
|
-
old_layout = settings.
|
102
|
-
settings.layout
|
103
|
-
|
104
|
-
layout =
|
115
|
+
old_layout = settings.layout
|
116
|
+
settings.set :layout, options[:layout] if !options[:layout].nil?
|
117
|
+
|
118
|
+
layout = if settings.layout
|
119
|
+
if options[:layout] == false || request.path_info =~ /\.(css|js)$/
|
120
|
+
false
|
121
|
+
else
|
122
|
+
settings.fetch_layout_path(settings.layout).to_sym
|
123
|
+
end
|
124
|
+
else
|
125
|
+
false
|
126
|
+
end
|
105
127
|
|
106
128
|
render_options = { :layout => layout }
|
107
129
|
render_options[:layout_engine] = options[:layout_engine] if options.has_key? :layout_engine
|
108
130
|
result = render(request.path_info, render_options)
|
109
|
-
settings.layout
|
131
|
+
settings.set :layout, old_layout
|
110
132
|
|
111
133
|
if result
|
112
134
|
content_type mime_type(File.extname(request.path_info)), :charset => 'utf-8'
|
@@ -1,7 +1,17 @@
|
|
1
|
+
# Susy grids in Compass
|
2
|
+
# First: gem install compass-susy-plugin
|
3
|
+
# require 'susy'
|
4
|
+
|
1
5
|
# CodeRay syntax highlighting in Haml
|
2
|
-
#
|
6
|
+
# First: gem install haml-coderay
|
7
|
+
# require 'haml-coderay'
|
8
|
+
|
9
|
+
# CoffeeScript filters in Haml
|
10
|
+
# First: gem install coffee-filter
|
11
|
+
# require 'coffee-filter'
|
3
12
|
|
4
|
-
# Automatic sitemaps
|
13
|
+
# Automatic sitemaps
|
14
|
+
# First: gem install middleman-slickmap
|
5
15
|
# require "middleman-slickmap"
|
6
16
|
# activate :slickmap
|
7
17
|
|
@@ -15,11 +25,11 @@
|
|
15
25
|
# page "/path/to/file.html", :layout => :otherlayout
|
16
26
|
|
17
27
|
# Helpers
|
18
|
-
helpers do
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
28
|
+
# helpers do
|
29
|
+
# def some_helper(*args)
|
30
|
+
# "Helping"
|
31
|
+
# end
|
32
|
+
# end
|
23
33
|
|
24
34
|
<% if options[:css_dir] != "stylesheets" -%>
|
25
35
|
set :css_dir, "<%= options[:css_dir] -%>"
|
@@ -56,12 +66,10 @@ configure :build do
|
|
56
66
|
# Use relative URLs
|
57
67
|
# activate :relative_assets
|
58
68
|
|
59
|
-
# Compress PNGs after build
|
69
|
+
# Compress PNGs after build
|
70
|
+
# First: gem install middleman-smusher
|
60
71
|
# require "middleman-smusher"
|
61
72
|
# activate :smusher
|
62
|
-
|
63
|
-
# Generate ugly/obfuscated HTML from Haml
|
64
|
-
# activate :ugly_haml
|
65
73
|
|
66
74
|
# Or use a different image path
|
67
75
|
# set :http_path, "/Content/images/"
|
data/lib/middleman/version.rb
CHANGED
data/middleman.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Thomas Reynolds"]
|
10
10
|
s.email = ["tdreyno@gmail.com"]
|
11
|
-
s.homepage = "http://
|
12
|
-
s.summary = "A static site generator based on Sinatra. Providing Haml, Sass, Compass,
|
11
|
+
s.homepage = "http://middlemanapp.com"
|
12
|
+
s.summary = "A static site generator based on Sinatra. Providing Haml, Sass, Compass, CoffeeScript and including minification, compression and cache busting."
|
13
13
|
|
14
14
|
s.rubyforge_project = "middleman"
|
15
15
|
|
@@ -29,11 +29,9 @@ Gem::Specification.new do |s|
|
|
29
29
|
s.add_runtime_dependency("uglifier", ["~> 0.5.0"])
|
30
30
|
s.add_runtime_dependency("slim", ["~> 0.9.4"])
|
31
31
|
s.add_runtime_dependency("haml", ["~> 3.1.0"])
|
32
|
-
s.add_runtime_dependency("coffee-filter", ["~> 0.1.0"])
|
33
32
|
s.add_runtime_dependency("sass", ["~> 3.1.0"])
|
34
33
|
s.add_runtime_dependency("compass", ["~> 0.11.3"])
|
35
|
-
s.add_runtime_dependency("
|
36
|
-
s.add_runtime_dependency("coffee-script", ["~> 2.2.0"])
|
34
|
+
s.add_runtime_dependency("sprockets", ["2.0.0.beta.10"])
|
37
35
|
s.add_runtime_dependency("httparty", ["~> 0.7.0"])
|
38
36
|
s.add_development_dependency("spork", ["~> 0.9.0.rc8"])
|
39
37
|
s.add_development_dependency("cucumber", ["~> 0.10.0"])
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: middleman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: 6
|
5
|
-
version: 2.0.0.
|
5
|
+
version: 2.0.0.rc2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Thomas Reynolds
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-11 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -135,126 +135,104 @@ dependencies:
|
|
135
135
|
type: :runtime
|
136
136
|
version_requirements: *id011
|
137
137
|
- !ruby/object:Gem::Dependency
|
138
|
-
name:
|
138
|
+
name: sass
|
139
139
|
prerelease: false
|
140
140
|
requirement: &id012 !ruby/object:Gem::Requirement
|
141
141
|
none: false
|
142
142
|
requirements:
|
143
143
|
- - ~>
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
145
|
+
version: 3.1.0
|
146
146
|
type: :runtime
|
147
147
|
version_requirements: *id012
|
148
148
|
- !ruby/object:Gem::Dependency
|
149
|
-
name:
|
149
|
+
name: compass
|
150
150
|
prerelease: false
|
151
151
|
requirement: &id013 !ruby/object:Gem::Requirement
|
152
152
|
none: false
|
153
153
|
requirements:
|
154
154
|
- - ~>
|
155
155
|
- !ruby/object:Gem::Version
|
156
|
-
version:
|
156
|
+
version: 0.11.3
|
157
157
|
type: :runtime
|
158
158
|
version_requirements: *id013
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
|
-
name:
|
160
|
+
name: sprockets
|
161
161
|
prerelease: false
|
162
162
|
requirement: &id014 !ruby/object:Gem::Requirement
|
163
163
|
none: false
|
164
164
|
requirements:
|
165
|
-
- -
|
165
|
+
- - "="
|
166
166
|
- !ruby/object:Gem::Version
|
167
|
-
version: 0.
|
167
|
+
version: 2.0.0.beta.10
|
168
168
|
type: :runtime
|
169
169
|
version_requirements: *id014
|
170
|
-
- !ruby/object:Gem::Dependency
|
171
|
-
name: compass-susy-plugin
|
172
|
-
prerelease: false
|
173
|
-
requirement: &id015 !ruby/object:Gem::Requirement
|
174
|
-
none: false
|
175
|
-
requirements:
|
176
|
-
- - ~>
|
177
|
-
- !ruby/object:Gem::Version
|
178
|
-
version: 0.9.0
|
179
|
-
type: :runtime
|
180
|
-
version_requirements: *id015
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: coffee-script
|
183
|
-
prerelease: false
|
184
|
-
requirement: &id016 !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - ~>
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: 2.2.0
|
190
|
-
type: :runtime
|
191
|
-
version_requirements: *id016
|
192
170
|
- !ruby/object:Gem::Dependency
|
193
171
|
name: httparty
|
194
172
|
prerelease: false
|
195
|
-
requirement: &
|
173
|
+
requirement: &id015 !ruby/object:Gem::Requirement
|
196
174
|
none: false
|
197
175
|
requirements:
|
198
176
|
- - ~>
|
199
177
|
- !ruby/object:Gem::Version
|
200
178
|
version: 0.7.0
|
201
179
|
type: :runtime
|
202
|
-
version_requirements: *
|
180
|
+
version_requirements: *id015
|
203
181
|
- !ruby/object:Gem::Dependency
|
204
182
|
name: spork
|
205
183
|
prerelease: false
|
206
|
-
requirement: &
|
184
|
+
requirement: &id016 !ruby/object:Gem::Requirement
|
207
185
|
none: false
|
208
186
|
requirements:
|
209
187
|
- - ~>
|
210
188
|
- !ruby/object:Gem::Version
|
211
189
|
version: 0.9.0.rc8
|
212
190
|
type: :development
|
213
|
-
version_requirements: *
|
191
|
+
version_requirements: *id016
|
214
192
|
- !ruby/object:Gem::Dependency
|
215
193
|
name: cucumber
|
216
194
|
prerelease: false
|
217
|
-
requirement: &
|
195
|
+
requirement: &id017 !ruby/object:Gem::Requirement
|
218
196
|
none: false
|
219
197
|
requirements:
|
220
198
|
- - ~>
|
221
199
|
- !ruby/object:Gem::Version
|
222
200
|
version: 0.10.0
|
223
201
|
type: :development
|
224
|
-
version_requirements: *
|
202
|
+
version_requirements: *id017
|
225
203
|
- !ruby/object:Gem::Dependency
|
226
204
|
name: rake
|
227
205
|
prerelease: false
|
228
|
-
requirement: &
|
206
|
+
requirement: &id018 !ruby/object:Gem::Requirement
|
229
207
|
none: false
|
230
208
|
requirements:
|
231
209
|
- - "="
|
232
210
|
- !ruby/object:Gem::Version
|
233
211
|
version: 0.8.7
|
234
212
|
type: :development
|
235
|
-
version_requirements: *
|
213
|
+
version_requirements: *id018
|
236
214
|
- !ruby/object:Gem::Dependency
|
237
215
|
name: rspec
|
238
216
|
prerelease: false
|
239
|
-
requirement: &
|
217
|
+
requirement: &id019 !ruby/object:Gem::Requirement
|
240
218
|
none: false
|
241
219
|
requirements:
|
242
220
|
- - ">="
|
243
221
|
- !ruby/object:Gem::Version
|
244
222
|
version: "0"
|
245
223
|
type: :development
|
246
|
-
version_requirements: *
|
224
|
+
version_requirements: *id019
|
247
225
|
- !ruby/object:Gem::Dependency
|
248
226
|
name: rocco
|
249
227
|
prerelease: false
|
250
|
-
requirement: &
|
228
|
+
requirement: &id020 !ruby/object:Gem::Requirement
|
251
229
|
none: false
|
252
230
|
requirements:
|
253
231
|
- - ">="
|
254
232
|
- !ruby/object:Gem::Version
|
255
233
|
version: "0"
|
256
234
|
type: :development
|
257
|
-
version_requirements: *
|
235
|
+
version_requirements: *id020
|
258
236
|
description:
|
259
237
|
email:
|
260
238
|
- tdreyno@gmail.com
|
@@ -274,7 +252,7 @@ files:
|
|
274
252
|
- CHANGELOG
|
275
253
|
- Gemfile
|
276
254
|
- LICENSE
|
277
|
-
- README.
|
255
|
+
- README.md
|
278
256
|
- Rakefile
|
279
257
|
- bin/mm-build
|
280
258
|
- bin/mm-init
|
@@ -293,6 +271,7 @@ files:
|
|
293
271
|
- features/page_alias_and_layouts.feature
|
294
272
|
- features/scss-support.feature
|
295
273
|
- features/slim.feature
|
274
|
+
- features/sprockets.feature
|
296
275
|
- features/step_definitions/asset_host_steps.rb
|
297
276
|
- features/step_definitions/builder_steps.rb
|
298
277
|
- features/step_definitions/generator_steps.rb
|
@@ -333,6 +312,8 @@ files:
|
|
333
312
|
- fixtures/test-app/source/javascripts/auto-js/sub/auto-js.js
|
334
313
|
- fixtures/test-app/source/javascripts/coffee_test.js.coffee
|
335
314
|
- fixtures/test-app/source/javascripts/jquery.plugin.with.dots.js
|
315
|
+
- fixtures/test-app/source/javascripts/sprockets_base.js
|
316
|
+
- fixtures/test-app/source/javascripts/sprockets_sub.js
|
336
317
|
- fixtures/test-app/source/layout.haml
|
337
318
|
- fixtures/test-app/source/layouts/custom.haml
|
338
319
|
- fixtures/test-app/source/padrino_test.html.haml
|
@@ -357,27 +338,27 @@ files:
|
|
357
338
|
- lib/middleman/builder.rb
|
358
339
|
- lib/middleman/config.ru
|
359
340
|
- lib/middleman/core_extensions/assets.rb
|
341
|
+
- lib/middleman/core_extensions/compass.rb
|
360
342
|
- lib/middleman/core_extensions/data.rb
|
361
343
|
- lib/middleman/core_extensions/default_helpers.rb
|
362
344
|
- lib/middleman/core_extensions/features.rb
|
363
345
|
- lib/middleman/core_extensions/front_matter.rb
|
346
|
+
- lib/middleman/core_extensions/rack_map.rb
|
364
347
|
- lib/middleman/core_extensions/rendering.rb
|
365
348
|
- lib/middleman/core_extensions/routing.rb
|
349
|
+
- lib/middleman/core_extensions/sprockets.rb
|
366
350
|
- lib/middleman/features/asset_host.rb
|
367
351
|
- lib/middleman/features/automatic_image_sizes.rb
|
368
352
|
- lib/middleman/features/automatic_image_sizes/fastimage.rb
|
369
353
|
- lib/middleman/features/blog.rb
|
370
354
|
- lib/middleman/features/cache_buster.rb
|
371
|
-
- lib/middleman/features/code_ray.rb
|
372
355
|
- lib/middleman/features/live_reload.rb
|
373
356
|
- lib/middleman/features/lorem.rb
|
374
357
|
- lib/middleman/features/minify_css.rb
|
375
358
|
- lib/middleman/features/minify_javascript.rb
|
376
|
-
- lib/middleman/features/minify_javascript/rack.rb
|
377
359
|
- lib/middleman/features/proxy.rb
|
378
360
|
- lib/middleman/features/relative_assets.rb
|
379
361
|
- lib/middleman/features/tiny_src.rb
|
380
|
-
- lib/middleman/features/ugly_haml.rb
|
381
362
|
- lib/middleman/renderers/coffee_script.rb
|
382
363
|
- lib/middleman/renderers/haml.rb
|
383
364
|
- lib/middleman/renderers/markdown.rb
|
@@ -422,7 +403,7 @@ files:
|
|
422
403
|
- lib/middleman/version.rb
|
423
404
|
- middleman.gemspec
|
424
405
|
has_rdoc: true
|
425
|
-
homepage: http://
|
406
|
+
homepage: http://middlemanapp.com
|
426
407
|
licenses: []
|
427
408
|
|
428
409
|
post_install_message:
|
@@ -448,7 +429,7 @@ rubyforge_project: middleman
|
|
448
429
|
rubygems_version: 1.3.9.2
|
449
430
|
signing_key:
|
450
431
|
specification_version: 3
|
451
|
-
summary: A static site generator based on Sinatra. Providing Haml, Sass, Compass,
|
432
|
+
summary: A static site generator based on Sinatra. Providing Haml, Sass, Compass, CoffeeScript and including minification, compression and cache busting.
|
452
433
|
test_files:
|
453
434
|
- features/builder.feature
|
454
435
|
- features/coffee-script.feature
|
@@ -464,6 +445,7 @@ test_files:
|
|
464
445
|
- features/page_alias_and_layouts.feature
|
465
446
|
- features/scss-support.feature
|
466
447
|
- features/slim.feature
|
448
|
+
- features/sprockets.feature
|
467
449
|
- features/step_definitions/asset_host_steps.rb
|
468
450
|
- features/step_definitions/builder_steps.rb
|
469
451
|
- features/step_definitions/generator_steps.rb
|
@@ -504,6 +486,8 @@ test_files:
|
|
504
486
|
- fixtures/test-app/source/javascripts/auto-js/sub/auto-js.js
|
505
487
|
- fixtures/test-app/source/javascripts/coffee_test.js.coffee
|
506
488
|
- fixtures/test-app/source/javascripts/jquery.plugin.with.dots.js
|
489
|
+
- fixtures/test-app/source/javascripts/sprockets_base.js
|
490
|
+
- fixtures/test-app/source/javascripts/sprockets_sub.js
|
507
491
|
- fixtures/test-app/source/layout.haml
|
508
492
|
- fixtures/test-app/source/layouts/custom.haml
|
509
493
|
- fixtures/test-app/source/padrino_test.html.haml
|
data/README.rdoc
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
= middleman
|
2
|
-
|
3
|
-
The Middleman is ever-vigilant against tag-soup, unreadable CSS and repetition. He stands-watch over your Haml, Sass, Less and CoffeeScript producing only the cleanest and efficient markup.
|
4
|
-
|
5
|
-
== Getting Started
|
6
|
-
|
7
|
-
Everything you need to know is on the wiki: http://github.com/tdreyno/middleman/wiki
|
8
|
-
|
9
|
-
== Mailing List
|
10
|
-
|
11
|
-
If you have questions, answers can be found on community forum: https://convore.com/middleman/
|
12
|
-
|
13
|
-
== Copyright
|
14
|
-
|
15
|
-
Copyright (c) 2010 Thomas Reynolds. See LICENSE for details.
|
@@ -1,57 +0,0 @@
|
|
1
|
-
begin
|
2
|
-
require 'uglifier'
|
3
|
-
rescue LoadError
|
4
|
-
puts "UglifyJS not available. Install it with: gem install uglifier"
|
5
|
-
end
|
6
|
-
|
7
|
-
module Middleman
|
8
|
-
module Rack
|
9
|
-
|
10
|
-
class MinifyJavascript
|
11
|
-
def initialize(app, options={})
|
12
|
-
@app = app
|
13
|
-
end
|
14
|
-
|
15
|
-
def call(env)
|
16
|
-
status, headers, response = @app.call(env)
|
17
|
-
|
18
|
-
if env["PATH_INFO"].match(/\.js$/)
|
19
|
-
compressor = ::Uglifier.new
|
20
|
-
|
21
|
-
if response.is_a?(::Rack::File) or response.is_a?(Sinatra::Helpers::StaticFile)
|
22
|
-
uncompressed_source = File.read(response.path)
|
23
|
-
else
|
24
|
-
uncompressed_source = response.join
|
25
|
-
end
|
26
|
-
minified = compressor.compile(uncompressed_source)
|
27
|
-
headers["Content-Length"] = ::Rack::Utils.bytesize(minified).to_s
|
28
|
-
response = [minified]
|
29
|
-
end
|
30
|
-
|
31
|
-
if env["PATH_INFO"].match(/\.html$/)
|
32
|
-
compressor = ::Uglifier.new
|
33
|
-
|
34
|
-
if response.is_a?(::Rack::File) or response.is_a?(Sinatra::Helpers::StaticFile)
|
35
|
-
uncompressed_source = File.read(response.path)
|
36
|
-
else
|
37
|
-
uncompressed_source = response.join
|
38
|
-
end
|
39
|
-
|
40
|
-
minified = uncompressed_source.gsub(/(<scri.*?\/\/<!\[CDATA\[\n)(.*?)(\/\/\]\].*?<\/script>)/m) do |m|
|
41
|
-
first = $1
|
42
|
-
uncompressed_source = $2
|
43
|
-
last = $3
|
44
|
-
minified_js = compressor.compile(uncompressed_source)
|
45
|
-
|
46
|
-
first << minified_js << "\n" << last
|
47
|
-
end
|
48
|
-
headers["Content-Length"] = ::Rack::Utils.bytesize(minified).to_s
|
49
|
-
response = [minified]
|
50
|
-
end
|
51
|
-
|
52
|
-
[status, headers, response]
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
57
|
-
end
|