Class: Nanoc3::Filters::RelativizePaths
- Inherits:
-
Nanoc3::Filter
- Object
- Context
- Nanoc3::Filter
- Nanoc3::Filters::RelativizePaths
- Includes:
- Helpers::LinkTo
- Defined in:
- lib/nanoc3/filters/relativize_paths.rb
Constant Summary
Constants inherited from Nanoc3::Filter
Instance Attribute Summary
Attributes inherited from Nanoc3::Filter
Instance Method Summary (collapse)
-
- (String) run(content, params = {})
Relativizes all paths in the given content, which can be either HTML or CSS.
Methods included from Helpers::LinkTo
#link_to, #link_to_unless_current, #relative_path_to
Methods included from Helpers::HTMLEscape
Methods inherited from Nanoc3::Filter
#filename, from_binary?, #initialize, #output_filename, to_binary?, type
Methods included from PluginRegistry::PluginMethods
#identifier, #identifiers, #named, #register
Methods inherited from Context
Constructor Details
This class inherits a constructor from Nanoc3::Filter
Instance Method Details
- (String) run(content, params = {})
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.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/nanoc3/filters/relativize_paths.rb', line 20 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))=(['"]?)(\/.*?)\3([ >])/) do $1 + '=' + $3 + relative_path_to($4) + $3 + $5 end when :css content.gsub(/url\((['"]?)(\/.*?)\1\)/) 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 |