Compare commits

..

No commits in common. "master" and "feature/livereload-locales-data" have entirely different histories.

255 changed files with 2071 additions and 4089 deletions

3
.gitignore vendored
View file

@ -1,6 +1,3 @@
.byebug_history
npm-debug.log
manifest.yaml
/.bundle /.bundle
.DS_Store .DS_Store
coverage coverage

View file

@ -10,13 +10,11 @@ AllCops:
- '**/tmp/**/*' - '**/tmp/**/*'
- '**/bin/**/*' - '**/bin/**/*'
- 'middleman-core/lib/middleman-core/step_definitions/**/*' - 'middleman-core/lib/middleman-core/step_definitions/**/*'
- 'middleman-core/lib/vendored-middleman-deps/**/*'
- 'middleman-cli/lib/middleman-templates/**/*'
- 'middleman-core/fixtures/**/*' - 'middleman-core/fixtures/**/*'
- 'middleman-core/features/**/*' - 'middleman-core/features/**/*'
- 'middleman-core/spec/**/*' - 'middleman-core/spec/**/*'
- 'middleman-cli/lib/middleman-cli/templates/**/*'
- 'middleman-cli/fixtures/**/*'
- 'middleman-cli/features/**/*'
- 'middleman-cli/spec/**/*'
DoubleNegation: DoubleNegation:
Enabled: false Enabled: false
LineLength: LineLength:
@ -39,6 +37,8 @@ AssignmentInCondition:
Enabled: false Enabled: false
CyclomaticComplexity: CyclomaticComplexity:
Enabled: false Enabled: false
AbcSize:
Enabled: false
HandleExceptions: HandleExceptions:
Enabled: false Enabled: false
EndAlignment: EndAlignment:
@ -52,9 +52,7 @@ FormatString:
CaseIndentation: CaseIndentation:
IndentWhenRelativeTo: end IndentWhenRelativeTo: end
TrivialAccessors: TrivialAccessors:
Enabled: false ExactNameMatch: true
SingleLineBlockParams:
Enabled: false
Metrics/AbcSize: Metrics/AbcSize:
Enabled: false Enabled: false
Metrics/PerceivedComplexity: Metrics/PerceivedComplexity:
@ -65,7 +63,3 @@ Style/BlockDelimiters:
Enabled: false Enabled: false
Style/MultilineBlockChain: Style/MultilineBlockChain:
Enabled: false Enabled: false
Style/SpecialGlobalVars:
Enabled: false
Style/FrozenStringLiteralComment:
Enabled: false

View file

@ -5,8 +5,9 @@ before_script:
- bundle update - bundle update
rvm: rvm:
- ruby-head - ruby-head
- 2.3.1 - 2.2.2
- 2.2.4 - 2.1
- 2.0
os: os:
- linux - linux
# - osx # - osx

View file

