Class: Nanoc3::Filters::Less
- Inherits:
-
Nanoc3::Filter
- Object
- Context
- Nanoc3::Filter
- Nanoc3::Filters::Less
- Defined in:
- lib/nanoc3/filters/less.rb
Constant Summary
Constants inherited from Nanoc3::Filter
Nanoc3::Filter::TMP_BINARY_ITEMS_DIR
Instance Attribute Summary
Attributes inherited from Nanoc3::Filter
Instance Method Summary collapse
-
#run(content, params = {}) ⇒ String
Runs the content through [LESS](lesscss.org/).
Methods inherited from Nanoc3::Filter
#depend_on, #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
#run(content, params = {}) ⇒ String
Runs the content through [LESS](lesscss.org/). This method takes no options.
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 50 |
# File 'lib/nanoc3/filters/less.rb', line 14 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 if !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 end |