Guest User

Untitled

a guest
Jan 23rd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. # frozen_string_literal: true
  2.  
  3. require 'nanoc'
  4.  
  5. module Nanoc
  6. module Filters
  7. class SassWithCompass < Nanoc::Filter
  8. identifier :sass_with_compass
  9. type :text
  10.  
  11. requires 'configatron', 'compass', 'sass'
  12.  
  13. def run(content, params = {})
  14. define_dependencies
  15.  
  16. render_with_sourcemap(sourcemap_uri) unless configatron.web.compress
  17.  
  18. css, sourcemap = Sass.new(@assigns).setup_and_run(content,
  19. configure_compass(params))
  20.  
  21. save(sourcemap)
  22. css
  23. end
  24.  
  25. private
  26.  
  27. def define_dependencies
  28. depend_on(@assigns[:items].find_all('/**/*.{jpg,png}'))
  29. depend_on(@assigns[:items].find_all('/**/*.{eot,ttf}'))
  30. end
  31.  
  32. def configure_compass(params)
  33. p = params.dup
  34. Compass.add_project_configuration(p.delete(:config_file))
  35.  
  36. p.merge(Compass.sass_engine_options)
  37. end
  38.  
  39. def render_with_sourcemap(uri)
  40. ::Sass::Engine.send(:define_method,
  41. :render,
  42. proc { render_with_sourcemap(uri) })
  43. end
  44.  
  45. def save(sourcemap)
  46. return unless sourcemap
  47. FileUtils.mkdir_p(File.dirname(sourcemap_path), verbose: false)
  48. IO.write(sourcemap_path, sourcemap.to_json(css_uri: @item.path))
  49. end
  50.  
  51. def sourcemap_file
  52. @item.path + '.map'
  53. end
  54.  
  55. def sourcemap_path
  56. File.join(@config[:output_dir], sourcemap_file)
  57. end
  58.  
  59. def sourcemap_uri
  60. File.basename(sourcemap_file)
  61. end
  62. end
  63. end
  64. end
Add Comment
Please, Sign In to add comment