lib/sourcemaps.rb in vitrine-0.0.17 vs lib/sourcemaps.rb in vitrine-0.0.18

- old
+ new

@@ -1,9 +1,52 @@ require 'pathname' require 'json' module Vitrine + # We need to override the Sass importer + # so that it gives us URLs relative to the server root for sourcemaps + class Imp < Sass::Importers::Filesystem + def public_url(of_filesystem_path) + scss_uri = '/' + Pathname.new(of_filesystem_path).relative_path_from(Pathname.new(root)).to_s + end + end + + # Compile a SASS/SCSS file to CSS + def self.compile_sass_and_sourcemap(scss_path, public_folder_path) + # Compute the paths relative to the webserver public root + scss_uri = '/' + Pathname.new(scss_path).relative_path_from(Pathname.new(public_folder_path)).to_s + css_uri = scss_uri.gsub(/\.scss$/, '.css') + sourcemap_uri= css_uri + '.map' + + engine_opts = {importer: Imp.new(public_folder_path), sourcemap: true, cache: false} + map_options = {css_path: css_uri, sourcemap_path: sourcemap_uri } + + engine = Sass::Engine.for_file(scss_path, engine_opts) + + # Determine the sourcemap URL for the SASS file + rendered, mapping = engine.render_with_sourcemap(sourcemap_uri) + + # Serialize the sourcemap + # We need to pass css_uri: so that the generated sourcemap refers to the + # file that can be pulled of the server as opposed to a file on the filesystem + sourcemap_body = mapping.to_json(map_options) + + [rendered, sourcemap_body] + end + + # Compile SASS and return the source map only + def self.compile_sass_source_map(scss_path, public_folder_path) + css, map = compile_sass_and_sourcemap(scss_path, public_folder_path) + map + end + + # Compiles SASS and it's sourcemap and returns the CSS only + def self.compile_sass(scss_path, public_folder_path) + css, map = compile_sass_and_sourcemap(scss_path, public_folder_path) + css + end + # Compile a script (String or IO) to JavaScript. # This is a version lifted from here # https://github.com/josh/ruby-coffee-script/blob/114b65b638f66ba04b60bf9c24b54360260f9898/lib/coffee_script.rb # which propagates error line def self.compile_coffeescript(script, options = {}) \ No newline at end of file