Methods

Included Modules

Class/Module Index [+]

Quicksearch

Nanoc3::Filters::RelativizePaths

Public Instance Methods

run(content, params={}) click to toggle source

Relativizes all paths in the given content, which can be either HTML or CSS. This filter is quite useful if a site needs to be hosted in a subdirectory instead of a subdomain. In HTML, all `href` and `src` attributes will be relativized. In CSS, all `url()` references will be relativized.

@param [String] content The content to filter

@option params [Symbol] :type The type of content to filter; can be either `:html` or `:css`.

@return [String] The filtered content

# File lib/nanoc3/filters/relativize_paths.rb, line 19
def run(content, params={})
  # Set assigns so helper function can be used
  @item_rep = assigns[:item_rep] if @item_rep.nil?

  # Filter
  # TODO use nokogiri or csspool instead of regular expressions
  case params[:type]
  when :html
    content.gsub(/(<[^>]+\s+(src|href))=(['"]?)(\/.*?)\33(([ >])/) do
      $1 + '=' + $3 + relative_path_to($4) + $3 + $5
    end
  when :css
    content.gsub(/url\((['"]?)(\/.*?)\11\\)/) do
      'url(' + $1 + relative_path_to($2) + $1 + ')'
    end
  else
    raise RuntimeError.new(
      "The relativize_paths needs to know the type of content to " +
      "process. Pass :type => :html for HTML or :type => :css for CSS."
    )
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.