Sha256: 18af82b424dbbd6a8abada09c6db39b87331e516da741c0b72151b7079dba23e

Contents?: true

Size: 1.51 KB

Versions: 9

Compression:

Stored size: 1.51 KB

Contents


module OMF::Web::Theme
  extend OMF::Common::Loggable
  
  DEFAULT_THEME = 'omf-web/theme/bright'
  @@search_order = [DEFAULT_THEME]  # default theme
  @@loaded = {}
  @@additional_renderers = {}
  
  def self.theme=(theme)
    if theme
      unless theme.match '.*/'
        theme = "omf-web/theme/#{theme}" # add default name space
      end
      @@loaded = {}
      @@search_order = [theme] 
      Kernel::require "#{theme}/init"
    end
  end
  
  def self.register_renderer(name, klass, theme = DEFAULT_THEME)
    tr = @@additional_renderers[theme.to_s] ||= {}
    tr[name] = klass
  end
  
  # Set additional themes to search in the given order for 
  # implementations of renderes. Allows for partial override
  # in new themes.
  #
  def self.search_order=(search_order)
    @@loaded = {}
    @@search_order = search_order if search_order
  end
  
  
  def self.require(name)
    name = name.to_sym
    return if @@loaded[name]
    @@search_order.each do |theme|
      begin
        # check if there is a registered renderer. Assumes to be already loaded
        unless (@@additional_renderers[theme.to_s] || {})[name]
          #puts "Checking for '#{theme}/#{name}.rb'"
          Kernel::require "#{theme}/#{name}"
        end
        @@loaded[name] = true
        debug "Using renderer '#{theme}/#{name}'"        
        return
      rescue LoadError => le
        # Move on to the next one
        #puts ">>>> #{le}"
      end
    end
    raise "Can't find theme component '#{name}' in '#{@@search_order.join(', ')}"
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
omf_web-0.9.9 lib/omf-web/theme.rb
omf_web-0.9.8 lib/omf-web/theme.rb
omf_web-0.9.7 lib/omf-web/theme.rb
omf_web-0.9.6 lib/omf-web/theme.rb
omf_web-0.9.5 lib/omf-web/theme.rb
omf_web-0.9.4 lib/omf-web/theme.rb
omf_web-0.9.3 lib/omf-web/theme.rb
omf_web-0.9.1 lib/omf-web/theme.rb
omf_web-0.9 lib/omf-web/theme.rb