blob: 955bd3929b875245ca5cd440ec9b050d0cb6639a [file] [log] [blame]
module Sass
module Tree
# A static node that wraps the {Sass::Tree} for an `@import`ed file.
# It doesn't have a functional purpose other than to add the `@import`ed file
# to the backtrace if an error occurs.
class ImportNode < RootNode
# The name of the imported file as it appears in the Sass document.
#
# @return [String]
attr_reader :imported_filename
# Sets the imported file.
attr_writer :imported_file
# @param imported_filename [String] The name of the imported file
def initialize(imported_filename)
@imported_filename = imported_filename
super(nil)
end
def invisible?; to_s.empty?; end
# Returns the imported file.
#
# @return [Sass::Engine]
# @raise [Sass::SyntaxError] If no file could be found to import.
def imported_file
@imported_file ||= import
end
# Returns whether or not this import should emit a CSS @import declaration
#
# @return [Boolean] Whether or not this is a simple CSS @import declaration.
def css_import?
if @imported_filename =~ /\.css$/
@imported_filename
elsif imported_file.is_a?(String) && imported_file =~ /\.css$/
imported_file
end
end
private
def import
paths = @options[:load_paths]
if @options[:importer]
f = @options[:importer].find_relative(
@imported_filename, @options[:filename], options_for_importer)
return f if f
end
paths.each do |p|
f = p.find(@imported_filename, options_for_importer)
return f if f
end
lines = ["File to import not found or unreadable: #{@imported_filename}."]
if paths.size == 1
lines << "Load path: #{paths.first}"
elsif !paths.empty?
lines << "Load paths:\n #{paths.join("\n ")}"
end
raise SyntaxError.new(lines.join("\n"))
rescue SyntaxError => e
raise SyntaxError.new(e.message, :line => line, :filename => @filename)
end
def options_for_importer
@options.merge(:_from_import_node => true)
end
end
end
end