@ -1,103 +1,6 @@
master master
=== ===
# 4.1.13
* Change how config options are passed to Thor. Removes new Thor warnings from #2017
# 4.1.12
* Fix broken `ignore { |p| true }` form.
# 4.1.11
* Upgrade to Rack 2.
# 4.1.10
* Fix unicode issues in URL deeplinks.
* Add prefix option to asset_hash (#1949)
# 4.1.9
* Fix `--watcher-*` CLI flags.
* Allow spaces in paths to work with `link_to`. Fixes #1914
* Add support for dotenv
* Fix asset_url with asset_hash (#1919)
* Allow partial lookups without a current_resource (#1912)
# 4.1.8
* Expose `development?` and `production?` helpers to template context.
* require the `try` core extension (#1911)
* Fix contract for Sitemap::Store.register_resource_list_manipulator (#1907)
* Loosen contract on Resource#source_file to Maybe[String] (#1906)
* Let collection loops access ConfigContext for helpers. #1879
* Use https:// to clone templates (#1901)
* Allow numbers to be unique page_ids (#1886)
* Prevent infinite loop when encountering files where base filename is a possible templating engine
# 4.1.7
* Upgrade fastimage to 2.0
* Fix shutdown of external_pipeline commands when config.rb is changed. #1877
* Allow calls to `app.` to work as collections after initial config parse. #1876
# 4.1.5-4.1.6
* Fix file recursion when looking for possible asset dependencies. Major preview server performance improvement.
# 4.1.4
* Unify default extensions for all URL processing extensions. #1855
* Fix URL regex for `content: ` context of CSS. #1853
* Make sure CLI config over-rides `config.rb` order.
* Fix relative assets in some contexts. #1842
# 4.1.3
* Expose all top-level config options to CLI (flags now match config. latency -> watcher_latency, etc).
* Fix directory indexes with `.htm` and `.xhtml` files. #1821
# 4.1.2
* Add `page_id` concept. Using the `id` key in frontmatter, proxy or page will set an ID on a resource which can be referenced by `url_for` and `link_to`.
* Allow looking for `Gemfile` when setting up a project to fail gracefully.
* Send correct exit code when external_pipeline fails during build.
* Fix error when customizing `layouts_dir`. #1028
* Fix collections (commands in loops) not being processed by `page` command. #1226
* Correctly asset_hash sourcemap references.
# 4.1.1
* Fix bad code that made `/__middleman/` break.
# 4.1.0
* Add rewrite_ignore option to asset_hash, asset_host, cache_buster & relative_assets. This proc let's you opt-out of the extension behavior on a per-path basis.
* gzip extension now compresses svgs by default
* Fix the `encoding` option.
* Fix relative paths on `image_tag` helper.
* Correctly exit with error code on failed `init`
* Fixed `asset_hash` when path has query string or #hashes
* Fix new extension template
* Don't parse frontmatter on ignored files.
* Fix displaying frontmatter on `/__middleman/sitemap`
* Add `skip_build_clean` config which when set to a block, will avoid removing non-generated paths from build, like .git #1716
* Minor performance improvements
* DRY-up config.rb-specific commands like `ignore` or `path`.
* Fix automatic images with absolute (or images dir missing) paths in markdown. Fixes #1755
* Fix asset_host in combination with Google Analytics snippet. #1751
* Show an error message when git CLI is not available. #1765
* Correctly show file names of GZIP'ed assets. #1364
* Build file output is now parallel-ized! Use `middleman build --no-parallel` to disable.
* Make template file extensions that get layouts by default configurable via `config[:extensions_with_layout]`
* Remove `=` from inline url matcher. This means paths in HTML attributes MUST be quoted. Fixes #1780
# 4.0.0
* Add `:locales` and `:data` source types to the list of files which trigger a live-reload.
* Rename i18n `lang` and `langs` to `locale` and `locales`. * Rename i18n `lang` and `langs` to `locale` and `locales`.
* Avoid matching URLs across new lines. #1689 * Avoid matching URLs across new lines. #1689
* Load Middleman Directory when doing `init` over SSL * Load Middleman Directory when doing `init` over SSL
@ -129,7 +32,7 @@ master
* Add `resources` class method to extensions to allow simple string-based resource generation. * Add `resources` class method to extensions to allow simple string-based resource generation.
* rename `app.add_to_instance` to `Extension.expose_to_application` for adding extension-local methods to the shared app instance. * rename `app.add_to_instance` to `Extension.expose_to_application` for adding extension-local methods to the shared app instance.
* rename `app.add_to_config_context` to `Extension.expose_to_config` for adding extension-local methods to the sandboxed scope of `config.rb` * rename `app.add_to_config_context` to `Extension.expose_to_config` for adding extension-local methods to the sandboxed scope of `config.rb`
* Add `Extension.expose_to_template`, which auto binds copies of extension-local methods into a Template context. * Add `Extension.expose_to_templates`, which auto binds copies of extension-local methods into a Template context.
* Remove side-loading of CLI tasks from `tasks/` * Remove side-loading of CLI tasks from `tasks/`
* Add the option of naming `config.rb` as `middleman.rb`. * Add the option of naming `config.rb` as `middleman.rb`.
* Builder extracted from Thor. `after_build` hook now passes an instance of a Builder instead of the Thor CLI. * Builder extracted from Thor. `after_build` hook now passes an instance of a Builder instead of the Thor CLI.

13
Gemfile
View file

@ -5,16 +5,12 @@ gem 'rake', '~> 10.3', require: false
gem 'yard', '~> 0.8', require: false gem 'yard', '~> 0.8', require: false
# Test tools # Test tools
gem 'byebug' gem 'pry', '~> 0.10', group: :development, require: false
gem 'pry-byebug'
gem 'pry-stack_explorer'
gem 'aruba', '~> 0.7.4', require: false gem 'aruba', '~> 0.7.4', require: false
gem 'rspec', '~> 3.0', require: false gem 'rspec', '~> 3.0', require: false
gem 'cucumber', '~> 2.0', require: false gem 'cucumber', '~> 2.0', require: false
gem 'addressable', '~> 2.4.0', require: false
# Pry tools
gem 'pry'
gem 'pry-stack_explorer'
gem 'pry-rescue'
# Optional middleman dependencies, included for tests # Optional middleman dependencies, included for tests
gem 'haml', '>= 4.0.5', require: false gem 'haml', '>= 4.0.5', require: false
@ -24,7 +20,7 @@ gem 'kramdown', '~> 1.2', require: false
gem 'slim', '>= 2.0', require: false gem 'slim', '>= 2.0', require: false
gem 'liquid', '>= 2.6', require: false gem 'liquid', '>= 2.6', require: false
gem 'stylus', '>= 1.0', require: false gem 'stylus', '>= 1.0', require: false
gem 'sinatra', '>= 2.0.0.beta2', require: false gem 'sinatra', '>= 1.4', require: false
gem 'redcarpet', '>= 3.1', require: false gem 'redcarpet', '>= 3.1', require: false
# Dns server to test preview server # Dns server to test preview server
@ -32,7 +28,6 @@ gem 'rubydns', '~> 1.0.1', require: false
# To test javascript # To test javascript
gem 'poltergeist', '~> 1.8', require: false gem 'poltergeist', '~> 1.8', require: false
gem 'phantomjs', '~> 2.1.1.0', require: false
# For less, note there is no compatible JS runtime for windows # For less, note there is no compatible JS runtime for windows
gem 'therubyrhino', '>= 2.0', platforms: :jruby gem 'therubyrhino', '>= 2.0', platforms: :jruby

View file

@ -1,9 +0,0 @@
## Expected behavior and actual behavior
## Steps to reproduce the problem (from a clean middleman installation)
## Additional information
- Ruby version:
- Middleman version:
- OS version:

View file

@ -10,7 +10,7 @@ The last few years have seen an explosion in the amount and variety of tools dev
* [Sass](http://sass-lang.com/) for DRY stylesheets * [Sass](http://sass-lang.com/) for DRY stylesheets
* [CoffeeScript](http://coffeescript.org/) for safer and less verbose javascript * [CoffeeScript](http://coffeescript.org/) for safer and less verbose javascript
* Multiple asset management solutions, including [Sprockets](https://github.com/rails/sprockets) * Multiple asset management solutions, including [Sprockets](https://github.com/sstephenson/sprockets)
* [ERb](http://ruby-doc.org/stdlib-2.0.0/libdoc/erb/rdoc/ERB.html) & [Haml](http://haml.info/) for dynamic pages and simplified HTML syntax * [ERb](http://ruby-doc.org/stdlib-2.0.0/libdoc/erb/rdoc/ERB.html) & [Haml](http://haml.info/) for dynamic pages and simplified HTML syntax
**Middleman** gives the stand-alone developer access to all these tools and many, many more. Why would you use a stand-alone framework instead of Ruby on Rails? **Middleman** gives the stand-alone developer access to all these tools and many, many more. Why would you use a stand-alone framework instead of Ruby on Rails?
@ -91,7 +91,7 @@ The best way to get quick responses to your issues and swift fixes to your bugs
## Donate ## Donate
[Click here to lend your support to Middleman](https://plasso.co/s/4dXbHBorC3) [Click here to lend your support to Middleman](https://spacebox.io/s/4dXbHBorC3)
## Versioning ## Versioning
@ -121,6 +121,6 @@ Copyright (c) 2010-2015 Thomas Reynolds. MIT Licensed, see [LICENSE] for details
[codeclimate]: https://codeclimate.com/github/middleman/middleman [codeclimate]: https://codeclimate.com/github/middleman/middleman
[gittip]: https://www.gittip.com/middleman/ [gittip]: https://www.gittip.com/middleman/
[rubyinstaller]: http://rubyinstaller.org/ [rubyinstaller]: http://rubyinstaller.org/
[RubyInstaller-Devkit]: http://rubyinstaller.org/add-ons/devkit/ [RubyInstaller-Devkit]: http:rubyinstaller.org/add-ons/devkit/
[rubydoc]: http://rubydoc.info/github/middleman/middleman [rubydoc]: http://rubydoc.info/github/middleman/middleman
[LICENSE]: https://github.com/middleman/middleman/blob/master/LICENSE.md [LICENSE]: https://github.com/middleman/middleman/blob/master/LICENSE.md

View file

@ -3,7 +3,7 @@ require 'rake'
require File.expand_path('../middleman-core/lib/middleman-core/version.rb', __FILE__) require File.expand_path('../middleman-core/lib/middleman-core/version.rb', __FILE__)
ROOT = File.expand_path(File.dirname(__FILE__)) ROOT = File.expand_path(File.dirname(__FILE__))
GEM_NAME = 'middleman'.freeze GEM_NAME = 'middleman'
middleman_gems = %w(middleman-core middleman-cli middleman) middleman_gems = %w(middleman-core middleman-cli middleman)
GEM_PATHS = middleman_gems.freeze GEM_PATHS = middleman_gems.freeze
@ -36,7 +36,7 @@ end
desc 'Generate documentation for all middleman gems' desc 'Generate documentation for all middleman gems'
task :doc do task :doc do
GEM_PATHS.each do |g| GEM_PATHS.each do |g|
Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake yard" } Dir.chdir("#{File.join(ROOT, g)}") { sh "#{Gem.ruby} -S rake yard" }
end end
end end
@ -45,14 +45,14 @@ task :test do
Rake::Task['rubocop'].invoke Rake::Task['rubocop'].invoke
GEM_PATHS.each do |g| GEM_PATHS.each do |g|
Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake test" } Dir.chdir("#{File.join(ROOT, g)}") { sh "#{Gem.ruby} -S rake test" }
end end
end end
desc 'Run specs for all middleman gems' desc 'Run specs for all middleman gems'
task :spec do task :spec do
GEM_PATHS.each do |g| GEM_PATHS.each do |g|
Dir.chdir(File.join(ROOT, g).to_s) { sh "#{Gem.ruby} -S rake spec" } Dir.chdir("#{File.join(ROOT, g)}") { sh "#{Gem.ruby} -S rake spec" }
end end
end end

View file

@ -1,4 +1,4 @@
# coding:utf-8 # coding:utf-8
RAKE_ROOT = __FILE__.freeze RAKE_ROOT = __FILE__
GEM_NAME = 'middleman-cli'.freeze GEM_NAME = 'middleman-cli'
require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper') require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')

View file

@ -4,37 +4,11 @@ require 'middleman-core/profiling'
if ARGV.include? '--profile' if ARGV.include? '--profile'
Middleman::Profiling.profiler = Middleman::Profiling::RubyProfProfiler.new Middleman::Profiling.profiler = Middleman::Profiling::RubyProfProfiler.new
end end
# Middleman::Profiling.start Middleman::Profiling.start
require "middleman-core/load_paths" require "middleman-core/load_paths"
Middleman.setup_load_paths Middleman.setup_load_paths
require 'dotenv'
::Dotenv.load
require 'middleman-core'
require 'middleman-core/logger'
module Middleman::Cli
class << self
attr_accessor :config
end
def self.import_config(base)
::Middleman::Cli.config.all_settings.each do |setting|
if setting.default.is_a?(String) || setting.default.is_a?(NilClass)
base.class_option setting.key,
type: :string,
desc: setting.description
elsif setting.default.is_a?(TrueClass) || setting.default.is_a?(FalseClass)
base.class_option setting.key,
type: :boolean,
desc: setting.description
end
end
end
end
require "middleman-cli" require "middleman-cli"
# Change directory to the root # Change directory to the root
@ -45,26 +19,5 @@ if ARGV[0] != 'help' && (ARGV.length < 1 || ARGV.first.include?('-'))
ARGV.unshift('server') ARGV.unshift('server')
end end
::Middleman::Logger.singleton(3)
::Middleman::Cli.config = ::Middleman::Application.new do
#
config[:environment] = (ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development').to_sym
config[:mode] = :config
config[:exit_before_ready] = true
config[:watcher_disable] = true
config[:disable_sitemap] = true
end.config
# Require the Middleman version
require 'middleman-core/version'
# Include the core CLI items
require 'middleman-cli/init'
require 'middleman-cli/extension'
require 'middleman-cli/server'
require 'middleman-cli/build'
require 'middleman-cli/console'
require 'middleman-cli/config'
# Start the CLI # Start the CLI
Middleman::Cli::Base.start(ARGV) Middleman::Cli::Base.start(ARGV)

View file

@ -1,19 +0,0 @@
ENV["TEST"] = "true"
require 'sassc'
require 'simplecov'
SimpleCov.root(File.expand_path(File.dirname(__FILE__) + '/../..'))
require 'phantomjs/poltergeist'
Capybara.javascript_driver = :poltergeist
require 'coveralls'
Coveralls.wear!
require 'codeclimate-test-reporter'
CodeClimate::TestReporter.start
PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-cli')
require File.join(File.dirname(PROJECT_ROOT_PATH), 'middleman-core', 'lib', 'middleman-core', 'step_definitions')

View file

@ -21,3 +21,14 @@ module Middleman::Cli
end end
end end
end end
# Require the Middleman version
require 'middleman-core/version'
# Include the core CLI items
require 'middleman-cli/init'
require 'middleman-cli/extension'
require 'middleman-cli/server'
require 'middleman-cli/build'
require 'middleman-cli/console'
require 'middleman-cli/config'

View file

@ -1,5 +1,3 @@
require 'middleman-core/application'
# CLI Module # CLI Module
module Middleman::Cli module Middleman::Cli
# The CLI Build class # The CLI Build class
@ -10,15 +8,12 @@ module Middleman::Cli
class_option :environment, class_option :environment,
aliases: '-e', aliases: '-e',
default: ENV['MM_ENV'] || ENV['RACK_ENV'] || :production default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'production',
desc: 'The environment Middleman will run under'
class_option :clean, class_option :clean,
type: :boolean, type: :boolean,
default: true, default: true,
desc: 'Remove orphaned files from build (--no-clean to disable)' desc: 'Remove orphaned files from build (--no-clean to disable)'
class_option :parallel,
type: :boolean,
default: true,
desc: 'Output files in parallel (--no-parallel to disable)'
class_option :glob, class_option :glob,
type: :string, type: :string,
aliases: '-g', aliases: '-g',
@ -29,7 +24,7 @@ module Middleman::Cli
default: false, default: false,
desc: 'Print debug messages' desc: 'Print debug messages'
class_option :instrument, class_option :instrument,
type: :boolean, type: :string,
default: false, default: false,
desc: 'Print instrument messages' desc: 'Print instrument messages'
class_option :profile, class_option :profile,
@ -37,8 +32,6 @@ module Middleman::Cli
default: false, default: false,
desc: 'Generate profiling report for the build' desc: 'Generate profiling report for the build'
Middleman::Cli.import_config(self)
# Core build Thor command # Core build Thor command
# @return [void] # @return [void]
def build def build
@ -51,21 +44,15 @@ module Middleman::Cli
require 'middleman-core/builder' require 'middleman-core/builder'
require 'fileutils' require 'fileutils'
env = options['environment'].to_sym
verbose = options['verbose'] ? 0 : 1 verbose = options['verbose'] ? 0 : 1
instrument = options['instrument'] instrument = options['instrument']
builder = nil
cli_options = options
::Middleman::Logger.singleton(verbose, instrument)
::Middleman::Util.instrument 'builder.setup' do
@app = ::Middleman::Application.new do @app = ::Middleman::Application.new do
config[:mode] = :build config[:mode] = :build
config[:environment] = env
config[:show_exceptions] = false config[:show_exceptions] = false
config[:cli_options] = cli_options.each_with_object({}) do |(k, v), sum| ::Middleman::Logger.singleton(verbose, instrument)
sum[k] = v
end
end end
builder = Middleman::Builder.new(@app, builder = Middleman::Builder.new(@app,
@ -74,12 +61,10 @@ module Middleman::Cli
parallel: options['parallel']) parallel: options['parallel'])
builder.thor = self builder.thor = self
builder.on_build_event(&method(:on_event)) builder.on_build_event(&method(:on_event))
end
::Middleman::Util.instrument 'builder.run' do
if builder.run! if builder.run!
clean_directories! if options['clean'] clean_directories! if options['clean']
shell.say 'Project built successfully.' shell.say "Project built successfully."
else else
msg = 'There were errors during this build' msg = 'There were errors during this build'
unless options['verbose'] unless options['verbose']
@ -90,7 +75,6 @@ module Middleman::Cli
exit(1) exit(1)
end end
end end
end
protected protected

View file

@ -23,9 +23,6 @@ module Middleman::Cli
::Middleman::Logger.singleton(2, false) ::Middleman::Logger.singleton(2, false)
app = ::Middleman::Application.new do app = ::Middleman::Application.new do
config[:mode] = :config
config[:disable_sitemap] = true
config[:watcher_disable] = true
config[:exit_before_ready] = true config[:exit_before_ready] = true
config[:environment] = opts[:environment].to_sym if opts[:environment] config[:environment] = opts[:environment].to_sym if opts[:environment]
end end

View file

@ -30,8 +30,8 @@ module Middleman::Cli
template 'extension/Rakefile', File.join(name, 'Rakefile') template 'extension/Rakefile', File.join(name, 'Rakefile')
template 'extension/gemspec', File.join(name, "#{name}.gemspec") template 'extension/gemspec', File.join(name, "#{name}.gemspec")
template 'extension/Gemfile', File.join(name, 'Gemfile') template 'extension/Gemfile', File.join(name, 'Gemfile')
template 'extension/lib/middleman_extension.rb', File.join(name, 'lib', 'middleman_extension.rb')
template 'extension/lib/lib.rb', File.join(name, 'lib', "#{name}.rb") template 'extension/lib/lib.rb', File.join(name, 'lib', "#{name}.rb")
template 'extension/lib/lib/extension.rb', File.join(name, 'lib', name, 'extension.rb')
template 'extension/features/support/env.rb', File.join(name, 'features', 'support', 'env.rb') template 'extension/features/support/env.rb', File.join(name, 'features', 'support', 'env.rb')
empty_directory File.join(name, 'fixtures') empty_directory File.join(name, 'fixtures')
end end

View file

@ -4,8 +4,6 @@ module Middleman::Cli
class Init < Thor::Group class Init < Thor::Group
include Thor::Actions include Thor::Actions
GIT_CMD = 'git'.freeze
check_unknown_options! check_unknown_options!
argument :target, type: :string, default: '.' argument :target, type: :string, default: '.'
@ -27,13 +25,6 @@ module Middleman::Cli
require 'fileutils' require 'fileutils'
require 'tmpdir' require 'tmpdir'
unless git_present?
msg = 'You need to install the git command line tool to initialize a new project. '
msg << "For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git"
say msg, :red
exit 1
end
repo_path, repo_branch = if shortname?(options[:template]) repo_path, repo_branch = if shortname?(options[:template])
require 'open-uri' require 'open-uri'
require 'json' require 'json'
@ -48,7 +39,7 @@ module Middleman::Cli
rescue ::OpenURI::HTTPError rescue ::OpenURI::HTTPError
say "Template `#{options[:template]}` not found in Middleman Directory." say "Template `#{options[:template]}` not found in Middleman Directory."
say 'Did you mean to use a full `user/repo` path?' say 'Did you mean to use a full `user/repo` path?'
exit 1 exit
end end
else else
repo_name, repo_branch = options[:template].split('#') repo_name, repo_branch = options[:template].split('#')
@ -60,12 +51,11 @@ module Middleman::Cli
begin begin
branch_cmd = repo_branch ? "-b #{repo_branch} " : '' branch_cmd = repo_branch ? "-b #{repo_branch} " : ''
git_path = "#{branch_cmd}#{repo_path}" run("git clone --depth 1 #{branch_cmd}#{repo_path} #{dir}")
run("#{GIT_CMD} clone --depth 1 #{branch_cmd}#{repo_path} #{dir}")
unless $?.success? unless File.directory?(dir)
say "Git clone command failed. Make sure git repository exists: #{git_path}", :red say 'Git clone failed, maybe the url is invalid or you don\'t have the permissions?', :red
exit 1 exit
end end
inside(target) do inside(target) do
@ -89,31 +79,12 @@ module Middleman::Cli
protected protected
# Copied from Bundler
def git_present?
return @git_present if defined?(@git_present)
@git_present = which(GIT_CMD) || which('git.exe')
end
# Copied from Bundler
def which(executable)
if File.file?(executable) && File.executable?(executable)
executable
elsif ENV['PATH']
path = ENV['PATH'].split(File::PATH_SEPARATOR).find do |p|
abs_path = File.join(p, executable)
File.file?(abs_path) && File.executable?(abs_path)
end
path && File.expand_path(executable, path)
end
end
def shortname?(repo) def shortname?(repo)
repo.split('/').length == 1 repo.split('/').length == 1
end end
def repository_path(repo) def repository_path(repo)
repo.include?('://') || repo.include?('git@') ? repo : "https://github.com/#{repo}.git" repo.include?('://') || repo.include?('git@') ? repo : "git://github.com/#{repo}.git"
end end
# Add to CLI # Add to CLI

View file

@ -5,33 +5,56 @@ module Middleman::Cli
check_unknown_options! check_unknown_options!
class_option :environment, class_option :environment,
aliases: '-e' aliases: '-e',
default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development',
desc: 'The environment Middleman will run under'
class_option :port, class_option :port,
aliases: '-p' aliases: '-p',
desc: 'The port Middleman will listen on'
class_option :server_name, class_option :server_name,
aliases: '-s' aliases: '-s',
desc: 'The server name Middleman will use'
class_option :bind_address, class_option :bind_address,
aliases: '-b' aliases: '-b',
desc: 'The bind address Middleman will listen on'
class_option :https,
type: :boolean,
desc: 'Serve the preview server over SSL/TLS'
class_option :ssl_certificate,
desc: 'Path to an X.509 certificate to use for the preview server'
class_option :ssl_private_key,
desc: "Path to an RSA private key for the preview server's certificate"
class_option :verbose, class_option :verbose,
type: :boolean, type: :boolean,
default: false, default: false,
desc: 'Print debug messages' desc: 'Print debug messages'
class_option :instrument, class_option :instrument,
type: :boolean, type: :string,
default: false, default: false,
desc: 'Print instrument messages' desc: 'Print instrument messages'
class_option :disable_watcher,
type: :boolean,
default: false,
desc: 'Disable the file change and delete watcher process'
class_option :profile, class_option :profile,
type: :boolean, type: :boolean,
default: false, default: false,
desc: 'Generate profiling report for server startup' desc: 'Generate profiling report for server startup'
class_option :force_polling,
type: :boolean,
default: false,
desc: 'Force file watcher into polling mode'
class_option :latency,
type: :numeric,
aliases: '-l',
default: 0.5,
desc: 'Set file watcher latency, in seconds'
class_option :daemon, class_option :daemon,
type: :boolean, type: :boolean,
aliases: '-d', aliases: '-d',
default: false, default: false,
desc: 'Daemonize preview server' desc: 'Daemonize preview server'
Middleman::Cli.import_config(self)
# Start the server # Start the server
def server def server
require 'middleman-core' require 'middleman-core'
@ -43,14 +66,24 @@ module Middleman::Cli
end end
params = { params = {
port: options['port'],
bind_address: options['bind_address'],
https: options['https'],
server_name: options['server_name'],
ssl_certificate: options['ssl_certificate'],
ssl_private_key: options['ssl_private_key'],
environment: options['environment'],
debug: options['verbose'], debug: options['verbose'],
instrumenting: options['instrument'], instrumenting: options['instrument'],
disable_watcher: options['disable_watcher'],
reload_paths: options['reload_paths'], reload_paths: options['reload_paths'],
force_polling: options['force_polling'],
latency: options['latency'],
daemon: options['daemon'] daemon: options['daemon']
} }
puts '== The Middleman is loading' puts '== The Middleman is loading'
::Middleman::PreviewServer.start(params, options) ::Middleman::PreviewServer.start(params)
end end
# Add to CLI # Add to CLI

View file

@ -1,6 +1,38 @@
require "middleman-core" # Require core library
require 'middleman-core'
Middleman::Extensions.register :<%= name %> do # Extension namespace
require "my-extension/extension" class MyExtension < ::Middleman::Extension
MyExtension option :my_option, 'default', 'An example option'
def initialize(app, options_hash={}, &block)
# Call super to build options from the options_hash
super
# Require libraries only when activated
# require 'necessary/library'
# set up your extension
# puts options.my_option
end
def after_configuration
# Do something
end
# A Sitemap Manipulator
# def manipulate_resource_list(resources)
# end
# helpers do
# def a_helper
# end
# end
end end
# Register extensions which can be activated
# Make sure we have the version of Middleman we expect
# Name param may be omited, it will default to underscored
# version of class name
# MyExtension.register(:my_extension)

View file

@ -1,31 +0,0 @@
# Require core library
require 'middleman-core'
# Extension namespace
class MyExtension < ::Middleman::Extension
option :my_option, 'default', 'An example option'
def initialize(app, options_hash={}, &block)
# Call super to build options from the options_hash
super
# Require libraries only when activated
# require 'necessary/library'
# set up your extension
# puts options.my_option
end
def after_configuration
# Do something
end
# A Sitemap Manipulator
# def manipulate_resource_list(resources)
# end
# helpers do
# def a_helper
# end
# end
end

View file

@ -0,0 +1 @@
require '<%= name %>'

View file

@ -17,7 +17,7 @@ Gem::Specification.new do |s|
s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0") s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
s.executable = 'middleman' s.executable = 'middleman'
s.require_path = 'lib' s.require_path = 'lib'
s.required_ruby_version = '>= 2.2.0' s.required_ruby_version = '>= 1.9.3'
# CLI # CLI
s.add_dependency('thor', ['>= 0.17.0', '< 2.0']) s.add_dependency('thor', ['>= 0.17.0', '< 2.0'])

View file

@ -1,4 +1,4 @@
# coding:utf-8 # coding:utf-8
RAKE_ROOT = __FILE__.freeze RAKE_ROOT = __FILE__
GEM_NAME = ENV['NAME'] || 'middleman-core' GEM_NAME = ENV['NAME'] || 'middleman-core'
require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper') require File.expand_path(File.dirname(__FILE__) + '/../gem_rake_helper')

View file

@ -63,29 +63,22 @@ Feature: Assets get file hashes appended to them and references to them are upda
Given the Server is running at "asset-hash-app" Given the Server is running at "asset-hash-app"
When I go to "/" When I go to "/"
Then I should see 'href="apple-touch-icon.png"' Then I should see 'href="apple-touch-icon.png"'
And I should see 'href="stylesheets/site-d1a750ca.css"' And I should see 'href="stylesheets/site-d2959d87.css"'
And I should see 'href="stylesheets/fragment-99b76247.css"'
And I should see 'src="javascripts/application-1d8d5276.js"' And I should see 'src="javascripts/application-1d8d5276.js"'
And I should see 'src="images/100px-5fd6fb90.jpg"' And I should see 'src="images/100px-5fd6fb90.jpg"'
And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"' And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
And I should see 'src="images/100px-5fd6fb90.jpg?test"'
And I should see 'src="images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="images/100px-5fd6fb90.jpg#test"'
When I go to "/subdir/" When I go to "/subdir/"
Then I should see 'href="../stylesheets/site-d1a750ca.css"' Then I should see 'href="../stylesheets/site-d2959d87.css"'
And I should see 'src="../javascripts/application-1d8d5276.js"' And I should see 'src="../javascripts/application-1d8d5276.js"'
And I should see 'src="../images/100px-5fd6fb90.jpg"' And I should see 'src="../images/100px-5fd6fb90.jpg"'
When I go to "/other/" When I go to "/other/"
Then I should see 'href="../stylesheets/site-d1a750ca.css"' Then I should see 'href="../stylesheets/site-d2959d87.css"'
And I should see 'src="../javascripts/application-1d8d5276.js"' And I should see 'src="../javascripts/application-1d8d5276.js"'
And I should see 'src="../images/100px-5fd6fb90.jpg"' And I should see 'src="../images/100px-5fd6fb90.jpg"'
And I should see 'src="../images/100px-5fd6fb90.jpg?test"'
And I should see 'src="../images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="../images/100px-5fd6fb90.jpg#test"'
When I go to "/javascripts/application-1d8d5276.js" When I go to "/javascripts/application-1d8d5276.js"
Then I should see "img.src = '/images/100px-5fd6fb90.jpg'" Then I should see "img.src = '/images/100px-5fd6fb90.jpg'"
When I go to "/stylesheets/site-d1a750ca.css" When I go to "/stylesheets/site-d2959d87.css"
Then I should see 'background-image: url("../images/100px-5fd6fb90.jpg");' Then I should see 'background-image: url("../images/100px-5fd6fb90.jpg")'
When I go to "/api.json" When I go to "/api.json"
Then I should see 'images/100px-5fd6fb90.gif' Then I should see 'images/100px-5fd6fb90.gif'
And I should see 'images/100px-5fd6fb90.jpg' And I should see 'images/100px-5fd6fb90.jpg'
@ -94,11 +87,6 @@ Feature: Assets get file hashes appended to them and references to them are upda
Then I should see 'images/100px-5fd6fb90.gif' Then I should see 'images/100px-5fd6fb90.gif'
And I should see 'images/100px-5fd6fb90.jpg' And I should see 'images/100px-5fd6fb90.jpg'
And I should see 'images/100px-1242c368.png' And I should see 'images/100px-1242c368.png'
When I go to "/stylesheets/fragment-99b76247.css"
And I should see 'url("../images/100px-5fd6fb90.jpg");'
And I should see 'url("../images/100px-5fd6fb90.jpg?test");'
And I should see 'url("../images/100px-5fd6fb90.jpg?#test");'
And I should see 'url("../images/100px-5fd6fb90.jpg#test");'
Scenario: Hashed assets work with Slim Scenario: Hashed assets work with Slim
Given the Server is running at "asset-hash-app" Given the Server is running at "asset-hash-app"
@ -107,69 +95,17 @@ Feature: Assets get file hashes appended to them and references to them are upda
And I should see 'src="images/100px-5fd6fb90.jpg"' And I should see 'src="images/100px-5fd6fb90.jpg"'
And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"' And I should see 'srcset="images/100px-5fd6fb90.jpg 1x, images/200px-c11eb203.jpg 2x, images/300px-59adce76.jpg 3x"'
Scenario: Enabling an asset host still produces hashed files and references (hash first) Scenario: Enabling an asset host still produces hashed files and references
Given a fixture app "asset-hash-host-app"
And a file named "config.rb" with:
"""
set :sass_source_maps, false
activate :asset_hash
activate :directory_indexes
activate :asset_host, host: 'http://middlemanapp.com'
"""
Given the Server is running at "asset-hash-host-app" Given the Server is running at "asset-hash-host-app"
When I go to "/" When I go to "/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"' Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
Then I should see 'href="http://middlemanapp.com/stylesheets/fragment-2902933e.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"' And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
When I go to "/subdir/" When I go to "/subdir/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"' Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"' And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
When I go to "/other/" When I go to "/other/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"' Then I should see 'href="http://middlemanapp.com/stylesheets/site-e587b659.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"' And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
When I go to "/stylesheets/fragment-2902933e.css"
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg");'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?test");'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test");'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg#test");'
Scenario: Enabling an asset host still produces hashed files and references (host first)
Given a fixture app "asset-hash-host-app"
And a file named "config.rb" with:
"""
set :sass_source_maps, false
activate :asset_host, host: 'http://middlemanapp.com'
activate :directory_indexes
activate :asset_hash
"""
Given the Server is running at "asset-hash-host-app"
When I go to "/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
Then I should see 'href="http://middlemanapp.com/stylesheets/fragment-2902933e.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
When I go to "/subdir/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
When I go to "/other/"
Then I should see 'href="http://middlemanapp.com/stylesheets/site-7474cadd.css"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test"'
And I should see 'src="http://middlemanapp.com/images/100px-5fd6fb90.jpg#test"'
When I go to "/stylesheets/fragment-2902933e.css"
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg")'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?test")'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg?#test")'
And I should see 'url("http://middlemanapp.com/images/100px-5fd6fb90.jpg#test")'
Scenario: The asset hash should change when a SASS partial changes Scenario: The asset hash should change when a SASS partial changes
Given the Server is running at "asset-hash-app" Given the Server is running at "asset-hash-app"
@ -179,14 +115,14 @@ Feature: Assets get file hashes appended to them and references to them are upda
font-size: 14px font-size: 14px
""" """
When I go to "/partials/" When I go to "/partials/"
Then I should see 'href="../stylesheets/uses_partials-4d4e34e6.css' Then I should see 'href="../stylesheets/uses_partials-44fb2764.css'
And the file "source/stylesheets/_partial.sass" has the contents And the file "source/stylesheets/_partial.sass" has the contents
""" """
body body
font-size: 18px !important font-size: 18px !important
""" """
When I go to "/partials/" When I go to "/partials/"
Then I should see 'href="../stylesheets/uses_partials-ec347271.css' Then I should see 'href="../stylesheets/uses_partials-10d8ae33.css'
Scenario: The asset hash should change when a Rack-based filter changes Scenario: The asset hash should change when a Rack-based filter changes
Given a fixture app "asset-hash-app" Given a fixture app "asset-hash-app"
@ -200,10 +136,12 @@ Feature: Assets get file hashes appended to them and references to them are upda
""" """
Given the Server is running at "asset-hash-app" Given the Server is running at "asset-hash-app"
When I go to "/" When I go to "/"
Then I should see 'href="stylesheets/site-5ad7def0.css' Then I should see 'href="stylesheets/site-30784643.css'
When I go to "stylesheets/site-5ad7def0.css" When I go to "stylesheets/site-30784643.css"
Then I should see 'background-image: url("../images/100px-5fd6fb90.jpg")' Then I should see 'background-image'
Then I should see 'Added by Rack filter' Then I should see 'Added by Rack filter'
When I go to "stylesheets/site-7474cadd.css"
Then I should see 'Not Found'
Scenario: Hashed-asset files are not produced for ignored paths Scenario: Hashed-asset files are not produced for ignored paths
Given a fixture app "asset-hash-app" Given a fixture app "asset-hash-app"
@ -241,84 +179,10 @@ Feature: Assets get file hashes appended to them and references to them are upda
| javascripts/application-1d8d5276.js | | javascripts/application-1d8d5276.js |
| stylesheets/site-7474cadd.css | | stylesheets/site-7474cadd.css |
Scenario: Hashed-asset files are not replaced for rewrite ignored paths
Given a fixture app "asset-hash-app"
And a file named "config.rb" with:
"""
is_stylesheet = proc { |path| path.start_with? '/stylesheets' }
activate :asset_hash, rewrite_ignore: [
%r(javascripts/*),
'/subdir/*',
is_stylesheet
]
activate :relative_assets
activate :directory_indexes
"""
And a successfully built app at "asset-hash-app"
When I cd to "build"
Then the following files should exist:
| index.html |
| subdir/index.html |
| images/100px-5fd6fb90.jpg |
| javascripts/application-1d8d5276.js |
| stylesheets/site-8bc55985.css |
And the following files should not exist:
| images/100px.jpg |
| javascripts/application.js |
| stylesheets/site.css |
And the file "javascripts/application-1d8d5276.js" should contain "img.src = '/images/100px.jpg'"
And the file "stylesheets/site-8bc55985.css" should contain:
"""
background-image: url("../images/100px.jpg")
"""
And the file "index.html" should contain 'href="stylesheets/site-8bc55985.css"'
And the file "index.html" should contain 'src="javascripts/application-1d8d5276.js"'
And the file "index.html" should contain 'src="images/100px-5fd6fb90.jpg"'
And the file "subdir/index.html" should contain:
"""
<h2>Image url3:</h2>
<p><img src="../images/100px.jpg"></p>
"""
Scenario: Already minified files should still be hashed Scenario: Already minified files should still be hashed
Given a successfully built app at "asset-hash-minified-app" Given a successfully built app at "asset-hash-minified-app"
When I cd to "build" When I cd to "build"
Then the following files should exist: Then the following files should exist:
| javascripts/jquery.min-276c87ff.js | | javascripts/jquery.min-276c87ff.js |
| stylesheets/test-7de2ad06.css |
And the following files should not exist: And the following files should not exist:
| javascripts/jquery.min.js | | javascripts/jquery.min.js |
And the file "stylesheets/test-7de2ad06.css" should contain:
"""
.no-bug{background-image:url(/images/100px-5fd6fb90.jpg)}
.bug{content:"";background-image:url(/images/100px-5fd6fb90.jpg)}
.no-bug{content:""; background-image:url(/images/100px-5fd6fb90.jpg)}
"""
Scenario: Source map paths include the hash
Given a successfully built app at "asset-hash-source-map"
When I cd to "build"
Then the following files should exist:
| index.html |
| javascripts/application-4553338c.js |
| javascripts/application.js-22cc2b5f.map |
| index.html |
And the following files should not exist:
| javascripts/application.js |
| javascripts/application.js.map |
And the file "javascripts/application-4553338c.js" should contain "//# sourceMappingURL=application.js-22cc2b5f.map"
Scenario: Hashes can contain a prefix
Given a successfully built app at "asset-hash-prefix"
When I cd to "build"
Then the following files should exist:
| index.html |
| javascripts/application-myprefix-4553338c.js |
| javascripts/application.js-myprefix-22cc2b5f.map |
| index.html |
And the following files should not exist:
| javascripts/application.js |
| javascripts/application.js.map |
And the file "javascripts/application-myprefix-4553338c.js" should contain "//# sourceMappingURL=application.js-myprefix-22cc2b5f.map"

View file

@ -8,7 +8,6 @@ Feature: Alternate between multiple asset hosts
""" """
And the Server is running And the Server is running
When I go to "/asset_host.html" When I go to "/asset_host.html"
Then I should see "'.google-analytics.com/ga.js'"
Then I should see 'src="https://code.jquery.com/jquery-2.1.3.min.js"' Then I should see 'src="https://code.jquery.com/jquery-2.1.3.min.js"'
Then I should see content matching %r{http://assets1.example.com/} Then I should see content matching %r{http://assets1.example.com/}
Then I should not see content matching %r{http://assets1.example.com//} Then I should not see content matching %r{http://assets1.example.com//}
@ -17,16 +16,13 @@ Feature: Alternate between multiple asset hosts
When I go to "/stylesheets/asset_host.css" When I go to "/stylesheets/asset_host.css"
Then I should see content matching %r{http://assets1.example.com/} Then I should see content matching %r{http://assets1.example.com/}
Then I should not see content matching %r{http://assets1.example.com//} Then I should not see content matching %r{http://assets1.example.com//}
When I go to "/javascripts/asset_host.js"
Then I should not see content matching %r{http://assets1.example.com/}
Scenario: Set proc host with inline-option Scenario: Set proc host with inline-option
Given a fixture app "asset-host-app" Given a fixture app "asset-host-app"
And a file named "config.rb" with: And a file named "config.rb" with:
""" """
activate :asset_host, host: Proc.new { |asset| activate :asset_host, host: Proc.new { |asset|
hash = Digest::MD5.digest(asset).bytes.map!(&:ord).reduce(&:+) "http://assets%d.example.com" % (asset.hash % 4)
"http://assets%d.example.com" % (hash % 4)
} }
""" """
And the Server is running And the Server is running
@ -39,17 +35,3 @@ Feature: Alternate between multiple asset hosts
When I go to "/stylesheets/asset_host.css" When I go to "/stylesheets/asset_host.css"
Then I should see content matching %r{http://assets1.example.com/} Then I should see content matching %r{http://assets1.example.com/}
Then I should not see content matching %r{http://assets1.example.com//} Then I should not see content matching %r{http://assets1.example.com//}
Scenario: Hosts are not rewritten for rewrite ignored paths
Given a fixture app "asset-host-app"
And a file named "config.rb" with:
"""
activate :asset_host, host: "http://assets1.example.com", rewrite_ignore: [
'/stylesheets/asset_host.css',
]
"""
And the Server is running
When I go to "/asset_host.html"
Then I should see content matching %r{http://assets1.example.com/}
When I go to "/stylesheets/asset_host.css"
Then I should not see content matching %r{http://assets1.example.com/}

View file

@ -2,28 +2,15 @@ Feature: Automatically detect and insert image dimensions into tags
In order to speed up development and appease YSlow In order to speed up development and appease YSlow
Scenario: Rendering an image with the feature disabled Scenario: Rendering an image with the feature disabled
Given a fixture app "automatic-image-size-app" Given "automatic_image_sizes" feature is "disabled"
And a file named "config.rb" with:
"""
"""
And the Server is running at "automatic-image-size-app" And the Server is running at "automatic-image-size-app"
When I go to "/auto-image-sizes.html" When I go to "/auto-image-sizes.html"
Then I should not see "width=" Then I should not see "width="
And I should not see "height=" And I should not see "height="
When I go to "/markdown-sizes.html"
Then I should not see "width="
And I should not see "height="
Scenario: Rendering an image with the feature enabled Scenario: Rendering an image with the feature enabled
Given a fixture app "automatic-image-size-app" Given "automatic_image_sizes" feature is "enabled"
And a file named "config.rb" with:
"""
activate :automatic_image_sizes
"""
And the Server is running at "automatic-image-size-app" And the Server is running at "automatic-image-size-app"
When I go to "/auto-image-sizes.html" When I go to "/auto-image-sizes.html"
Then I should see 'width="1"' Then I should see "width="
And I should see 'height="1"' And I should see "height="
When I go to "/markdown-sizes.html"
Then I should see 'width="1"'
And I should see 'height="1"'

View file

@ -43,10 +43,6 @@ Feature: Builder
Given a built app at "empty-app" Given a built app at "empty-app"
Then the exit status should be 1 Then the exit status should be 1
Scenario: Build external_pipeline errors
Given a built app at "external-pipeline-error"
Then the exit status should be 1
Scenario: Build alias (b) Scenario: Build alias (b)
Given a fixture app "large-build-app" Given a fixture app "large-build-app"
When I run `middleman b` When I run `middleman b`

View file

@ -40,17 +40,3 @@ Feature: Generate mtime-based query string for busting browser caches
When I go to "/cache-buster.html" When I go to "/cache-buster.html"
Then I should see "site.css?" Then I should see "site.css?"
Then I should see "blank.gif?" Then I should see "blank.gif?"
Scenario: URLs are not rewritten for rewrite ignored paths
Given a fixture app "cache-buster-app"
And a file named "config.rb" with:
"""
activate :cache_buster, rewrite_ignore: [
'/cache-buster.html',
]
"""
And the Server is running at "cache-buster-app"
When I go to "/cache-buster.html"
Then I should see 'site.css"'
Then I should see 'empty-with-include.js"'
Then I should see 'blank.gif"'

View file

@ -16,22 +16,6 @@ Feature: Build Clean
| build/should_be_ignored3.html | | build/should_be_ignored3.html |
And the file "build/index.html" should contain "Comment in layout" And the file "build/index.html" should contain "Comment in layout"
Scenario: Clean build has a whitelist
Given a fixture app "clean-app"
When a file named "build/.test" with:
"""
Hello
"""
When a file named "config.rb" with:
"""
set :skip_build_clean do |path|
path =~ /\.test/
end
"""
Given a built app at "clean-app"
Then the following files should exist:
| build/.test |
Scenario: Clean build an app with newly ignored files and a nested output directory Scenario: Clean build an app with newly ignored files and a nested output directory
Given a fixture app "clean-nested-app" Given a fixture app "clean-nested-app"
When a file named "config.rb" with: When a file named "config.rb" with:

View file

@ -42,7 +42,7 @@ Feature: Run the preview server
Inspect your site configuration at "http:// Inspect your site configuration at "http://
""" """
@wip @ruby-2.1
Scenario: Start the server with defaults in verbose mode, when a local mdns server resolves the local hostname Scenario: Start the server with defaults in verbose mode, when a local mdns server resolves the local hostname
Given I start a mdns server for the local hostname Given I start a mdns server for the local hostname
When I run `middleman server --verbose` interactively When I run `middleman server --verbose` interactively
@ -115,7 +115,6 @@ Feature: Run the preview server
Inspect your site configuration at "http://127.0.0.1:4567/__middleman" Inspect your site configuration at "http://127.0.0.1:4567/__middleman"
""" """
@wip
Scenario: Start the server with bind address 127.0.0.5 Scenario: Start the server with bind address 127.0.0.5
This will have no hostname attached because the hosts file, the DNS server This will have no hostname attached because the hosts file, the DNS server
@ -360,6 +359,7 @@ Feature: Run the preview server
The Middleman preview server is bound to ":::65432", "0.0.0.0:65432" The Middleman preview server is bound to ":::65432", "0.0.0.0:65432"
""" """
@ruby-2.1
@wip @wip
Scenario: Start the server when port is blocked by other middleman instance Scenario: Start the server when port is blocked by other middleman instance
Given `middleman server` is running in background Given `middleman server` is running in background
@ -470,7 +470,6 @@ Feature: Run the preview server
""" """
@ruby-2.1 @ruby-2.1
@wip
Scenario: Start the server with server name "host.local" and the link local name server is used to resolve the server name Scenario: Start the server with server name "host.local" and the link local name server is used to resolve the server name
To make the mdns resolver resolve a name, it needs to end with ".local". To make the mdns resolver resolve a name, it needs to end with ".local".
@ -503,7 +502,6 @@ Feature: Run the preview server
""" """
@ruby-2.1 @ruby-2.1
@wip
Scenario: Start the server with server name "host" and the link local name server is used to resolve the server name Scenario: Start the server with server name "host" and the link local name server is used to resolve the server name
To make the mdns resolver resolve a name, it needs to end with ".local". If To make the mdns resolver resolve a name, it needs to end with ".local". If

View file

@ -9,6 +9,6 @@ Feature: Middleman New Extension CLI
| Rakefile | | Rakefile |
| my-extension-library.gemspec | | my-extension-library.gemspec |
| features/support/env.rb | | features/support/env.rb |
| lib/my-extension-library/extension.rb | | lib/middleman_extension.rb |
| lib/my-extension-library.rb | | lib/my-extension-library.rb |
| .gitignore | | .gitignore |

View file

@ -63,10 +63,6 @@ Feature: Middleman CLI
And the file "Gemfile" should contain "middleman-blog" And the file "Gemfile" should contain "middleman-blog"
And the file ".gitignore" should exist And the file ".gitignore" should exist
Scenario: Create an invalid project using Middleman directory
When I run `middleman init MY_PROJECT -T does-not-exist-for-reals`
Then the exit status should be 1
Scenario: Create a new project using github(user/repository) Scenario: Create a new project using github(user/repository)
When I run `middleman init MY_PROJECT -T middleman/middleman-templates-default` interactively When I run `middleman init MY_PROJECT -T middleman/middleman-templates-default` interactively
And I type "y" And I type "y"

View file

@ -144,33 +144,6 @@ Feature: Collections
And I should see 'Article: Blog3 Another Article' And I should see 'Article: Blog3 Another Article'
And I should see 'Article: Blog2 Yet Another Article' And I should see 'Article: Blog2 Yet Another Article'
Scenario: Work with local helpers
Given a fixture app "collections-app"
And a file named "config.rb" with:
"""
module TestHelper
def help_me
"ok"
end
end
include TestHelper
data.articles.each_with_index do |a, i|
proxy "/#{i}-#{help_me}.html", a
end
"""
And a file named "data/articles.yaml" with:
"""
---
- "/blog1/2011-01-01-new-article.html"
- "/blog2/2011-01-02-another-article.html"
"""
Given the Server is running at "collections-app"
When I go to "0-ok.html"
Then I should see 'Newer Article Content'
When I go to "1-ok.html"
Then I should see 'Another Article Content'
Scenario: Collected data update with file changes Scenario: Collected data update with file changes
Given a fixture app "collections-app" Given a fixture app "collections-app"

View file

@ -11,22 +11,6 @@ Feature: Custom layouts
When I go to "/custom-layout.html" When I go to "/custom-layout.html"
Then I should see "Custom Layout" Then I should see "Custom Layout"
Scenario: Using custom :layout attribute with proxy
Given a fixture app "custom-layout-app2"
And a file named "config.rb" with:
"""
page '/test/*', layout: :custom
proxy "/test/me.html", "/custom-layout.html"
live { %w(you) }.each do |who|
proxy "/test/#{who}.html", "/custom-layout.html"
end
"""
And the Server is running at "custom-layout-app2"
When I go to "/test/me.html"
Then I should see "Custom Layout"
When I go to "/test/you.html"
Then I should see "Custom Layout"
Scenario: Using custom :layout attribute with folders Scenario: Using custom :layout attribute with folders
Given a fixture app "custom-layout-app2" Given a fixture app "custom-layout-app2"
And a file named "config.rb" with: And a file named "config.rb" with:

View file

@ -9,7 +9,6 @@ Feature: Directory Index
| a_folder/needs_index/index.html | | a_folder/needs_index/index.html |
| leave_me_alone.html | | leave_me_alone.html |
| wildcard_leave_me_alone.html | | wildcard_leave_me_alone.html |
| regex_leave_me_alone2.html |
| evil spaces/index.html | | evil spaces/index.html |
| regular/index.html | | regular/index.html |
| .htaccess | | .htaccess |
@ -22,7 +21,6 @@ Feature: Directory Index
| a_folder/needs_index.html | | a_folder/needs_index.html |
| leave_me_alone/index.html | | leave_me_alone/index.html |
| wildcard_leave_me_alone/index.html | | wildcard_leave_me_alone/index.html |
| regex_leave_me_alone2/index.html |
And the file "needs_index/index.html" should contain "Indexable" And the file "needs_index/index.html" should contain "Indexable"
And the file "a_folder/needs_index/index.html" should contain "Indexable" And the file "a_folder/needs_index/index.html" should contain "Indexable"
And the file "leave_me_alone.html" should contain "Stay away" And the file "leave_me_alone.html" should contain "Stay away"

View file

@ -31,7 +31,6 @@ Feature: Dynamic Pages
| should_be_ignored6.html | | should_be_ignored6.html |
| should_be_ignored7.html | | should_be_ignored7.html |
| should_be_ignored8.html | | should_be_ignored8.html |
| should_be_ignored9.html |
Scenario: Preview basic proxy Scenario: Preview basic proxy
Given the Server is running at "dynamic-pages-app" Given the Server is running at "dynamic-pages-app"
@ -132,5 +131,3 @@ Feature: Dynamic Pages
Then I should see "File Not Found" Then I should see "File Not Found"
When I go to "/should_be_ignored8.html" When I go to "/should_be_ignored8.html"
Then I should see "File Not Found" Then I should see "File Not Found"
When I go to "/should_be_ignored9.html"
Then I should see "File Not Found"

View file

@ -1,28 +0,0 @@
# encoding: iso-8859-1
Feature: encoding option
Scenario: No encoding set
Given a fixture app "clean-app"
Given the Server is running at "clean-app"
When I go to "/index.html"
Then the "Content-Type" header should contain "text/html"
Then the "Content-Type" header should contain "charset=utf-8"
@wip
Scenario: Custom encoding set
Given a fixture app "i-8859-1-app"
And a file named "config.rb" with:
"""
set :encoding, "ISO-8859-1"
::Rack::Mime::MIME_TYPES['.html'] = 'text/html; charset=iso-8859-1'
::Rack::Mime::MIME_TYPES['.htm'] = 'text/html; charset=iso-8859-1'
::Rack::Mime::MIME_TYPES['.map'] = 'application/json; charset=iso-8859-1'
"""
Given the Server is running at "i-8859-1-app"
When I go to "/index.html"
Then the "Content-Type" header should contain "text/html"
Then the "Content-Type" header should contain "charset=iso-8859-1"
Then I should see "äöü"

View file

@ -35,7 +35,7 @@ Feature: Neighboring YAML Front Matter
Given the Server is running at "frontmatter-neighbor-app" Given the Server is running at "frontmatter-neighbor-app"
And the file "source/front-matter-change.html.erb" has the contents And the file "source/front-matter-change.html.erb" has the contents
""" """
FileA <%= current_page.data.title %> <%= current_page.data.title %>
""" """
And the file "source/front-matter-change.html.erb.frontmatter" has the contents And the file "source/front-matter-change.html.erb.frontmatter" has the contents
""" """
@ -43,8 +43,6 @@ Feature: Neighboring YAML Front Matter
title: Hello World title: Hello World
layout: false layout: false
--- ---
FileB
""" """
When I go to "/front-matter-change.html" When I go to "/front-matter-change.html"
Then I should see "Hello World" Then I should see "Hello World"
@ -54,8 +52,6 @@ Feature: Neighboring YAML Front Matter
title: Hola Mundo title: Hola Mundo
layout: false layout: false
--- ---
FileC
""" """
When I go to "/front-matter-change.html" When I go to "/front-matter-change.html"
Then I should see "Hola Mundo" Then I should see "Hola Mundo"

View file

@ -22,7 +22,7 @@ Feature: GZIP assets during build
Given a fixture app "gzip-app" Given a fixture app "gzip-app"
And a file named "config.rb" with: And a file named "config.rb" with:
""" """
activate :gzip, exts: %w(.htm .html .js .xhtml) activate :gzip, exts: %w(.js .html .htm)
""" """
And a successfully built app at "gzip-app" And a successfully built app at "gzip-app"
Then the following files should exist: Then the following files should exist:

View file

@ -40,29 +40,19 @@ Feature: link_to helper
""" """
absolute: <%= link_to "Needs Index", "/needs_index.html", relative: true %> absolute: <%= link_to "Needs Index", "/needs_index.html", relative: true %>
relative: <%= link_to "Relative", "needs_index.html", relative: true %> relative: <%= link_to "Relative", "needs_index.html", relative: true %>
absolute spaces: <%= link_to "Spaces Index", "/evil spaces.html", relative: true %>
relative spaces: <%= link_to "Spaces Relative", "evil spaces.html", relative: true %>
""" """
And a file named "source/link_to/sub.html.erb" with: And a file named "source/link_to/sub.html.erb" with:
""" """
absolute: <%= link_to "Needs Index", "/needs_index.html", relative: true %> absolute: <%= link_to "Needs Index", "/needs_index.html", relative: true %>
relative: <%= link_to "Relative", "../needs_index.html", relative: true %> relative: <%= link_to "Relative", "../needs_index.html", relative: true %>
absolute spaces: <%= link_to "Spaces Index", "/evil spaces.html", relative: true %>
relative spaces: <%= link_to "Spaces Relative", "../evil spaces.html", relative: true %>
""" """
And the Server is running at "indexable-app" And the Server is running at "indexable-app"
When I go to "/link_to.html" When I go to "/link_to.html"
Then I should see 'absolute: <a href="needs_index.html">Needs Index</a>' Then I should see 'absolute: <a href="needs_index.html">Needs Index</a>'
Then I should see 'relative: <a href="needs_index.html">Relative</a>' Then I should see 'relative: <a href="needs_index.html">Relative</a>'
Then I should see 'absolute spaces: <a href="evil%20spaces.html">Spaces Index</a>'
Then I should see 'relative spaces: <a href="evil%20spaces.html">Spaces Relative</a>'
When I go to "/link_to/sub.html" When I go to "/link_to/sub.html"
Then I should see 'absolute: <a href="../needs_index.html">Needs Index</a>' Then I should see 'absolute: <a href="../needs_index.html">Needs Index</a>'
Then I should see 'relative: <a href="../needs_index.html">Relative</a>' Then I should see 'relative: <a href="../needs_index.html">Relative</a>'
Then I should see 'absolute spaces: <a href="../evil%20spaces.html">Spaces Index</a>'
Then I should see 'relative spaces: <a href="../evil%20spaces.html">Spaces Relative</a>'
Scenario: link_to relative works with strip_index_file Scenario: link_to relative works with strip_index_file
Given a fixture app "indexable-app" Given a fixture app "indexable-app"

View file

@ -50,24 +50,24 @@ Feature: i18n Paths
Given the Server is running at "empty-app" Given the Server is running at "empty-app"
When I go to "/hello.html" When I go to "/hello.html"
Then I should see "Page: Hello" Then I should see "Page: Hello"
Then I should see '<a href="/index.html" class="current">Current Home</a>' Then I should see '<a class="current" href="/index.html">Current Home</a>'
Then I should see '<a href="/es/index.html" title="Other Home">Other Home</a>' Then I should see '<a title="Other Home" href="/es/index.html">Other Home</a>'
Then I should see '<a href="/index.html" class="current"><span>Home: Current Block</span></a>' Then I should see '<a class="current" href="/index.html"><span>Home: Current Block</span></a>'
Then I should see '<a href="/es/index.html" title="Other Home"><span>Home: Other Block</span></a>' Then I should see '<a title="Other Home" href="/es/index.html"><span>Home: Other Block</span></a>'
Then I should see '<a href="/hello.html" class="current">Current hello.html</a>' Then I should see '<a class="current" href="/hello.html">Current hello.html</a>'
Then I should see '<a href="/es/hola.html" title="Other hello.html">Other hello.html</a>' Then I should see '<a title="Other hello.html" href="/es/hola.html">Other hello.html</a>'
Then I should see '<a href="/hello.html" class="current"><span>Current Block</span></a>' Then I should see '<a class="current" href="/hello.html"><span>Current Block</span></a>'
Then I should see '<a href="/es/hola.html" title="Other hello.html"><span>Other Block</span></a>' Then I should see '<a title="Other hello.html" href="/es/hola.html"><span>Other Block</span></a>'
When I go to "/es/hola.html" When I go to "/es/hola.html"
Then I should see "Page: Hola" Then I should see "Page: Hola"
Then I should see '<a href="/es/index.html" class="current">Current Home</a>' Then I should see '<a class="current" href="/es/index.html">Current Home</a>'
Then I should see '<a href="/index.html" title="Other Home">Other Home</a>' Then I should see '<a title="Other Home" href="/index.html">Other Home</a>'
Then I should see '<a href="/es/index.html" class="current"><span>Home: Current Block</span></a>' Then I should see '<a class="current" href="/es/index.html"><span>Home: Current Block</span></a>'
Then I should see '<a href="/index.html" title="Other Home"><span>Home: Other Block</span></a>' Then I should see '<a title="Other Home" href="/index.html"><span>Home: Other Block</span></a>'
Then I should see '<a href="/es/hola.html" class="current">Current hello.html</a>' Then I should see '<a class="current" href="/es/hola.html">Current hello.html</a>'
Then I should see '<a href="/hello.html" title="Other hello.html">Other hello.html</a>' Then I should see '<a title="Other hello.html" href="/hello.html">Other hello.html</a>'
Then I should see '<a href="/es/hola.html" class="current"><span>Current Block</span></a>' Then I should see '<a class="current" href="/es/hola.html"><span>Current Block</span></a>'
Then I should see '<a href="/hello.html" title="Other hello.html"><span>Other Block</span></a>' Then I should see '<a title="Other hello.html" href="/hello.html"><span>Other Block</span></a>'
Scenario: link_to is i18n aware and supports relative_links Scenario: link_to is i18n aware and supports relative_links
Given a fixture app "empty-app" Given a fixture app "empty-app"
@ -124,24 +124,24 @@ Feature: i18n Paths
Then I should see "assets/css/main.css" Then I should see "assets/css/main.css"
When I go to "/hello.html" When I go to "/hello.html"
Then I should see "Page: Hello" Then I should see "Page: Hello"
Then I should see '<a href="index.html" class="current">Current Home</a>' Then I should see '<a class="current" href="index.html">Current Home</a>'
Then I should see '<a href="es/index.html" title="Other Home">Other Home</a>' Then I should see '<a title="Other Home" href="es/index.html">Other Home</a>'
Then I should see '<a href="index.html" class="current"><span>Home: Current Block</span></a>' Then I should see '<a class="current" href="index.html"><span>Home: Current Block</span></a>'
Then I should see '<a href="es/index.html" title="Other Home"><span>Home: Other Block</span></a>' Then I should see '<a title="Other Home" href="es/index.html"><span>Home: Other Block</span></a>'
Then I should see '<a href="hello.html" class="current">Current hello.html</a>' Then I should see '<a class="current" href="hello.html">Current hello.html</a>'
Then I should see '<a href="es/hola.html" title="Other hello.html">Other hello.html</a>' Then I should see '<a title="Other hello.html" href="es/hola.html">Other hello.html</a>'
Then I should see '<a href="hello.html" class="current"><span>Current Block</span></a>' Then I should see '<a class="current" href="hello.html"><span>Current Block</span></a>'
Then I should see '<a href="es/hola.html" title="Other hello.html"><span>Other Block</span></a>' Then I should see '<a title="Other hello.html" href="es/hola.html"><span>Other Block</span></a>'
When I go to "/es/hola.html" When I go to "/es/hola.html"
Then I should see "Page: Hola" Then I should see "Page: Hola"
Then I should see '<a href="index.html" class="current">Current Home</a>' Then I should see '<a class="current" href="index.html">Current Home</a>'
Then I should see '<a href="../index.html" title="Other Home">Other Home</a>' Then I should see '<a title="Other Home" href="../index.html">Other Home</a>'
Then I should see '<a href="index.html" class="current"><span>Home: Current Block</span></a>' Then I should see '<a class="current" href="index.html"><span>Home: Current Block</span></a>'
Then I should see '<a href="../index.html" title="Other Home"><span>Home: Other Block</span></a>' Then I should see '<a title="Other Home" href="../index.html"><span>Home: Other Block</span></a>'
Then I should see '<a href="hola.html" class="current">Current hello.html</a>' Then I should see '<a class="current" href="hola.html">Current hello.html</a>'
Then I should see '<a href="../hello.html" title="Other hello.html">Other hello.html</a>' Then I should see '<a title="Other hello.html" href="../hello.html">Other hello.html</a>'
Then I should see '<a href="hola.html" class="current"><span>Current Block</span></a>' Then I should see '<a class="current" href="hola.html"><span>Current Block</span></a>'
Then I should see '<a href="../hello.html" title="Other hello.html"><span>Other Block</span></a>' Then I should see '<a title="Other hello.html" href="../hello.html"><span>Other Block</span></a>'
Scenario: url_for is i18n aware Scenario: url_for is i18n aware
Given a fixture app "empty-app" Given a fixture app "empty-app"

View file

@ -1,39 +0,0 @@
Feature: i18n merging path trees
Scenario: Mixing localized and non-localized sources and merging the path trees (see issue #1709)
Given a fixture app "i18n-test-app"
And a file named "config.rb" with:
"""
activate :i18n, mount_at_root: :en, langs: [:en, :es]
"""
Given the Server is running at "i18n-mixed-sources"
When I go to "/"
Then I should see "Current locale: en"
Then I should see "path: is-localized Home"
When I go to "/es"
Then I should see "Current locale: es"
Then I should see "path: is-localized Home"
When I go to "/a/"
Then I should see "Current locale: en"
Then I should see "path: is-localized Home # a/index.html.erb"
When I go to "/es/a/"
Then I should see "Current locale: es"
Then I should see "path: is-localized Home # a/index.html.erb"
When I go to "/b/"
Then I should see "Current locale: en"
Then I should see "path: is-localized Home # b/index.html.erb"
When I go to "/a/sub.html"
Then I should see "Current locale: en"
Then I should see "path: is-localized Home # a/index.html.erb # a/sub.html.erb"
When I go to "/b/sub.html"
Then I should see "Current locale: en"
Then I should see "path: is-localized Home # b/index.html.erb # b/sub.html.erb"
When I go to "/es/b/sub.html"
Then I should see "Current locale: es"
Then I should see "path: is-localized Home # b/index.html.erb # b/sub.html.erb"

View file

@ -28,35 +28,6 @@ Feature: Ignoring paths
When I go to "/about.html" When I go to "/about.html"
Then I should see "File Not Found" Then I should see "File Not Found"
Scenario: Ignoring collected values
Given a fixture app "ignore-app"
And a file named "data/ignores.yaml" with:
"""
---
- "plain"
"""
And a file named "config.rb" with:
"""
data.ignores.each do |name|
ignore "#{name}.html"
end
"""
And the Server is running
When I go to "/plain.html"
Then I should see "File Not Found"
When I go to "/about.html"
Then I should not see "File Not Found"
When the file "data/ignores.yaml" has the contents
"""
---
- "about"
"""
When I go to "/plain.html"
Then I should not see "File Not Found"
When I go to "/about.html"
Then I should see "File Not Found"
Scenario: Ignore a globbed path (build) Scenario: Ignore a globbed path (build)
Given a fixture app "ignore-app" Given a fixture app "ignore-app"
And a file named "config.rb" with: And a file named "config.rb" with:

View file

@ -13,3 +13,5 @@ Feature: Import files
Then I should see 'jQuery' Then I should see 'jQuery'
When I go to "/bower_components2/jquery/dist/jquery.js" When I go to "/bower_components2/jquery/dist/jquery.js"
Then I should see 'jQuery' Then I should see 'jQuery'

View file

@ -1,41 +0,0 @@
Feature: Markdown support in Slim
In order to test support of the Slim markdown filter
Scenario: Markdown filter in Slim works
Given a fixture app "markdown-in-slim-app"
And a file named "config.rb" with:
"""
set :markdown_engine, :redcarpet
activate :directory_indexes
"""
And a file named "source/markdown_filter.html.slim" with:
"""
markdown:
# H1
paragraph
"""
Given the Server is running at "markdown-in-slim-app"
When I go to "/markdown_filter/"
Then I should see ">H1</h1>"
Then I should see "<p>paragraph</p>"
Scenario: Markdown filter in Slim uses our link_to and image_tag helpers
Given a fixture app "markdown-in-slim-app"
And a file named "config.rb" with:
"""
set :markdown_engine, :redcarpet
activate :directory_indexes
"""
And a file named "source/link_and_image.html.slim" with:
"""
markdown:
[A link](/link_target.html)
![image](blank.gif)
"""
Given the Server is running at "markdown-in-slim-app"
When I go to "/link_and_image/"
Then I should see "/link_target/"
Then I should see 'src="/images/blank.gif"'

View file

@ -5,37 +5,37 @@ Feature: Allow nesting of layouts
When I go to "/index.html" When I go to "/index.html"
Then I should see: Then I should see:
""" """
Master Erb Master
<h1>Index Title</h1> <h1>Index Title</h1>
I am Outer Outer
I am Inner Inner
Template Template
""" """
When I go to "/another.html" When I go to "/another.html"
Then I should see: Then I should see:
""" """
Master Erb Master
<h1>New Article Title</h1> <h1>New Article Title</h1>
I am Outer Outer
I am Inner Inner
<p>The Article Content</p> <p>The Article Content</p>
""" """
Scenario: A page uses an inner layout when uses an outer layout (slim) Scenario: A page uses an inner layout when uses an outer layout (slim)
Given the Server is running at "nested-layout-app" Given the Server is running at "nested-layout-app"
When I go to "/slim-test.html" When I go to "/slim-test.html"
Then I should see "<h1>Master Slim</h1><p>New Article Title</p><div><h2>I am Outer</h2><h3>I am Inner</h3><p>The Article Content</p>" Then I should see "<h1>Master</h1><p>New Article Title</p><div><h2>Outer</h2><h3>Inner</h3><p>The Article Content</p>"
Scenario: A page uses an inner layout when uses an outer layout (haml) Scenario: A page uses an inner layout when uses an outer layout (haml)
Given the Server is running at "nested-layout-app" Given the Server is running at "nested-layout-app"
When I go to "/haml-test.html" When I go to "/haml-test.html"
Then I should see: Then I should see:
""" """
Master Haml Master
<h1>New Article Title</h1> <h1>New Article Title</h1>
I am Outer Outer
I am Inner Inner
<p>The Article Content</p> <p>The Article Content</p>
""" """
@ -43,16 +43,13 @@ Feature: Allow nesting of layouts
Given the Server is running at "nested-layout-app" Given the Server is running at "nested-layout-app"
When I go to "/data-one.html" When I go to "/data-one.html"
Then I should see "Page Number One" Then I should see "Page Number One"
And I should see "Page #1" And I should see "Inner"
And I should see "I am Inner"
And I should see "I am Outer"
And I should see "Master Erb"
When I go to "/data-two.html" When I go to "/data-two.html"
Then I should see "Page Number Two" Then I should see "Page Number Two"
And I should not see "I am Inner" And I should not see "Inner"
When I go to "/data-one.html" When I go to "/data-one.html"
Then I should see "Page Number One" Then I should see "Page Number One"
And I should see "I am Inner" And I should see "Inner"
When I go to "/data-two.html" When I go to "/data-two.html"
Then I should see "Page Number Two" Then I should see "Page Number Two"
And I should not see "I am Inner" And I should not see "Inner"

View file

@ -1,72 +0,0 @@
Feature: Page IDs
Scenario: link_to works with blocks (erb)
Given the Server is running at "page-id-app"
When I go to "/index.html"
Then I should see "I am: index"
And I should see "URL1: /fm.html"
And I should see "URL2: /2.html"
And I should see 'URL3: <a href="/3.html">Hi</a>'
And I should see 'URL4: <a href="/overwrites/from-default.html">Sym</a>'
And I should see 'URL5: <a href="/implicit.html">Imp</a>'
And I should see 'URL6: <a href="/folder/foldern.html">Foldern</a>'
And I should see 'URL7: <a href="/feed.xml">Feed</a>'
When I go to "/fm.html"
Then I should see "I am: frontmatter"
When I go to "/implicit.html"
Then I should see "I am: implicit"
When I go to "/feed.xml"
Then I should see "I am: feed.xml"
When I go to "/folder/foldern.html"
Then I should see "I am: folder/foldern"
When I go to "/1.html"
Then I should see "I am: page1"
When I go to "/2.html"
Then I should see "I am: page2"
When I go to "/3.html"
Then I should see "I am: page3"
When I go to "/overwrites/from-default.html"
Then I should see "I am: something-else"
When I go to "/overwrites/from-frontmatter.html"
Then I should see "I am: from_frontmatter"
Scenario: Override page ID derivation with a proc
Given a fixture app "page-id-app"
And app "page-id-app" is using config "proc"
And the Server is running at "page-id-app"
When I go to "/index.html"
Then I should see "I am: index.html-foo"
And I should see "URL1: /fm.html"
And I should see "URL2: /2.html"
And I should see 'URL3: <a href="/3.html">Hi</a>'
And I should see 'URL4: <a href="/overwrites/from-default.html">Sym</a>'
And I should see 'URL8: <a href="/implicit.html">Imp</a>'
And I should see 'URL9: <a href="/folder/foldern.html">Foldern</a>'
And I should see 'URL10: <a href="/feed.xml">Feed</a>'
When I go to "/fm.html"
Then I should see "I am: frontmatter"
When I go to "/implicit.html"
Then I should see "I am: implicit.html-foo"
When I go to "/feed.xml"
Then I should see "I am: feed.xml-foo"
When I go to "/folder/foldern.html"
Then I should see "I am: folder/foldern.html-foo"
When I go to "/1.html"
Then I should see "I am: page1"
When I go to "/2.html"
Then I should see "I am: page2"
When I go to "/3.html"
Then I should see "I am: page3"
When I go to "/overwrites/from-default.html"
Then I should see "I am: something-else"
When I go to "/overwrites/from-frontmatter.html"
Then I should see "I am: from_frontmatter"

View file

@ -12,11 +12,6 @@ Feature: Provide Sane Defaults for Partial Behavior
Then I should see "Header" Then I should see "Header"
And I should see "Footer" And I should see "Footer"
Scenario: Flags error when partial is not found
Given the Server is running at "partials-app"
When I go to "/index_missing.html"
Then I should see "Error: Could not locate partial"
Scenario: Prefers partials of the same engine type Scenario: Prefers partials of the same engine type
Given the Server is running at "partials-app" Given the Server is running at "partials-app"
When I go to "/index.html" When I go to "/index.html"
@ -55,10 +50,3 @@ Feature: Provide Sane Defaults for Partial Behavior
Then I should see "File Not Found" Then I should see "File Not Found"
When I go to "/_code_snippet.html" When I go to "/_code_snippet.html"
Then I should see "File Not Found" Then I should see "File Not Found"
Scenario: Works with blocks
Given the Server is running at "partials-app"
When I go to "/block.html"
Then I should see "Start"
And I should see "Contents"
And I should see "End"

View file

@ -41,11 +41,6 @@ Feature: Relative Assets
And I should see 'url(../fonts/roboto/roboto-regular-webfont.woff' And I should see 'url(../fonts/roboto/roboto-regular-webfont.woff'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.ttf' And I should see 'url(../fonts/roboto/roboto-regular-webfont.ttf'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.svg' And I should see 'url(../fonts/roboto/roboto-regular-webfont.svg'
When I go to "/stylesheets/fonts2.css"
Then I should see 'url(../fonts/roboto/roboto-regular-webfont.eot'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.woff'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.ttf'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.svg'
Scenario: Building css with the feature enabled Scenario: Building css with the feature enabled
Given a fixture app "relative-assets-app" Given a fixture app "relative-assets-app"
@ -120,7 +115,7 @@ Feature: Relative Assets
""" """
And the Server is running at "relative-assets-app" And the Server is running at "relative-assets-app"
When I go to "/sub/image_tag.html" When I go to "/sub/image_tag.html"
Then I should see '<img src="../img/blank.gif"' Then I should see '<img src="../img/blank.gif" />'
Scenario: Relative assets should not break data URIs in image_tag Scenario: Relative assets should not break data URIs in image_tag
Given a fixture app "relative-assets-app" Given a fixture app "relative-assets-app"
@ -132,17 +127,3 @@ Feature: Relative Assets
And the Server is running at "relative-assets-app" And the Server is running at "relative-assets-app"
When I go to "/sub/image_tag.html" When I go to "/sub/image_tag.html"
Then I should see '<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" />' Then I should see '<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" />'
Scenario: URLs are not rewritten for rewrite ignored paths
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :relative_assets, rewrite_ignore: [
'/stylesheets/fonts.css',
]
"""
And the Server is running at "relative-assets-app"
When I go to "/stylesheets/relative_assets.css"
Then I should see 'url("../images/blank.gif'
When I go to "/stylesheets/fonts.css"
Then I should see 'url(/fonts/roboto/roboto-regular-webfont.eot'

View file

@ -1,123 +0,0 @@
Feature: Relative Assets (Helpers Only)
Scenario: Rendering css with the feature enabled
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :relative_assets, helpers_only: true
"""
And a file named "source/stylesheets/relative_assets.css.sass.erb" with:
"""
h1
background: url("<%= asset_url('images/blank.gif') %>")
h2
background: url("<%= asset_url('/images/blank2.gif') %>")
"""
And a file named "source/javascripts/application.js.erb" with:
"""
function foo() {
var img = document.createElement('img');
img.src = '<%= asset_url("images/100px.jpg") %>';
var body = document.getElementsByTagName('body')[0];
body.insertBefore(img, body.firstChild);
}
window.onload = foo;
"""
And a file named "source/stylesheets/fonts3.css.erb" with:
"""
@font-face {
font-family: 'Roboto2';
src: url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.eot") %>);
src: url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.eot?#iefix") %>) format('embedded-opentype'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.woff") %>) format('woff'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.ttf") %>) format('truetype'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.svg#robotoregular") %>) format('svg');
font-weight: normal;
font-style: normal;
}
"""
And the Server is running at "relative-assets-app"
When I go to "/stylesheets/relative_assets.css"
Then I should see 'url("../images/blank.gif'
And I should see 'url("../images/blank2.gif'
When I go to "/javascripts/application.js"
Then I should not see "../"
When I go to "/stylesheets/fonts3.css"
Then I should see 'url(../fonts/roboto/roboto-regular-webfont.eot'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.woff'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.ttf'
And I should see 'url(../fonts/roboto/roboto-regular-webfont.svg'
Scenario: Relative css reference with directory indexes
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :directory_indexes
activate :relative_assets, helpers_only: true
"""
And the Server is running at "relative-assets-app"
When I go to "/relative_image/index.html"
Then I should see "../stylesheets/relative_assets.css"
Scenario: Relative assets via image_tag
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :relative_assets, helpers_only: true
"""
And a file named "source/sub/image_tag.html.erb" with:
"""
<%= image_tag '/img/blank.gif' %>
"""
And the Server is running at "relative-assets-app"
When I go to "/sub/image_tag.html"
Then I should see '<img src="../img/blank.gif"'
Scenario: Relative assets should not break data URIs in image_tag
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :relative_assets, helpers_only: true
"""
And a file named "source/sub/image_tag.html.erb" with:
"""
<%= image_tag "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" %>
"""
And the Server is running at "relative-assets-app"
When I go to "/sub/image_tag.html"
Then I should see '<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" />'
Scenario: URLs are not rewritten for rewrite ignored paths
Given a fixture app "relative-assets-app"
And a file named "config.rb" with:
"""
activate :relative_assets, rewrite_ignore: [
'/stylesheets/fonts3.css',
], helpers_only: true
"""
And a file named "source/stylesheets/relative_assets.css.sass.erb" with:
"""
h1
background: url("<%= asset_url('images/blank.gif') %>")
h2
background: url("<%= asset_url('/images/blank2.gif') %>")
"""
And a file named "source/stylesheets/fonts3.css.erb" with:
"""
@font-face {
font-family: 'Roboto2';
src: url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.eot") %>);
src: url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.eot?#iefix") %>) format('embedded-opentype'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.woff") %>) format('woff'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.ttf") %>) format('truetype'),
url(<%= asset_url("/fonts/roboto/roboto-regular-webfont.svg#robotoregular") %>) format('svg');
font-weight: normal;
font-style: normal;
}
"""
And the Server is running at "relative-assets-app"
When I go to "/stylesheets/relative_assets.css"
Then I should see 'url("../images/blank.gif'
When I go to "/stylesheets/fonts3.css"
Then I should see 'url(/fonts/roboto/roboto-regular-webfont.eot'

View file

@ -1,40 +0,0 @@
Feature: Sass/SCSS support in Slim
In order to test support of the Slim sass and scss filters
Scenario: Sass filter in Slim works
Given a fixture app "sass-in-slim-app"
And a file named "config.rb" with:
"""
activate :directory_indexes
"""
And a file named "source/sass_filter.html.slim" with:
"""
sass:
.sass
margin: 0
"""
Given the Server is running at "sass-in-slim-app"
When I go to "/sass_filter/"
Then I should see "text/css"
Then I should see ".sass"
Then I should see "margin:0"
Scenario: SCSS filter in Slim works
Given a fixture app "sass-in-slim-app"
And a file named "config.rb" with:
"""
activate :directory_indexes
"""
And a file named "source/scss_filter.html.slim" with:
"""
scss:
.scss {
margin: 0;
}
"""
Given the Server is running at "sass-in-slim-app"
When I go to "/scss_filter/"
Then I should see "text/css"
Then I should see ".scss"
Then I should see "margin:0"

View file

@ -5,7 +5,7 @@ require 'sassc'
require 'simplecov' require 'simplecov'
SimpleCov.root(File.expand_path(File.dirname(__FILE__) + '/../..')) SimpleCov.root(File.expand_path(File.dirname(__FILE__) + '/../..'))
require 'phantomjs/poltergeist' require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist Capybara.javascript_driver = :poltergeist
require 'coveralls' require 'coveralls'

View file

@ -1,26 +0,0 @@
Feature: Don't allow template locals to overwrite template helpers
Scenario: Normal Template
Given an empty app
And a file named "config.rb" with:
"""
class TestExt < ::Middleman::Extension
expose_to_template foo: :foo
def foo
"bar"
end
end
::Middleman::Extensions.register :test, TestExt
activate :test
page "/index.html", locals: { foo: false }
"""
And a file named "source/index.html.erb" with:
"""
<%= foo %>
"""
Given a built app at "empty_app"
Then the exit status should be 1

View file

@ -4,9 +4,6 @@
<h2>Image url:</h2> <h2>Image url:</h2>
<img src="<%= image_path('100px.jpg') %>" srcset="<%= image_path('100px.jpg') %> 1x, <%= image_path('200px.jpg') %> 2x, <%= image_path('300px.jpg') %> 3x"> <img src="<%= image_path('100px.jpg') %>" srcset="<%= image_path('100px.jpg') %> 1x, <%= image_path('200px.jpg') %> 2x, <%= image_path('300px.jpg') %> 3x">
<%= image_tag('100px.jpg?test') %>
<%= image_tag('100px.jpg?#test') %>
<%= image_tag('100px.jpg#test') %>
<h2>Ignored path:</h2> <h2>Ignored path:</h2>
<link rel="apple-touch-icon" href="apple-touch-icon.png"> <link rel="apple-touch-icon" href="apple-touch-icon.png">

View file

@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<%= stylesheet_link_tag "site", "fragment" %> <%= stylesheet_link_tag "site" %>
<%= javascript_include_tag "application" %> <%= javascript_include_tag "application" %>
<%= yield_content :head %> <%= yield_content :head %>
</head> </head>

View file

@ -1,5 +1,2 @@
<h2>Image url:</h2> <h2>Image url:</h2>
<img src="<%= image_path('100px.jpg') %>"> <img src="<%= image_path('100px.jpg') %>">
<img src="<%= image_path('100px.jpg?test') %>">
<img src="<%= image_path('100px.jpg?#test') %>">
<img src="<%= image_path('100px.jpg#test') %>">

View file

@ -1,7 +0,0 @@
#main {
padding: 50px;
background-image: image-url('100px.jpg');
background-image: image-url('100px.jpg?test');
background-image: image-url('100px.jpg?#test');
background-image: image-url('100px.jpg#test');
}

View file

@ -0,0 +1,4 @@
activate :asset_hash
activate :directory_indexes
activate :asset_host, host: 'http://middlemanapp.com'

View file

@ -3,7 +3,4 @@
<% end %> <% end %>
<h2>Image url:</h2> <h2>Image url:</h2>
<img src="/images/100px.jpg"> <%= image_tag('100px.jpg') %>
<%= image_tag('100px.jpg?test') %>
<%= image_tag('100px.jpg?#test') %>
<%= image_tag('100px.jpg#test') %>

View file

@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<%= stylesheet_link_tag "site", "fragment" %> <%= stylesheet_link_tag "site" %>
<%= yield_content :head %> <%= yield_content :head %>
</head> </head>

View file

@ -1,5 +1,2 @@
<h2>Image url:</h2> <h2>Image url:</h2>
<img src="<%= image_path('100px.jpg') %>"> <img src="<%= image_path('100px.jpg') %>">
<img src="<%= image_path('100px.jpg?test') %>">
<img src="<%= image_path('100px.jpg?#test') %>">
<img src="<%= image_path('100px.jpg#test') %>">

View file

@ -1,7 +1,4 @@
#main { #main {
padding: 50px; padding: 50px;
background-image: image-url('100px.jpg');
background-image: image-url('100px.jpg?test');
background-image: image-url('100px.jpg?#test');
background-image: image-url('100px.jpg#test'); background-image: image-url('100px.jpg#test');
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 B

View file

@ -1,3 +0,0 @@
.no-bug{background-image:url(/images/100px.jpg)}
.bug{content:"";background-image:url(/images/100px.jpg)}
.no-bug{content:""; background-image:url(/images/100px.jpg)}

View file

@ -1,7 +0,0 @@
activate :asset_hash,
prefix: "myprefix-"
activate :relative_assets
activate :directory_indexes

View file

@ -1,16 +0,0 @@
class Middleware
def initialize(app)
@app = app
end
def call(env)
status, headers, response = @app.call(env)
body = ''
response.each {|part| body += part }
if (env["PATH_INFO"] =~ /css$/)
body += "\n/* Added by Rack filter */"
status, headers, response = Rack::Response.new(body, status, headers).finish
end
[status, headers, response]
end
end

View file

@ -1,6 +0,0 @@
<% content_for :head do %>
<title>The Middleman!</title>
<% end %>
<h1>Testing the sitemap hashing</h1>
<br /><br /><br />

View file

@ -1,2 +0,0 @@
function foo(){var message="HEY THERE FRIEND!";var para=document.createElement("p");para.innerHTML=message;var body=document.getElementsByTagName("body")[0];body.insertBefore(para,body.firstChild)}window.onload=foo;
//# sourceMappingURL=application.js.map

View file

@ -1 +0,0 @@
{"version":3,"sources":["source/javascripts/application.js"],"names":["foo","message","para","document","createElement","innerHTML","body","getElementsByTagName","insertBefore","firstChild","window","onload"],"mappings":"AAAA,QAASA,OACP,GAAIC,SAAU,mBACd,IAAIC,MAAOC,SAASC,cAAc,IAClCF,MAAKG,UAAYJ,OACb,IAAIK,MAAOH,SAASI,qBAAqB,QAAQ,EAC/CD,MAAKE,aAAaN,KAAMI,KAAKG,YAGpCC,OAAOC,OAASX"}

View file

@ -1,17 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<%= javascript_include_tag "application" %>
<%= yield_content :head %>
</head>
<body class="<%= page_classes %>">
<div id="main" role="main">
<%= yield %>
</div>
</body>
</html>

View file

@ -1,6 +0,0 @@
activate :asset_hash
activate :relative_assets
activate :directory_indexes

View file

@ -1,16 +0,0 @@
class Middleware
def initialize(app)
@app = app
end
def call(env)
status, headers, response = @app.call(env)
body = ''
response.each {|part| body += part }
if (env["PATH_INFO"] =~ /css$/)
body += "\n/* Added by Rack filter */"
status, headers, response = Rack::Response.new(body, status, headers).finish
end
[status, headers, response]
end
end

View file

@ -1,6 +0,0 @@
<% content_for :head do %>
<title>The Middleman!</title>
<% end %>
<h1>Testing the sitemap hashing</h1>
<br /><br /><br />

View file

@ -1,2 +0,0 @@
function foo(){var message="HEY THERE FRIEND!";var para=document.createElement("p");para.innerHTML=message;var body=document.getElementsByTagName("body")[0];body.insertBefore(para,body.firstChild)}window.onload=foo;
//# sourceMappingURL=application.js.map

View file

@ -1 +0,0 @@
{"version":3,"sources":["source/javascripts/application.js"],"names":["foo","message","para","document","createElement","innerHTML","body","getElementsByTagName","insertBefore","firstChild","window","onload"],"mappings":"AAAA,QAASA,OACP,GAAIC,SAAU,mBACd,IAAIC,MAAOC,SAASC,cAAc,IAClCF,MAAKG,UAAYJ,OACb,IAAIK,MAAOH,SAASI,qBAAqB,QAAQ,EAC/CD,MAAKE,aAAaN,KAAMI,KAAKG,YAGpCC,OAAOC,OAASX"}

View file

@ -1,17 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<%= javascript_include_tag "application" %>
<%= yield_content :head %>
</head>
<body class="<%= page_classes %>">
<div id="main" role="main">
<%= yield %>
</div>
</body>
</html>

View file

@ -1 +0,0 @@
activate :asset_host, host: "http://assets1.example.com"

View file

@ -44,12 +44,3 @@
<a href="https://github.com/angular/angular.js">Angular.js</a> <a href="https://github.com/angular/angular.js">Angular.js</a>
<script>(function(a,b,c,d){})(window,document,'script','//www.example.com/script.js');</script> <script>(function(a,b,c,d){})(window,document,'script','//www.example.com/script.js');</script>
<script>
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') +
'.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>

Some files were not shown because too many files have changed in this diff Show more