Class: Nanoc::Filters::Less
- Inherits:
-
Nanoc::Filter
- Object
- Context
- Nanoc::Filter
- Nanoc::Filters::Less
- Defined in:
- lib/nanoc/filters/less.rb
Constant Summary
Constant Summary
Constants inherited from Nanoc::Filter
Nanoc::Filter::TMP_BINARY_ITEMS_DIR
Instance Attribute Summary
Attributes inherited from Nanoc::Filter
Instance Method Summary (collapse)
-
- (String) run(content, params = {})
Runs the content through LESS.
Methods inherited from Nanoc::Filter
#depend_on, #filename, from_binary?, #initialize, #output_filename, requires, setup, #setup_and_run, to_binary?, type
Methods included from PluginRegistry::PluginMethods
#all, #identifier, #identifiers, #named, #register
Methods inherited from Context
Constructor Details
This class inherits a constructor from Nanoc::Filter
Instance Method Details
- (String) run(content, params = {})
Runs the content through LESS. This method takes no options.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/nanoc/filters/less.rb', line 13 def run(content, params = {}) # Find imports (hacky) imports = [] imports.concat(content.scan(/^@import\s+(["'])([^\1]+?)\1;/)) imports.concat(content.scan(/^@import\s+url\((["']?)([^)]+?)\1\);/)) imported_filenames = imports.map do |i| i[1].match(/\.(less|css)$/) ? i[1] : i[1] + '.less' end # Convert to items imported_items = imported_filenames.map do |filename| # Find directory for this item current_dir_pathname = Pathname.new(@item[:content_filename]).dirname.realpath # Find absolute pathname for imported item imported_pathname = Pathname.new(filename) if imported_pathname.relative? imported_pathname = current_dir_pathname + imported_pathname end next unless imported_pathname.exist? imported_filename = imported_pathname.realpath # Find matching item @items.find do |i| next if i[:content_filename].nil? Pathname.new(i[:content_filename]).realpath == imported_filename end end.compact # Create dependencies depend_on(imported_items) # Add filename to load path paths = [File.dirname(@item[:content_filename])] parser = ::Less::Parser.new(paths: paths) parser.parse(content).to_css params end |