Sha256: eb126ff3613c2f6237de33a37f57dff9a06e241e0f172343e6e8f355a3f5b879

Contents?: true

Size: 1.65 KB

Versions: 6

Compression:

Stored size: 1.65 KB

Contents


module OMF::Web::Theme
  extend OMF::Base::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.include_css(css_file)
    ::Kernel.require 'omf-web/theme/abstract_page'
    OMF::Web::Theme::AbstractPage.add_depends_on(:css, "/resource/#{css_file}")
  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

6 entries across 6 versions & 1 rubygems

Version Path
omf_web-1.2.5 lib/omf-web/theme.rb
omf_web-1.2.4 lib/omf-web/theme.rb
omf_web-1.2.3 lib/omf-web/theme.rb
omf_web-1.2.2 lib/omf-web/theme.rb
omf_web-1.2.1 lib/omf-web/theme.rb
omf_web-1.2.0 lib/omf-web/theme.rb