module Middleman::CoreExtensions::DefaultHelpers::Helpers

def asset_path(kind, source)

Returns:
  • (String) -

Parameters:
  • source (String) -- The path to the file
  • kind (Symbol) -- The type of file
def asset_path(kind, source)
  return source if source =~ /^http/
  asset_folder  = case kind
    when :css    then css_dir
    when :js     then js_dir
    when :images then images_dir
    else kind.to_s
  end
  source = source.to_s.gsub(/\s/, '')
  ignore_extension = (kind == :images) # don't append extension
  source << ".#{kind}" unless ignore_extension or source =~ /\.#{kind}/
  result_path   = source if source =~ %r{^/} # absolute path
  result_path ||= asset_url(source, asset_folder)
  "#{result_path}"
end

def auto_javascript_include_tag(separator="/")

Returns:
  • (String) -

Parameters:
  • separator (String) -- How to break up path in parts
def auto_javascript_include_tag(separator="/")
  auto_tag(:js, separator) do |path|
    javascript_include_tag path
  end
end

def auto_stylesheet_link_tag(separator="/")

Returns:
  • (String) -

Parameters:
  • separator (String) -- How to break up path in parts
def auto_stylesheet_link_tag(separator="/")
  auto_tag(:css, separator) do |path|
    stylesheet_link_tag path
  end
end

def auto_tag(asset_ext, separator="/", asset_dir=nil)

Returns:
  • (void) -

Parameters:
  • asset_dir (String) -- Where to look for assets
  • separator (String) -- How to break up path in parts
  • asset_ext (Symbol) -- The type of asset
def auto_tag(asset_ext, separator="/", asset_dir=nil)
  if asset_dir.nil?
    asset_dir = case asset_ext
      when :js  then js_dir
      when :css then css_dir
    end
  end
  # If the basename of the request as no extension, assume we are serving a
  # directory and join index_file to the path.
  path = full_path(current_path.dup)
  path = path.sub(%r{^/}, '')
  path = path.gsub(File.extname(path), ".#{asset_ext}")
  path = path.gsub("/", separator)
  yield path if sitemap.find_resource_by_path(File.join(asset_dir, path))
end

def link_to(*args, &block)

to config.rb to have all links default to relative.

set :relative_links, true

relative URLs instead of absolute URLs. You can also add
:relative option which, if set to true, will produce
you'll get that resource's nice URL. Also, there is a
reference a source path, either absolutely or relatively,
Overload the regular link_to to be sitemap-aware - if you
def link_to(*args, &block)
  url_arg_index = block_given? ? 0 : 1
  options_index = block_given? ? 1 : 2
  if url = args[url_arg_index]
    options = args[options_index] || {}
    relative = options.delete(:relative)
    
    if url.include? '://'
      raise "Can't use the relative option with an external URL" if relative
    else
      # Handle relative urls
      current_dir = Pathname('/' + current_resource.path).dirname
      path = Pathname(url)
      url = current_dir.join(path).to_s if path.relative?
      resource = sitemap.find_resource_by_path(url)
      
      # Allow people to turn on relative paths for all links with set :relative_links, true
      # but still override on a case by case basis with the :relative parameter.
      effective_relative = relative || false
      if relative.nil? && relative_links
        effective_relative = true
      end
      if resource
        if effective_relative
          resource_url = resource.url
          new_url = Pathname(resource_url).relative_path_from(current_dir).to_s
          # Put back the trailing slash to avoid unnecessary Apache redirects
          if resource_url.end_with?('/') && !new_url.end_with?('/')
            new_url << '/'
          end
        else
          new_url = resource.url
        end
        args[url_arg_index] = new_url
      else
        raise "No resource exists at #{url}" if relative
      end
    end
  end
  super(*args, &block)
end

def page_classes

Returns:
  • (String) -
def page_classes
  path = current_path.dup
  path << index_file if path.match(%r{/$})
  path = path.gsub(%r{^/}, '')
  classes = []
  parts = path.split('.')[0].split('/')
  parts.each_with_index { |path, i| classes << parts.first(i+1).join('_') }
  classes.join(' ')
end