class Theme

Attributes

includes[R]

Public Class Methods

new(dst_dir, root = nil) click to toggle source
# File lib/components/jquery-syntax/ext/theme.rb, line 3
def initialize(dst_dir, root = nil)
        @destination = dst_dir
        
        @includes = []
        @root = root
        
        @extends = {}
        
        @depends = []
end

Public Instance Methods

includes_for(path, place) click to toggle source
# File lib/components/jquery-syntax/ext/theme.rb, line 73
def includes_for(path, place)
        case place
        when :prepend
                return @includes
        when :append
                if extension = @extends[File.basename(path)]
                        return extension
                end
        end
        
        return []
end
load_theme(theme_dir, top = true) click to toggle source
# File lib/components/jquery-syntax/ext/theme.rb, line 16
def load_theme(theme_dir, top = true)
        theme_dir = File.join(@root, theme_dir)
        theme_name = File.basename(theme_dir)
        
        master = Dir.glob(File.join(theme_dir, "master.{sass,scss}"))
        if master.size > 0
                @includes += master
        end

        unless File.directory?(theme_dir)
                raise StandardError.new("Could not find theme #{theme_dir}!")
        end

        $stderr.puts "Loading theme from #{theme_dir}..."
        theme_config_path = File.join(theme_dir, "_config.yaml")
        config = {}

        # Is there a configuration file?
        if File.exist? theme_config_path
                config = YAML::load_file(theme_config_path) || {}
        end

        # Load any dependencies recursively - if you have bad configuration this might
        # give you visions of infinity.
        if config['depends']
                @depends += config['depends']
                config['depends'].each {|name| load_theme(name, false)}
        end
        
        # Remove any files/directories that have been excluded
        if config['exclude']
                config['exclude'].each do |name|
                        FileUtils.rm_rf(File.join(@destination, name))
                end
        end
        
        if config['extends']
                config['extends'].each {|name,extension| @extends[name] = extension}
        end
        
        if config['includes']
                @includes.concat(config['includes'])
        end
        
        if top
                # Copy all the theme files
                $stderr.puts "Copying #{theme_dir + "/*"} to #{@destination.inspect}"
                
                theme_files = Dir.glob(File.join(theme_dir, "*"))
                FileUtils.cp_r(theme_files, @destination)
                
                File.open(File.join(@destination, "theme.js"), "w") do |theme_js|
                        theme_js.puts "Syntax.themes[#{theme_name.inspect}] = #{@depends.inspect}"
                end
        end
end