# Setup our load paths
libdir = File.expand_path(File.dirname(__FILE__))
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)

require "middleman-core"

# Top-level Middleman object
module Middleman
  
  # Custom Renderers
  module Renderers
    autoload :Haml,         "middleman-more/renderers/haml"
    autoload :Sass,         "middleman-more/renderers/sass"
    autoload :Markdown,     "middleman-more/renderers/markdown"
    autoload :Liquid,       "middleman-more/renderers/liquid"
    autoload :Slim,         "middleman-more/renderers/slim"
  end
  
  # Core (automatic) extensions
  module CoreExtensions
    # Compass framework for Sass
    autoload :Compass,      "middleman-more/core_extensions/compass"
    
    # Sprockets 2
    autoload :Sprockets,    "middleman-more/core_extensions/sprockets"
  end
  
  # User-activatable extensions
  module Extensions
    # RelativeAssets allow any asset path in dynamic templates to be either
    # relative to the root of the project or use an absolute URL.
    autoload :RelativeAssets,      "middleman-more/extensions/relative_assets"

    # CacheBuster adds a query string to assets in dynamic templates to avoid
    # browser caches failing to update to your new content.
    autoload :CacheBuster,         "middleman-more/extensions/cache_buster"

    # AssetHash appends a hash of the file contents to the assets filename
    # to avoid browser caches failing to update to your new content.
    autoload :AssetHash,           "middleman-more/extensions/asset_hash"

    # MinifyCss uses the YUI compressor to shrink CSS files
    autoload :MinifyCss,           "middleman-more/extensions/minify_css"

    # MinifyJavascript uses the YUI compressor to shrink JS files
    autoload :MinifyJavascript,    "middleman-more/extensions/minify_javascript"

    # GZIP assets and pages during build
    autoload :Gzip,    "middleman-more/extensions/gzip"
  end
  
  # Setup renderers
  require "coffee_script"
  Application.register Middleman::Renderers::Haml
  Application.register Middleman::Renderers::Sass
  Application.register Middleman::Renderers::Markdown
  Application.register Middleman::Renderers::Liquid
  Application.register Middleman::Renderers::Slim

  # Compass framework
  Application.register Middleman::CoreExtensions::Compass

  # Sprockets asset handling
  Application.register Middleman::CoreExtensions::Sprockets
  
  # Register the optional extensions
  Extensions.register(:cache_buster) { 
    ::Middleman::Extensions::CacheBuster }
  Extensions.register(:minify_css) { 
    ::Middleman::Extensions::MinifyCss }
  Extensions.register(:minify_javascript) {
    ::Middleman::Extensions::MinifyJavascript }
  Extensions.register(:relative_assets) {
    ::Middleman::Extensions::RelativeAssets }
  Extensions.register(:gzip) {
    ::Middleman::Extensions::Gzip }
  Extensions.register(:asset_hash) {
    ::Middleman::Extensions::AssetHash }
end